diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..05356c0 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,8 @@ +.github/ +.husky/ +.idea/ +.vscode/ + +node_modules/ +dist/ +files/ diff --git a/.github/workflows/publish-image.yml b/.github/workflows/publish-image.yml new file mode 100644 index 0000000..ed1ff73 --- /dev/null +++ b/.github/workflows/publish-image.yml @@ -0,0 +1,50 @@ +name: Publish Image + +on: + release: + types: [published] + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-and-push-image: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + attestations: write + id-token: write + steps: + - name: Checkout repository + uses: actions/checkout@v5 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + + - name: Build and push Docker image + id: push + uses: docker/build-push-action@v6 + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + - name: Generate artifact attestation + uses: actions/attest-build-provenance@v3 + with: + subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}} + subject-digest: ${{ steps.push.outputs.digest }} + push-to-registry: true diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..611a009 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,75 @@ +ARG DEBIAN_CODE=trixie +ARG NODE_VERSION=24 +ARG PYTHON_VERSION=3.13 +ARG USER_NAME=spacebar +ARG USER_GROUP=$USER_NAME +ARG USER_UID=1000 +ARG USER_GID=1000 +ARG BASEDIR=/spacebar + + +FROM python:${PYTHON_VERSION}-slim-${DEBIAN_CODE} AS base_python + + +FROM node:${NODE_VERSION}-${DEBIAN_CODE}-slim AS base + +COPY --from=base_python /usr/local/bin/python* /usr/local/bin/ +COPY --from=base_python /usr/local/bin/pip* /usr/local/bin/ +COPY --from=base_python /usr/local/lib/python* /usr/local/lib/ +COPY --from=base_python /usr/local/lib/libpython* /usr/local/lib/ + + +FROM base AS builder + +ARG BRANCH + +WORKDIR /build + +RUN apt-get update && \ + apt-get install -y --no-install-recommends build-essential pkg-config && \ + rm -rf /var/lib/apt/lists/* + +WORKDIR /build/server + +COPY . . + +RUN npm i \ + && npm run setup + + +FROM base AS final + +ARG USER_NAME +ARG USER_GROUP +ARG USER_UID +ARG USER_GID +ARG BASEDIR + +RUN mkdir -p "${BASEDIR}/server" \ + && chown -R "${USER_UID}:${USER_GID}" "${BASEDIR}" + +RUN deluser node 2>/dev/null || true \ + && delgroup node 2>/dev/null || true \ + && rm -fr /home/node 2>/dev/null || true \ + && addgroup --gid "$USER_GID" "$USER_GROUP" \ + && adduser \ + --disabled-password \ + --gecos "" \ + --uid "$USER_UID" \ + --gid "$USER_GID" \ + --no-create-home \ + "$USER_NAME" + +USER ${USER_NAME} + +#@todo: only bring what we need +COPY --chown=${USER_NAME}:${USER_GROUP} --from=builder /build/server "${BASEDIR}/server" + +ENV PORT="3001" +ENV CONFIG_PATH="${BASEDIR}/config.json" +ENV DATABASE="${BASEDIR}/database.db" + +WORKDIR "${BASEDIR}/server" + +ENTRYPOINT [ "npm", "run" ] +CMD [ "start" ] diff --git a/assets/openapi.json b/assets/openapi.json index d2bc69f..0aa58c7 100644 --- a/assets/openapi.json +++ b/assets/openapi.json @@ -4481,7 +4481,7 @@ "sending_dns_records": { "type": "array", "items": { - "$ref": "#/components/schemas/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Domains/Domains\",{with:{\"resolution-mode\":\"import\"}}).DNSRecord" + "$ref": "#/components/schemas/import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Types/Domains/Domains\",{with:{\"resolution-mode\":\"import\"}}).DNSRecord" } } }, @@ -8004,7 +8004,7 @@ "type": "string" }, "template": { - "$ref": "#/components/schemas/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" + "$ref": "#/components/schemas/import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" } }, "additionalProperties": false, @@ -8031,7 +8031,7 @@ "items": { "type": "array", "items": { - "$ref": "#/components/schemas/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" + "$ref": "#/components/schemas/import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" } }, "paging": { @@ -8081,7 +8081,7 @@ "type": "object", "properties": { "template": { - "$ref": "#/components/schemas/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" + "$ref": "#/components/schemas/import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" } }, "additionalProperties": false, @@ -8169,7 +8169,7 @@ "type": "string" }, "template": { - "$ref": "#/components/schemas/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" + "$ref": "#/components/schemas/import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" } }, "additionalProperties": false, @@ -9223,7 +9223,7 @@ "type": "object", "properties": { "body": { - "$ref": "#/components/schemas/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Suppressions/Suppressions\",{with:{\"resolution-mode\":\"import\"}}).SuppressionDataType" + "$ref": "#/components/schemas/import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Types/Suppressions/Suppressions\",{with:{\"resolution-mode\":\"import\"}}).SuppressionDataType" }, "status": { "type": "integer" @@ -9917,86 +9917,96 @@ "type": "integer" }, "Data": { - "additionalProperties": false, "type": "array", - "properties": { - "Author": { - "type": "string" - }, - "Categories": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Template.Categories" + "items": { + "additionalProperties": false, + "type": "object", + "properties": { + "Author": { + "type": "string" + }, + "Categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Template.Categories" + } + }, + "Copyright": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "EditMode": { + "$ref": "#/components/schemas/Template.EditMode" + }, + "IsStarred": { + "type": "boolean" + }, + "IsTextPartGenerationEnabled": { + "type": "boolean" + }, + "Locale": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "OwnerType": { + "$ref": "#/components/schemas/Template.OwnerType" + }, + "Presets": { + "type": "string" + }, + "Purposes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Template.Purposes" + } + }, + "ID": { + "type": "integer" + }, + "OwnerId": { + "type": "integer" + }, + "Previews": { + "type": "string" + }, + "CreatedAt": { + "type": "string" + }, + "LastUpdatedAt": { + "type": "string" + }, + "LocaleList": { + "type": "array", + "items": { + "type": "string" + } } }, - "Copyright": { - "type": "string" - }, - "Description": { - "type": "string" - }, - "EditMode": { - "$ref": "#/components/schemas/Template.EditMode" - }, - "IsStarred": { - "type": "boolean" - }, - "IsTextPartGenerationEnabled": { - "type": "boolean" - }, - "Locale": { - "type": "string" - }, - "Name": { - "type": "string" - }, - "OwnerType": { - "$ref": "#/components/schemas/Template.OwnerType" - }, - "Presets": { - "type": "string" - }, - "Purposes": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Template.Purposes" - } - }, - "ID": { - "type": "integer" - }, - "OwnerId": { - "type": "integer" - }, - "Previews": { - "type": "string" - }, - "CreatedAt": { - "type": "string" - }, - "LastUpdatedAt": { - "type": "string" - } - }, - "required": [ - "Author", - "Categories", - "Copyright", - "CreatedAt", - "Description", - "EditMode", - "ID", - "IsStarred", - "IsTextPartGenerationEnabled", - "LastUpdatedAt", - "Locale", - "Name", - "OwnerId", - "OwnerType", - "Presets", - "Previews", - "Purposes" - ] + "required": [ + "Author", + "Categories", + "Copyright", + "CreatedAt", + "Description", + "EditMode", + "ID", + "IsStarred", + "IsTextPartGenerationEnabled", + "LastUpdatedAt", + "Locale", + "LocaleList", + "Name", + "OwnerId", + "OwnerType", + "Presets", + "Previews", + "Purposes" + ] + } } }, "required": [ diff --git a/assets/schemas.json b/assets/schemas.json index 5a8e17f..6122ddc 100644 --- a/assets/schemas.json +++ b/assets/schemas.json @@ -10712,7 +10712,7 @@ "sending_dns_records": { "type": "array", "items": { - "$ref": "#/definitions/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Domains/Domains\",{with:{\"resolution-mode\":\"import\"}}).DNSRecord" + "$ref": "#/definitions/import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Types/Domains/Domains\",{with:{\"resolution-mode\":\"import\"}}).DNSRecord" } } }, @@ -10733,7 +10733,7 @@ "status" ], "definitions": { - "import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Domains/Domains\",{with:{\"resolution-mode\":\"import\"}}).DNSRecord": { + "import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Types/Domains/Domains\",{with:{\"resolution-mode\":\"import\"}}).DNSRecord": { "type": "object", "properties": { "cached": { @@ -14335,7 +14335,7 @@ "type": "string" }, "template": { - "$ref": "#/definitions/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" + "$ref": "#/definitions/import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" } }, "additionalProperties": false, @@ -14351,7 +14351,7 @@ "status" ], "definitions": { - "import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate": { + "import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate": { "type": "object", "properties": { "name": { @@ -14378,7 +14378,7 @@ "type": "string" }, "version": { - "$ref": "#/definitions/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion" + "$ref": "#/definitions/import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion" }, "versions": { "type": "array", @@ -14437,7 +14437,7 @@ "name" ] }, - "import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion": { + "import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion": { "additionalProperties": false, "type": "object", "properties": { @@ -14515,7 +14515,7 @@ "items": { "type": "array", "items": { - "$ref": "#/definitions/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" + "$ref": "#/definitions/import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" } }, "paging": { @@ -14556,7 +14556,7 @@ "status" ], "definitions": { - "import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate": { + "import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate": { "type": "object", "properties": { "name": { @@ -14583,7 +14583,7 @@ "type": "string" }, "version": { - "$ref": "#/definitions/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion" + "$ref": "#/definitions/import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion" }, "versions": { "type": "array", @@ -14642,7 +14642,7 @@ "name" ] }, - "import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion": { + "import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion": { "additionalProperties": false, "type": "object", "properties": { @@ -14718,7 +14718,7 @@ "type": "object", "properties": { "template": { - "$ref": "#/definitions/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" + "$ref": "#/definitions/import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" } }, "additionalProperties": false, @@ -14733,7 +14733,7 @@ "status" ], "definitions": { - "import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate": { + "import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate": { "type": "object", "properties": { "name": { @@ -14760,7 +14760,7 @@ "type": "string" }, "version": { - "$ref": "#/definitions/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion" + "$ref": "#/definitions/import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion" }, "versions": { "type": "array", @@ -14819,7 +14819,7 @@ "name" ] }, - "import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion": { + "import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion": { "additionalProperties": false, "type": "object", "properties": { @@ -14963,7 +14963,7 @@ "type": "string" }, "template": { - "$ref": "#/definitions/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" + "$ref": "#/definitions/import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" } }, "additionalProperties": false, @@ -14979,7 +14979,7 @@ "status" ], "definitions": { - "import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate": { + "import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate": { "type": "object", "properties": { "name": { @@ -15006,7 +15006,7 @@ "type": "string" }, "version": { - "$ref": "#/definitions/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion" + "$ref": "#/definitions/import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion" }, "versions": { "type": "array", @@ -15065,7 +15065,7 @@ "name" ] }, - "import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion": { + "import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion": { "additionalProperties": false, "type": "object", "properties": { @@ -16198,7 +16198,7 @@ "type": "object", "properties": { "body": { - "$ref": "#/definitions/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Suppressions/Suppressions\",{with:{\"resolution-mode\":\"import\"}}).SuppressionDataType" + "$ref": "#/definitions/import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Types/Suppressions/Suppressions\",{with:{\"resolution-mode\":\"import\"}}).SuppressionDataType" }, "status": { "type": "integer" @@ -16210,7 +16210,7 @@ "status" ], "definitions": { - "import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Suppressions/Suppressions\",{with:{\"resolution-mode\":\"import\"}}).SuppressionDataType": { + "import(\"/home/mathman05/Downloads/sbserver/server/node_modules/mailgun.js/Types/Types/Suppressions/Suppressions\",{with:{\"resolution-mode\":\"import\"}}).SuppressionDataType": { "anyOf": [ { "type": "object", @@ -17536,86 +17536,96 @@ "type": "integer" }, "Data": { - "additionalProperties": false, "type": "array", - "properties": { - "Author": { - "type": "string" - }, - "Categories": { - "type": "array", - "items": { - "$ref": "#/definitions/Template.Categories" + "items": { + "additionalProperties": false, + "type": "object", + "properties": { + "Author": { + "type": "string" + }, + "Categories": { + "type": "array", + "items": { + "$ref": "#/definitions/Template.Categories" + } + }, + "Copyright": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "EditMode": { + "$ref": "#/definitions/Template.EditMode" + }, + "IsStarred": { + "type": "boolean" + }, + "IsTextPartGenerationEnabled": { + "type": "boolean" + }, + "Locale": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "OwnerType": { + "$ref": "#/definitions/Template.OwnerType" + }, + "Presets": { + "type": "string" + }, + "Purposes": { + "type": "array", + "items": { + "$ref": "#/definitions/Template.Purposes" + } + }, + "ID": { + "type": "integer" + }, + "OwnerId": { + "type": "integer" + }, + "Previews": { + "type": "string" + }, + "CreatedAt": { + "type": "string" + }, + "LastUpdatedAt": { + "type": "string" + }, + "LocaleList": { + "type": "array", + "items": { + "type": "string" + } } }, - "Copyright": { - "type": "string" - }, - "Description": { - "type": "string" - }, - "EditMode": { - "$ref": "#/definitions/Template.EditMode" - }, - "IsStarred": { - "type": "boolean" - }, - "IsTextPartGenerationEnabled": { - "type": "boolean" - }, - "Locale": { - "type": "string" - }, - "Name": { - "type": "string" - }, - "OwnerType": { - "$ref": "#/definitions/Template.OwnerType" - }, - "Presets": { - "type": "string" - }, - "Purposes": { - "type": "array", - "items": { - "$ref": "#/definitions/Template.Purposes" - } - }, - "ID": { - "type": "integer" - }, - "OwnerId": { - "type": "integer" - }, - "Previews": { - "type": "string" - }, - "CreatedAt": { - "type": "string" - }, - "LastUpdatedAt": { - "type": "string" - } - }, - "required": [ - "Author", - "Categories", - "Copyright", - "CreatedAt", - "Description", - "EditMode", - "ID", - "IsStarred", - "IsTextPartGenerationEnabled", - "LastUpdatedAt", - "Locale", - "Name", - "OwnerId", - "OwnerType", - "Presets", - "Previews", - "Purposes" - ] + "required": [ + "Author", + "Categories", + "Copyright", + "CreatedAt", + "Description", + "EditMode", + "ID", + "IsStarred", + "IsTextPartGenerationEnabled", + "LastUpdatedAt", + "Locale", + "LocaleList", + "Name", + "OwnerId", + "OwnerType", + "Presets", + "Previews", + "Purposes" + ] + } } }, "additionalProperties": false, diff --git a/src/schemas/api/guilds/Sticker.ts b/src/schemas/api/guilds/Sticker.ts index 89b11cc..b02e1e2 100644 --- a/src/schemas/api/guilds/Sticker.ts +++ b/src/schemas/api/guilds/Sticker.ts @@ -4,8 +4,8 @@ } export enum StickerFormatType { - GIF = 0, // gif is a custom format type and not in discord spec PNG = 1, APNG = 2, LOTTIE = 3, + GIF = 4, } diff --git a/src/util/entities/ApplicationCommand.ts b/src/util/entities/ApplicationCommand.ts index 82436f7..8ec154f 100644 --- a/src/util/entities/ApplicationCommand.ts +++ b/src/util/entities/ApplicationCommand.ts @@ -53,7 +53,7 @@ @Column({ nullable: true, type: "simple-json" }) description_localizations?: Record; - @Column({ type: "simple-json", default: [] }) + @Column({ type: "simple-json", default: "[]" }) options: ApplicationCommandOption[]; @Column({ nullable: true, type: String }) diff --git a/src/util/migration/postgres/1762611552514-fix-gif-stickers-format_type.ts b/src/util/migration/postgres/1762611552514-fix-gif-stickers-format_type.ts new file mode 100644 index 0000000..47de750 --- /dev/null +++ b/src/util/migration/postgres/1762611552514-fix-gif-stickers-format_type.ts @@ -0,0 +1,11 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class FixGifStickersFormatType1762611552514 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`UPDATE "stickers" SET "format_type" = 4 WHERE "format_type" = 0;`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`UPDATE "stickers" SET "format_type" = 0 WHERE "format_type" = 4;`); + } +}