diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 415b4eb49..4333ef0e4 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -11,7 +11,7 @@ updates: - "A-Dependencies" - "Z-Deps-Backend" schedule: - interval: "daily" + interval: "monthly" groups: axum: patterns: @@ -49,7 +49,7 @@ updates: - "A-Dependencies" - "Z-Deps-CI" schedule: - interval: "daily" + interval: "monthly" cooldown: default-days: 14 @@ -59,7 +59,7 @@ updates: - "A-Dependencies" - "Z-Deps-Frontend" schedule: - interval: "daily" + interval: "monthly" groups: storybook: patterns: diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 6b25b3f6b..79cf89b33 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -214,7 +214,7 @@ jobs: runs-on: ubuntu-24.04 outputs: - metadata: ${{ steps.output.outputs.metadata }} + metadata: ${{ steps.metadata.outputs.result }} permissions: contents: read @@ -282,6 +282,14 @@ jobs: - name: Build and push id: bake uses: docker/bake-action@a66e1c87e2eca0503c343edf1d208c716d54b8a8 # v7.1.0 + env: + # By default, docker bake will add provenance information to the + # metadata output. This makes the output larger and may exceed the + # shell ARG_MAX limit. Disabling through this environment variable + # disables provenance in the metadata while still attaching provenance + # attestations to the image we push. + # https://github.com/docker/bake-action/issues/239#issuecomment-3828170326 + BUILDX_METADATA_PROVENANCE: disabled with: files: | ./docker-bake.hcl @@ -293,15 +301,27 @@ jobs: base.cache-to=type=registry,ref=${{ env.BUILDCACHE }}:buildcache,mode=max - name: Transform bake output - # This transforms the ouput to an object which looks like this: - # { reguar: { digest: "…", tags: ["…", "…"] }, debug: { digest: "…", tags: ["…"] }, … } - id: output - run: | - echo 'metadata<> $GITHUB_OUTPUT - echo "$STEPS_BAKE_OUTPUTS_METADATA" | jq -c 'with_entries(select(.value | (type == "object" and has("containerimage.digest")))) | map_values({ digest: .["containerimage.digest"], tags: (.["image.name"] | split(",")) })' >> $GITHUB_OUTPUT - echo 'EOF' >> $GITHUB_OUTPUT + # This transforms the output to an object which looks like this: + # { regular: { digest: "…", tags: ["…", "…"] }, debug: { digest: "…", tags: ["…"] }, … } + # We use github-script rather than shelling out to jq because the bake + # metadata can exceed the shell ARG_MAX limit when expanded. + id: metadata + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: STEPS_BAKE_OUTPUTS_METADATA: ${{ steps.bake.outputs.metadata }} + with: + script: | + const bakeOutput = JSON.parse(process.env.STEPS_BAKE_OUTPUTS_METADATA); + const metadata = {}; + for (const [key, value] of Object.entries(bakeOutput)) { + if (value && typeof value === 'object' && ('containerimage.digest' in value)) { + metadata[key] = { + digest: value['containerimage.digest'], + tags: value['image.name'].split(','), + }; + } + } + return metadata; - name: Sign the images with GitHub Actions provided token # Only sign on tags and on commits on main branch @@ -310,8 +330,8 @@ jobs: && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main') env: - REGULAR_DIGEST: ${{ steps.output.outputs.metadata && fromJSON(steps.output.outputs.metadata).regular.digest }} - DEBUG_DIGEST: ${{ steps.output.outputs.metadata && fromJSON(steps.output.outputs.metadata).debug.digest }} + REGULAR_DIGEST: ${{ steps.metadata.outputs.result && fromJSON(steps.metadata.outputs.result).regular.digest }} + DEBUG_DIGEST: ${{ steps.metadata.outputs.result && fromJSON(steps.metadata.outputs.result).debug.digest }} run: |- cosign sign --yes \ diff --git a/Cargo.lock b/Cargo.lock index 575a51699..5ca447c0b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3092,7 +3092,7 @@ dependencies = [ [[package]] name = "mas-axum-utils" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "anyhow", "axum", @@ -3126,7 +3126,7 @@ dependencies = [ [[package]] name = "mas-cli" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "anyhow", "axum", @@ -3201,7 +3201,7 @@ dependencies = [ [[package]] name = "mas-config" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "anyhow", "camino", @@ -3232,7 +3232,7 @@ dependencies = [ [[package]] name = "mas-context" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "console", "opentelemetry", @@ -3248,7 +3248,7 @@ dependencies = [ [[package]] name = "mas-data-model" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "base64ct", "chrono", @@ -3270,7 +3270,7 @@ dependencies = [ [[package]] name = "mas-email" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "async-trait", "lettre", @@ -3281,7 +3281,7 @@ dependencies = [ [[package]] name = "mas-handlers" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "aide", "anyhow", @@ -3362,7 +3362,7 @@ dependencies = [ [[package]] name = "mas-http" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "futures-util", "headers", @@ -3383,7 +3383,7 @@ dependencies = [ [[package]] name = "mas-i18n" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "camino", "icu_calendar", @@ -3405,7 +3405,7 @@ dependencies = [ [[package]] name = "mas-i18n-scan" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "camino", "clap", @@ -3419,7 +3419,7 @@ dependencies = [ [[package]] name = "mas-iana" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "schemars 0.9.0", "serde", @@ -3427,7 +3427,7 @@ dependencies = [ [[package]] name = "mas-iana-codegen" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "anyhow", "async-trait", @@ -3444,7 +3444,7 @@ dependencies = [ [[package]] name = "mas-jose" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "base64ct", "chrono", @@ -3474,7 +3474,7 @@ dependencies = [ [[package]] name = "mas-keystore" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "aead", "base64ct", @@ -3502,7 +3502,7 @@ dependencies = [ [[package]] name = "mas-listener" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "anyhow", "bytes", @@ -3526,7 +3526,7 @@ dependencies = [ [[package]] name = "mas-matrix" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "anyhow", "async-trait", @@ -3536,7 +3536,7 @@ dependencies = [ [[package]] name = "mas-matrix-synapse" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "anyhow", "async-trait", @@ -3553,7 +3553,7 @@ dependencies = [ [[package]] name = "mas-oidc-client" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "assert_matches", "async-trait", @@ -3589,7 +3589,7 @@ dependencies = [ [[package]] name = "mas-policy" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "anyhow", "arc-swap", @@ -3606,7 +3606,7 @@ dependencies = [ [[package]] name = "mas-router" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "axum", "serde", @@ -3617,7 +3617,7 @@ dependencies = [ [[package]] name = "mas-spa" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "camino", "serde", @@ -3626,7 +3626,7 @@ dependencies = [ [[package]] name = "mas-storage" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "async-trait", "chrono", @@ -3648,7 +3648,7 @@ dependencies = [ [[package]] name = "mas-storage-pg" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "async-trait", "chrono", @@ -3678,7 +3678,7 @@ dependencies = [ [[package]] name = "mas-tasks" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "anyhow", "async-trait", @@ -3710,7 +3710,7 @@ dependencies = [ [[package]] name = "mas-templates" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "anyhow", "arc-swap", @@ -3742,7 +3742,7 @@ dependencies = [ [[package]] name = "mas-tower" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "http", "opentelemetry", @@ -3995,7 +3995,7 @@ dependencies = [ [[package]] name = "oauth2-types" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "assert_matches", "base64ct", @@ -6094,7 +6094,7 @@ dependencies = [ [[package]] name = "syn2mas" -version = "1.17.0-rc.0" +version = "1.17.0" dependencies = [ "anyhow", "arc-swap", diff --git a/Cargo.toml b/Cargo.toml index a095184c4..5348f2b47 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ members = ["crates/*"] resolver = "2" # Updated in the CI with a `sed` command -package.version = "1.17.0-rc.0" +package.version = "1.17.0" package.license = "AGPL-3.0-only OR LicenseRef-Element-Commercial" package.authors = ["Element Backend Team"] package.edition = "2024" @@ -39,35 +39,35 @@ broken_intra_doc_links = "deny" [workspace.dependencies] # Workspace crates -mas-axum-utils = { path = "./crates/axum-utils/", version = "=1.17.0-rc.0" } -mas-cli = { path = "./crates/cli/", version = "=1.17.0-rc.0" } -mas-config = { path = "./crates/config/", version = "=1.17.0-rc.0" } -mas-context = { path = "./crates/context/", version = "=1.17.0-rc.0" } -mas-data-model = { path = "./crates/data-model/", version = "=1.17.0-rc.0" } -mas-email = { path = "./crates/email/", version = "=1.17.0-rc.0" } -mas-graphql = { path = "./crates/graphql/", version = "=1.17.0-rc.0" } -mas-handlers = { path = "./crates/handlers/", version = "=1.17.0-rc.0" } -mas-http = { path = "./crates/http/", version = "=1.17.0-rc.0" } -mas-i18n = { path = "./crates/i18n/", version = "=1.17.0-rc.0" } -mas-i18n-scan = { path = "./crates/i18n-scan/", version = "=1.17.0-rc.0" } -mas-iana = { path = "./crates/iana/", version = "=1.17.0-rc.0" } -mas-iana-codegen = { path = "./crates/iana-codegen/", version = "=1.17.0-rc.0" } -mas-jose = { path = "./crates/jose/", version = "=1.17.0-rc.0" } -mas-keystore = { path = "./crates/keystore/", version = "=1.17.0-rc.0" } -mas-listener = { path = "./crates/listener/", version = "=1.17.0-rc.0" } -mas-matrix = { path = "./crates/matrix/", version = "=1.17.0-rc.0" } -mas-matrix-synapse = { path = "./crates/matrix-synapse/", version = "=1.17.0-rc.0" } -mas-oidc-client = { path = "./crates/oidc-client/", version = "=1.17.0-rc.0" } -mas-policy = { path = "./crates/policy/", version = "=1.17.0-rc.0" } -mas-router = { path = "./crates/router/", version = "=1.17.0-rc.0" } -mas-spa = { path = "./crates/spa/", version = "=1.17.0-rc.0" } -mas-storage = { path = "./crates/storage/", version = "=1.17.0-rc.0" } -mas-storage-pg = { path = "./crates/storage-pg/", version = "=1.17.0-rc.0" } -mas-tasks = { path = "./crates/tasks/", version = "=1.17.0-rc.0" } -mas-templates = { path = "./crates/templates/", version = "=1.17.0-rc.0" } -mas-tower = { path = "./crates/tower/", version = "=1.17.0-rc.0" } -oauth2-types = { path = "./crates/oauth2-types/", version = "=1.17.0-rc.0" } -syn2mas = { path = "./crates/syn2mas", version = "=1.17.0-rc.0" } +mas-axum-utils = { path = "./crates/axum-utils/", version = "=1.17.0" } +mas-cli = { path = "./crates/cli/", version = "=1.17.0" } +mas-config = { path = "./crates/config/", version = "=1.17.0" } +mas-context = { path = "./crates/context/", version = "=1.17.0" } +mas-data-model = { path = "./crates/data-model/", version = "=1.17.0" } +mas-email = { path = "./crates/email/", version = "=1.17.0" } +mas-graphql = { path = "./crates/graphql/", version = "=1.17.0" } +mas-handlers = { path = "./crates/handlers/", version = "=1.17.0" } +mas-http = { path = "./crates/http/", version = "=1.17.0" } +mas-i18n = { path = "./crates/i18n/", version = "=1.17.0" } +mas-i18n-scan = { path = "./crates/i18n-scan/", version = "=1.17.0" } +mas-iana = { path = "./crates/iana/", version = "=1.17.0" } +mas-iana-codegen = { path = "./crates/iana-codegen/", version = "=1.17.0" } +mas-jose = { path = "./crates/jose/", version = "=1.17.0" } +mas-keystore = { path = "./crates/keystore/", version = "=1.17.0" } +mas-listener = { path = "./crates/listener/", version = "=1.17.0" } +mas-matrix = { path = "./crates/matrix/", version = "=1.17.0" } +mas-matrix-synapse = { path = "./crates/matrix-synapse/", version = "=1.17.0" } +mas-oidc-client = { path = "./crates/oidc-client/", version = "=1.17.0" } +mas-policy = { path = "./crates/policy/", version = "=1.17.0" } +mas-router = { path = "./crates/router/", version = "=1.17.0" } +mas-spa = { path = "./crates/spa/", version = "=1.17.0" } +mas-storage = { path = "./crates/storage/", version = "=1.17.0" } +mas-storage-pg = { path = "./crates/storage-pg/", version = "=1.17.0" } +mas-tasks = { path = "./crates/tasks/", version = "=1.17.0" } +mas-templates = { path = "./crates/templates/", version = "=1.17.0" } +mas-tower = { path = "./crates/tower/", version = "=1.17.0" } +oauth2-types = { path = "./crates/oauth2-types/", version = "=1.17.0" } +syn2mas = { path = "./crates/syn2mas", version = "=1.17.0" } # OpenAPI schema generation and validation [workspace.dependencies.aide] diff --git a/frontend/.storybook/locales.ts b/frontend/.storybook/locales.ts index ffcc627ed..bb379022a 100644 --- a/frontend/.storybook/locales.ts +++ b/frontend/.storybook/locales.ts @@ -27,7 +27,7 @@ export type LocalazyMetadata = { }; const localazyMetadata: LocalazyMetadata = { - projectUrl: "https://localazy.com/p/matrix-authentication-service", + projectUrl: "https://localazy.com/p/matrix-authentication-service!v1.17", baseLocale: "en", languages: [ { @@ -208,25 +208,25 @@ const localazyMetadata: LocalazyMetadata = { file: "frontend.json", path: "", cdnFiles: { - "cs": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/cs/frontend.json", - "da": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/da/frontend.json", - "de": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/de/frontend.json", - "en": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/en/frontend.json", - "et": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/et/frontend.json", - "fi": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fi/frontend.json", - "fr": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fr/frontend.json", - "hu": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/hu/frontend.json", - "nb_NO": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nb-NO/frontend.json", - "nl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nl/frontend.json", - "pl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pl/frontend.json", - "pt": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pt/frontend.json", - "pt_BR": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pt-BR/frontend.json", - "ru": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/ru/frontend.json", - "sk": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/sk/frontend.json", - "sv": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/sv/frontend.json", - "uk": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/uk/frontend.json", - "uz": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/uz/frontend.json", - "zh#Hans": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/zh-Hans/frontend.json" + "cs": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/cs/frontend.json", + "da": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/da/frontend.json", + "de": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/de/frontend.json", + "en": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/en/frontend.json", + "et": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/et/frontend.json", + "fi": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fi/frontend.json", + "fr": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/fr/frontend.json", + "hu": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/hu/frontend.json", + "nb_NO": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nb-NO/frontend.json", + "nl": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/nl/frontend.json", + "pl": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pl/frontend.json", + "pt": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pt/frontend.json", + "pt_BR": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/pt-BR/frontend.json", + "ru": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/ru/frontend.json", + "sk": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/sk/frontend.json", + "sv": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/sv/frontend.json", + "uk": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/uk/frontend.json", + "uz": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/uz/frontend.json", + "zh#Hans": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/7c203a8ac8bd48c3c4609a8effcd0fbac430f9b2/zh-Hans/frontend.json" } }, { @@ -234,25 +234,25 @@ const localazyMetadata: LocalazyMetadata = { file: "file.json", path: "", cdnFiles: { - "cs": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/cs/file.json", - "da": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/da/file.json", - "de": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/de/file.json", - "en": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/en/file.json", - "et": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/et/file.json", - "fi": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fi/file.json", - "fr": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fr/file.json", - "hu": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/hu/file.json", - "nb_NO": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nb-NO/file.json", - "nl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nl/file.json", - "pl": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pl/file.json", - "pt": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pt/file.json", - "pt_BR": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pt-BR/file.json", - "ru": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/ru/file.json", - "sk": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/sk/file.json", - "sv": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/sv/file.json", - "uk": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/uk/file.json", - "uz": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/uz/file.json", - "zh#Hans": "https://delivery.localazy.com/_a7686032324574572744739e0707/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/zh-Hans/file.json" + "cs": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/cs/file.json", + "da": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/da/file.json", + "de": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/de/file.json", + "en": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/en/file.json", + "et": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/et/file.json", + "fi": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fi/file.json", + "fr": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/fr/file.json", + "hu": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/hu/file.json", + "nb_NO": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nb-NO/file.json", + "nl": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/nl/file.json", + "pl": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pl/file.json", + "pt": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pt/file.json", + "pt_BR": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/pt-BR/file.json", + "ru": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/ru/file.json", + "sk": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/sk/file.json", + "sv": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/sv/file.json", + "uk": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/uk/file.json", + "uz": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/uz/file.json", + "zh#Hans": "https://delivery.localazy.com/_a65347067752521597762935bd1b/_e0/5b69b0350dccfd47c245a5d41c1b9fdf6912cc6e/zh-Hans/file.json" } } ]