diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 00000000..05356c09
--- /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 00000000..ed1ff734
--- /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 00000000..611a009e
--- /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 d2bc69f3..0aa58c79 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"
- }
- },
- "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"
+ "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"
+ }
}
},
- "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 5a8e17fd..6122ddc9 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"
- }
- },
- "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"
+ "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"
+ }
}
},
- "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 89b11ccf..b02e1e21 100644
--- a/src/schemas/api/guilds/Sticker.ts
+++ b/src/schemas/api/guilds/Sticker.ts
@@ -4,8 +4,8 @@ export enum StickerType {
}
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 82436f7a..8ec154f8 100644
--- a/src/util/entities/ApplicationCommand.ts
+++ b/src/util/entities/ApplicationCommand.ts
@@ -53,7 +53,7 @@ export class ApplicationCommand extends BaseClass {
@Column({ nullable: true, type: "simple-json" })
description_localizations?: Record<string, string>;
- @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 00000000..47de7506
--- /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<void> {
+ await queryRunner.query(`UPDATE "stickers" SET "format_type" = 4 WHERE "format_type" = 0;`);
+ }
+
+ public async down(queryRunner: QueryRunner): Promise<void> {
+ await queryRunner.query(`UPDATE "stickers" SET "format_type" = 0 WHERE "format_type" = 4;`);
+ }
+}
|