From 8bebcce485f07f040f94b91b09ffa9b73c906b20 Mon Sep 17 00:00:00 2001 From: umeshmore45 Date: Mon, 17 Feb 2025 03:38:51 +0530 Subject: [PATCH 01/10] major code change --- api/package-lock.json | 1 + api/package.json | 1 + api/src/constants/app/index.json | 3435 +++++ api/src/constants/index.ts | 22 +- api/src/services/contentful.service.ts | 426 +- api/src/services/contentful/jsonRTE.ts | 55 +- api/src/services/marketplace.service.ts | 105 + api/src/services/migration.service.ts | 13 +- api/src/utils/content-type-creator.utils.ts | 58 +- api/src/utils/market-app.utils.ts | 25 + api/src/utils/test-folder-creator.utils.ts | 23 +- .../libs/contentTypeMapper.js | 25 +- .../libs/createInitialMapper.js | 48 +- .../utils/apps/appDetails.json | 11293 ++++++++++++++++ 14 files changed, 15293 insertions(+), 237 deletions(-) create mode 100644 api/src/constants/app/index.json create mode 100644 api/src/services/marketplace.service.ts create mode 100644 api/src/utils/market-app.utils.ts create mode 100644 upload-api/migration-contentful/utils/apps/appDetails.json diff --git a/api/package-lock.json b/api/package-lock.json index b6d5d19c3..d7299d6f8 100644 --- a/api/package-lock.json +++ b/api/package-lock.json @@ -12,6 +12,7 @@ "@contentstack/cli-cm-import": "^1.16.6", "@contentstack/cli-utilities": "^1.7.1", "@contentstack/json-rte-serializer": "^2.0.7", + "@contentstack/marketplace-sdk": "^1.2.4", "axios": "^1.7.8", "chokidar": "^3.6.0", "cors": "^2.8.5", diff --git a/api/package.json b/api/package.json index 915bc010b..adc83e7af 100644 --- a/api/package.json +++ b/api/package.json @@ -28,6 +28,7 @@ "@contentstack/cli-cm-import": "^1.16.6", "@contentstack/cli-utilities": "^1.7.1", "@contentstack/json-rte-serializer": "^2.0.7", + "@contentstack/marketplace-sdk": "^1.2.4", "axios": "^1.7.8", "chokidar": "^3.6.0", "cors": "^2.8.5", diff --git a/api/src/constants/app/index.json b/api/src/constants/app/index.json new file mode 100644 index 000000000..83c6583c7 --- /dev/null +++ b/api/src/constants/app/index.json @@ -0,0 +1,3435 @@ +{ + "entries": [ + { + "uid": "blt306893215247514d", + "_version": 6, + "locale": "en-us", + "ACL": {}, + "_in_progress": false, + "app_type": [ + { + "uid": "blte9d290b2e9e0931e", + "_content_type_uid": "app_types" + } + ], + "app_uid": "6307403f08132800192fe615", + "built_by": [ + { + "uid": "bltec929d731b1f9d85", + "_content_type_uid": "organizations" + } + ], + "category": [ + { + "uid": "blt6abfa301df06bf93", + "_content_type_uid": "categories" + } + ], + "coming_soon": false, + "created_at": "2022-09-14T13:26:39.897Z", + "created_by": "bltf389fd468f32cd6e", + "description": "

With the Contentstack Marketplace Aprimo integration, into your headless CMS, you can easily manage and share digital assets across multiple platforms.

Using the Custom Field and JSON RTE plugin, you can integrate Aprimo with Contentstack. You can create an entry in Contentstack and, with the integration, view all the digital assets in Contentstack.

", + "dynamic_links": [], + "feature_types": [ + { + "feature_type": [ + { + "uid": "blt6b35fa46f253a6bd", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "cs3997a434a3407aca" + }, + "description": "Custom Field allows you to select multiple images to add them to your entry from your Aprimo account." + }, + { + "feature_type": [ + { + "uid": "bltf9b70a5fd3c08c36", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "csb4b648266a7e609c" + }, + "description": "You can add images from the Aprimo app to your JSON Rich Text Editor field using the Aprimo JSON RTE Plugin." + } + ], + "icon": { + "_version": 1, + "is_dir": false, + "uid": "bltf38c093728e6118d", + "ACL": {}, + "content_type": "image/svg+xml", + "created_at": "2022-09-14T13:28:32.147Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "7340", + "filename": "Aprimo.svg", + "parent_uid": "blt2eb26851df9c0e2e", + "tags": [], + "title": "Aprimo.svg", + "updated_at": "2022-09-14T13:28:32.147Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:01.962Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltf38c093728e6118d/6321d700acc2b02a2d2beb76/Aprimo.svg" + }, + "installation_url": "/#!/apps/6307403f08132800192fe615/install", + "links": { + "source_code": "", + "documentation": "", + "end_user_license_agreement": "", + "others": [] + }, + "screenshots": [ + { + "_version": 1, + "is_dir": false, + "uid": "bltab7667c5bfa68ab5", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-14T13:27:02.543Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "47090", + "filename": "aprimo1.png", + "parent_uid": "bltd9b123ad99b0ca80", + "tags": [], + "title": "aprimo1.png", + "updated_at": "2022-09-14T13:27:02.543Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:01.962Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltab7667c5bfa68ab5/6321d6a6aab1fc6da8413bbe/aprimo1.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt3a5bc2faed088ba0", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-14T13:27:03.228Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "44450", + "filename": "aprimo2.png", + "parent_uid": "bltd9b123ad99b0ca80", + "tags": [], + "title": "aprimo2.png", + "updated_at": "2022-09-14T13:27:03.228Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:01.962Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt3a5bc2faed088ba0/6321d6a77b677842d8282859/aprimo2.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltb6404261010a70ac", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-14T13:27:09.528Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "293528", + "filename": "aprimo3.png", + "parent_uid": "bltd9b123ad99b0ca80", + "tags": [], + "title": "aprimo3.png", + "updated_at": "2022-09-14T13:27:09.528Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:01.962Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltb6404261010a70ac/6321d6ad3a97082c2920f61b/aprimo3.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt54e7fb96e980dabd", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-14T13:27:09.312Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "224997", + "filename": "aprimo4.png", + "parent_uid": "bltd9b123ad99b0ca80", + "tags": [], + "title": "aprimo4.png", + "updated_at": "2022-09-14T13:27:09.312Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:01.962Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt54e7fb96e980dabd/6321d6adaa855a2a336b9bb0/aprimo4.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt6d4821e32a03a9ce", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-14T13:27:08.114Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "74233", + "filename": "aprimo5.png", + "parent_uid": "bltd9b123ad99b0ca80", + "tags": [], + "title": "aprimo5.png", + "updated_at": "2022-09-14T13:27:08.114Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:01.962Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt6d4821e32a03a9ce/6321d6ac2769d078008690e0/aprimo5.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt720989f14aff7ec3", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-14T13:27:08.848Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "137310", + "filename": "aprimo6.png", + "parent_uid": "bltd9b123ad99b0ca80", + "tags": [], + "title": "aprimo6.png", + "updated_at": "2022-09-14T13:27:08.848Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:01.962Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt720989f14aff7ec3/6321d6ac5d2a8f4646a65840/aprimo6.png" + } + ], + "seo": { + "canonical_url": "", + "description": "", + "image": null, + "robots": "", + "title": "" + }, + "static_links": [ + { + "type": "End-User License Agreement", + "url": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/", + "_metadata": { + "uid": "cse67b21f4286086a8" + } + }, + { + "type": "Documentation", + "url": "https://www.contentstack.com/docs/developers/marketplace-apps/aprimo/", + "_metadata": { + "uid": "cs74da8d29f725d7bf" + } + } + ], + "summary": "Fetch digital assets (images) from your Aprimo account into Contentstack entries.", + "tags": [], + "title": "Aprimo", + "updated_at": "2025-01-24T11:35:05.653Z", + "updated_by": "blt05ac693470ad5ff7", + "url": "/marketplace/aprimo", + "use_cases": "

Manage Aprimo digital media with ease: The Aprimo app lets you manage images within your entries. With Aprimo, you can easily link all the images without leaving your headless CMS.

Better marketing campaigns with ease-to-access assets: You can create content in Contentstack and use the Aprimo Custom Field or JSON RTE field to insert images in your content. With this, cross-functional teams can work on large-scale campaigns with ease.

Easy distribution of digital assets: The Aprimo app allows geographically dispersed teams to easily store, share and fetch digital media assets.

", + "publish_details": { + "time": "2025-01-28T10:53:49.590Z", + "user": "blt05ac693470ad5ff7", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + } + }, + { + "uid": "blte0c272ac85362b1e", + "_version": 7, + "locale": "en-us", + "ACL": {}, + "_in_progress": false, + "app_type": [ + { + "uid": "blte9d290b2e9e0931e", + "_content_type_uid": "app_types" + } + ], + "app_uid": "63e1fd2363081e001992f20f", + "built_by": [ + { + "uid": "bltec929d731b1f9d85", + "_content_type_uid": "organizations" + } + ], + "category": [ + { + "uid": "blt6abfa301df06bf93", + "_content_type_uid": "categories" + } + ], + "coming_soon": false, + "created_at": "2023-02-07T09:50:55.600Z", + "created_by": "bltf389fd468f32cd6e", + "description": "

With the Contentstack Marketplace Brandfolder app integration into your headless CMS, you can easily manage and share digital assets (images) across multiple platforms.
Using the Custom Field and JSON Rich Text Editor plugin, you can integrate Brandfolder with Contentstack. You can create an entry in Contentstack and view all the digital assets within your Contentstack website.

", + "dynamic_links": [], + "feature_types": [ + { + "feature_type": [ + { + "uid": "blt6b35fa46f253a6bd", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "csabc9083d38203db6" + }, + "description": "Custom Field allows you to select multiple images to add to your entry from your Brandfolder account." + }, + { + "feature_type": [ + { + "uid": "bltf9b70a5fd3c08c36", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "cs2b539819aee4ff04" + }, + "description": "You can add images from the Brandfolder app to your JSON Rich Text Editor field using the Brandfolder JSON RTE Plugin." + } + ], + "icon": { + "_version": 1, + "is_dir": false, + "uid": "blta70fdaf98d6bb82a", + "ACL": {}, + "content_type": "image/svg+xml", + "created_at": "2023-02-07T10:08:04.960Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "2242", + "filename": "Brandfolder.svg", + "parent_uid": "blt2eb26851df9c0e2e", + "tags": [], + "title": "Brandfolder.svg", + "updated_at": "2023-02-07T10:08:04.960Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blta70fdaf98d6bb82a/63e22304933db53d66f72d37/Brandfolder.svg" + }, + "installation_url": "/#!/apps/63e1fd2363081e001992f20f/install", + "links": { + "source_code": "", + "documentation": "", + "end_user_license_agreement": "", + "others": [] + }, + "screenshots": [ + { + "_version": 1, + "is_dir": false, + "uid": "bltc0ed1ab61388a84e", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-06-22T07:49:19.401Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "100032", + "filename": "App_Config.png", + "parent_uid": "blt8f6e144007ba8c5c", + "tags": [], + "title": "App_Config.png", + "updated_at": "2023-06-22T07:49:19.401Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltc0ed1ab61388a84e/6493fcffcbbe0752f5d15fd6/App_Config.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt932072d875540e5a", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-02-07T10:06:58.097Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "78360", + "filename": "brandfolder_customfield_select.png", + "parent_uid": "blt8f6e144007ba8c5c", + "tags": [], + "title": "brandfolder_customfield_select.png", + "updated_at": "2023-02-07T10:06:58.097Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt932072d875540e5a/63e222c2ea95785b83d3f5d0/brandfolder_customfield_select.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt73f9737af627514f", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-02-07T10:06:58.115Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "83799", + "filename": "brandfolder_contenttype.png", + "parent_uid": "blt8f6e144007ba8c5c", + "tags": [], + "title": "brandfolder_contenttype.png", + "updated_at": "2023-02-07T10:06:58.115Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt73f9737af627514f/63e222c2f03f747756684c77/brandfolder_contenttype.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt516dbfe1818c2389", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-02-07T10:06:59.171Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "92332", + "filename": "brandfolder_jsonrte_contenttype.png", + "parent_uid": "blt8f6e144007ba8c5c", + "tags": [], + "title": "brandfolder_jsonrte_contenttype.png", + "updated_at": "2023-02-07T10:06:59.171Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt516dbfe1818c2389/63e222c34c4b0210bc379ec6/brandfolder_jsonrte_contenttype.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt90ab63cc6a44d249", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-02-07T10:06:57.943Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "18057", + "filename": "customfield_without_data.png", + "parent_uid": "blt8f6e144007ba8c5c", + "tags": [], + "title": "customfield_without_data.png", + "updated_at": "2023-02-07T10:06:57.943Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt90ab63cc6a44d249/63e222c197fe254050234eb3/customfield_without_data.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt3485004145939873", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-02-07T10:06:58.822Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "59051", + "filename": "selector_collection.png", + "parent_uid": "blt8f6e144007ba8c5c", + "tags": [], + "title": "selector_collection.png", + "updated_at": "2023-02-07T10:06:58.822Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt3485004145939873/63e222c2fc79c04b19c2f344/selector_collection.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blta5a897dafc73a996", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-02-07T10:06:59.724Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "389773", + "filename": "selector_data.png", + "parent_uid": "blt8f6e144007ba8c5c", + "tags": [], + "title": "selector_data.png", + "updated_at": "2023-02-07T10:06:59.724Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blta5a897dafc73a996/63e222c3be94ee3bf4afd8aa/selector_data.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt58b1a3a249de1f1f", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-02-07T10:06:59.582Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "282122", + "filename": "selector_place_image.png", + "parent_uid": "blt8f6e144007ba8c5c", + "tags": [], + "title": "selector_place_image.png", + "updated_at": "2023-02-07T10:06:59.582Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt58b1a3a249de1f1f/63e222c3e414c23655e13ee9/selector_place_image.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt05120b040d890a1c", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-02-07T10:06:58.751Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "61474", + "filename": "customfield_data.png", + "parent_uid": "blt8f6e144007ba8c5c", + "tags": [], + "title": "customfield_data.png", + "updated_at": "2023-02-07T10:06:58.751Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt05120b040d890a1c/63e222c276abcd351bacd47b/customfield_data.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt44176a644efbe9b4", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-02-07T10:06:58.464Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "170476", + "filename": "jsonrte_data.png", + "parent_uid": "blt8f6e144007ba8c5c", + "tags": [], + "title": "jsonrte_data.png", + "updated_at": "2023-02-07T10:06:58.464Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt44176a644efbe9b4/63e222c23849a0141b70237a/jsonrte_data.png" + } + ], + "seo": { + "canonical_url": "", + "description": "", + "image": null, + "robots": "", + "title": "" + }, + "static_links": [ + { + "type": "Documentation", + "url": "https://www.contentstack.com/docs/developers/marketplace-apps/brandfolder/", + "_metadata": { + "uid": "csd2223db13369101b" + } + }, + { + "type": "End-User License Agreement", + "url": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps", + "_metadata": { + "uid": "cs8c54cc546665821f" + } + } + ], + "summary": "Fetch digital assets (images) from your Brandfolder account into Contentstack entries.", + "tags": [], + "title": "Brandfolder", + "updated_at": "2025-01-24T11:19:39.982Z", + "updated_by": "blt05ac693470ad5ff7", + "url": "/marketplace/brandfolder", + "use_cases": "

Manage Brandfolder digital media readily: The Brandfolder app lets you fetch and manage images within your entries. With Brandfolder, you can easily link all the images without leaving your headless CMS.

Better marketing campaigns with ease-to-access assets: You can create content in Contentstack and use the Custom Field or JSON RTE field to insert images in your content. With this, cross-functional teams can work on large-scale campaigns with ease.

Easy distribution of digital assets: The Brandfolder app allows geographically dispersed teams to store, share, and fetch digital media assets.

", + "publish_details": { + "time": "2025-01-28T10:55:14.141Z", + "user": "blt05ac693470ad5ff7", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + } + }, + { + "uid": "blt2e5ed9f109bb156f", + "_version": 12, + "locale": "en-us", + "ACL": {}, + "_in_progress": false, + "app_type": [ + { + "uid": "blte9d290b2e9e0931e", + "_content_type_uid": "app_types" + } + ], + "app_uid": "61ddc1b51ecff10018907c4d", + "built_by": [ + { + "uid": "bltec929d731b1f9d85", + "_content_type_uid": "organizations" + } + ], + "category": [ + { + "uid": "blt6abfa301df06bf93", + "_content_type_uid": "categories" + } + ], + "coming_soon": false, + "created_at": "2022-03-29T11:13:06.028Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "

Contentstack's Marketplace apps offer a variety of ways to integrate third-party applications, such as Bynder, directly into your headless CMS. With this, you can streamline the process of managing and sharing digital assets across multiple platforms.

Using a Contentstack Custom Field, you can integrate Bynder with Contentstack directly. You can create an entry in Contentstack, the app will ensure that you are able to view the digital assets within your CMS.

", + "dynamic_links": [], + "feature_types": [ + { + "feature_type": [ + { + "uid": "blt6b35fa46f253a6bd", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "cs23cd1a05a970bc44" + }, + "description": "While creating entries, you can select one or more images, videos, or documents as the input value for the field from your Bynder account." + }, + { + "feature_type": [ + { + "uid": "bltf9b70a5fd3c08c36", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "csdae58a2b06a451d4" + }, + "description": "You can add assets from the Bynder app to your JSON Rich Text Editor field using the Bynder JSON RTE Plugin." + } + ], + "icon": { + "_version": 1, + "is_dir": false, + "uid": "blteb81b84adb512d31", + "ACL": {}, + "content_type": "image/svg+xml", + "created_at": "2022-03-29T11:09:59.102Z", + "created_by": "blt89b5b90cb9e7c645", + "file_size": "2589", + "filename": "Bynder.svg", + "parent_uid": "blt2eb26851df9c0e2e", + "tags": [], + "title": "Bynder.svg", + "updated_at": "2022-03-29T11:09:59.102Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blteb81b84adb512d31/6242e9070466d7630dd3a706/Bynder.svg" + }, + "installation_url": "#!/apps/61ddc1b51ecff10018907c4d/install", + "links": { + "source_code": "", + "documentation": "", + "others": [], + "end_user_license_agreement": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/" + }, + "screenshots": [ + { + "_version": 2, + "is_dir": false, + "uid": "blt9f6cc27c83239660", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:48.091Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "", + "file_size": "43135", + "filename": "bynder-config-screen.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "Bynder_ConfigScreen.png", + "updated_at": "2022-07-21T14:47:18.151Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt9f6cc27c83239660/62d966f6a2057a5e86269a95/bynder-config-screen.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt4c0f3e1846fac19e", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:47.477Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "", + "file_size": "42470", + "filename": "Bynder_ContentType_AppSelection.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "Bynder_ContentType_AppSelection.png", + "updated_at": "2022-03-29T11:09:47.477Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt4c0f3e1846fac19e/6242e8fb311ad5112f12b57c/Bynder_ContentType_AppSelection.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt511316bff90cd2a3", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:45.503Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "", + "file_size": "54617", + "filename": "Bynder_ContentTypeExtensionSelection.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "Bynder_ContentTypeExtensionSelection.png", + "updated_at": "2022-03-29T11:09:45.503Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt511316bff90cd2a3/6242e8f99b68390fcd0530a6/Bynder_ContentTypeExtensionSelection.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt24acb3261bd466fa", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:47.491Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "", + "file_size": "22852", + "filename": "Bynder_CustomField_NoAsset.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "Bynder_CustomField_NoAsset.png", + "updated_at": "2022-03-29T11:09:47.491Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt24acb3261bd466fa/6242e8fbff4cca132d166a2c/Bynder_CustomField_NoAsset.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltd2691e7f305d8a94", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:55.518Z", + "created_by": "blt89b5b90cb9e7c645", + "file_size": "33864", + "filename": "Bynder_SelectorPage_Connect.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "Bynder_SelectorPage_Connect.png", + "updated_at": "2022-03-29T11:09:55.518Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltd2691e7f305d8a94/6242e9039b68390fcd0530ae/Bynder_SelectorPage_Connect.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltc58200f52a299c8a", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:53.880Z", + "created_by": "blt89b5b90cb9e7c645", + "file_size": "202476", + "filename": "Bynder_SelectorPage_Login.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "Bynder_SelectorPage_Login.png", + "updated_at": "2022-03-29T11:09:53.880Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltc58200f52a299c8a/6242e901c470e610f0a9fea5/Bynder_SelectorPage_Login.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltf6a97201c2cfb505", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:51.876Z", + "created_by": "blt89b5b90cb9e7c645", + "file_size": "358816", + "filename": "Bynder_SelectorPage.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "Bynder_SelectorPage.png", + "updated_at": "2022-03-29T11:09:51.876Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltf6a97201c2cfb505/6242e8ffa9ee655f1991e1a1/Bynder_SelectorPage.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltd390b7049019a676", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:53.003Z", + "created_by": "blt89b5b90cb9e7c645", + "file_size": "333643", + "filename": "Bynder_SelectorPage_AddOption.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "Bynder_SelectorPage_AddOption.png", + "updated_at": "2022-03-29T11:09:53.003Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltd390b7049019a676/6242e9015564b679c0c521c6/Bynder_SelectorPage_AddOption.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt334ba0bfefd731cd", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:45.456Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "", + "file_size": "128375", + "filename": "Bynder_CustomField_Assets.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "Bynder_CustomField_Assets.png", + "updated_at": "2022-03-29T11:09:45.456Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt334ba0bfefd731cd/6242e8f9906f01655b799992/Bynder_CustomField_Assets.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt9ec31cb593cc984f", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:46.572Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "", + "file_size": "211471", + "filename": "Bynder_CustomField_ActiveHover.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "Bynder_CustomField_ActiveHover.png", + "updated_at": "2022-03-29T11:09:46.572Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt9ec31cb593cc984f/6242e8fadac6690b70a2dc07/Bynder_CustomField_ActiveHover.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt22269eac414805e1", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-07-21T14:22:48.908Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "49642", + "filename": "bynder-rte-field.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "bynder-rte-field.png", + "updated_at": "2022-07-21T14:22:48.908Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt22269eac414805e1/62d9613848cc366ab5407e1c/bynder-rte-field.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt85f67a817a0741b7", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-07-21T14:22:49.521Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "21861", + "filename": "bynder-select-plugin.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "bynder-select-plugin.png", + "updated_at": "2022-07-21T14:22:49.521Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt85f67a817a0741b7/62d96139e49d4a6983cc1ec2/bynder-select-plugin.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltce795eb8689ec488", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-07-21T14:22:49.605Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "51773", + "filename": "bynder-selected-plugin.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "bynder-selected-plugin.png", + "updated_at": "2022-07-21T14:22:49.605Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltce795eb8689ec488/62d96139ecc54c6cacd810c5/bynder-selected-plugin.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt4a7978cc57659046", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-07-21T14:22:49.156Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "52128", + "filename": "bynder-rte-icon.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "bynder-rte-icon.png", + "updated_at": "2022-07-21T14:22:49.156Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt4a7978cc57659046/62d961392b85cb6d849cce74/bynder-rte-icon.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blte04688a858dde8ed", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-07-21T14:22:49.349Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "97587", + "filename": "bynder-rte-selected-assets.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "bynder-rte-selected-assets.png", + "updated_at": "2022-07-21T14:22:49.349Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blte04688a858dde8ed/62d96139e9d7646bfeda2b47/bynder-rte-selected-assets.png" + } + ], + "seo": { + "canonical_url": "", + "description": "", + "image": null, + "robots": "", + "title": "" + }, + "static_links": [ + { + "type": "Documentation", + "url": "https://www.contentstack.com/docs/developers/marketplace-apps/bynder", + "_metadata": { + "uid": "cs5381f9ee9cce2964" + } + }, + { + "type": "End-User License Agreement", + "url": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/", + "_metadata": { + "uid": "cs072dfa7b76c413be" + } + } + ], + "summary": "Fetch digital assets (images and videos) from your Bynder account into a field of an entry. ", + "tags": [], + "title": "Bynder", + "updated_at": "2025-01-24T11:33:44.597Z", + "updated_by": "blt05ac693470ad5ff7", + "url": "/marketplace/bynder", + "use_cases": "

Manage Bynder digital media with ease: Contentstack's integration with Bynder allows you to link all your Bynder digital assets with ease. To access your Bynder assets, you don't have to leave your CMS. Instead, the integration allows the Bynder portal to open in the entry of your content type and you can choose and insert the assets within your entry page.

Get better control over all your marketing resources: The integration allows you to manage the entire content lifecycle of your marketing strategy. You can create content in Contentstack and use the Bynder Custom Field Extension to insert digital assets in your content. The integration provides a single solution to manage all your marketing resources inside your CMS.

Simplify sharing and distribution of digital assets: With Bynder's integration with Contentstack, your geographically dispersed teams can easily create, share, and distribute content. This makes it possible to execute large-scale marketing campaigns with cross-functional teams.

", + "publish_details": { + "time": "2025-01-28T10:53:49.649Z", + "user": "blt05ac693470ad5ff7", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + } + }, + { + "uid": "blt5307633e8c63d59d", + "_version": 17, + "locale": "en-us", + "ACL": {}, + "_in_progress": false, + "app_type": [ + { + "uid": "blte9d290b2e9e0931e", + "_content_type_uid": "app_types" + } + ], + "app_uid": "61c04dd81ecff10018907bed", + "built_by": [ + { + "uid": "bltec929d731b1f9d85", + "_content_type_uid": "organizations" + } + ], + "category": [ + { + "uid": "blt6abfa301df06bf93", + "_content_type_uid": "categories" + } + ], + "coming_soon": false, + "created_at": "2022-03-29T11:13:07.327Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "

Contentstack' Marketplace Apps offers a variety of ways to integrate third-party applications, such as Cloudinary, directly into your headless CMS. With the Cloudinary app, you can streamline the process of managing and sharing images across multiple platforms.

Custom Field or JSON RTE, you can integrate Cloudinary with Contentstack directly. You can create content in Contentstack, and Cloudinary will ensure that you are able to view and access your Cloudinary images within your CMS.

", + "dynamic_links": [], + "feature_types": [ + { + "feature_type": [ + { + "uid": "blt6b35fa46f253a6bd", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "cs451ee37dd5248c6e" + }, + "description": "While creating entries, you can select one or more Cloudinary images or videos as the input value for the field." + }, + { + "feature_type": [ + { + "uid": "bltf9b70a5fd3c08c36", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "csa072b2b0b1c4e59b" + }, + "description": "Add assets from Cloudinary app to your JSON Rich Text Editor field using the Cloudinary JSON RTE Plugin" + } + ], + "icon": { + "_version": 1, + "is_dir": false, + "uid": "blt5492471633f54c05", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:10:07.336Z", + "created_by": "blt89b5b90cb9e7c645", + "file_size": "4694", + "filename": "cloudinary_cloud_glyph_512x512.png", + "parent_uid": "blt2eb26851df9c0e2e", + "tags": [], + "title": "cloudinary_cloud_glyph_512x512.png", + "updated_at": "2022-03-29T11:10:07.336Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt5492471633f54c05/6242e90f6aee76195cd5a511/cloudinary_cloud_glyph_512x512.png" + }, + "installation_url": "/#!/apps/61c04dd81ecff10018907bed/install", + "links": { + "source_code": "", + "documentation": "", + "others": [], + "end_user_license_agreement": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/" + }, + "screenshots": [ + { + "_version": 2, + "is_dir": false, + "uid": "blt8148fc15e5e4ea9e", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-09-06T12:39:36.971Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "75712", + "filename": "Cloudinary-Config-1.png", + "parent_uid": "bltb977c7f5e15fa4f5", + "tags": [], + "title": "Cloudinary-Config-Updated.png", + "updated_at": "2023-09-06T12:39:48.250Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt8148fc15e5e4ea9e/64f8730916f77f0e36cbb51b/Cloudinary-Config-1.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltfd9d4a80ad36f5de", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:10:08.343Z", + "created_by": "blt89b5b90cb9e7c645", + "file_size": "32748", + "filename": "coudinary_entry_creation.png", + "parent_uid": "bltb977c7f5e15fa4f5", + "tags": [], + "title": "coudinary_entry_creation.png", + "updated_at": "2022-03-29T11:10:08.343Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltfd9d4a80ad36f5de/6242e9109b68390fcd0530cd/coudinary_entry_creation.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt760c78d3f76b4df2", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:10:08.579Z", + "created_by": "blt89b5b90cb9e7c645", + "file_size": "328618", + "filename": "cloudinary_asset_listing.png", + "parent_uid": "bltb977c7f5e15fa4f5", + "tags": [], + "title": "cloudinary_asset_listing.png", + "updated_at": "2022-03-29T11:10:08.579Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt760c78d3f76b4df2/6242e910aeff370de94d90be/cloudinary_asset_listing.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt4e911a20719951a4", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:10:07.606Z", + "created_by": "blt89b5b90cb9e7c645", + "file_size": "222866", + "filename": "cloudinary_asset_loaded.png", + "parent_uid": "bltb977c7f5e15fa4f5", + "tags": [], + "title": "cloudinary_asset_loaded.png", + "updated_at": "2022-03-29T11:10:07.606Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt4e911a20719951a4/6242e90fe1962d6a51cef416/cloudinary_asset_loaded.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltf92c82a97fb2b970", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-05-26T06:52:38.068Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "44299", + "filename": "cloudinary-entry-json-rte.png", + "parent_uid": "bltb977c7f5e15fa4f5", + "tags": [], + "title": "cloudinary-entry-json-rte.png", + "updated_at": "2022-05-26T06:52:38.068Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltf92c82a97fb2b970/628f23b640e2312e82dd096b/cloudinary-entry-json-rte.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt7ddc3a7b1103771c", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-05-26T06:52:37.903Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "38567", + "filename": "cloudinary-add-plugin.png", + "parent_uid": "bltb977c7f5e15fa4f5", + "tags": [], + "title": "cloudinary-add-plugin.png", + "updated_at": "2022-05-26T06:52:37.903Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt7ddc3a7b1103771c/628f23b5170c712e88665a7e/cloudinary-add-plugin.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blte3a2863a52337490", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-05-26T06:52:37.925Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "61508", + "filename": "cloudinary-add-plugin-added.png", + "parent_uid": "bltb977c7f5e15fa4f5", + "tags": [], + "title": "cloudinary-add-plugin-added.png", + "updated_at": "2022-05-26T06:52:37.925Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blte3a2863a52337490/628f23b597d6686b1cff96f3/cloudinary-add-plugin-added.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltdefa93e028fdb7a4", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-05-26T06:52:37.768Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "18372", + "filename": "cloudinary-rte.png", + "parent_uid": "bltb977c7f5e15fa4f5", + "tags": [], + "title": "cloudinary-rte.png", + "updated_at": "2022-05-26T06:52:37.768Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltdefa93e028fdb7a4/628f23b519611a7d301084a4/cloudinary-rte.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blte93e98a5c1f9b21b", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-05-26T06:52:38.513Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "356728", + "filename": "cloudinary-dashboard.png", + "parent_uid": "bltb977c7f5e15fa4f5", + "tags": [], + "title": "cloudinary-dashboard.png", + "updated_at": "2022-05-26T06:52:38.513Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blte93e98a5c1f9b21b/628f23b6eaff1924caa64c4b/cloudinary-dashboard.png" + } + ], + "seo": { + "canonical_url": "", + "description": "", + "image": null, + "robots": "", + "title": "" + }, + "static_links": [ + { + "type": "Documentation", + "url": "https://www.contentstack.com/docs/developers/marketplace-apps/cloudinary/", + "_metadata": { + "uid": "cs5be545df98c27320" + } + }, + { + "type": "End-User License Agreement", + "url": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/", + "_metadata": { + "uid": "cs2273829bfbdc05f2" + } + } + ], + "summary": "Fetches assets (images and videos) from your Cloudinary account into the field of an entry.", + "tags": [], + "title": "Cloudinary", + "updated_at": "2025-01-24T11:15:04.176Z", + "updated_by": "blt05ac693470ad5ff7", + "url": "/marketplace/cloudinary", + "use_cases": "

One interface for content and asset management: The integration of Contentstack with Cloudinary allows you to manage content and Cloudinary assets in a single interface. Rather than managing two different apps (CMS and Cloudinary),  you save time and effort by accessing Cloudinary assets from the entry page.

Simplified digital asset sharing and distribution: Once you integrate Contentstack with Cloudinary, your geographically dispersed teams can easily create, share, and distribute content across different departments. Thus, the execution of large-scale marketing campaigns with cross-functional teams becomes possible.

Improved control over all your marketing resources: With the integration of Contentstack and Cloudinary, you gain better control over your marketing resources, allowing you to easily manage the entire content lifecycle. You simply have to create content in Contentstack and use the Cloudinary Custom Field Extension to insert digital assets in your entry.

", + "publish_details": { + "time": "2025-01-28T10:55:29.069Z", + "user": "blt05ac693470ad5ff7", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + } + }, + { + "uid": "blteb2e1c080caa44dd", + "_version": 3, + "locale": "en-us", + "ACL": {}, + "_in_progress": false, + "app_type": [ + { + "uid": "blte9d290b2e9e0931e", + "_content_type_uid": "app_types" + } + ], + "app_uid": "6667fb7b2e29d10012f8c342", + "built_by": [ + { + "uid": "bltec929d731b1f9d85", + "_content_type_uid": "organizations" + } + ], + "category": [ + { + "uid": "blt6abfa301df06bf93", + "_content_type_uid": "categories" + } + ], + "coming_soon": false, + "created_at": "2024-06-11T08:25:11.583Z", + "created_by": "blt7314f6e631536c9d", + "description": "

By integrating the Digizuite app from the Contentstack Marketplace into your headless CMS, you can effortlessly manage, share, and collaborate on assets across multiple platforms.

By using the Custom Field and JSON Rich Text Editor plugin, you can integrate Digizuite with Contentstack. You can create an entry in Contentstack and view all your digital assets stored in your Digizuite account inside it.

", + "dynamic_links": [], + "feature_types": [ + { + "feature_type": [ + { + "uid": "blt6b35fa46f253a6bd", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "csb0eb4bdf2eac6490" + }, + "description": "Custom Field allows you to select multiple assets from your Digizuite account and add them to your entry." + }, + { + "feature_type": [ + { + "uid": "bltf9b70a5fd3c08c36", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "cs9b68fe7c8a9a15ee" + }, + "description": "Using the Digizuite JSON RTE Plugin, you can add assets from the Digizuite app to your JSON Rich Text Editor field." + } + ], + "icon": { + "_version": 1, + "is_dir": false, + "uid": "blt1b43d8021f6505c7", + "ACL": {}, + "content_type": "image/svg+xml", + "created_at": "2024-06-11T07:59:32.914Z", + "created_by": "blt7314f6e631536c9d", + "file_size": "1233", + "filename": "digizuite-logo.svg", + "parent_uid": "blt2eb26851df9c0e2e", + "tags": [], + "title": "digizuite-logo.svg", + "updated_at": "2024-06-11T07:59:32.914Z", + "updated_by": "blt7314f6e631536c9d", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt1b43d8021f6505c7/666803e471a11048c94face4/digizuite-logo.svg" + }, + "installation_url": "/#!/apps/6667fb7b2e29d10012f8c342/install", + "links": { + "source_code": "", + "documentation": "https://www.contentstack.com/docs/developers/marketplace-apps/digizuite", + "end_user_license_agreement": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/", + "others": [] + }, + "screenshots": [ + { + "_version": 1, + "is_dir": false, + "uid": "blt66f588d3cff98276", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-06-11T09:07:25.279Z", + "created_by": "blt7314f6e631536c9d", + "file_size": "21793", + "filename": "9-Digizuite-JSONRTE-App-Icon.png", + "parent_uid": "blt613a74bd13dd3512", + "tags": [], + "title": "9-Digizuite-JSONRTE-App-Icon.png", + "updated_at": "2024-06-11T09:07:25.279Z", + "updated_by": "blt7314f6e631536c9d", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt66f588d3cff98276/666813cd88395e06f03965f0/9-Digizuite-JSONRTE-App-Icon.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltd34a9b21ede5e552", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-06-11T09:07:25.375Z", + "created_by": "blt7314f6e631536c9d", + "file_size": "49714", + "filename": "2-Digizuite-UI-Locations.png", + "parent_uid": "blt613a74bd13dd3512", + "tags": [], + "title": "2-Digizuite-UI-Locations.png", + "updated_at": "2024-06-11T09:07:25.375Z", + "updated_by": "blt7314f6e631536c9d", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltd34a9b21ede5e552/666813cdd7f5604f7b440a9f/2-Digizuite-UI-Locations.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blta1b7d8842cd0a4bb", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-06-11T09:07:25.527Z", + "created_by": "blt7314f6e631536c9d", + "file_size": "55326", + "filename": "3-Digizuite-Custom-Field-Sample-Entry.png", + "parent_uid": "blt613a74bd13dd3512", + "tags": [], + "title": "3-Digizuite-Custom-Field-Sample-Entry.png", + "updated_at": "2024-06-11T09:07:25.527Z", + "updated_by": "blt7314f6e631536c9d", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blta1b7d8842cd0a4bb/666813cdec03bd02bb15a673/3-Digizuite-Custom-Field-Sample-Entry.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blta00eab11702b4b97", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-06-11T09:07:25.527Z", + "created_by": "blt7314f6e631536c9d", + "file_size": "107874", + "filename": "1-Digizuite-Configuration.png", + "parent_uid": "blt613a74bd13dd3512", + "tags": [], + "title": "1-Digizuite-Configuration.png", + "updated_at": "2024-06-11T09:07:25.527Z", + "updated_by": "blt7314f6e631536c9d", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blta00eab11702b4b97/666813cd7456ddd5b9512c0d/1-Digizuite-Configuration.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt15c09164d59523eb", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-06-11T09:07:25.502Z", + "created_by": "blt7314f6e631536c9d", + "file_size": "40003", + "filename": "4-Digizuite-Selector-Page-Login.png", + "parent_uid": "blt613a74bd13dd3512", + "tags": [], + "title": "4-Digizuite-Selector-Page-Login.png", + "updated_at": "2024-06-11T09:07:25.502Z", + "updated_by": "blt7314f6e631536c9d", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt15c09164d59523eb/666813cd679953d444447fdd/4-Digizuite-Selector-Page-Login.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blta6eaff56b60384ea", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-06-11T09:07:25.546Z", + "created_by": "blt7314f6e631536c9d", + "file_size": "233566", + "filename": "6-Digizuite-Selector-Page-Multi-Insert.png", + "parent_uid": "blt613a74bd13dd3512", + "tags": [], + "title": "6-Digizuite-Selector-Page-Multi-Insert.png", + "updated_at": "2024-06-11T09:07:25.546Z", + "updated_by": "blt7314f6e631536c9d", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blta6eaff56b60384ea/666813cdd7f5606cd2440aa3/6-Digizuite-Selector-Page-Multi-Insert.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt03e3f8cedee5b290", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-06-11T09:07:25.568Z", + "created_by": "blt7314f6e631536c9d", + "file_size": "71705", + "filename": "7-Digizuite-Custom-Field-Assets-Added.png", + "parent_uid": "blt613a74bd13dd3512", + "tags": [], + "title": "7-Digizuite-Custom-Field-Assets-Added.png", + "updated_at": "2024-06-11T09:07:25.568Z", + "updated_by": "blt7314f6e631536c9d", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt03e3f8cedee5b290/666813cde46c314c3d364f88/7-Digizuite-Custom-Field-Assets-Added.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltbfc8e81a474ab1c5", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-06-11T09:07:25.435Z", + "created_by": "blt7314f6e631536c9d", + "file_size": "87890", + "filename": "8-Digizuite-Custom-Field-Assets-View-Thumbnail-Features.png", + "parent_uid": "blt613a74bd13dd3512", + "tags": [], + "title": "8-Digizuite-Custom-Field-Assets-View-Thumbnail-Features.png", + "updated_at": "2024-06-11T09:07:25.435Z", + "updated_by": "blt7314f6e631536c9d", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltbfc8e81a474ab1c5/666813cd472c5f1d5fc8768c/8-Digizuite-Custom-Field-Assets-View-Thumbnail-Features.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt12d61d2546171c89", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-06-11T09:07:25.720Z", + "created_by": "blt7314f6e631536c9d", + "file_size": "113812", + "filename": "10-Digizuite-JSONRTE-Assets-Added-Features.png", + "parent_uid": "blt613a74bd13dd3512", + "tags": [], + "title": "10-Digizuite-JSONRTE-Assets-Added-Features.png", + "updated_at": "2024-06-11T09:07:25.720Z", + "updated_by": "blt7314f6e631536c9d", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt12d61d2546171c89/666813cd049fefc578cc26a7/10-Digizuite-JSONRTE-Assets-Added-Features.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt36ee373648b4fa4c", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-06-11T09:07:25.820Z", + "created_by": "blt7314f6e631536c9d", + "file_size": "207392", + "filename": "5-Digizuite-Selector-Page-Placing-Single-Asset.png", + "parent_uid": "blt613a74bd13dd3512", + "tags": [], + "title": "5-Digizuite-Selector-Page-Placing-Single-Asset.png", + "updated_at": "2024-06-11T09:07:25.820Z", + "updated_by": "blt7314f6e631536c9d", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt36ee373648b4fa4c/666813cd599f1a26956ea87d/5-Digizuite-Selector-Page-Placing-Single-Asset.png" + } + ], + "seo": { + "canonical_url": "", + "description": "", + "image": null, + "robots": "", + "title": "" + }, + "static_links": [ + { + "type": "Documentation", + "url": "https://www.contentstack.com/docs/developers/marketplace-apps/digizuite", + "_metadata": { + "uid": "cse4809e1dd2392680" + } + }, + { + "type": "End-User License Agreement", + "url": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/", + "_metadata": { + "uid": "cs8ce0c93fa2b05dc3" + } + } + ], + "summary": "Add digital assets from your Digizuite account into your Contentstack entries.", + "tags": [], + "title": "Digizuite", + "updated_at": "2025-01-24T06:24:10.302Z", + "updated_by": "blt05ac693470ad5ff7", + "url": "/marketplace/digizuite", + "use_cases": "

Manage Digizuite digital media with ease: The Digizuite app lets you manage assets within your entries. With Digizuite, you can easily access all the assets without leaving your headless CMS.

Better marketing campaigns with easy-to-access assets: You can create content in Contentstack and insert assets in your entry using the Digizuite Custom Field or JSON RTE field. This allows cross-functional teams to work on large-scale campaigns easily.

Easy distribution of digital assets: The Digizuite app allows geographically dispersed teams to readily store, share, and fetch digital media assets. 

", + "publish_details": { + "time": "2025-01-28T10:56:57.063Z", + "user": "blt05ac693470ad5ff7", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + } + }, + { + "uid": "blt802cfeedb40e4e3c", + "_version": 4, + "locale": "en-us", + "ACL": {}, + "_in_progress": false, + "app_type": [ + { + "uid": "blte9d290b2e9e0931e", + "_content_type_uid": "app_types" + } + ], + "app_uid": "65eec8748ae77300126404c3", + "built_by": [ + { + "uid": "bltec929d731b1f9d85", + "_content_type_uid": "organizations" + } + ], + "category": [ + { + "uid": "blt6abfa301df06bf93", + "_content_type_uid": "categories" + } + ], + "coming_soon": false, + "created_at": "2024-03-11T11:10:31.717Z", + "created_by": "blt78cea3a89ceb6137", + "description": "

By integrating the Egnyte app from the Contentstack Marketplace into your headless CMS, you can effortlessly manage, share, and collaborate on assets across multiple platforms.

By using the Custom Field and JSON Rich Text Editor plugin, you can integrate Egnyte with Contentstack. You can create an entry in Contentstack and view all your digital assets stored in Egnyte inside it.

", + "dynamic_links": [], + "feature_types": [ + { + "feature_type": [ + { + "uid": "blt6b35fa46f253a6bd", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "cs1ded11395e73ee37" + }, + "description": "Custom Field allows you to select multiple assets from your Egnyte account and add them to your entry." + }, + { + "feature_type": [ + { + "uid": "bltf9b70a5fd3c08c36", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "csdd8734e35c172e8a" + }, + "description": "You can add assets from the Egnyte app to your JSON Rich Text Editor field using the Egnyte JSON RTE Plugin." + } + ], + "icon": { + "_version": 1, + "is_dir": false, + "uid": "blt9bbc2541009fcd2f", + "ACL": {}, + "content_type": "image/svg+xml", + "created_at": "2024-03-11T11:02:36.047Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "1467", + "filename": "Egnyte_512.svg", + "parent_uid": "blt2eb26851df9c0e2e", + "tags": [], + "title": "Egnyte_512.svg", + "updated_at": "2024-03-11T11:02:36.047Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt9bbc2541009fcd2f/65eee4cc6b2184040adf6434/Egnyte_512.svg" + }, + "installation_url": "/#!/apps/65eec8748ae77300126404c3/install", + "links": { + "source_code": "", + "documentation": "", + "end_user_license_agreement": "", + "others": [] + }, + "screenshots": [ + { + "_version": 1, + "is_dir": false, + "uid": "blt39e69a5b368a44e2", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:56.868Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "94158", + "filename": "SelectAssets.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "SelectAssets.png", + "updated_at": "2024-03-11T11:23:56.868Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt39e69a5b368a44e2/65eee9cc2d7272040a9be3b5/SelectAssets.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blta1c3e7ab01f46c79", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:56.802Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "54525", + "filename": "JSONRTEModeling.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "JSONRTEModeling.png", + "updated_at": "2024-03-11T11:23:56.802Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blta1c3e7ab01f46c79/65eee9cc9b3861040aba306a/JSONRTEModeling.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltee77f8357082a1bf", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:56.774Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "79398", + "filename": "SelectExtensionFinal.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "SelectExtensionFinal.png", + "updated_at": "2024-03-11T11:23:56.774Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltee77f8357082a1bf/65eee9cc9b01c5040a371747/SelectExtensionFinal.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt34b26dc503b5e85c", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:56.682Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "20095", + "filename": "JsonRTE_Select.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "JsonRTE_Select.png", + "updated_at": "2024-03-11T11:23:56.682Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt34b26dc503b5e85c/65eee9cc00aa28040ab71676/JsonRTE_Select.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blta5e4ff04ec5dcee3", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:43.006Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "54241", + "filename": "EnterPassword.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "EnterPassword.png", + "updated_at": "2024-03-11T11:23:43.006Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blta5e4ff04ec5dcee3/65eee9bf32eb75040a886817/EnterPassword.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltb9da556882e17694", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:43.005Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "73834", + "filename": "AppExtensionSelect.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "AppExtensionSelect.png", + "updated_at": "2024-03-11T11:23:43.005Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltb9da556882e17694/65eee9bff2e3cc040ac912c1/AppExtensionSelect.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt428d15bb4444686f", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:43.002Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "85393", + "filename": "ConfigScreen.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "ConfigScreen.png", + "updated_at": "2024-03-11T11:23:43.002Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt428d15bb4444686f/65eee9bf6c9f9b040a4d470e/ConfigScreen.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt4d94b995ba81c23e", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:42.992Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "88287", + "filename": "ConfigScreenWithData.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "ConfigScreenWithData.png", + "updated_at": "2024-03-11T11:23:42.992Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt4d94b995ba81c23e/65eee9beacd14e0407fb942f/ConfigScreenWithData.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt78f68811cc9e7f85", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:42.766Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "144988", + "filename": "AppEntryCreated.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "AppEntryCreated.png", + "updated_at": "2024-03-11T11:23:42.766Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt78f68811cc9e7f85/65eee9bef40463040a6f7c13/AppEntryCreated.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt15b5d6ef0c1ee73d", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:42.707Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "67969", + "filename": "CustomField1.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "CustomField1.png", + "updated_at": "2024-03-11T11:23:42.707Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt15b5d6ef0c1ee73d/65eee9be5aa9cf0407b08f75/CustomField1.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt838f8692be88b3fb", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:42.696Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "47709", + "filename": "AllowAccess.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "AllowAccess.png", + "updated_at": "2024-03-11T11:23:42.696Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt838f8692be88b3fb/65eee9bef40463040a6f7c0f/AllowAccess.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt7108e5839f206055", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:42.677Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "73095", + "filename": "ContentModelingApp.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "ContentModelingApp.png", + "updated_at": "2024-03-11T11:23:42.677Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt7108e5839f206055/65eee9be5b334a040a1ebffe/ContentModelingApp.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt61671b65d7b3f75a", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:42.670Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "41425", + "filename": "AddEmail.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "AddEmail.png", + "updated_at": "2024-03-11T11:23:42.670Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt61671b65d7b3f75a/65eee9be9b3861040aba3066/AddEmail.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt8fb40eb9558601fb", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:42.609Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "17201", + "filename": "AppEntryCreation.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "AppEntryCreation.png", + "updated_at": "2024-03-11T11:23:42.609Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt8fb40eb9558601fb/65eee9be2d7272040a9be3b1/AppEntryCreation.png" + } + ], + "seo": { + "canonical_url": "", + "description": "", + "image": null, + "robots": "", + "title": "" + }, + "static_links": [ + { + "type": "End-User License Agreement", + "url": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/", + "_metadata": { + "uid": "csc0ffeffc343abc82" + } + }, + { + "type": "Documentation", + "url": "https://www.contentstack.com/docs/developers/marketplace-apps/egnyte", + "_metadata": { + "uid": "csfdebc9f93c49b957" + } + } + ], + "summary": "Fetch digital assets from your Egnyte account into your Contentstack entries. ", + "tags": [], + "title": "Egnyte", + "updated_at": "2025-01-24T06:28:44.659Z", + "updated_by": "blt05ac693470ad5ff7", + "url": "/marketplace/egnyte", + "use_cases": "

Manage Egnyte digital media with ease: The Egnyte app lets you manage assets within your entries. With Egnyte, you can easily access all the assets without leaving your headless CMS.

Better marketing campaigns with ease-to-access assets: You can create content in Contentstack and use the Egnyte Custom Field or JSON RTE field to insert assets in your entry. With this, cross-functional teams can work on large-scale campaigns with ease.

Easy distribution of digital assets: The Egnyte app allows geographically dispersed teams to readily store, share, and fetch digital media assets.

", + "publish_details": { + "time": "2025-01-28T10:55:57.436Z", + "user": "blt05ac693470ad5ff7", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + } + }, + { + "uid": "blt049c7b2db4db67a4", + "_version": 7, + "locale": "en-us", + "ACL": {}, + "_in_progress": false, + "app_type": [ + { + "uid": "blte9d290b2e9e0931e", + "_content_type_uid": "app_types" + } + ], + "app_uid": "65e997d02adeba0012c6e00f", + "built_by": [ + { + "uid": "blt4ecd9b73e0a6eef7", + "_content_type_uid": "organizations" + } + ], + "category": [ + { + "uid": "blt6abfa301df06bf93", + "_content_type_uid": "categories" + } + ], + "coming_soon": false, + "created_at": "2024-05-09T05:28:47.806Z", + "created_by": "blt78cea3a89ceb6137", + "description": "

Filerobot by Scaleflex is the single source of truth for all your digital assets, allowing for seamless collaboration across platforms via the Asset Hub and through a lively ecosystem of plugins and connectors.

Don't bother with multiple cloud storages, image editors, file compression, and CDN setup anymore, Filerobot takes care of it all.

Upload your digital assets (images, videos, and more) to Contentstack from Scaleflex’s Filerobot platform via the integrated modular widget.

Your media will then be natively accelerated by a top tier, multi-tenant, Content Delivery Network (CDN) architecture.

Deliver beautiful digital experiences thanks to seamless content operations:

Filerobot is a scalable, performance-oriented digital asset management platform. It has integrated image and video optimizers that store, organize, optimize, and deliver all your media assets lightning-fast around the world, to all device types.

Filerobot has a multi-tenant, scalable, and flexible file system, with an intuitive interface that simplifies complex workflows and integrations within your content operations. It uses AI-powered uploads with automatic workflows to enrich media assets for better categorization and retrieval.

Our overall mission?

To give meaning to your brand assets.

With Filerobot DAM, you’ll be able to:

1. Upload, manage, and enrich all of your digital assets from a single source of truth.

2. Collaborate with internal and external teams within our one cloud collaboration platform.

3. Optimize your images to boost SEO rankings, create beautiful digital experiences, and push device-friendly content.

4. Publish and accelerate the impact of your images thanks to real-time insights on the usage and performance of your media assets.

There’s no development needed to start reaping the benefits of Filerobot. Simply set up your account and start enjoying fast and responsive images now.

", + "dynamic_links": [], + "feature_types": [], + "icon": { + "_version": 1, + "is_dir": false, + "uid": "blta4e22048c78a4aa8", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-05-09T05:27:27.778Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "14374", + "filename": "Scaleflex_Filerobot.png", + "parent_uid": "blt2eb26851df9c0e2e", + "tags": [], + "title": "Scaleflex_Filerobot.png", + "updated_at": "2024-05-09T05:27:27.778Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blta4e22048c78a4aa8/663c5ebfa4f240e5875f3dfc/Scaleflex_Filerobot.png" + }, + "installation_url": "/#!/apps/65e997d02adeba0012c6e00f/install", + "links": { + "source_code": "", + "documentation": "https://docs.scaleflex.com/filerobot-documentation/headless-dam-and-api/plugins-and-connectors/plugins/contentstack", + "end_user_license_agreement": "https://legal.scaleflex.com/privacy/global-privacy-policy", + "others": [ + { + "title": "Support & Feedback", + "href": "hiep.le@scaleflex.com" + } + ] + }, + "screenshots": [ + { + "_version": 1, + "is_dir": false, + "uid": "blt652e924ceb8551f9", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-05-09T05:34:14.893Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "65506", + "filename": "json-rte-4.png", + "parent_uid": "blt60b81c8c84a94a5f", + "tags": [], + "title": "json-rte-4.png", + "updated_at": "2024-05-09T05:34:14.893Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt652e924ceb8551f9/663c605685e08b68b4718c7a/json-rte-4.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt20a45772230850d6", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-05-09T05:34:15.045Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "168564", + "filename": "config-screen-1.png", + "parent_uid": "blt60b81c8c84a94a5f", + "tags": [], + "title": "config-screen-1.png", + "updated_at": "2024-05-09T05:34:15.045Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt20a45772230850d6/663c60573af9ac0cd499b85b/config-screen-1.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt61bcba33de8f290f", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-05-09T05:34:15.142Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "68051", + "filename": "customfield-2.png", + "parent_uid": "blt60b81c8c84a94a5f", + "tags": [], + "title": "customfield-2.png", + "updated_at": "2024-05-09T05:34:15.142Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt61bcba33de8f290f/663c6057ece60c9134b95ce0/customfield-2.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt8190f96123ca9a48", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-05-09T05:34:15.727Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "808508", + "filename": "selector-page-3.png", + "parent_uid": "blt60b81c8c84a94a5f", + "tags": [], + "title": "selector-page-3.png", + "updated_at": "2024-05-09T05:34:15.727Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt8190f96123ca9a48/663c605793aa0d4b8c45683a/selector-page-3.png" + } + ], + "seo": { + "canonical_url": "", + "description": "", + "image": null, + "robots": "", + "title": "" + }, + "static_links": [ + { + "type": "Documentation", + "url": "https://docs.scaleflex.com/filerobot-documentation", + "_metadata": { + "uid": "cs9dc661efd6bcd427" + } + } + ], + "summary": "Filerobot allows you to store, enrich, normalize, resize, optimize, & distribute your media files rocket fast worldwide!", + "tags": [], + "title": "Filerobot by Scaleflex", + "updated_at": "2025-01-24T06:24:48.781Z", + "updated_by": "blt05ac693470ad5ff7", + "url": "/marketplace/filerobot-by-scaleflex", + "use_cases": "

With Filerobot DAM you’ll be able to:

1. Upload, manage, and enrich all of your digital assets from a single source of truth.

2. Collaborate with internal and external teams within our one cloud collaboration platform.

3. Optimize your images to boost SEO rankings, create beautiful digital experiences, and push device-friendly content.

4. Publish and accelerate the impact of your images thanks to real-time insights on the usage and performance of your media assets.

", + "publish_details": { + "time": "2025-01-28T10:56:57.075Z", + "user": "blt05ac693470ad5ff7", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + } + }, + { + "uid": "blt34a14a6e22c82feb", + "_version": 4, + "locale": "en-us", + "_in_progress": false, + "app_type": [ + { + "uid": "blte9d290b2e9e0931e", + "_content_type_uid": "app_types" + } + ], + "app_uid": "6311ab2b92549700190fe29a", + "built_by": [ + { + "uid": "bltec929d731b1f9d85", + "_content_type_uid": "organizations" + } + ], + "category": [ + { + "uid": "blt6abfa301df06bf93", + "_content_type_uid": "categories" + } + ], + "coming_soon": false, + "created_at": "2022-09-02T06:58:07.096Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "description": "

Contentstack Marketplace offers a variety of ways to integrate third-party applications, such as Frontify, into your headless CMS. You can easily manage and share digital assets across multiple platforms.

Using the Custom Field and JSON RTE plugin, you can integrate Frontify with Contentstack. You can create an entry in Contentstack and, with the integration, view all the digital assets in Contentstack.

", + "dynamic_links": [], + "feature_types": [ + { + "feature_type": [ + { + "uid": "blt6b35fa46f253a6bd", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "cs7af6aebd48894a93" + }, + "description": "Custom Field allows you to select multiple images, videos, logos, and documents to add them to your entry from your Frontify account." + }, + { + "feature_type": [ + { + "uid": "bltf9b70a5fd3c08c36", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "cs770641304ceb4a2c" + }, + "description": "You can add assets from the Frontify app to your JSON Rich Text Editor field using the Frontify JSON RTE Plugin." + } + ], + "icon": { + "_version": 1, + "is_dir": false, + "uid": "blt736048058b05d53a", + "ACL": {}, + "content_type": "image/svg+xml", + "created_at": "2022-09-02T11:32:41.976Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "3182", + "filename": "frontify-icon.svg", + "parent_uid": "blt2eb26851df9c0e2e", + "tags": [], + "title": "frontify-icon.svg", + "updated_at": "2022-09-02T11:32:41.976Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt736048058b05d53a/6311e9d9ebabda6520edad38/frontify-icon.svg" + }, + "installation_url": "/#!/apps/6311ab2b92549700190fe29a/install", + "links": { + "source_code": "", + "documentation": "", + "end_user_license_agreement": "", + "others": [] + }, + "screenshots": [ + { + "_version": 3, + "is_dir": false, + "uid": "blt1b9cdb2da864eca7", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:06.796Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "description": "", + "file_size": "40411", + "filename": "config_screen.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "config_screen.png", + "updated_at": "2022-09-09T09:41:53.388Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt1b9cdb2da864eca7/631b0a6153c6564a15946c06/config_screen.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt295f242046e3a77e", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:08.161Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "38255", + "filename": "customField_appOptions.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "customField_appOptions.png", + "updated_at": "2022-09-02T11:35:08.161Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt295f242046e3a77e/6311ea6ce6bd866fcfd99c15/customField_appOptions.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt22016a475135edfc", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:24.081Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "48796", + "filename": "customField_contentType.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "customField_contentType.png", + "updated_at": "2022-09-02T11:35:24.081Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt22016a475135edfc/6311ea7c6304777e0f86d8fa/customField_contentType.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt45be00b9ef6619f5", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:18.310Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "26512", + "filename": "customField_noData_entry.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "customField_noData_entry.png", + "updated_at": "2022-09-02T11:35:18.310Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt45be00b9ef6619f5/6311ea761004b759387c7376/customField_noData_entry.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt5f3939ea525cd94b", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:53.957Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "367075", + "filename": "selector_page.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "selector_page.png", + "updated_at": "2022-09-02T11:35:53.957Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt5f3939ea525cd94b/6311ea9980f5d16e5c0da367/selector_page.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt2c7e3042f2394058", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:53.716Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "350610", + "filename": "selectorPage_selectAssets.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "selectorPage_selectAssets.png", + "updated_at": "2022-09-02T11:35:53.716Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt2c7e3042f2394058/6311ea99f948c06df05c2caf/selectorPage_selectAssets.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt239f09512de2930f", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:30.319Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "119946", + "filename": "customField_entry.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "customField_entry.png", + "updated_at": "2022-09-02T11:35:30.319Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt239f09512de2930f/6311ea82fc0b1963dcef285a/customField_entry.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt5665105a7d6053f5", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:40.654Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "301475", + "filename": "customField_assetHover.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "customField_assetHover.png", + "updated_at": "2022-09-02T11:35:40.654Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt5665105a7d6053f5/6311ea8cde82716cc171c83e/customField_assetHover.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt6cab308f19f4b548", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:28.330Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "65667", + "filename": "rte_contentType.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "rte_contentType.png", + "updated_at": "2022-09-02T11:35:28.330Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt6cab308f19f4b548/6311ea80b21f130163e54441/rte_contentType.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt43631bb8c1505ae9", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:26.095Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "38223", + "filename": "rte_plugin_options.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "rte_plugin_options.png", + "updated_at": "2022-09-02T11:35:26.095Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt43631bb8c1505ae9/6311ea7e31bdfe6df1c20a37/rte_plugin_options.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt3cf5039ad42d2ae4", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:26.007Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "35223", + "filename": "rte_icon_button.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "rte_icon_button.png", + "updated_at": "2022-09-02T11:35:26.007Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt3cf5039ad42d2ae4/6311ea7ede82716cc171c83a/rte_icon_button.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blte2a4d111c21187f1", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:30.246Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "112368", + "filename": "rte_entry.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "rte_entry.png", + "updated_at": "2022-09-02T11:35:30.246Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blte2a4d111c21187f1/6311ea82e6bd866fcfd99c19/rte_entry.png" + } + ], + "seo": { + "canonical_url": "", + "description": "", + "image": null, + "robots": "", + "title": "" + }, + "static_links": [ + { + "type": "End-User License Agreement", + "url": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/", + "_metadata": { + "uid": "csbfcfd116d3094522" + } + }, + { + "type": "Documentation", + "url": "https://www.contentstack.com/docs/developers/marketplace-apps/frontify/", + "_metadata": { + "uid": "csd0a7675e2345489a" + } + } + ], + "summary": "Fetch digital assets (images/documents/video/music etc.) from your Frontify account into a Contentstack entry.", + "tags": [], + "title": "Frontify", + "updated_at": "2025-01-24T11:32:55.556Z", + "updated_by": "blt05ac693470ad5ff7", + "url": "/marketplace/frontify", + "use_cases": "

Manage Frontify digital media with ease: The Frontify app lets you manage images, videos, icons, and documents within your entries. With Frontify, you can easily link all the digital assets without leaving your headless CMS.

Better marketing campaigns with ease-to-access assets: You can create content in Contentstack and use the Frontify Custom Field or JSON RTE Field to insert digital assets in your content. With this, cross-functional teams can work on large-scale campaigns with ease.

Easy distribution of digital assets: The Frontify app allows geographically dispersed teams to easily store, share and fetch digital media assets.

", + "ACL": {}, + "publish_details": { + "time": "2025-01-28T10:53:49.663Z", + "user": "blt05ac693470ad5ff7", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + } + }, + { + "uid": "blt5efc6f55432a0878", + "_version": 10, + "locale": "en-us", + "ACL": {}, + "_in_progress": false, + "app_type": [ + { + "uid": "blte9d290b2e9e0931e", + "_content_type_uid": "app_types" + } + ], + "app_uid": "621640ff4671880018efec74", + "built_by": [ + { + "uid": "bltec929d731b1f9d85", + "_content_type_uid": "organizations" + } + ], + "category": [ + { + "uid": "blt6abfa301df06bf93", + "_content_type_uid": "categories" + } + ], + "coming_soon": false, + "created_at": "2022-03-29T11:13:09.115Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "

The Image Preset Builder app is a collection of formatting tools that help transform and optimize assets in the stack. You can build customized presets for any image file to tailor your assets as per your business requirements.

Image Preset Builder allows you to use varied preset versions of assets across your entries. With the help of this app, you can add image presets to fields such as Custom Field extensions or the JSON Rich Text Editor.

Developer Documentation:

To render the image presets built from the Image Preset Builder app in your project using the App Utils functions, please refer to the Render Images using Image Preset Builder section of the installation guide.

", + "dynamic_links": [], + "feature_types": [ + { + "feature_type": [ + { + "uid": "blt7cf992884f5eca3d", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "csa7d3f06c094c7174" + }, + "description": "Create presets for your image files using the Image Preset Builder extension app." + }, + { + "feature_type": [ + { + "uid": "bltf9b70a5fd3c08c36", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "csdf8c11290f11ee6b" + }, + "description": "Add customized presets to your JSON Rich Text Editor fields using the Preset Builder JSON RTE Plugin" + }, + { + "feature_type": [ + { + "uid": "blt6b35fa46f253a6bd", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "cs33da0ec99b1b5425" + }, + "description": "Add optimized image presets to Custom fields that accept assets as input." + } + ], + "icon": { + "_version": 1, + "is_dir": false, + "uid": "bltfe85fe6163c6371e", + "ACL": {}, + "content_type": "image/svg+xml", + "created_at": "2022-03-29T11:09:04.361Z", + "created_by": "blt89b5b90cb9e7c645", + "file_size": "3155", + "filename": "preset.svg", + "parent_uid": "blt2eb26851df9c0e2e", + "tags": [], + "title": "preset.svg", + "updated_at": "2022-03-29T11:09:04.361Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltfe85fe6163c6371e/6242e8d081b559640a7f7475/preset.svg" + }, + "installation_url": "#!/apps/621640ff4671880018efec74/install", + "links": { + "source_code": "", + "documentation": "", + "others": [], + "end_user_license_agreement": "" + }, + "screenshots": [ + { + "_version": 1, + "is_dir": false, + "uid": "bltfd4c1b10fbadf2c8", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:03.273Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "", + "file_size": "175853", + "filename": "new_preset.png", + "parent_uid": "bltc827a00118a50f18", + "tags": [], + "title": "new_preset.png", + "updated_at": "2022-03-29T11:09:03.273Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltfd4c1b10fbadf2c8/6242e8cfed063b096d929843/new_preset.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt9becbd9461e8f109", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:02.272Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "", + "file_size": "435362", + "filename": "presets.png", + "parent_uid": "bltc827a00118a50f18", + "tags": [], + "title": "presets.png", + "updated_at": "2022-03-29T11:09:02.272Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt9becbd9461e8f109/6242e8cea7f9130fc619972c/presets.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltf66a57fbcf9adbb5", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:03.498Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "", + "file_size": "502254", + "filename": "formatting_options.png", + "parent_uid": "bltc827a00118a50f18", + "tags": [], + "title": "formatting_options.png", + "updated_at": "2022-03-29T11:09:03.498Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltf66a57fbcf9adbb5/6242e8cf077d7c10fb7aba67/formatting_options.png" + } + ], + "seo": { + "canonical_url": "", + "description": "", + "image": null, + "robots": "", + "title": "" + }, + "static_links": [ + { + "type": "End-User License Agreement", + "url": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/", + "_metadata": { + "uid": "cs6277649029047c65" + } + }, + { + "type": "Documentation", + "url": "https://www.contentstack.com/docs/developers/marketplace-apps/image-preset-builder/", + "_metadata": { + "uid": "cs01d17b2955b24d9d" + } + } + ], + "summary": "Allows you to transform and enhance image files by creating presets to suit your business needs.", + "tags": [], + "title": "Image Preset Builder", + "updated_at": "2025-01-24T11:20:29.187Z", + "updated_by": "blt05ac693470ad5ff7", + "url": "/marketplace/image-preset-builder", + "use_cases": "

Image optimization: Easily edit images and presets to increase productivity. Businesses can also use this to quickly customize and brand their products.

Media functionality: You can use the Image Preset Builder app in conjunction with the API functionality to apply campaign branding to images without having to do any frontend development.

Consistent solution for your work: You can maintain consistency across all your image files by using presets, thereby defining your brand image.

", + "publish_details": { + "time": "2025-01-28T10:55:14.129Z", + "user": "blt05ac693470ad5ff7", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + } + }, + { + "uid": "blt4bc1c01faaa9515b", + "_version": 4, + "locale": "en-us", + "ACL": {}, + "_in_progress": false, + "app_type": [ + { + "uid": "blte9d290b2e9e0931e", + "_content_type_uid": "app_types" + } + ], + "app_uid": "6762b269e4edd60012729b3f", + "built_by": [ + { + "uid": "blt5dfea44cb76ed4ca", + "_content_type_uid": "organizations" + } + ], + "category": [ + { + "uid": "blt6abfa301df06bf93", + "_content_type_uid": "categories" + } + ], + "coming_soon": false, + "created_at": "2025-01-29T13:46:00.929Z", + "created_by": "blt78cea3a89ceb6137", + "description": "

Pull assets like images, videos, and product sheets straight from Kontainer.

The app allows download templates, which reformat images as they are fetched, and naming templates that can automize SEO optimization. Find out more here: https://helpdesk.kontainer.com/article/a-guide-to-download-templates/

", + "dynamic_links": [ + { + "title": "Support", + "href": "mailto:mail@kontainer.com" + } + ], + "feature_types": [ + { + "feature_type": [ + { + "uid": "blt6b35fa46f253a6bd", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "cs0796754e1f71a5bb" + }, + "description": "Custom Field allows you to select multiple assets from your Digizuite account and add them to your entry." + } + ], + "icon": { + "uid": "bltd8d9475a7210809e", + "_version": 1, + "title": "Kontainer_logo.png", + "parent_uid": "blt2eb26851df9c0e2e", + "created_by": "blt78cea3a89ceb6137", + "updated_by": "blt78cea3a89ceb6137", + "created_at": "2025-01-29T13:39:48.911Z", + "updated_at": "2025-01-29T13:39:48.911Z", + "content_type": "image/png", + "file_size": "9031", + "filename": "Kontainer_logo.png", + "ACL": {}, + "is_dir": false, + "tags": [], + "publish_details": { + "time": "2025-01-30T07:20:45.856Z", + "user": "blt78cea3a89ceb6137", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltd8d9475a7210809e/679a2fa4137f136ac25f8570/Kontainer_logo.png" + }, + "installation_url": "#!/apps/6762b269e4edd60012729b3f/install", + "links": { + "source_code": "", + "documentation": "https://helpdesk.kontainer.com", + "end_user_license_agreement": "https://kontainer.com/terms-and-conditions", + "others": [] + }, + "screenshots": [ + { + "uid": "blt98932a04b31784e7", + "_version": 1, + "title": "config-1.png", + "parent_uid": "blt18080c44b39acda5", + "created_by": "blt78cea3a89ceb6137", + "updated_by": "blt78cea3a89ceb6137", + "created_at": "2025-01-29T13:44:44.442Z", + "updated_at": "2025-01-29T13:44:44.442Z", + "content_type": "image/png", + "file_size": "285152", + "filename": "config-1.png", + "ACL": {}, + "is_dir": false, + "tags": [], + "publish_details": { + "time": "2025-01-30T07:20:45.871Z", + "user": "blt78cea3a89ceb6137", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt98932a04b31784e7/679a30cca44add02754fe973/config-1.png" + }, + { + "uid": "bltdfe09822f7b23800", + "_version": 1, + "title": "contenttype-2.png", + "parent_uid": "blt18080c44b39acda5", + "created_by": "blt78cea3a89ceb6137", + "updated_by": "blt78cea3a89ceb6137", + "created_at": "2025-01-29T13:44:44.426Z", + "updated_at": "2025-01-29T13:44:44.426Z", + "content_type": "image/png", + "file_size": "150034", + "filename": "contenttype-2.png", + "ACL": {}, + "is_dir": false, + "tags": [], + "publish_details": { + "time": "2025-01-30T07:20:45.840Z", + "user": "blt78cea3a89ceb6137", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltdfe09822f7b23800/679a30ccc3e1cba508da025f/contenttype-2.png" + }, + { + "uid": "blt891a39db9979903a", + "_version": 1, + "title": "custom-field-3.png", + "parent_uid": "blt18080c44b39acda5", + "created_by": "blt78cea3a89ceb6137", + "updated_by": "blt78cea3a89ceb6137", + "created_at": "2025-01-29T13:44:45.076Z", + "updated_at": "2025-01-29T13:44:45.076Z", + "content_type": "image/png", + "file_size": "1375271", + "filename": "custom-field-3.png", + "ACL": {}, + "is_dir": false, + "tags": [], + "publish_details": { + "time": "2025-01-30T07:20:45.885Z", + "user": "blt78cea3a89ceb6137", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt891a39db9979903a/679a30cdae49134467f88c26/custom-field-3.png" + } + ], + "seo": { + "title": "", + "description": "", + "image": null, + "robots": "", + "canonical_url": "" + }, + "static_links": [ + { + "type": "End-User License Agreement", + "url": "https://kontainer.com/terms-and-conditions", + "_metadata": { + "uid": "csbc44d7d224052d67" + } + }, + { + "type": "Documentation", + "url": "https://helpdesk.kontainer.com", + "_metadata": { + "uid": "cs283de2028059c0e1" + } + } + ], + "summary": "Pull assets like images, videos, and product sheets straight from Kontainer.", + "tags": [], + "title": "Kontainer", + "updated_at": "2025-02-07T19:39:19.147Z", + "updated_by": "blt78cea3a89ceb6137", + "url": "/marketplace/kontainer", + "use_cases": "

Connects assets from Kontainer Dam to ContentStack custom fields. Can be used all places there assets is needed

", + "publish_details": { + "time": "2025-02-07T19:39:26.552Z", + "user": "blt78cea3a89ceb6137", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + } + }, + { + "uid": "bltf3ea0046122ec160", + "_version": 8, + "locale": "en-us", + "ACL": {}, + "_in_progress": false, + "app_type": [ + { + "uid": "blte9d290b2e9e0931e", + "_content_type_uid": "app_types" + } + ], + "app_uid": "6422122285be5a001944ad6d", + "built_by": [ + { + "uid": "blt31680c4e3b524fd2", + "_content_type_uid": "organizations" + } + ], + "category": [ + { + "uid": "blt6abfa301df06bf93", + "_content_type_uid": "categories" + } + ], + "coming_soon": false, + "created_at": "2023-05-05T07:59:03.313Z", + "created_by": "bltf389fd468f32cd6e", + "description": "

A minimal integration of the Ocavu 3d platform. Entries in Content Stack can be connected to an asset in Ocavu by inputting various fields. If the app is configured correctly and a valid asset key is entered into the Ocavu Asset Key field the model will be visible from the Entry edit view. This helps users stay within the Content Stack ecosystem if all they want to do is browse or preview their 3d models.

", + "dynamic_links": [ + { + "title": "Privacy policy", + "href": "https://www.ocavu.com/privacy-policy/" + }, + { + "title": "Support", + "href": "mailto:support@ocavu.com" + } + ], + "feature_types": [ + { + "feature_type": [ + { + "uid": "blt6b35fa46f253a6bd", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "csf814c1f317212546" + }, + "description": "Custom field enables the viewing of Ocavu-hosted assets. embeds a basic 3D viewer for a 3D model using the models." + } + ], + "icon": { + "_version": 1, + "is_dir": false, + "uid": "bltd6915163f1454188", + "ACL": {}, + "content_type": "image/svg+xml", + "created_at": "2023-05-05T09:24:59.115Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "24491", + "filename": "Ocavu.svg", + "parent_uid": "blt2eb26851df9c0e2e", + "tags": [], + "title": "Ocavu.svg", + "updated_at": "2023-05-05T09:24:59.115Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltd6915163f1454188/6454cb6b2215a3bedde70c78/Ocavu.svg" + }, + "installation_url": "/#!/apps/6422122285be5a001944ad6d/install", + "links": { + "source_code": "", + "documentation": "", + "end_user_license_agreement": "", + "others": [] + }, + "screenshots": [ + { + "_version": 1, + "is_dir": false, + "uid": "bltb2fa3286f0ef991a", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-05-05T09:17:05.871Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "503999", + "filename": "ConfigScreen-1.png", + "parent_uid": "bltb6c089404f41984f", + "tags": [], + "title": "ConfigScreen-1.png", + "updated_at": "2023-05-05T09:17:05.871Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltb2fa3286f0ef991a/6454c99197a1175f49721c63/ConfigScreen-1.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt1b3fbca5df1f4d86", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-05-05T09:17:06.237Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "217453", + "filename": "CustomField-2.png", + "parent_uid": "bltb6c089404f41984f", + "tags": [], + "title": "CustomField-2.png", + "updated_at": "2023-05-05T09:17:06.237Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt1b3fbca5df1f4d86/6454c99291026c2e20d77bb3/CustomField-2.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt9934f583008e9bb6", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-05-05T09:17:05.680Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "267212", + "filename": "AssetSelect-3.png", + "parent_uid": "bltb6c089404f41984f", + "tags": [], + "title": "AssetSelect-3.png", + "updated_at": "2023-05-05T09:17:05.680Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt9934f583008e9bb6/6454c991e0636f608d89159a/AssetSelect-3.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt9b5c5739cdb6453e", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-05-05T09:17:05.848Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "544019", + "filename": "AssetViewer-4.png", + "parent_uid": "bltb6c089404f41984f", + "tags": [], + "title": "AssetViewer-4.png", + "updated_at": "2023-05-05T09:17:05.848Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt9b5c5739cdb6453e/6454c99129a8592bf4189a9a/AssetViewer-4.png" + } + ], + "seo": { + "canonical_url": "", + "description": "", + "image": null, + "robots": "", + "title": "" + }, + "static_links": [ + { + "type": "Documentation", + "url": "https://api.seekxr.com/docs/cs-ocavu-viewer/", + "_metadata": { + "uid": "cse3e92eac0906a9a2" + } + }, + { + "type": "End-User License Agreement", + "url": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/", + "_metadata": { + "uid": "cs6b5ada60b8f6d4d6" + } + } + ], + "summary": "Allows viewing assets hosted in Ocavu. Embeds a simple 3d viewer of a 3d model using the Ocavu asset key of that model.", + "tags": [], + "title": "Ocavu Asset Viewer", + "updated_at": "2025-01-31T05:54:41.867Z", + "updated_by": "blt05ac693470ad5ff7", + "url": "/marketplace/ocavu", + "use_cases": "

The app provides a way to view 3d models hosted in Ocavu without leaving Content Stack.

", + "publish_details": { + "time": "2025-01-31T05:54:48.273Z", + "user": "blt05ac693470ad5ff7", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + } + } + ], + "count": 11 +} \ No newline at end of file diff --git a/api/src/constants/index.ts b/api/src/constants/index.ts index 11b63147d..56c9de7e1 100644 --- a/api/src/constants/index.ts +++ b/api/src/constants/index.ts @@ -1,4 +1,11 @@ export const CS_REGIONS = ["NA", "EU", "AZURE_NA", "AZURE_EU", "GCP_NA"]; +export const DEVURLS: any = { + 'NA': 'developerhub-api.contentstack.com', + 'EU': 'eu-developerhub-api.contentstack.com', + 'AZURE_NA': 'azure-na-developerhub-api.contentstack.com', + 'AZURE_EU': 'azure-eu-developerhub-api.contentstack.com', + 'GCP_NA': 'gcp-na-developerhub-api.contentstack.com', +} export const CMS = { CONTENTFUL: "contentful", SITECORE_V8: "sitecore v8", @@ -176,6 +183,11 @@ export const LOCALE_MAPPER: any = { } export const CHUNK_SIZE = 1048576; +export const KEYTOREMOVE = [ + "update", "fetch", "delete", "oauth", "hosting", "install", "reinstall", + "upgrade", "getRequests", "authorize", "authorization", "listInstallations" +] + export const MIGRATION_DATA_CONFIG = { DATA: "./cmsMigrationData", @@ -196,10 +208,12 @@ export const MIGRATION_DATA_CONFIG = { ENVIRONMENTS_FILE_NAME: "environments.json", CONTENT_TYPES_DIR_NAME: "content_types", + EXTENSIONS_MAPPER_DIR_NAME: "extension-mapper.json", CONTENT_TYPES_FILE_NAME: "contenttype.json", CONTENT_TYPES_MASTER_FILE: "contenttypes.json", CONTENT_TYPES_SCHEMA_FILE: "schema.json", - + MARKETPLACE_APPS_DIR_NAME: "marketplace_apps", + MARKETPLACE_APPS_FILE_NAME: "marketplace_apps.json", REFERENCES_DIR_NAME: "reference", REFERENCES_FILE_NAME: "reference.json", @@ -217,9 +231,9 @@ export const MIGRATION_DATA_CONFIG = { ENTRIES_DIR_NAME: "entries", ENTRIES_MASTER_FILE: "index.json", - AUTHORS_DIR_NAME : "authors", - AUTHORS_FILE_NAME : "en-us.json", - AUTHORS_MASTER_FILE : "authors.json", + AUTHORS_DIR_NAME: "authors", + AUTHORS_FILE_NAME: "en-us.json", + AUTHORS_MASTER_FILE: "authors.json", CATEGORIES_DIR_NAME: "categories", CATEGORIES_FILE_NAME: "en-us.json", diff --git a/api/src/services/contentful.service.ts b/api/src/services/contentful.service.ts index f73aaac07..335e9ed1b 100644 --- a/api/src/services/contentful.service.ts +++ b/api/src/services/contentful.service.ts @@ -6,15 +6,16 @@ import _ from "lodash"; import axios from "axios"; import jsonpath from "jsonpath"; import pLimit from 'p-limit'; +import { jsonToHtml, jsonToMarkdown } from '@contentstack/json-rte-serializer'; -import {CHUNK_SIZE, MIGRATION_DATA_CONFIG } from "../constants/index.js"; +import { CHUNK_SIZE, MIGRATION_DATA_CONFIG } from "../constants/index.js"; import { Locale } from "../models/types.js"; import jsonRTE from "./contentful/jsonRTE.js"; import { getAllLocales, getLogMessage } from "../utils/index.js"; import customLogger from "../utils/custom-logger.utils.js"; -const { +const { DATA, // DIR LOCALE_DIR_NAME, @@ -41,7 +42,7 @@ const { WEBHOOKS_FILE_NAME, RTE_REFERENCES_FILE_NAME, GLOBAL_FIELDS_FILE_NAME, - + } = MIGRATION_DATA_CONFIG; interface AssetMetaData { @@ -84,6 +85,45 @@ function makeChunks(assetData: any) { return chunks; } +const transformCloudinaryObject = (input: any) => { + const result: any = []; + for (const metaData of input ?? []) { + result?.push({ + public_id: metaData.public_id, + resource_type: metaData.resource_type, + type: metaData.type, + format: metaData.format, + version: metaData.version, + url: metaData.original_url, + secure_url: metaData.original_secure_url, + width: metaData.width, + height: metaData.height, + bytes: metaData.bytes, + duration: metaData.duration, + tags: metaData.tags, + metadata: metaData.metadata, + created_at: metaData.created_at, + access_mode: "public", + access_control: [], + created_by: { + type: "", + id: "" + }, + uploaded_by: { + type: "", + id: "" + }, + folder_id: "", + id: "", + folder: "", + cs_metadata: { + config_label: "config" + } + }); + } + return result; +} + /** * Reads a file from the given file path and returns its JSON content. * @param {string} filePath - The path to the file to read. @@ -92,7 +132,12 @@ function makeChunks(assetData: any) { * @throws {Error} - If there is an error reading the file. */ async function readFile(filePath: string, fileName: string) { - return JSON.parse(await fs.promises.readFile(path.join(filePath, fileName), "utf8")); + try { + const data = await fs.promises.readFile(path.join(filePath, fileName), "utf8"); + return JSON.parse(data); + } catch (err) { + return undefined; + } } /** @@ -134,37 +179,105 @@ async function writeFile(dirPath: string, filename: string, data: any) { console.error('Error writing ${dirPath}/${filename}::', err); } } +const damApp = (type: string, data: any) => { + switch (type) { + case 'zjcnWgBknf9zB7IM9HZjE': + return transformCloudinaryObject(data); + } +} const processField = ( lang_value: any, entryId: any, assetId: any, lang: any, - destination_stack_id:string + destination_stack_id: string, + fieldData: any ) => { + switch (fieldData?.contentstackFieldType) { + case 'multi_line_text': + case 'single_line_text': + case 'text': { + return lang_value; + } + case 'json': { + return processRTEOrNestedObject(lang_value, lang, destination_stack_id); + } + case 'dropdown': + case 'radio': { + const isPresent = fieldData?.advanced?.options?.find((option: any) => lang_value === option?.value); + return isPresent?.value ?? fieldData?.advanced?.default_value; + } + case 'file': { + const id = lang_value?.sys?.id; + if (lang_value.sys === "Asset" && id in assetId) return assetId?.[id]; + return []; + } + case 'reference': { + const id = lang_value?.sys?.id; + if (lang_value?.sys?.linkType === "Entry" && id in entryId) return [entryId?.[id]]; + return []; + } + case 'app': { + return damApp(fieldData?.otherCmsType, lang_value) + } + case 'boolean': { + return lang_value; + } + case 'number': { + if (typeof lang_value === 'string') { + return parseInt?.(lang_value) + } + return lang_value; + } + + case 'isodate': { + return lang_value; + } + + case 'checkbox': { + return lang_value; + } + + case 'html': { + const jsonValue = processRTEOrNestedObject(lang_value, lang, destination_stack_id); + return jsonToHtml( + jsonValue, + { + customElementTypes: { + "social-embed": (attrs, child, jsonBlock) => { + return `${child}`; + }, + }, + customTextWrapper: { + "color": (child, value) => { + return `${child}`; + }, + }, + } + ) ?? '

'; + } + + case 'markdown': { + const jsonValue = processRTEOrNestedObject(lang_value, lang, destination_stack_id); + return jsonToMarkdown(jsonValue); + } + + default: { + if (Array.isArray(lang_value)) { + return processArrayFields(lang_value, entryId, assetId); + } + console.info("🚀 ~ fieldData?.otherCmsType:", fieldData?.contentstackFieldType) + break; + } + } // If lang_value is not an object if (typeof lang_value !== "object") { return typeof lang_value === "number" ? lang_value : cleanBrackets(lang_value); } - // Check if it's a location (lat/lon) if (lang_value.lat) return lang_value; - - // Check if it contains sys field for Entry or Asset - if (lang_value.sys) { - const { linkType, id } = lang_value.sys; - - if (linkType === "Entry" && id in entryId) return [entryId?.[id]]; - if (linkType === "Asset" && id in assetId) return assetId?.[id]; - } - - // Handle arrays and nested objects - if (Array.isArray(lang_value)) { - return processArrayFields(lang_value, entryId, assetId); - } else { - return processRTEOrNestedObject(lang_value, lang, destination_stack_id); - } }; // Helper function to clean up brackets in non-numeric lang_value @@ -193,13 +306,12 @@ const processArrayFields = (array: any, entryId: any, assetId: any) => { .replace(/,{}/g, "") .replace(/,{},/g, "") .replace(/{}/g, ""); - - const result = JSON.parse(cleanedArray); + const result = typeof cleanedArray === 'string' && JSON.parse(cleanedArray); return result.length > 0 ? result : undefined; }; // Helper function to process Rich Text Editor (RTE) or nested object -const processRTEOrNestedObject = (lang_value: any, lang: any, destination_stack_id:string) => { +const processRTEOrNestedObject = (lang_value: any, lang: any, destination_stack_id: string) => { if (lang_value.data) { return jsonRTE(lang_value, lang.toLowerCase(), destination_stack_id); } else { @@ -260,8 +372,8 @@ const saveAsset = async ( failedJSON: any, assetData: any, metadata: AssetMetaData[], - projectId:string, - destination_stack_id:string, + projectId: string, + destination_stack_id: string, retryCount = 0 ): Promise => { try { @@ -269,8 +381,8 @@ const saveAsset = async ( const publishDetails: { environment: any; version: number; locale: any }[] = []; const assetsSave = path.join(DATA, destination_stack_id, ASSETS_DIR_NAME); - const environmentsId = await readFile(path.join(DATA, destination_stack_id,ENVIRONMENTS_DIR_NAME), ENVIRONMENTS_FILE_NAME); - const localeId = await readFile(path.join(DATA, destination_stack_id,LOCALE_DIR_NAME), LOCALE_CF_LANGUAGE); + const environmentsId = await readFile(path.join(DATA, destination_stack_id, ENVIRONMENTS_DIR_NAME), ENVIRONMENTS_FILE_NAME); + const localeId = await readFile(path.join(DATA, destination_stack_id, LOCALE_DIR_NAME), LOCALE_CF_LANGUAGE); if (assets.fields.file && assets.fields.title) { Object.values(environmentsId).forEach((env: any) => { @@ -322,10 +434,10 @@ const saveAsset = async ( Object.values(assets?.fields?.file)[0] as { contentType: string } ).contentType, file_size: `${( - Object.values(assets?.fields?.file)[0] as { - details: { size: string }; - } - )?.details.size + Object.values(assets?.fields?.file)[0] as { + details: { size: string }; + } + )?.details.size }`, tag: assets?.metadata?.tags, filename: fileName, @@ -356,15 +468,15 @@ const saveAsset = async ( name: assetTitle, url: fileUrl, file_size: `${( - Object.values(assets?.fields?.file)[0] as { - details: { size: string }; - } - ).details.size + Object.values(assets?.fields?.file)[0] as { + details: { size: string }; + } + ).details.size }`, reason_for_error: err?.message, }; } else { - return await saveAsset(assets, failedJSON, assetData,metadata, projectId, destination_stack_id, 1); + return await saveAsset(assets, failedJSON, assetData, metadata, projectId, destination_stack_id, 1); } } } @@ -374,33 +486,33 @@ const saveAsset = async ( } }; - /** - * Creates and processes assets from a given package file, saving them to the destination stack directory. - * - * @param {any} packagePath - The path to the package file containing asset data. - * @param {string} destination_stack_id - The ID of the destination stack where assets will be saved. - * @param {string} projectId - The ID of the current project for logging purposes. - * @returns {Promise} Resolves when all assets have been successfully created or errors have been logged. - * - * @description - * This function performs the following tasks: - * 1. Reads and parses the package file containing asset data. - * 2. Creates and processes each asset using the `saveAsset` function, handling failures in `failedJSON`. - * 3. Saves the processed asset data, metadata, and chunked references to the destination directory. - * 4. Generates and writes the following files: - * - Schema file with complete asset data. - * - Chunked files for asset references. - * - Metadata file containing additional information about the assets. - * - A file to track failed assets, if any. - * 5. Logs appropriate messages if no assets are found or if an error occurs during processing. - * - * @throws Will log errors encountered during file reading, writing, or asset processing. - */ -const createAssets = async (packagePath: any, destination_stack_id:string, projectId:string,) => { - const srcFunc = 'createAssets'; +/** +* Creates and processes assets from a given package file, saving them to the destination stack directory. +* +* @param {any} packagePath - The path to the package file containing asset data. +* @param {string} destination_stack_id - The ID of the destination stack where assets will be saved. +* @param {string} projectId - The ID of the current project for logging purposes. +* @returns {Promise} Resolves when all assets have been successfully created or errors have been logged. +* +* @description +* This function performs the following tasks: +* 1. Reads and parses the package file containing asset data. +* 2. Creates and processes each asset using the `saveAsset` function, handling failures in `failedJSON`. +* 3. Saves the processed asset data, metadata, and chunked references to the destination directory. +* 4. Generates and writes the following files: +* - Schema file with complete asset data. +* - Chunked files for asset references. +* - Metadata file containing additional information about the assets. +* - A file to track failed assets, if any. +* 5. Logs appropriate messages if no assets are found or if an error occurs during processing. +* +* @throws Will log errors encountered during file reading, writing, or asset processing. +*/ +const createAssets = async (packagePath: any, destination_stack_id: string, projectId: string,) => { + const srcFunc = 'createAssets'; try { - const assetsSave = path.join(DATA, destination_stack_id, ASSETS_DIR_NAME); - const data = await fs.promises.readFile(packagePath, "utf8"); + const assetsSave = path?.join?.(DATA, destination_stack_id, ASSETS_DIR_NAME); + const data = await fs?.promises?.readFile?.(packagePath, "utf8"); const failedJSON: any = {}; const assetData: any = {}; const metadata: AssetMetaData[] = []; @@ -418,7 +530,7 @@ const createAssets = async (packagePath: any, destination_stack_id:string, proje await writeOneFile(path.join(assetsSave, ASSETS_SCHEMA_FILE), assetData); // This code is intentionally commented out - + // const chunks: { [key: string]: any } = makeChunks(assetData); // const refs: any = {}; @@ -452,32 +564,32 @@ const createAssets = async (packagePath: any, destination_stack_id:string, proje } }; - /** - * Creates environment configurations from a given package file and saves them to the destination stack directory. - * - * @param {any} packagePath - The path to the package file containing environment data. - * @param {string} destination_stack_id - The ID of the destination stack where environments will be saved. - * @param {string} projectId - The ID of the current project for logging purposes. - * @returns {Promise} Resolves when the environments are successfully created or errors have been logged. - * - * @description - * This function performs the following tasks: - * 1. Reads and parses the package file to extract environment data (`editorInterfaces`). - * 2. Retrieves the master locale for the destination stack from the saved locale data. - * 3. Processes and creates unique environment configurations by: - * - Extracting titles and names from the parsed data. - * - Ensuring each environment has a unique name. - * - Associating each environment with the master locale. - * 4. Writes the consolidated environment configurations to a JSON file in the destination stack directory. - * 5. Logs a message if no environments are found in the package file. - * 6. Handles errors gracefully by logging them with relevant details. - * - * @throws Will log errors encountered during file reading, writing, or processing of environments. - */ -const createEnvironment = async (packagePath: any, destination_stack_id:string, projectId:string,) => { - const srcFunc = 'createEnvironment'; +/** +* Creates environment configurations from a given package file and saves them to the destination stack directory. +* +* @param {any} packagePath - The path to the package file containing environment data. +* @param {string} destination_stack_id - The ID of the destination stack where environments will be saved. +* @param {string} projectId - The ID of the current project for logging purposes. +* @returns {Promise} Resolves when the environments are successfully created or errors have been logged. +* +* @description +* This function performs the following tasks: +* 1. Reads and parses the package file to extract environment data (`editorInterfaces`). +* 2. Retrieves the master locale for the destination stack from the saved locale data. +* 3. Processes and creates unique environment configurations by: +* - Extracting titles and names from the parsed data. +* - Ensuring each environment has a unique name. +* - Associating each environment with the master locale. +* 4. Writes the consolidated environment configurations to a JSON file in the destination stack directory. +* 5. Logs a message if no environments are found in the package file. +* 6. Handles errors gracefully by logging them with relevant details. +* +* @throws Will log errors encountered during file reading, writing, or processing of environments. +*/ +const createEnvironment = async (packagePath: any, destination_stack_id: string, projectId: string,) => { + const srcFunc = 'createEnvironment'; try { - const localeSave = path.join(DATA, destination_stack_id,LOCALE_DIR_NAME); + const localeSave = path.join(DATA, destination_stack_id, LOCALE_DIR_NAME); const environmentSave = path.join(DATA, destination_stack_id, ENVIRONMENTS_DIR_NAME); const data = await fs.promises.readFile(packagePath, "utf8"); const environments = JSON.parse(data)?.editorInterfaces; @@ -552,21 +664,21 @@ const createEnvironment = async (packagePath: any, destination_stack_id:string, * * @throws Will log errors encountered during file reading, processing, or writing of entries. */ -const createEntry = async (packagePath: any, destination_stack_id:string, projectId:string) => { - const srcFunc = 'createEntry'; +const createEntry = async (packagePath: any, destination_stack_id: string, projectId: string, contentTypes: any): Promise => { + const srcFunc = 'createEntry'; try { const entriesSave = path.join(DATA, destination_stack_id, ENTRIES_DIR_NAME); const assetsSave = path.join(DATA, destination_stack_id, ASSETS_DIR_NAME); const environmentSave = path.join(DATA, destination_stack_id, ENVIRONMENTS_DIR_NAME); const data = await fs.promises.readFile(packagePath, "utf8"); const entries = JSON.parse(data)?.entries; - const content = JSON.parse(data)?.contentTypes + const content = JSON.parse(data)?.contentTypes; if (entries && entries.length > 0) { - const assetId = await readFile(assetsSave, ASSETS_SCHEMA_FILE) - const entryId = await readFile(path.join(DATA, destination_stack_id, REFERENCES_DIR_NAME), REFERENCES_FILE_NAME) - const environmentsId = await readFile(environmentSave, ENVIRONMENTS_FILE_NAME) - + const assetId = await readFile(assetsSave, ASSETS_SCHEMA_FILE) ?? []; + const entryId = await readFile(path.join(DATA, destination_stack_id, REFERENCES_DIR_NAME), REFERENCES_FILE_NAME); + console.info("🚀 ~ createEntry ~ entryId:", destination_stack_id) + const environmentsId = await readFile(environmentSave, ENVIRONMENTS_FILE_NAME); const displayField: { [key: string]: any } = {} content.map((item: any) => { displayField[item.name.toLowerCase().replace(/[^a-z0-9]+/g, "_")] = @@ -593,27 +705,24 @@ const createEntry = async (packagePath: any, destination_stack_id:string, projec entryData[name] ??= {}; Object.entries(fields).forEach(([key, value]) => { + const currentCT = contentTypes?.find((ct: any) => ct?.otherCmsUid === name); const locales: string[] = []; - Object.entries(value as object).forEach(([lang, langValue]) => { entryData[name][lang] ??= {}; entryData[name][lang][id] ??= {}; - locales.push(lang); - - const newId = `${key}`.replace(/[^a-zA-Z0-9]+/g, "_"); - + const fieldData = currentCT?.fieldMapping?.find((item: any) => key === item?.uid); + const newId = fieldData?.contentstackFieldUid ?? `${key}`.replace(/[^a-zA-Z0-9]+/g, "_"); entryData[name][lang][id][newId] = processField( langValue, entryId, assetId, lang, - destination_stack_id + destination_stack_id, + fieldData ); }); - const pathName = getDisplayName(name, displayField); - locales.forEach((locale) => { const publishDetails = Object.values(environmentsId) .filter((env: any) => env?.name === environment_id) @@ -660,7 +769,7 @@ const createEntry = async (packagePath: any, destination_stack_id:string, projec values as { [key: string]: any } )) { const chunks = await makeChunks(localeValues); - for (const [entryKey, entryValue] of Object.entries(localeValues)){ + for (const [entryKey, entryValue] of Object.entries(localeValues)) { const message = getLogMessage( srcFunc, `Entry title "${(entryValue as { title: string })?.title}"(${key}) in the ${localeKey} locale has been successfully transformed.`, @@ -691,6 +800,7 @@ const createEntry = async (packagePath: any, destination_stack_id:string, projec await customLogger(projectId, destination_stack_id, 'info', message); } } catch (err) { + console.info("🚀 ~ createEntry ~ err:", err) const message = getLogMessage( srcFunc, `Error encountered while creating entries.`, @@ -725,7 +835,7 @@ const createEntry = async (packagePath: any, destination_stack_id:string, projec * * @throws Will log errors encountered during file reading, processing, or writing of locale configurations. */ -const createLocale = async (packagePath: string, destination_stack_id:string, projectId:string) => { +const createLocale = async (packagePath: string, destination_stack_id: string, projectId: string) => { const srcFunc = 'createLocale'; const localeSave = path.join(DATA, destination_stack_id, LOCALE_DIR_NAME); const globalFieldSave = path.join(DATA, destination_stack_id, GLOBAL_FIELDS_DIR_NAME); @@ -740,7 +850,7 @@ const createLocale = async (packagePath: string, destination_stack_id:string, pr const locales = JSON.parse(data)?.locales; const [err, localeCodes] = await getAllLocales(); - if(err){ + if (err) { const message = getLogMessage( srcFunc, `Error encountered while fetching locales list.`, @@ -800,33 +910,33 @@ const createLocale = async (packagePath: string, destination_stack_id:string, pr } }; - /** - * Processes and transforms webhook configurations from a given package file and saves them to the destination stack directory. - * - * @param {string} packagePath - The path to the package file containing webhook data. - * @param {string} destination_stack_id - The ID of the destination stack where webhooks will be saved. - * @param {string} projectId - The ID of the current project for logging purposes. - * @returns {Promise} Resolves when all webhooks have been successfully processed and saved, or errors have been logged. - * - * @description - * This function performs the following tasks: - * 1. Reads and parses the package file to extract webhook data. - * 2. Iterates through the webhooks, transforming their configurations: - * - Processes `topics` for webhook events and constructs appropriate channel topics. - * - Handles data transformation based on the type of webhook event (`contentType`, `entries`, `assets`, `releases`). - * - Filters out ignored events and applies custom transformations to topics. - * 3. Builds webhook objects with necessary attributes like `urlPath`, `channels`, `destinations`, etc. - * 4. Logs success messages for each webhook transformation. - * 5. Saves the processed webhooks to a JSON file in the destination stack directory. - * 6. Logs a message confirming the successful transformation of webhooks or logs errors encountered during processing. - * - * @throws Will log errors encountered during file reading, processing, or writing of webhook configurations. - * - * @example - * // Example usage - * await createWebhooks('/path/to/package.json', 'stack123', 'project456'); - */ -const createWebhooks = async (packagePath: string, destination_stack_id:string, projectId:string,) => { +/** +* Processes and transforms webhook configurations from a given package file and saves them to the destination stack directory. +* +* @param {string} packagePath - The path to the package file containing webhook data. +* @param {string} destination_stack_id - The ID of the destination stack where webhooks will be saved. +* @param {string} projectId - The ID of the current project for logging purposes. +* @returns {Promise} Resolves when all webhooks have been successfully processed and saved, or errors have been logged. +* +* @description +* This function performs the following tasks: +* 1. Reads and parses the package file to extract webhook data. +* 2. Iterates through the webhooks, transforming their configurations: +* - Processes `topics` for webhook events and constructs appropriate channel topics. +* - Handles data transformation based on the type of webhook event (`contentType`, `entries`, `assets`, `releases`). +* - Filters out ignored events and applies custom transformations to topics. +* 3. Builds webhook objects with necessary attributes like `urlPath`, `channels`, `destinations`, etc. +* 4. Logs success messages for each webhook transformation. +* 5. Saves the processed webhooks to a JSON file in the destination stack directory. +* 6. Logs a message confirming the successful transformation of webhooks or logs errors encountered during processing. +* +* @throws Will log errors encountered during file reading, processing, or writing of webhook configurations. +* +* @example +* // Example usage +* await createWebhooks('/path/to/package.json', 'stack123', 'project456'); +*/ +const createWebhooks = async (packagePath: string, destination_stack_id: string, projectId: string,) => { const srcFunc = 'createWebhooks'; const webhooksSave = path.join(DATA, destination_stack_id, WEBHOOKS_DIR_NAME); @@ -1035,31 +1145,31 @@ const createWebhooks = async (packagePath: string, destination_stack_id:string, } }; - /** - * Processes and generates reference and rich-text editor (RTE) reference mappings from entries in a given package file. - * - * @param {string} packagePath - The path to the package file containing entry data. - * @param {string} destination_stack_id - The ID of the destination stack where references will be saved. - * @param {string} projectId - The ID of the current project for logging purposes. - * @returns {Promise} Resolves when reference and RTE reference files are successfully generated and saved. - * - * @description - * This function performs the following tasks: - * 1. Reads and parses the package file to extract entries. - * 2. Iterates through the entries to: - * - Construct a mapping of `references`, associating entry IDs with their content type and UID. - * - Construct a mapping of `rteReferences`, associating language-specific references for each entry ID and content type. - * 3. Saves the generated mappings to separate JSON files: - * - `references.json` for general references. - * - `rte_references.json` for rich-text editor-specific references. - * 4. Logs an error message if any issue occurs during file processing or saving. - * - * @throws Will log errors encountered during file reading, data transformation, or file writing. - */ -const createRefrence = async (packagePath: string, destination_stack_id:string, projectId:string,) => { +/** +* Processes and generates reference and rich-text editor (RTE) reference mappings from entries in a given package file. +* +* @param {string} packagePath - The path to the package file containing entry data. +* @param {string} destination_stack_id - The ID of the destination stack where references will be saved. +* @param {string} projectId - The ID of the current project for logging purposes. +* @returns {Promise} Resolves when reference and RTE reference files are successfully generated and saved. +* +* @description +* This function performs the following tasks: +* 1. Reads and parses the package file to extract entries. +* 2. Iterates through the entries to: +* - Construct a mapping of `references`, associating entry IDs with their content type and UID. +* - Construct a mapping of `rteReferences`, associating language-specific references for each entry ID and content type. +* 3. Saves the generated mappings to separate JSON files: +* - `references.json` for general references. +* - `rte_references.json` for rich-text editor-specific references. +* 4. Logs an error message if any issue occurs during file processing or saving. +* +* @throws Will log errors encountered during file reading, data transformation, or file writing. +*/ +const createRefrence = async (packagePath: string, destination_stack_id: string, projectId: string,) => { const srcFunc = 'createRefrence'; - const refrencesSave = path.join(DATA, destination_stack_id,REFERENCES_DIR_NAME); - const rteRefrencesSave = path.join(DATA, destination_stack_id,RTE_REFERENCES_DIR_NAME); + const refrencesSave = path.join(DATA, destination_stack_id, REFERENCES_DIR_NAME); + const rteRefrencesSave = path.join(DATA, destination_stack_id, RTE_REFERENCES_DIR_NAME); try { const data = await fs.promises.readFile(packagePath, "utf8"); const entries = JSON.parse(data)?.entries; diff --git a/api/src/services/contentful/jsonRTE.ts b/api/src/services/contentful/jsonRTE.ts index c04f522fb..ca1821c46 100755 --- a/api/src/services/contentful/jsonRTE.ts +++ b/api/src/services/contentful/jsonRTE.ts @@ -2,7 +2,7 @@ import path from 'path'; import fs from 'fs'; import { MIGRATION_DATA_CONFIG } from '../../constants/index.js'; -const { +const { DATA, // DIR LOCALE_DIR_NAME, @@ -12,18 +12,21 @@ const { LOCALE_MASTER_LOCALE, ASSETS_SCHEMA_FILE, RTE_REFERENCES_FILE_NAME, - + } = MIGRATION_DATA_CONFIG; type NodeType = string; type LangType = string; type StackId = string; -function readFile (filePath:string) { - return JSON.parse(fs.readFileSync(filePath).toString()) +function readFile(filePath: string) { + if (fs.existsSync(filePath)) { + return JSON.parse(fs.readFileSync(filePath, 'utf-8')); + } + return undefined; } -const parsers: Map any> = new Map([ +const parsers: Map any> = new Map([ ['document', parseDocument], ['paragraph', parseParagraph], ['text', parseText], @@ -53,7 +56,7 @@ const parsers: Map parsers.get(e.nodeType)?.(e, lang, destination_stack_id)).filter(Boolean); return { @@ -85,7 +88,7 @@ function parseDocument(obj: any, lang?: LangType, destination_stack_id?:StackId) }; } -function parseTable(obj: any, lang?: LangType, destination_stack_id?:StackId): any { +function parseTable(obj: any, lang?: LangType, destination_stack_id?: StackId): any { const rowCount = obj.content.length; const colCount = Math.max(...obj.content.map((e: any) => e.content.length)); const attrs = { @@ -103,7 +106,7 @@ function parseTable(obj: any, lang?: LangType, destination_stack_id?:StackId): a }; } -function parseTableRow(obj: any,lang?: LangType, destination_stack_id?:StackId): any { +function parseTableRow(obj: any, lang?: LangType, destination_stack_id?: StackId): any { const types = new Set(); const children = obj.content.map((e: any) => { types.add(e.nodeType); @@ -114,7 +117,7 @@ function parseTableRow(obj: any,lang?: LangType, destination_stack_id?:StackId): return children.length ? { type, attrs: {}, uid: generateUID('tabletype'), children } : null; } -function parseHeadTR(obj: any[],lang?: LangType, destination_stack_id?:StackId): any { +function parseHeadTR(obj: any[], lang?: LangType, destination_stack_id?: StackId): any { const children = obj.map((e: any) => parsers.get(e.nodeType)?.(e, lang, destination_stack_id)).filter(Boolean); return { type: 'tr', @@ -124,7 +127,7 @@ function parseHeadTR(obj: any[],lang?: LangType, destination_stack_id?:StackId): }; } -function parseTableHead(obj: any, lang?: LangType, destination_stack_id?:StackId): any { +function parseTableHead(obj: any, lang?: LangType, destination_stack_id?: StackId): any { const children = obj.content.map((e: any) => parsers.get(e.nodeType)?.(e, lang, destination_stack_id)).filter(Boolean); return { type: 'th', @@ -134,7 +137,7 @@ function parseTableHead(obj: any, lang?: LangType, destination_stack_id?:StackId }; } -function parseTBody(obj: any,lang?: LangType, destination_stack_id?:StackId ): any { +function parseTBody(obj: any, lang?: LangType, destination_stack_id?: StackId): any { const children = obj.content.map((e: any) => parsers.get('body-tr')?.(e, lang, destination_stack_id)).filter(Boolean); return { type: 'tbody', @@ -144,17 +147,17 @@ function parseTBody(obj: any,lang?: LangType, destination_stack_id?:StackId ): a }; } -function parseBodyTR(obj: any, lang?: LangType, destination_stack_id?:StackId): any { +function parseBodyTR(obj: any, lang?: LangType, destination_stack_id?: StackId): any { const children = obj.content.filter((e: any) => e.nodeType === 'table-cell').map((e: any) => parsers.get('table-cell')?.(e, lang, destination_stack_id)).filter(Boolean); return children.length ? { type: 'tr', attrs: {}, uid: generateUID('tr'), children } : null; } -function parseTableBody(obj: any, lang?: LangType, destination_stack_id?:StackId): any { +function parseTableBody(obj: any, lang?: LangType, destination_stack_id?: StackId): any { const children = obj.content.map((e: any) => parsers.get(e.nodeType)?.(e, lang, destination_stack_id)).filter(Boolean); return children.length ? { type: 'td', attrs: {}, uid: generateUID('td'), children } : null; } -function parseParagraph(obj: any, lang?: LangType, destination_stack_id?:StackId): any { +function parseParagraph(obj: any, lang?: LangType, destination_stack_id?: StackId): any { const children = obj.content.map((e: any) => parsers.get(e.nodeType)?.(e, lang, destination_stack_id)).filter(Boolean); return { type: 'p', @@ -165,7 +168,7 @@ function parseParagraph(obj: any, lang?: LangType, destination_stack_id?:StackId } function parseText(obj: any): any { - const result: { text: string; [key: string]: boolean | string } = { text: obj.value }; + const result: { text: string;[key: string]: boolean | string } = { text: obj.value }; obj.marks.forEach((e: any) => { result[e.type.replace('code', 'inlineCode')] = true; }); @@ -181,8 +184,8 @@ function parseHR(): any { }; } -function parseUL(obj: any, lang?: LangType, destination_stack_id?:StackId): any { - const children = obj.content.map((e: any) => parsers.get(e.nodeType)?.(e,lang, destination_stack_id)).filter(Boolean); +function parseUL(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + const children = obj.content.map((e: any) => parsers.get(e.nodeType)?.(e, lang, destination_stack_id)).filter(Boolean); return { type: 'ul', attrs: {}, @@ -192,7 +195,7 @@ function parseUL(obj: any, lang?: LangType, destination_stack_id?:StackId): any }; } -function parseOL(obj: any, lang?: LangType, destination_stack_id?:StackId): any { +function parseOL(obj: any, lang?: LangType, destination_stack_id?: StackId): any { const children = obj.content.map((e: any) => parsers.get(e.nodeType)?.(e, lang, destination_stack_id)).filter(Boolean); return { type: 'ol', @@ -203,7 +206,7 @@ function parseOL(obj: any, lang?: LangType, destination_stack_id?:StackId): any }; } -function parseLI(obj: any, lang?: LangType, destination_stack_id?:StackId): any { +function parseLI(obj: any, lang?: LangType, destination_stack_id?: StackId): any { const children = obj.content.map((e: any) => parsers.get(e.nodeType)?.(e, lang, destination_stack_id)).flat().filter(Boolean); return { type: 'li', @@ -213,7 +216,7 @@ function parseLI(obj: any, lang?: LangType, destination_stack_id?:StackId): any }; } -function parseBlockReference(obj: any, lang?: LangType, destination_stack_id?:StackId): any { +function parseBlockReference(obj: any, lang?: LangType, destination_stack_id?: StackId): any { const entryId: { [key: string]: any } = destination_stack_id && readFile(path.join(process.cwd(), DATA, destination_stack_id, RTE_REFERENCES_DIR_NAME, RTE_REFERENCES_FILE_NAME)); const defaultLocale = destination_stack_id && readFile(path.join(process.cwd(), DATA, destination_stack_id, LOCALE_DIR_NAME, LOCALE_MASTER_LOCALE)); const masterLocale = Object.values(defaultLocale).map((localeId: any) => localeId.code).join(); @@ -246,7 +249,7 @@ function parseBlockReference(obj: any, lang?: LangType, destination_stack_id?:St }; } -function parseInlineReference(obj: any, lang?: LangType, destination_stack_id?:StackId): any { +function parseInlineReference(obj: any, lang?: LangType, destination_stack_id?: StackId): any { const entryId: { [key: string]: any } = destination_stack_id && readFile(path.join(process.cwd(), DATA, destination_stack_id, RTE_REFERENCES_DIR_NAME, RTE_REFERENCES_FILE_NAME)); const entry = Object.entries(entryId).find(([arrayKey, arrayValue]) => arrayKey === lang && arrayValue[obj.data.target.sys.id]); @@ -275,9 +278,9 @@ function parseInlineReference(obj: any, lang?: LangType, destination_stack_id?:S }; } -function parseBlockAsset(obj: any, lang?: LangType, destination_stack_id?:StackId): any { +function parseBlockAsset(obj: any, lang?: LangType, destination_stack_id?: StackId): any { const assetId = destination_stack_id && readFile(path.join(process.cwd(), DATA, destination_stack_id, ASSETS_DIR_NAME, ASSETS_SCHEMA_FILE)); - const asset = assetId[obj.data.target.sys.id]; + const asset = assetId?.[obj?.data?.target?.sys?.id]; // const attrs: any = {}; if (asset) { @@ -383,8 +386,8 @@ function parseEntryHyperlink(obj: any, lang?: LangType): any { }; } -function parseAssetHyperlink(obj: any, lang?: LangType, destination_stack_id?:StackId): any { - const assetId = destination_stack_id && readFile(path.join(process.cwd(), DATA, destination_stack_id,ASSETS_DIR_NAME , ASSETS_SCHEMA_FILE)); +function parseAssetHyperlink(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + const assetId = destination_stack_id && readFile(path.join(process.cwd(), DATA, destination_stack_id, ASSETS_DIR_NAME, ASSETS_SCHEMA_FILE)); const asset = assetId[obj.data.target.sys.id]; if (asset) { return { diff --git a/api/src/services/marketplace.service.ts b/api/src/services/marketplace.service.ts new file mode 100644 index 000000000..e7f5301a1 --- /dev/null +++ b/api/src/services/marketplace.service.ts @@ -0,0 +1,105 @@ +import path from 'path'; +import fs from 'fs'; +import getAuthtoken from "../utils/auth.utils.js"; +import { MIGRATION_DATA_CONFIG, KEYTOREMOVE } from '../constants/index.js'; +import { getAppManifestAndAppConfig } from '../utils/market-app.utils.js'; +import { v4 as uuidv4 } from "uuid"; + + +const { + EXTENSIONS_MAPPER_DIR_NAME, + MARKETPLACE_APPS_DIR_NAME, + MARKETPLACE_APPS_FILE_NAME +} = MIGRATION_DATA_CONFIG; + + +const groupByAppUid = (data: any) => { + return data?.reduce?.((acc: any, item: any) => { + if (!acc[item.appUid]) { + acc[item.appUid] = []; + } + acc[item.appUid].push(item.extensionUid); + return acc; + }, {}); +} +const removeKeys = (obj: any, keysToRemove: any) => { + return Object.fromEntries( + Object.entries(obj).filter(([key]) => !keysToRemove.includes(key)) + ); +} + +const writeManifestFile = async ({ destinationStackId, appManifest }: any) => { + const dirPath = path.join(process.cwd(), MIGRATION_DATA_CONFIG.DATA, destinationStackId, MARKETPLACE_APPS_DIR_NAME); + try { + await fs.promises.access(dirPath); + } catch (err) { + try { + await fs.promises.mkdir(dirPath, { recursive: true }); + } catch (mkdirErr) { + console.error("🚀 ~ fs.mkdir ~ err:", mkdirErr); + return; + } + } + try { + const filePath = path.join(dirPath, MARKETPLACE_APPS_FILE_NAME); + await fs.promises.writeFile(filePath, JSON.stringify(appManifest, null, 2)); + } catch (writeErr) { + console.error("🚀 ~ fs.writeFile ~ err:", writeErr); + } +} + + + +const createAppManifest = async ({ destinationStackId, region, userId, orgId }: any) => { + const authtoken = await getAuthtoken(region, userId); + const marketPlacePath = path.join(MIGRATION_DATA_CONFIG.DATA, destinationStackId, EXTENSIONS_MAPPER_DIR_NAME); + const AppMapper: any = await fs.promises.readFile(marketPlacePath, "utf-8").catch(async () => { }); + if (AppMapper !== undefined) { + const appManifest: any = []; + const groupUids: any = groupByAppUid(JSON.parse(AppMapper)); + for await (const [key, value] of Object?.entries?.(groupUids) || {}) { + const data: any = await getAppManifestAndAppConfig({ organizationUid: orgId, authtoken, region, manifestUid: key }); + data.manifest = removeKeys(data, KEYTOREMOVE); + const extensionUids: any = new Set(value) ?? []; + const locations: any = []; + for (const ext of extensionUids ?? []) { + const seprateUid = ext?.split?.('-'); + const type: string = seprateUid?.[1]; + const extUid: string = seprateUid?.[0]; + for (const loc of data?.ui_location?.locations ?? []) { + if (loc?.type === type) { + const isPresent = locations?.meta?.findIndex((item: any) => item?.extension_uid === extUid); + if (isPresent === undefined) { + locations?.push({ + type, + meta: [{ ...(loc?.meta?.[0] || {}), extension_uid: extUid }] + }) + } + } + } + } + const configData = data?.ui_location?.locations?.find((ele: any) => ele?.type === 'cs.cm.stack.config'); + if (configData) { + locations?.push({ + type: configData?.type, + meta: [{ ...(configData?.meta?.[0] || {}), name: 'Config', extension_uid: uuidv4() }] + }) + } + data.ui_location.locations = locations; + data.status = "installed"; + data.target = { + "type": "stack", + "uid": destinationStackId + }; + data.installation_uid = data?.uid; + data.configuration = ""; + data.server_configuration = ""; + appManifest?.push(removeKeys(data, KEYTOREMOVE)); + } + await writeManifestFile({ destinationStackId, appManifest }); + } +} + +export const marketPlaceAppService = { + createAppManifest +} \ No newline at end of file diff --git a/api/src/services/migration.service.ts b/api/src/services/migration.service.ts index 4d234b7db..b20d6fbf3 100644 --- a/api/src/services/migration.service.ts +++ b/api/src/services/migration.service.ts @@ -18,6 +18,8 @@ import customLogger from "../utils/custom-logger.utils.js"; import { setLogFilePath } from "../server.js"; import fs from 'fs'; import { contentfulService } from "./contentful.service.js"; +import { marketPlaceAppService } from "./marketplace.service.js"; + @@ -220,6 +222,7 @@ const startTestMigration = async (req: Request): Promise => { await customLogger(projectId, project?.current_test_stack_id, 'info', message); await setLogFilePath(loggerPath); const contentTypes = await fieldAttacher({ orgId, projectId, destinationStackId: project?.current_test_stack_id, region, user_id }); + await marketPlaceAppService?.createAppManifest({ orgId, destinationStackId: project?.current_test_stack_id, region, userId: user_id }); switch (cms) { case CMS.SITECORE_V8: case CMS.SITECORE_V9: @@ -253,16 +256,16 @@ const startTestMigration = async (req: Request): Promise => { await contentfulService?.createRefrence(file_path, project?.current_test_stack_id, projectId); await contentfulService?.createWebhooks(file_path, project?.current_test_stack_id, projectId); await contentfulService?.createEnvironment(file_path, project?.current_test_stack_id, projectId); - await contentfulService?.createAssets(file_path, project?.current_test_stack_id, projectId); - await contentfulService?.createEntry(file_path, project?.current_test_stack_id, projectId); - await contentfulService?.createVersionFile(project?.current_test_stack_id, projectId); + // await contentfulService?.createAssets(file_path, project?.current_test_stack_id, projectId); + await contentfulService?.createEntry(file_path, project?.current_test_stack_id, projectId, contentTypes); + // await contentfulService?.createVersionFile(project?.current_test_stack_id, projectId); break; } default: break; } - await testFolderCreator?.({ destinationStackId: project?.current_test_stack_id }); - await utilsCli?.runCli(region, user_id, project?.current_test_stack_id, projectId, true, loggerPath); + // await testFolderCreator?.({ destinationStackId: project?.current_test_stack_id }); + // await utilsCli?.runCli(region, user_id, project?.current_test_stack_id, projectId, true, loggerPath); } } diff --git a/api/src/utils/content-type-creator.utils.ts b/api/src/utils/content-type-creator.utils.ts index c8540cd58..fc87a6131 100644 --- a/api/src/utils/content-type-creator.utils.ts +++ b/api/src/utils/content-type-creator.utils.ts @@ -5,12 +5,14 @@ import customLogger from './custom-logger.utils.js'; import { getLogMessage } from './index.js'; import { MIGRATION_DATA_CONFIG } from '../constants/index.js'; import { contentMapperService } from "../services/contentMapper.service.js"; +import appMeta from '../constants/app/index.json'; const { GLOBAL_FIELDS_FILE_NAME, GLOBAL_FIELDS_DIR_NAME, CONTENT_TYPES_DIR_NAME, - CONTENT_TYPES_SCHEMA_FILE + CONTENT_TYPES_SCHEMA_FILE, + EXTENSIONS_MAPPER_DIR_NAME } = MIGRATION_DATA_CONFIG; interface Group { @@ -71,7 +73,29 @@ const arrangGroups = ({ schema, newStack }: any) => { return dtSchema; } -const convertToSchemaFormate = ({ field, advanced = true }: any) => { +const saveAppMapper = async ({ marketPlacePath, data }: any) => { + try { + await fs.promises.access(marketPlacePath); + } catch (err) { + try { + await fs.promises.mkdir(marketPlacePath, { recursive: true }); + } catch (mkdirErr) { + console.error("🚀 ~ fs.mkdir ~ err:", mkdirErr); + return; + } + } + const marketPlaceFilePath = path.join(marketPlacePath, EXTENSIONS_MAPPER_DIR_NAME); + const newData: any = await fs.promises.readFile(marketPlaceFilePath, "utf-8").catch(async () => { + await fs.promises.writeFile(marketPlaceFilePath, JSON.stringify([data])); + }); + if (newData !== "" && newData !== undefined) { + const parseData: any = JSON.parse(newData); + parseData?.push(data); + await fs.promises.writeFile(marketPlaceFilePath, JSON.stringify(parseData)); + } +} + +const convertToSchemaFormate = ({ field, advanced = true, marketPlacePath }: any) => { switch (field?.contentstackFieldType) { case 'single_line_text': { return { @@ -446,6 +470,30 @@ const convertToSchemaFormate = ({ field, advanced = true }: any) => { return htmlField; } + case 'app': { + const appName = field?.otherCmsField?.replace?.(/[()-App]/g, '')?.trim?.()?.split?.(' ')?.[1]; + const title = field?.title?.split?.(' ')?.[0]; + const appDetails = appMeta?.entries?.find?.((item: any) => item?.title === appName); + if (appDetails?.uid) { + saveAppMapper({ marketPlacePath, data: { appUid: appDetails?.app_uid, extensionUid: `${appDetails?.uid}-cs.cm.stack.custom_field` } }); + return { + "display_name": title, + "extension_uid": appDetails?.uid, + "field_metadata": { + "extension": true + }, + "uid": field?.uid, + "mandatory": false, + "non_localizable": false, + "unique": false, + "config": {}, + "data_type": "json", + "multiple": false + } + } + break; + } + default: { if (field?.contentstackFieldType) { return { @@ -598,6 +646,7 @@ const mergeTwoCts = async (ct: any, mergeCts: any) => { } export const contenTypeMaker = async ({ contentType, destinationStackId, projectId, newStack, keyMapper, region, user_id }: any) => { + const marketPlacePath = path.join(process.cwd(), MIGRATION_DATA_CONFIG.DATA, destinationStackId); const srcFunc = 'contenTypeMaker'; let ct: ContentType = { title: contentType?.contentstackTitle, @@ -629,7 +678,7 @@ export const contenTypeMaker = async ({ contentType, destinationStackId, project uid: extractValue(element?.contentstackFieldUid, item?.contentstackFieldUid, '.'), title: extractValue(element?.contentstackField, item?.contentstackField, ' >')?.trim(), } - const schema: any = convertToSchemaFormate({ field }); + const schema: any = convertToSchemaFormate({ field, marketPlacePath }); if (typeof schema === 'object' && Array.isArray(group?.schema) && element?.isDeleted === false) { group.schema.push(schema); } @@ -641,7 +690,8 @@ export const contenTypeMaker = async ({ contentType, destinationStackId, project ...item, title: item?.contentstackField, uid: item?.contentstackFieldUid - } + }, + marketPlacePath }); if (dt && item?.isDeleted === false) { ct?.schema?.push(dt); diff --git a/api/src/utils/market-app.utils.ts b/api/src/utils/market-app.utils.ts new file mode 100644 index 000000000..8a5fbe699 --- /dev/null +++ b/api/src/utils/market-app.utils.ts @@ -0,0 +1,25 @@ +import contentstack from '@contentstack/marketplace-sdk'; +import { DEVURLS } from '../constants/index.js'; + + + + +export const getAllApps = async ({ organizationUid, authtoken, region }: any) => { + try { + const client = contentstack.client({ authtoken, host: DEVURLS?.[region] ?? DEVURLS?.NA }); + const data = await client.marketplace(organizationUid).findAllApps(); + return data?.items; + } catch (err) { + console.info("🚀 ~ getAllApps ~ err:", err) + } +} + +export const getAppManifestAndAppConfig = async ({ organizationUid, authtoken, region, manifestUid }: any) => { + try { + const client = contentstack.client({ authtoken, host: DEVURLS?.[region] ?? DEVURLS?.NA }); + const data = await client.marketplace(organizationUid).app(manifestUid).fetch(); + return data; + } catch (err: any) { + console.info("🚀 ~ getAppManifestAndAppConfig ~ err:", err) + } +} \ No newline at end of file diff --git a/api/src/utils/test-folder-creator.utils.ts b/api/src/utils/test-folder-creator.utils.ts index d4a061f33..ade1df6a9 100644 --- a/api/src/utils/test-folder-creator.utils.ts +++ b/api/src/utils/test-folder-creator.utils.ts @@ -192,15 +192,20 @@ const lookForReference = async ( const sortAssets = async (baseDir: string) => { const assetsPath = path.join(process.cwd(), baseDir, ASSETS_DIR_NAME); - const assetsFilesPath = path.join(assetsPath, 'files'); - const assetsJson = JSON.parse(await fs.promises.readFile(path.join(assetsPath, ASSETS_SCHEMA_FILE), 'utf8')); - const sortAsset = Object?.values?.(assetsJson)?.slice(0, 10); - const assetsMeta: any = {}; - sortAsset?.forEach((item: any) => { - assetsMeta[item?.uid] = item; - }) - await cleanDirectory(assetsFilesPath, sortAsset); - await fs.promises.writeFile(path.join(assetsPath, ASSETS_SCHEMA_FILE), JSON?.stringify?.(assetsMeta)); + try { + await fs.promises.access(assetsPath); + const assetsFilesPath = path.join(assetsPath, 'files'); + const assetsJson = JSON.parse(await fs.promises.readFile(path.join(assetsPath, ASSETS_SCHEMA_FILE), 'utf8') ?? {}); + const sortAsset = Object?.values?.(assetsJson)?.slice(0, 10); + const assetsMeta: any = {}; + sortAsset?.forEach((item: any) => { + assetsMeta[item?.uid] = item; + }) + await cleanDirectory(assetsFilesPath, sortAsset); + await fs.promises.writeFile(path.join(assetsPath, ASSETS_SCHEMA_FILE), JSON?.stringify?.(assetsMeta)); + } catch (err) { + console.error('assest not exits on Path:', assetsPath); + } } const writeGlobalField = async (schema: any, globalSave: string, filePath: string) => { diff --git a/upload-api/migration-contentful/libs/contentTypeMapper.js b/upload-api/migration-contentful/libs/contentTypeMapper.js index 4d250003b..1190ba521 100644 --- a/upload-api/migration-contentful/libs/contentTypeMapper.js +++ b/upload-api/migration-contentful/libs/contentTypeMapper.js @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/no-var-requires */ const restrictedUid = require('../utils/restrictedKeyWords'); +const appDetails = require('../utils/apps/appDetails.json') /** * Corrects the UID by applying a custom affix and sanitizing the string. @@ -68,13 +69,13 @@ const extractAdvancedFields = ( return { default_value: defaultText, validationRegex: regrexValue, - mandatory: ["title", "url"].includes(item.id)? true : item?.required, + mandatory: ["title", "url"].includes(item.id) ? true : item?.required, multiple: singleRef, unique: uniqueValue, nonLocalizable: !(item?.localized === true), validationErrorMessage: validationErrorMessage, embedObjects: referenceFields.length ? referenceFields : undefined, - description:description, + description: description, }; }; @@ -131,7 +132,7 @@ const createDropdownOrRadioFieldObject = (item, fieldType) => { choices.push({ value: 'value', key: 'key' }); } else { item.validations.forEach((valid) => { - valid.in?.forEach((value) => choices.push({ value: ["Symbol","Text","Array" ].includes(item.type) ? `${value}`: value, key: `${value}` })); + valid.in?.forEach((value) => choices.push({ value: ["Symbol", "Text", "Array"].includes(item.type) ? `${value}` : value, key: `${value}` })); }); } return { @@ -188,6 +189,10 @@ const contentTypeMapper = (data) => { case 'radio': acc.push(createDropdownOrRadioFieldObject(item, item.widgetId)); break; + case 'tagEditor': + case 'listInput': + console.info('tag', item); + break; } break; case 'Integer': @@ -217,12 +222,15 @@ const contentTypeMapper = (data) => { case 'Array': case 'Link': switch (item.widgetId) { + case 'assetLinkEditor': case 'assetLinksEditor': case 'assetGalleryEditor': acc.push(createFieldObject(item, 'file', 'file')); break; case 'entryLinksEditor': + case 'entryLinkEditor': + case 'entryCardEditor': case 'entryCardsEditor': { let referenceFields = []; let commonRef = []; @@ -248,7 +256,7 @@ const contentTypeMapper = (data) => { }); } else { referenceFields = - item?.contentNames?.length < 25 ? item?.contentNames + item?.contentNames?.length < 25 ? item?.contentNames : item?.contentNames?.slice(0, 9); } } else { @@ -265,7 +273,7 @@ const contentTypeMapper = (data) => { }); } else { referenceFields = - item.contentNames?.length < 25 ? item?.contentNames + item.contentNames?.length < 25 ? item?.contentNames : item?.contentNames?.slice(0, 9); } } @@ -283,9 +291,12 @@ const contentTypeMapper = (data) => { case 'Boolean': acc.push(createFieldObject(item, 'boolean', 'boolean')); break; - case 'Object': - acc.push(createFieldObject(item, 'json', 'json')); + case 'Object': { + const findAppMeta = appDetails?.items?.find((ele) => ele?.sys?.id === item?.widgetId); + item.name = `${item?.name} (${findAppMeta?.name}-App)`; + acc.push(createFieldObject(item, 'app', 'app')); break; + } case 'Location': { acc.push(createFieldObject(item, 'group', 'group')); acc.push({ diff --git a/upload-api/migration-contentful/libs/createInitialMapper.js b/upload-api/migration-contentful/libs/createInitialMapper.js index 0056891fe..173b311d7 100644 --- a/upload-api/migration-contentful/libs/createInitialMapper.js +++ b/upload-api/migration-contentful/libs/createInitialMapper.js @@ -73,41 +73,41 @@ const createInitialMapper = async () => { path.resolve(process.cwd(), `${config.data}/${config.contentful.contentful}/${file}`) ); const title = file.split('.')[0]; - + const contentTypeObject = { status: 1, isUpdated: false, updateAt: '', otherCmsTitle: title, - otherCmsUid: data[0]?.contentUid, + otherCmsUid: data[0]?.contentfulID, contentstackTitle: title.charAt(0).toUpperCase() + title.slice(1), contentstackUid: uidCorrector(data[0]?.contentUid), type: 'content_type', fieldMapping: [] }; const uidTitle = [ - { - uid: 'title', - otherCmsField: 'title', - otherCmsType: 'text', - contentstackField: 'title', - contentstackFieldUid: 'title', - contentstackFieldType: 'text', - backupFieldType: 'text', - advanced:{ mandatory:true} - }, - { - uid: 'url', - otherCmsField: 'url', - otherCmsType: 'text', - contentstackField: 'Url', - contentstackFieldUid: 'url', - contentstackFieldType: 'url', - backupFieldType: 'url', - advanced:{ mandatory:true} - } - ]; - const dataArray = data.filter((item) => item.id!=='title' && item.id !== 'url'); + { + uid: 'title', + otherCmsField: 'title', + otherCmsType: 'text', + contentstackField: 'title', + contentstackFieldUid: 'title', + contentstackFieldType: 'text', + backupFieldType: 'text', + advanced: { mandatory: true } + }, + { + uid: 'url', + otherCmsField: 'url', + otherCmsType: 'text', + contentstackField: 'Url', + contentstackFieldUid: 'url', + contentstackFieldType: 'url', + backupFieldType: 'url', + advanced: { mandatory: true } + } + ]; + const dataArray = data.filter((item) => item.id !== 'title' && item.id !== 'url'); const contentstackFields = [...uidTitle, ...contentTypeMapper(dataArray)].filter( Boolean ); diff --git a/upload-api/migration-contentful/utils/apps/appDetails.json b/upload-api/migration-contentful/utils/apps/appDetails.json new file mode 100644 index 000000000..2d7619fd0 --- /dev/null +++ b/upload-api/migration-contentful/utils/apps/appDetails.json @@ -0,0 +1,11293 @@ +{ + "sys": { + "type": "Array" + }, + "total": 99, + "items": [ + { + "sys": { + "id": "6tLfWB4Y2ppAmKynXo4STi", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "78VS3MWLI40BF1TzF206cD" + } + }, + "shared": true, + "createdAt": "2023-01-27T10:09:30.721Z", + "updatedAt": "2024-03-05T19:20:23.990Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "78UP2gMaShITMmFWzp6ZD1" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "78UP2gMaShITMmFWzp6ZD1" + } + } + }, + "name": "A-sync Publication Manager (Marketplace)", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6NETxlMNCYcgwwTeCmuqTL" + } + }, + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + }, + { + "location": "app-config" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "7CsrDDzb0WDqWgakHyfJdY", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "3WcMEN2rEin3ZZPsoF8Lz0" + } + }, + "shared": true, + "createdAt": "2020-10-14T19:49:23.931Z", + "updatedAt": "2023-05-02T15:59:57.914Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3W9pkJkQkz56EL4hsjvm2W" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3W9pkJkQkz56EL4hsjvm2W" + } + } + }, + "name": "Acclaro Translations", + "src": "https://ctf-translations.acclaro-apps.com/frontend/index.html", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "entry-editor" + }, + { + "location": "page", + "navigationItem": { + "name": "Acclaro Translations", + "path": "/" + } + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "6RGLVmXYrGaIIRIda1HwAC", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-01-10T00:02:15.750Z", + "updatedAt": "2025-01-31T19:54:58.984Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "549ZG41aazTYkABSEvfRyA" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Adapt Essentials Bulk Asset Fields", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "3fa8kKWRMBk9K200X0xh8e" + } + }, + "locations": [ + { + "location": "page", + "navigationItem": { + "name": "Adapt Essentials Bulk Asset Fields", + "path": "/" + } + }, + { + "location": "dialog" + }, + { + "location": "home" + }, + { + "location": "app-config" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "3iszK8Gl7aaxLvxGyCOhgA", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-03-27T20:14:47.291Z", + "updatedAt": "2024-11-20T23:45:15.094Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6iUaAfJg2ZoKe4oEYF7kxe" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "AI Content Generator", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "66LlxbQubgBbmO7UjuQXQn" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ] + }, + { + "sys": { + "id": "3RheWQRagirMFgWrhMOBxL", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-08-01T18:43:48.712Z", + "updatedAt": "2024-09-25T16:03:48.103Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FJf3IvgmQotV5As5zpGhc" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "AI Image Generator", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "2oIeB0suYvcMq0vp3iDHfD" + } + }, + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "5bWaMz0w0jPWvYmkgcVCX3", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-02-12T15:27:52.465Z", + "updatedAt": "2020-04-27T12:26:41.444Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5FvvIcNbfAn7SPSO97fIMp" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5NItczv8FWvPn5UTJpTOMM" + } + } + }, + "name": "AI Image Tagging", + "src": "https://ai-image-tagging.ctfapps.net/frontend/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + } + ] + }, + { + "sys": { + "id": "5iQYfM7S9CWFeywx0lrF6A", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "3HXcJCikRb72JNTFI0kUEI" + } + }, + "shared": true, + "createdAt": "2023-02-24T10:25:25.169Z", + "updatedAt": "2024-09-02T12:47:22.963Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5CawfuQcCBeg31D5FjPxYG" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5CawfuQcCBeg31D5FjPxYG" + } + } + }, + "name": "Alt Text AI", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "sjvZ8VI5Gl9dNGZxg6Thd" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + } + ] + }, + { + "location": "page", + "navigationItem": { + "name": "AltText.ai: Bulk Update", + "path": "/Page" + } + } + ] + }, + { + "sys": { + "id": "jTed08LvhkveeUoBpJOim", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-01-25T16:14:16.679Z", + "updatedAt": "2024-10-28T19:41:52.339Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0VYEozm0sWFT6Wee4Zm9Dn" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Amazon Bedrock Content Generator", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "5YBzEzuBdpUFXkf4LPCad8" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "5HVpneN2ZR6uYrOs2TOumr", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "4J91ewqssC6Q5X8EkneCGX" + } + }, + "shared": true, + "createdAt": "2024-01-25T00:15:37.655Z", + "updatedAt": "2025-01-23T02:27:41.845Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4J52AcomYtlp9LGabXlCrR" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6HJDZrUnh9Nc0a3JErpOqa" + } + } + }, + "name": "Amplitude", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "4UVBDXiCpT3oH85Vh7PoIl" + } + }, + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "entry-editor" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "4OxLnZ6demuSG0dz7rgcEB", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "6jM5PF1GV3gL8H96Q4b1px" + } + }, + "shared": true, + "createdAt": "2021-06-21T14:15:44.474Z", + "updatedAt": "2023-12-26T15:15:44.100Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6jL2ThWHHumVn8ZQIZLDM7" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6jL2ThWHHumVn8ZQIZLDM7" + } + } + }, + "name": "api.video", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6fcnBg5UfR7ql11szgwbMX" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "RkD9DMLgnqahWzcYyQ0RI", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "1UCeHE7rmDOdfNcgpCN3z2" + } + }, + "shared": true, + "createdAt": "2023-04-12T13:44:32.948Z", + "updatedAt": "2023-08-09T19:07:58.814Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0DBVatr5nHZC18z9wRBGd3" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0DBVatr5nHZC18z9wRBGd3" + } + } + }, + "name": "Aprimo App", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "2f8I1i02IKmVOvMDt3aJPM" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ] + }, + { + "sys": { + "id": "26OUmTSqwgnCTM5BnkJL83", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "4jYjoMK3b0oP9MJWtwACRJ" + } + }, + "shared": true, + "createdAt": "2023-07-20T19:58:11.391Z", + "updatedAt": "2024-11-13T15:48:26.522Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5jA82i8PO6yYxpusZflUuH" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5jA82i8PO6yYxpusZflUuH" + } + } + }, + "name": "Arboretum", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "7khrwvd7hneLQJWeU2JCpg" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "page", + "navigationItem": { + "name": "Arboretum", + "path": "/" + } + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Link", + "linkType": "Entry" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "home" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "1mVogDvuE0GuW4qp4dk4zQ", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-06-15T15:45:53.638Z", + "updatedAt": "2024-12-12T04:15:29.920Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FJf3IvgmQotV5As5zpGhc" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "AWS Amplify", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "1m3ZeDMfTiS1BDNB6vmknB" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ] + }, + { + "sys": { + "id": "5KVbHTjQJT7XGrAy7bLIlC", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "7ujDWYE18wGkFkP8NeByHh" + } + }, + "shared": true, + "createdAt": "2021-10-04T08:46:53.481Z", + "updatedAt": "2022-02-14T08:47:21.274Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "560u6wCl1rlKFX3XwBCshV" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "20n37hdJoDPFuPMRmCt0Q0" + } + } + }, + "name": "BigCommerce app", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6nUzTxsGKY9uhqUpmsxyNJ" + } + }, + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "app-config" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "4yuhN91ClorVNMXVseJB6r", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5QWhpfISjlF5wNbZ4rkmQk" + } + }, + "shared": true, + "createdAt": "2023-04-24T12:45:14.843Z", + "updatedAt": "2023-05-12T10:27:09.812Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "69AXBWNchCjNtMvSvl9h0a" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "69AXBWNchCjNtMvSvl9h0a" + } + } + }, + "name": "Brand Guardian", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "12HEPsBjXjPqOi4zXp985t" + } + }, + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Link", + "linkType": "Asset" + } + ] + }, + { + "location": "entry-sidebar" + } + ] + }, + { + "sys": { + "id": "bgBVVuNbfvUW5tpFnD20s", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-02-24T15:04:26.697Z", + "updatedAt": "2024-12-12T04:10:42.788Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "29B6zorz8plUCN1auThiVH" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Brandfolder", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "7BeVVNCDi4PPoW8RSHjzrN" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "5KySdUzG7OWuCE2V3fgtIa", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-07-24T12:42:27.828Z", + "updatedAt": "2025-01-31T19:54:58.598Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Bynder", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "55On2kbzFcx1LqZsrUFquX" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "2POIRORfxypO5JsgvufCiZ", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-05-29T16:49:41.594Z", + "updatedAt": "2025-01-31T19:55:11.338Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FNJe2xmShG6mc5Cqsy6eW" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Bynder Content Workflow", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "2GxbNv54GEeSdFE6go7FLX" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + } + ] + }, + { + "location": "page", + "navigationItem": { + "name": "Bynder Content Workflow", + "path": "/" + } + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "3ts0Y8tta9da2qV0qQSoZG", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-05-26T12:51:54.718Z", + "updatedAt": "2025-01-31T19:55:10.295Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2RZLldkv24PyQMDfNG56Bb" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Ceros", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "4tCJZGeRRpumT4DX6BotMu" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + } + ], + "parameters": { + "instance": [ + { + "name": "Content Type ID", + "description": "The ID of the content type that this app save Ceros Experiences to.", + "id": "contentTypeId", + "type": "Symbol", + "required": true + }, + { + "name": "Title Field ID", + "description": "Field ID (on the content model specified in 'contentModelId') for the title of the Ceros Experience.", + "id": "titleFieldId", + "type": "Symbol", + "required": true + }, + { + "name": "URL Field ID", + "description": "Field ID (on the content model specified in 'contentModelId') for the URL of the Ceros Experience.", + "id": "urlFieldId", + "type": "Symbol" + }, + { + "name": "Embed Code Field ID", + "description": "Field ID (on the content model specified in 'contentModelId') for the embed code of the Ceros Experience.", + "id": "embedCodeFieldId", + "type": "Symbol", + "required": true + } + ] + } + }, + { + "sys": { + "id": "8dgJSrhUhRsKzRKz4oNbW", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5u1hLJSfU79YOdpNtySNat" + } + }, + "shared": true, + "createdAt": "2023-02-16T12:41:41.277Z", + "updatedAt": "2023-02-20T05:48:06.273Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5tiYEmkRQTmzxm19lqi0Md" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5tiYEmkRQTmzxm19lqi0Md" + } + } + }, + "name": "Cloudimage by Scaleflex", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "jBhp8AzIZeXrfI0zeJWlJ" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "entry-sidebar" + } + ] + }, + { + "sys": { + "id": "zjcnWgBknf9zB7IM9HZjE", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-07-24T12:40:36.439Z", + "updatedAt": "2025-01-31T19:55:10.703Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Cloudinary", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6FhbjuO8cHcYuhDVTlDSCt" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ] + }, + { + "sys": { + "id": "4Vy3oAINwRgnxakoTz06tG", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2022-09-19T14:36:12.034Z", + "updatedAt": "2024-12-12T04:07:24.722Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2kPIZqSR5zjoujwXVx3dqK" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Color Picker", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "BPUQeVUgmogGJyeQ4zrBo" + } + }, + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Object" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "parameters": { + "instance": [ + { + "name": "Allow custom value", + "default": true, + "id": "withCustomValue", + "type": "Boolean", + "labels": {} + } + ] + } + }, + { + "sys": { + "id": "1ENTlXR17q1veUn74QF9ns", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "41cviVbFZhsyGL7zXM0N1b" + } + }, + "shared": true, + "createdAt": "2019-12-10T08:25:13.578Z", + "updatedAt": "2024-11-08T10:22:30.987Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2MzbkIYbpZL19Dtc16UoJy" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4lnZtuZtUG8pqyhaQattvb" + } + } + }, + "name": "Commerce Layer", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "KPiXheMx4f3O9e8Nm9N6m" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [ + { + "default": "skus", + "name": "Resource", + "options": [ + { + "skus": "Skus" + }, + { + "bundles": "Bundles" + }, + { + "sku_lists": "SKU lists" + }, + { + "markets": "Markets" + } + ], + "description": "Select which resource you want to get from Commerce Layer", + "id": "resource", + "type": "Enum", + "labels": {} + } + ] + } + }, + { + "sys": { + "id": "3GBoHfsPvqyV74chvKCzNP", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0Ri9IrGVAtHGIMIwTwtXr1" + } + }, + "shared": true, + "createdAt": "2021-12-16T01:38:40.267Z", + "updatedAt": "2021-12-17T17:59:31.453Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0R27Cf3qXKc6BpvM7Ci8l9" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0R27Cf3qXKc6BpvM7Ci8l9" + } + } + }, + "name": "Commerce.js App", + "src": "https://contentful-app.chec.io/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "7yUlnpgAofvRDee0n6Ocv2", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-12-04T09:35:42.602Z", + "updatedAt": "2024-12-12T03:58:13.108Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2MzbkIYbpZL19Dtc16UoJy" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Commercetools", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "3ugsvOg1UjQN6bznZq0y4u" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "4TVVNA8Ske9pUajCsEXTly", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "6stNN8XMtvIWzLchRHV7GI" + } + }, + "shared": true, + "createdAt": "2022-10-12T11:54:55.656Z", + "updatedAt": "2023-12-12T09:45:09.036Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5zswZwDK3vwrhiQKxwc9Db" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5zswZwDK3vwrhiQKxwc9Db" + } + } + }, + "name": "Conditional Fields", + "src": "https://conditional-fields-app-production.netlify.app", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Text" + }, + { + "type": "Date" + }, + { + "type": "Boolean" + }, + { + "type": "Integer" + }, + { + "type": "Number" + }, + { + "type": "RichText" + }, + { + "type": "Location" + }, + { + "type": "Object" + }, + { + "type": "Link", + "linkType": "Entry" + }, + { + "type": "Link", + "linkType": "Asset" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Asset" + } + } + ] + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "6ZBUT0ZhkMRAZ7C1KNtbBk", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5BAUF0LQ64OqOEs9hHF7Qz" + } + }, + "shared": true, + "createdAt": "2022-09-03T09:56:48.416Z", + "updatedAt": "2023-11-01T13:14:27.120Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5BxXAzpRsCxKLeeFJe9bFd" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5BxXAzpRsCxKLeeFJe9bFd" + } + } + }, + "name": "Crowdin", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "XU2X5bNtbkkL5NN4IWPqF" + } + }, + "locations": [ + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "parameters": { + "instance": [ + { + "name": "Project ID", + "description": "Crowdin Project ID (can be found in Project -> Tools -> API)", + "id": "projectId", + "type": "Number", + "required": true + } + ] + } + }, + { + "sys": { + "id": "57yilZEN9oBolHz9vD6jwY", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5NC6Cypz4leJZnIweXydYZ" + } + }, + "shared": true, + "createdAt": "2022-11-21T19:14:13.271Z", + "updatedAt": "2023-01-04T07:50:26.877Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5NxhJi8jFFu0Q5TtqyBJI5" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5NxhJi8jFFu0Q5TtqyBJI5" + } + } + }, + "name": "Digizuite DAM", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "3Ddhfg3gD4xcWzuD9UROmq" + } + }, + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [ + { + "name": "Digizuite MM URL", + "description": "Provide your media manager embedded URL", + "default": "https://dmo10-mm.digizuitedam.com/embedded/", + "id": "digizuiteMmUrl", + "type": "Symbol" + } + ] + } + }, + { + "sys": { + "id": "4tDyevo7sMwvZhDGKzFHVw", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2025-01-08T18:11:25.804Z", + "updatedAt": "2025-01-31T19:55:21.389Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1TxB84jpuvrlDUiXNmjAnk" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Docs to Rich Text", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "1CdS7ioTlUoESJvsHpEHgq" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "RichText" + } + ] + } + ], + "parameters": {} + }, + { + "sys": { + "id": "6YdAwxoPHopeTeuwh43UJu", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-11-13T15:12:53.401Z", + "updatedAt": "2024-12-12T03:54:39.597Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Dropbox", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "4v8nupiM6QKbO8TtSJj1oK" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ] + }, + { + "sys": { + "id": "6JCQ2X5GbvJ4xRGEJbWIrz", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "1JMZ8tf4t7c5mnKzAELjRD" + } + }, + "shared": true, + "createdAt": "2022-02-22T13:29:05.836Z", + "updatedAt": "2024-02-12T13:37:38.510Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1JKGArcrenIZjNrFPEXnxL" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1JKGArcrenIZjNrFPEXnxL" + } + } + }, + "name": "EasyTranslate", + "src": "https://contentful-app.easytranslate.com/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "EasyTranslate", + "path": "/" + } + } + ], + "parameters": {} + }, + { + "sys": { + "id": "2NHTUlzatPT8jLceaVpkG5", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "06jjPu1EENrkBYwR2X37wJ" + } + }, + "shared": true, + "createdAt": "2021-07-05T12:08:08.382Z", + "updatedAt": "2024-12-04T09:03:08.087Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "065tcZyXh4M0Lj7LQGal9f" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "065tcZyXh4M0Lj7LQGal9f" + } + } + }, + "name": "emporix", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "Mmk1l7wy0kjK0QVjwwPjr" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + }, + { + "type": "Symbol" + }, + { + "type": "Text" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "entry-editor" + }, + { + "location": "page" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "7EFM8G3tm6fJwrsPRL0VpW", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-10-28T21:47:52.085Z", + "updatedAt": "2025-01-31T19:55:22.313Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "24lQRrtm3GTwuPHzmOqcFY" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Eppo", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "4ESGEzGXoDovOUwD348Rs5" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + } + ], + "parameters": { + "instance": [], + "installation": [ + { + "name": "Eppo API Key", + "id": "eppoApiKey", + "type": "Symbol", + "required": true + }, + { + "name": "Default Entity ID", + "type": "Number", + "id": "defaultEntityId" + }, + { + "name": "Default Assignment Source ID", + "type": "Number", + "id": "defaultAssignmentSourceId" + }, + { + "name": "Eppo API Base URL", + "id": "eppoApiBaseUrl", + "type": "Symbol", + "required": true + } + ] + } + }, + { + "sys": { + "id": "7GbS2x3SdVh7D2hb1FFsS6", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-09-27T16:38:03.221Z", + "updatedAt": "2025-01-31T19:55:21.908Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2D8ljY8aA7f32Wxhcf8lxD" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "FlexFields", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "4bdHOGjNjrUGUzsScRnt4J" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + } + ] + }, + { + "sys": { + "id": "5wHGALSJtz7y2EQOLfGhKH", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-11-13T15:14:21.970Z", + "updatedAt": "2024-12-12T03:50:27.317Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Frontify", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6QmWeg6X7mplYaVOORmlau" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "2K5TL6cBI8hXXRvuDvg1K", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "4noCerPY9pAzAwYUXcWMEE" + } + }, + "shared": true, + "createdAt": "2021-09-15T13:07:45.069Z", + "updatedAt": "2022-02-14T10:11:11.672Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4nnAK8Q6dCVvPtz8VRVArC" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4nnAK8Q6dCVvPtz8VRVArC" + } + } + }, + "name": "Frosmo Segments", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "4w6N8nK38uOMwV1OoT6sgE" + } + }, + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "4kJlo5koeq6SSrirCFQAeJ", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "7pw414MkO7J58dWK105e0u" + } + }, + "shared": true, + "createdAt": "2020-10-23T21:54:41.281Z", + "updatedAt": "2020-10-23T21:54:41.281Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3SUN5V3fIJSPUEbu8EDepA" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3SUN5V3fIJSPUEbu8EDepA" + } + } + }, + "name": "GlobalLink Connect", + "src": "https://gl-contentful.translations.com/marketplace/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "GlobalLink Connect", + "path": "/globallink" + } + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "5DlxOS0KvGS1Wk362xgvbN", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-02-17T22:10:38.871Z", + "updatedAt": "2024-12-17T22:46:44.282Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2D8ljY8aA7f32Wxhcf8lxD" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Google Analytics 4", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "VIr4O387Fuw3MsJwWkmCU" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ] + }, + { + "sys": { + "id": "4fD58pKkn4Tdlm7IW9FbvK", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "6tedZUtnDb5ugxASlwKsmz" + } + }, + "shared": true, + "createdAt": "2021-09-21T19:57:43.796Z", + "updatedAt": "2023-10-05T18:37:33.749Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6t4JdmDzUzpppfl8710tKf" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6t4JdmDzUzpppfl8710tKf" + } + } + }, + "name": "GPI Translation Services Connector", + "src": "https://contentful.globalizationpartners.com/", + "locations": [ + { + "location": "entry-sidebar" + }, + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "page", + "navigationItem": { + "name": "GPI Translation Services Connector", + "path": "/gpi-tsc" + } + } + ], + "parameters": { + "instance": [ + { + "name": "Auth Token", + "description": "Auth Token", + "default": "", + "id": "authToken", + "type": "Symbol", + "required": true + }, + { + "name": "secretKey", + "id": "secretKey", + "type": "Symbol", + "required": true + } + ] + } + }, + { + "sys": { + "id": "6o8NJOeW54fY2UYY8zQUZY", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-08-15T21:07:30.751Z", + "updatedAt": "2025-01-21T21:13:45.907Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FNJe2xmShG6mc5Cqsy6eW" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "GraphiQL", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "73xzvb2f2hBsNrd6SmQOqh" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "GraphiQL", + "path": "/" + } + } + ], + "parameters": {} + }, + { + "sys": { + "id": "66frtrAqmWSowDJzQNDiD", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-08-18T12:40:08.484Z", + "updatedAt": "2025-01-21T21:09:51.178Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6dV4yzcXnTFJpBQNTwolmx" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "GraphQL Playground", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "5PU7QvhB9REZTiOd5VqorB" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "GraphQL Playground", + "path": "/graphql" + } + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "2m6GPV4H181rNthvN0yxdJ", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-12-10T17:33:24.519Z", + "updatedAt": "2025-01-31T19:55:32.302Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1TxB84jpuvrlDUiXNmjAnk" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "GrowthBook Experiment", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6TMDCMeZ7auO6EVJyPxxJr" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "342Q2DqCjmsdN5BJCEPkrJ", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-10-01T09:21:49.757Z", + "updatedAt": "2025-01-21T21:05:59.716Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2MzbkIYbpZL19Dtc16UoJy" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Image Focal Point", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "H8Fs4Mxz7w5lYyozY2tKK" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "3BGvGx9eF1bYGJw7tmHdXv", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-11-20T20:51:38.909Z", + "updatedAt": "2025-01-31T19:55:32.009Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2cesFtOix28UbXshy4iXK8" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Image Hotspot Creator", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "zPnHdZOjqEbeXunoXEzaL" + } + }, + "locations": [ + { + "location": "entry-editor" + }, + { + "location": "dialog" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "7v6c0ylAgt7KSAmgedz4ed", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0XenNsx0QCqtKgZsXtiWJk" + } + }, + "shared": true, + "createdAt": "2021-01-17T00:35:30.734Z", + "updatedAt": "2022-08-11T17:23:28.626Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0XdiloXVewCZvwsuNzTocy" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0XdiloXVewCZvwsuNzTocy" + } + } + }, + "name": "imgix", + "src": "https://contentful-psi.vercel.app/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "z0uyReYKxjYGR7Aj7DjFc", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "3jnZ6YgPY4u2MQrtKXZ038" + } + }, + "shared": true, + "createdAt": "2020-08-20T17:00:06.260Z", + "updatedAt": "2021-08-23T12:31:57.540Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3jmJyK2gmnvmAykKLpzAEO" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0OqydBwBE7LCTESG8kkZ0G" + } + } + }, + "name": "IntelligenceBank", + "src": "https://contentfulconnector.intelligencebank.com/", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "page", + "navigationItem": { + "name": "IntelligenceBank", + "path": "/" + } + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "5q6VO8UT97XSTix4gnRbPE", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-03-01T22:55:41.032Z", + "updatedAt": "2025-01-31T19:55:32.928Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "03fzTwuuEEPDj1HaDHyeDM" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Intershop", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "3PXmdcgKb7rerJVp7ADJaI" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": {} + }, + { + "sys": { + "id": "3tkiX2zjB7aqEiiKX5hRwc", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-01-17T14:29:02.114Z", + "updatedAt": "2020-04-27T12:28:08.688Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2jvc3kU4n7OIABiFMTaGyB" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5NItczv8FWvPn5UTJpTOMM" + } + } + }, + "name": "Jira", + "src": "https://app.jira.ctfapps.net", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + } + ] + }, + { + "sys": { + "id": "3fLf4DnjbkN1yUA2V2fMgE", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-07-11T15:16:00.763Z", + "updatedAt": "2025-01-21T20:58:29.937Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FJf3IvgmQotV5As5zpGhc" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "JSON Viewer", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "3LBCSIpWCbmtuGOazPHMDQ" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + } + ] + }, + { + "sys": { + "id": "znp3ZloaqTn5g5VankRqD", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "2cARw0ayWLd1vWvA3xX3pZ" + } + }, + "shared": true, + "createdAt": "2022-03-02T17:42:08.820Z", + "updatedAt": "2023-03-08T10:39:04.851Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2cxxu5IH4VwGITxLRg03NB" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2cxxu5IH4VwGITxLRg03NB" + } + } + }, + "name": "Kameleoon", + "src": "https://contentful-app.kameleoon.com", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + }, + { + "type": "Text" + }, + { + "type": "RichText" + }, + { + "type": "Integer" + }, + { + "type": "Number" + }, + { + "type": "Date" + }, + { + "type": "Boolean" + }, + { + "type": "Location" + }, + { + "type": "Object" + }, + { + "type": "Link", + "linkType": "Entry" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + }, + { + "type": "Link", + "linkType": "Asset" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Asset" + } + } + ] + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + }, + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "4F6cpGJEuEzZDPTno9nq1f", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "7e3UZK73OoV22a7UaWtGZv" + } + }, + "shared": true, + "createdAt": "2021-11-17T19:33:04.159Z", + "updatedAt": "2021-12-28T15:27:21.195Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7dRVfKdqcMHRYJwRaifUJn" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7dRVfKdqcMHRYJwRaifUJn" + } + } + }, + "name": "Kibo Commerce", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6sSvqEM7xGmmKkGT81kTXj" + } + }, + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + }, + { + "type": "Text" + }, + { + "type": "RichText" + }, + { + "type": "Integer" + }, + { + "type": "Number" + }, + { + "type": "Date" + }, + { + "type": "Location" + }, + { + "type": "Boolean" + }, + { + "type": "Object" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Asset" + } + }, + { + "type": "Link", + "linkType": "Asset" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + }, + { + "type": "Link", + "linkType": "Entry" + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "entry-editor" + }, + { + "location": "page" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "4uUaxd0lfvVJpY7PsmKBb5", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "7uWRGc4lv1K36wcfhbdCJF" + } + }, + "shared": true, + "createdAt": "2021-01-15T02:26:20.922Z", + "updatedAt": "2024-01-16T19:43:43.440Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "31XdODbMrVICB7JEdcInIa" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "31XdODbMrVICB7JEdcInIa" + } + } + }, + "name": "Lilt", + "src": "https://storage.googleapis.com/lilt_contentful/index.html?ignoreCache=1", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "10ec9foxs591x36kLhTYT2", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "7pFE7su6qcypDfkpytSWYC" + } + }, + "shared": true, + "createdAt": "2023-03-15T07:21:27.107Z", + "updatedAt": "2023-03-15T07:24:58.409Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7miHtW58hNWv7IeeY7iCQE" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7miHtW58hNWv7IeeY7iCQE" + } + } + }, + "name": "Linguiny", + "src": "https://contentful-i18n.vercel.app", + "locations": [ + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ] + }, + { + "sys": { + "id": "7tmjHWJ6M0KGqrOKrhHdhe", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "03vYXC72caQvKlMA5tgu1L" + } + }, + "shared": true, + "createdAt": "2022-03-10T08:53:36.303Z", + "updatedAt": "2024-08-05T11:53:02.236Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "26cKXW6ey72xUG0NahqVl0" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0IlkG3SeMEfIDd7qVLiybN" + } + } + }, + "name": "Lionbridge Connector", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "1rDLwN9sFbPwhECR6lXCJe" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "Lionbridge Connector", + "path": "/" + } + } + ] + }, + { + "sys": { + "id": "3kMGvoFeVdMPIkolBPdPIg", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-11-08T17:57:44.339Z", + "updatedAt": "2025-01-31T19:55:43.504Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "668Oko9O5Fb63WY5P2lss6" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Live Story", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "ZCnbGHkTsovHNPKtQeIMb" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + } + ], + "parameters": { + "installation": [ + { + "name": "Content Type ID", + "type": "Symbol", + "id": "contentTypeId" + }, + { + "name": "Title Field Id", + "type": "Symbol", + "id": "titleFieldId" + }, + { + "name": "Content Id Field Id", + "type": "Symbol", + "id": "contentIdFieldId" + }, + { + "name": "Content Type Field Id", + "type": "Symbol", + "id": "contentTypeFieldId" + } + ] + } + }, + { + "sys": { + "id": "70ssKop5SL98q1JOJy3AcA", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5mrBsdeobqqOHiCIyhvJbp" + } + }, + "shared": true, + "createdAt": "2023-07-04T09:49:39.244Z", + "updatedAt": "2024-03-29T21:18:50.344Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5mn4ytNTDxT1pYPuWpZ5QX" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5mn4ytNTDxT1pYPuWpZ5QX" + } + } + }, + "name": "Lokalise", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "3GEdi69xDtJX4nNQgJSTny" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "cQeaauOu1yUCYVhQ00atE", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2022-05-10T13:12:32.052Z", + "updatedAt": "2025-01-29T09:05:31.096Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7du7N9sCpTXRcuH75iBAX2" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7du7N9sCpTXRcuH75iBAX2" + } + } + }, + "name": "Merge", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "7dgeATZJnWgT3vi8RE60Ow" + } + }, + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "page", + "navigationItem": { + "name": "Merge", + "path": "/" + } + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "7lcE2IF8TiXXKiMj2UGM8k", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-10-24T18:21:06.358Z", + "updatedAt": "2025-01-21T20:56:08.386Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "03fzTwuuEEPDj1HaDHyeDM" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Microsoft Teams", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "13NLM92PvmJCXTeSHS2uMT" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "5l4WmuXdhJGcADHfCm1v4k", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-05-20T07:12:51.850Z", + "updatedAt": "2025-01-21T20:51:19.536Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2jvc3kU4n7OIABiFMTaGyB" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Mux", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "1RwnoLYeRXZvJwc8QGfFAE" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "1VchawWvbIClHuMIyxwR5m", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-07-24T09:09:45.574Z", + "updatedAt": "2025-01-21T20:46:33.401Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Netlify", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "3iEI26pdrWHvrnIREDdV6F" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + } + ] + }, + { + "sys": { + "id": "4QYnIIKna8TpXegJp3oSBi", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "4WuVKeXdeRlqpw8go7Rkal" + } + }, + "shared": true, + "createdAt": "2021-01-19T15:16:33.569Z", + "updatedAt": "2025-01-21T09:22:53.016Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "79M4NDLgejkZSShtdJDuvD" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "79M4NDLgejkZSShtdJDuvD" + } + } + }, + "name": "Ninetailed", + "src": "https://contentful.ninetailed.io", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + }, + { + "type": "Link", + "linkType": "Entry" + }, + { + "type": "Object" + }, + { + "type": "Symbol" + }, + { + "type": "Text" + } + ] + }, + { + "location": "page" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "2KGwCxSgYcS5KKsb8ZyN86", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0qUM6SnNjkKqN2JVBUDk4a" + } + }, + "shared": true, + "createdAt": "2022-10-24T22:13:23.538Z", + "updatedAt": "2024-04-03T19:53:55.580Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3AV2DZ5Pn9oQJqQ6SFVBC6" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3AV2DZ5Pn9oQJqQ6SFVBC6" + } + } + }, + "name": "Octana", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "77RP6IMXl9Mt9q5NQrLi4u" + } + }, + "locations": [ + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + }, + { + "location": "page", + "navigationItem": { + "name": "Octana", + "path": "/" + } + }, + { + "location": "app-config" + }, + { + "location": "home" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Link", + "linkType": "Entry" + } + ] + } + ], + "parameters": {} + }, + { + "sys": { + "id": "i43PggcHag2PCrGjYTiIX", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-07-24T12:38:34.885Z", + "updatedAt": "2021-08-03T12:11:21.857Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1lbcJCitOqcNZToAh8Mkxz" + } + } + }, + "name": "Optimizely", + "src": "https://optimizely.ctfapps.net", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-editor" + }, + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "3Xh8uDnRiZ0hpUyWCZtWmn", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0NCstxnb2tyMr22ly7sBI7" + } + }, + "shared": true, + "createdAt": "2022-11-07T16:34:30.956Z", + "updatedAt": "2023-03-15T16:56:43.577Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0Nxch2ljQM7Txe1noKMEDx" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5SsU5BsjOoYnI1BVGDrmGt" + } + } + }, + "name": "PhotoShelter", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "2wKsot67ek0iKNRsFL7gVr" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ] + }, + { + "sys": { + "id": "5O9v59Lbugb5tFCMeyLP8K", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0g2JAivWiSKz1VCe23uUe8" + } + }, + "shared": true, + "createdAt": "2020-08-05T21:29:37.674Z", + "updatedAt": "2020-10-23T08:21:24.446Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0g04BohAJNYkYM0FOLCPKs" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0g04BohAJNYkYM0FOLCPKs" + } + } + }, + "name": "phrase", + "src": "https://pa-contentful.netlify.app", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + }, + { + "type": "Text" + }, + { + "type": "RichText" + } + ] + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "1wxoLYYtUviNg9e6m5Ai54", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0dPFwFwaNijMAAcuiJT5TX" + } + }, + "shared": true, + "createdAt": "2023-04-27T08:38:08.011Z", + "updatedAt": "2024-11-19T14:30:12.782Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0dOTTmNbAKcqKjfuPCrkXT" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0dOTTmNbAKcqKjfuPCrkXT" + } + } + }, + "name": "Phrase TMS", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "2BgFHrPZm2dYOGkHKxZP2N" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "Phrase TMS", + "path": "/" + } + } + ], + "parameters": {} + }, + { + "sys": { + "id": "5WpRlPR9T0hdBeXGQ5bEiz", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "2BWdsuNrGXGPjplGDwjpuP" + } + }, + "shared": true, + "createdAt": "2021-01-27T06:46:34.442Z", + "updatedAt": "2021-01-28T13:12:36.030Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0TqLKiJJkt2PzzENv41cyv" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0TqLKiJJkt2PzzENv41cyv" + } + } + }, + "name": "Qencode", + "src": "https://contentful.qencode.com/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "2YQkSSHsqSIwWhqzisdovW", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-08-19T21:44:18.814Z", + "updatedAt": "2025-01-31T19:55:43.291Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5wnS4py3wwn4xgtUhYXaA5" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Raster", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6WXuJ4OCGRgsQ0pwJ1ynOK" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "installation": [ + { + "name": "apiKey", + "type": "Symbol", + "id": "apiKey" + }, + { + "name": "orgId", + "type": "Symbol", + "id": "orgId" + } + ] + } + }, + { + "sys": { + "id": "7ek22esW2z9i1kdmevLJXd", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2021-03-11T15:29:55.343Z", + "updatedAt": "2021-03-11T15:29:55.343Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2YVRzNgF2sE64ooav1eKSd" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2YVRzNgF2sE64ooav1eKSd" + } + } + }, + "name": "Repeater", + "src": "https://hopeful-ptolemy-922717.netlify.app/", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [ + { + "name": "Custom Value Name", + "id": "valueName", + "type": "Symbol", + "required": false + } + ] + } + }, + { + "sys": { + "id": "6sLWDUsuXcyIfkPeokdRxJ", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-10-28T08:43:21.403Z", + "updatedAt": "2025-01-21T20:30:47.119Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2LSyXwc717JeKfw5DIgg6W" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Saleor", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6O0BY9hY5wG75yJSgUD5HP" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "1O8njPYTGO44VueSJNBrdZ", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-06-01T18:58:45.824Z", + "updatedAt": "2024-12-12T03:19:05.979Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7J9Yl0eiCbWcz1a6dZz2ou" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Salesforce Commerce Cloud Connector", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "CsrBcNciwbL2ttD739JKv" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + } + ], + "parameters": { + "instance": [ + { + "default": "product", + "name": "Field Type", + "options": [ + { + "product": "Product" + }, + { + "category": "Category" + } + ], + "id": "fieldType", + "type": "Enum", + "required": true, + "labels": {} + } + ] + } + }, + { + "sys": { + "id": "GdOFzqcDrEbmn2teDQE2i", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-03-29T19:19:08.656Z", + "updatedAt": "2025-01-21T20:39:53.281Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FNJe2xmShG6mc5Cqsy6eW" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "SAP Commerce Cloud", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "3DkLV6i7HmiVKF0FzrEOg8" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + } + ] + }, + { + "sys": { + "id": "7jJoGTAjjjTZqedusaIU7M", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5u1hLJSfU79YOdpNtySNat" + } + }, + "shared": true, + "createdAt": "2023-02-16T12:35:48.878Z", + "updatedAt": "2024-09-19T04:28:44.262Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5tiYEmkRQTmzxm19lqi0Md" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5tiYEmkRQTmzxm19lqi0Md" + } + } + }, + "name": "Scaleflex DAM", + "src": "https://contentful.demo.sfxconnector.com", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "60S8P6KWlzfazXqMjhsJ1v", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-12-16T15:07:42.148Z", + "updatedAt": "2025-01-31T19:55:54.596Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2MzbkIYbpZL19Dtc16UoJy" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Shopify", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "k2g7OVjDMtSFIUKGDkOam" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + } + ] + }, + { + "sys": { + "id": "5E71q6bdze3Haj9F2n9czY", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0SEv9uJudA095dlkpARGvs" + } + }, + "shared": true, + "createdAt": "2022-06-30T08:32:20.862Z", + "updatedAt": "2023-07-19T09:19:26.677Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5rhzcuH9Wx3nurftHBCYVZ" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5rhzcuH9Wx3nurftHBCYVZ" + } + } + }, + "name": "Shopstory", + "src": "https://contentful.shopstory.app/", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "parameters": { + "instance": [ + { + "name": "Mode", + "default": "content", + "id": "mode", + "type": "Symbol", + "required": true + }, + { + "name": "Canvas URL", + "description": "With this parameter you can override global canvas URL for this specific field. In most cases it should stay empty.", + "id": "canvasUrl", + "type": "Symbol" + } + ] + } + }, + { + "sys": { + "id": "2unqOCspPxYbyM295yh51V", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5FxqrACp1SSuw3oSAUCXcw" + } + }, + "shared": true, + "createdAt": "2023-05-12T15:57:51.375Z", + "updatedAt": "2023-05-19T14:24:16.626Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7spvExYxsoecxOkXu6JpTN" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7spvExYxsoecxOkXu6JpTN" + } + } + }, + "name": "SiteSpect", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6jO80YvyLTqsFOa78bFnSz" + } + }, + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + } + ] + }, + { + "sys": { + "id": "7ir40h24qLGSQWJ6JCS3sk", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2021-12-02T12:36:53.667Z", + "updatedAt": "2022-02-09T10:11:47.526Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1lbcJCitOqcNZToAh8Mkxz" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1lbcJCitOqcNZToAh8Mkxz" + } + } + }, + "name": "Slack", + "src": "https://slack.ctfapps.net/index.html", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + } + ] + }, + { + "sys": { + "id": "24SX6dqadSbp2kTSBSNw0L", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "2QOGgGnLgLCv0ROiZ3wOBr" + } + }, + "shared": true, + "createdAt": "2021-08-03T18:26:51.989Z", + "updatedAt": "2022-08-16T13:50:52.528Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5oh1nnjVvZgRgkijq7lW1t" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5LG9NsobZHM3BS2bNr4wcn" + } + } + }, + "name": "Slatwall", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "2JkgvZqkwMNMCrWJeeNlAV" + } + }, + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "7fJGa8IE51jJdakiyBwcJ5", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "12AsJraQyXh1tM0uoQ51K5" + } + }, + "shared": true, + "createdAt": "2022-06-27T12:49:30.113Z", + "updatedAt": "2024-12-09T16:01:23.574Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "12rWPvzWa14PM2cI0c83Gd" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "12rWPvzWa14PM2cI0c83Gd" + } + } + }, + "name": "Smartcat", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "52Iw1IbBDsfMNgmasSjpIH" + } + }, + "locations": [ + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "page" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "6ABxlejtWcEubKLM42fjMD", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-01-31T11:06:22.084Z", + "updatedAt": "2020-04-27T12:28:47.438Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5NItczv8FWvPn5UTJpTOMM" + } + } + }, + "name": "Smartling", + "src": "https://smartling.ctfapps.net/frontend/index.html", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + } + ] + }, + { + "sys": { + "id": "4c6SxDAXoHPLcFmoMLvGde", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-09-27T19:17:22.793Z", + "updatedAt": "2025-01-31T19:55:54.291Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2D8ljY8aA7f32Wxhcf8lxD" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Surfer", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "1BuauoUv7GkWuh6Q8U7Jio" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ] + }, + { + "sys": { + "id": "QMdzLmdwbV0j4ZrVY4WOv", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0uSnG7ikBn0c6T0kS6hhlx" + } + }, + "shared": true, + "createdAt": "2021-03-18T14:58:18.720Z", + "updatedAt": "2021-03-18T14:58:18.720Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3IatEc5aJ2AXeP0sgPkLUM" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3IatEc5aJ2AXeP0sgPkLUM" + } + } + }, + "name": "Swell", + "src": "https://swell-contentful-picker.vercel.app", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "7CPoljE4C0HpsVZ7a7HrZG", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2021-07-05T09:39:05.993Z", + "updatedAt": "2025-02-04T08:06:39.045Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7JWRGOYWY5AnjuoNVzBwyO" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7JWRGOYWY5AnjuoNVzBwyO" + } + } + }, + "name": "Tasks", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "4x8Wfpo5QSpXPe3z5dNRCS" + } + }, + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "EPRcLyDrBeAQgLtTRfPwu", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "25nCTg3Bl7iHWXk541IXcc" + } + }, + "shared": true, + "createdAt": "2022-05-05T07:11:38.645Z", + "updatedAt": "2024-11-13T11:41:18.327Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "25dziZyGrZWrZ6gsQmtQze" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4pwK4DjXHKcAdt4nv6ZSyO" + } + } + }, + "name": "Trados", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "KwZyWqOAgBnqjCnRi9aW6" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "page", + "navigationItem": { + "name": "Trados", + "path": "/" + } + } + ], + "parameters": {} + }, + { + "sys": { + "id": "b7SVv0k1EYbQRsusviQDi", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-01-04T14:49:53.208Z", + "updatedAt": "2025-01-31T19:55:54.908Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "549ZG41aazTYkABSEvfRyA" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Transifex", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "4yTnBmPutHfeQkRHdyHizn" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "1SZgLiOT63ijEzPJZQ4QWT", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-03-20T13:46:37.843Z", + "updatedAt": "2023-09-28T16:03:15.817Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2jvc3kU4n7OIABiFMTaGyB" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2D8ljY8aA7f32Wxhcf8lxD" + } + } + }, + "name": "Typeform", + "src": "https://typeform.ctfapps.net/frontend/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + } + ] + }, + { + "location": "dialog" + }, + { + "location": "home" + } + ] + }, + { + "sys": { + "id": "1BeY7xDfJfvD5El9ymsOZF", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "14pf4vP1CA4EGu7AXnr1P5" + } + }, + "shared": true, + "createdAt": "2020-08-20T23:27:10.487Z", + "updatedAt": "2022-04-26T20:01:40.373Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0SJxBnMuapGsHZPLP1q7US" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5uDNLZHF9vPRvtZ88GeNGi" + } + } + }, + "name": "Uniform", + "src": "https://contentful.uniform.app/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + } + ] + } + ] + }, + { + "sys": { + "id": "3Ju8DSs6cEG3TnqFa979vc", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-09-27T19:12:10.394Z", + "updatedAt": "2025-01-31T19:56:05.979Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2D8ljY8aA7f32Wxhcf8lxD" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Uploadcare", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "aKexNUjkGdX7VRRIClMCI" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "instance": [ + { + "name": "Max number of files", + "description": "The max number of files that can be added to a single field. 0 means no limit.", + "id": "maxFiles", + "type": "Number" + }, + { + "name": "Upload sources string", + "description": "Comma separated list of possible upload sources. E.g. `local, camera, dropbox`. See docs for details: https://uploadcare.com/docs/upload-sources/", + "id": "uploadSourcesString", + "type": "Symbol" + }, + { + "default": "useGlobalAppSetting", + "name": "Allow to upload images only", + "options": [ + { + "allowImagesOnly": "Allow images only" + }, + { + "allowAnyFiles": "Allow any files" + }, + { + "useGlobalAppSetting": "Use global app setting" + } + ], + "description": "If selected `Allow images only` then editors won't be able to upload anything but images.", + "id": "imgOnly", + "type": "Enum", + "labels": {} + } + ] + } + }, + { + "sys": { + "id": "4QsJrTg4fFjX7UmQDkeayq", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-01-23T22:37:02.320Z", + "updatedAt": "2025-01-24T23:01:55.307Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0VYEozm0sWFT6Wee4Zm9Dn" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Vercel", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6M05o3q40mxTfvUOu3ZnOS" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "3HFf3DxTPYMh2L8214oW1s", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-09-13T18:26:51.771Z", + "updatedAt": "2025-01-31T19:56:05.440Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "03fzTwuuEEPDj1HaDHyeDM" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Voucherify", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6CVqOrdznLgtiDsfW2eiwo" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ] + }, + { + "sys": { + "id": "7DnamgI4qKntUVMcOfZtQk", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0obnPYhku3jo775GiGSivz" + } + }, + "shared": true, + "createdAt": "2021-06-14T06:34:10.948Z", + "updatedAt": "2021-07-27T15:46:09.562Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0i6k6A8gvnzsopMOPMqoqT" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5Pdjlm0t7kKPqgRXTEcoDV" + } + } + }, + "name": "VWO", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "2nZR4C05uQJr3skPaYUXyL" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "entry-editor" + }, + { + "location": "page" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "71oYmQJFCIWn9pxizjN8dZ", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2025-01-29T16:54:50.238Z", + "updatedAt": "2025-01-31T19:56:06.115Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1TxB84jpuvrlDUiXNmjAnk" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "VWO - Feature Management & Experimentation", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "KH2X9F4QeHzT8SLQKD5CN" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "6StWOM1AZBDHDjynDkm1iz", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2022-08-16T11:51:02.704Z", + "updatedAt": "2024-09-10T18:08:55.958Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0xAU1rz5uyEJ0ItTExcjsa" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Wistia", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "58RN96o2neL68XlitQnmGX" + } + }, + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ] + }, + { + "sys": { + "id": "44A0iM4wuqcQBDfg6qrlQx", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-03-01T23:19:13.465Z", + "updatedAt": "2025-01-31T19:56:16.427Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "03fzTwuuEEPDj1HaDHyeDM" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Wix", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "1tWK9eLCM0S4xpGsULxO39" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "IzXGEKn1YcF831Z2r6TtN", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2021-11-15T13:57:44.050Z", + "updatedAt": "2025-02-04T08:09:09.786Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0jz6hPHbUidMTiQCdO2KmW" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7JWRGOYWY5AnjuoNVzBwyO" + } + } + }, + "name": "Workflows App", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "3o2ZmDGW4KWe1f40Ws9FCl" + } + }, + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "Workflows", + "path": "/" + } + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "6C8a6ICmjODMMsNC0Un0Xe", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5RHAZeCcIG0BSCJll8MFMs" + } + }, + "shared": true, + "createdAt": "2023-08-24T14:06:10.167Z", + "updatedAt": "2023-09-12T20:57:19.352Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5RACtD6G9a7W26r6lzrO00" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5RACtD6G9a7W26r6lzrO00" + } + } + }, + "name": "Writer AI Content Detector", + "src": "https://contentful-ai-detector.writer.com/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Text" + }, + { + "type": "RichText" + } + ] + } + ] + }, + { + "sys": { + "id": "5wmH6IpRamZ66ofjP9THlz", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "1o92OHmPmIOWNYuX0jJQQE" + } + }, + "shared": true, + "createdAt": "2021-12-08T11:05:03.091Z", + "updatedAt": "2022-06-08T17:24:53.207Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1o835krXYQ8Rtv4GEKxaaI" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1o835krXYQ8Rtv4GEKxaaI" + } + } + }, + "name": "Writer Contentful Extension", + "src": "https://contentful-plugin.writer.com/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Text" + }, + { + "type": "Symbol" + }, + { + "type": "RichText" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "5i8iZ60GpkbZQJzutNXit", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-03-29T16:48:17.872Z", + "updatedAt": "2025-01-31T19:56:16.827Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0VYEozm0sWFT6Wee4Zm9Dn" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Xillio Transcreate", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "24oi7FCTTLvoXDO0u6dFRH" + } + }, + "locations": [ + { + "location": "page", + "navigationItem": { + "name": "Xillio Transcreate", + "path": "/" + } + }, + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "4u3pN6m2aOOBTr9kGP8LJK", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "28CeCjl0ZH2X0gql3fnuHZ" + } + }, + "shared": true, + "createdAt": "2020-10-29T09:22:15.212Z", + "updatedAt": "2021-09-29T12:04:10.546Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4PkXeFfQ9DyvCf9Y0yWP96" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4PkXeFfQ9DyvCf9Y0yWP96" + } + } + }, + "name": "XTM Connect", + "src": "https://contentful-connector.xtm-intl.com/app/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "XTM Connect", + "path": "/" + } + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + } + ], + "includes": { + "ResolvedAppDefinition": [ + { + "sys": { + "id": "6tLfWB4Y2ppAmKynXo4STi", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "78VS3MWLI40BF1TzF206cD" + } + }, + "shared": true, + "createdAt": "2023-01-27T10:09:30.721Z", + "updatedAt": "2024-03-05T19:20:23.990Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "78UP2gMaShITMmFWzp6ZD1" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "78UP2gMaShITMmFWzp6ZD1" + } + }, + "expiresAt": "2025-02-05T20:05:50.541Z" + }, + "name": "A-sync Publication Manager (Marketplace)", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + }, + { + "location": "app-config" + } + ], + "parameters": {}, + "src": "https://d4e9e180-fc67-493b-b077-367c8807b8fc.ctfcloud.net/6NETxlMNCYcgwwTeCmuqTL/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kNGU5ZTE4MC1mYzY3LTQ5M2ItYjA3Ny0zNjdjODgwN2I4ZmMuY3RmY2xvdWQubmV0LzZORVR4bE1OQ1ljZ3d3VGVDbXVxVEwvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=ftPNaI1QW-m1cloQSP2qUBQbkmWscp9OrSiwP8G75LuVL7PBZtiWe9sIT0pfMD1W2VlglgHbfxEKQE9OKQEvqPhv21UGjRdpNQwPRPrW7wYLVFvqnPDVvsdUQOaWtffyU89uTpzzLSpCF3qZMg2mBAW2K7P~tldm4y5YsY6cv8Npc7c0TF1Q2G213PgoohDQTtf-RjMRnZx7ntIayqYb6RfUxJMZQC0xMYe2tegBp-bIV9AEd1LgXWTEagRIYecSe6tw77MoJmBbACxkRdy7NP7rahFVzI4vml2iSW~Q4URT4eTm19rc-l2nf9b1ZMzeBRcnYWT7fgRfoCbDiRQcOw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "7CsrDDzb0WDqWgakHyfJdY", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "3WcMEN2rEin3ZZPsoF8Lz0" + } + }, + "shared": true, + "createdAt": "2020-10-14T19:49:23.931Z", + "updatedAt": "2023-05-02T15:59:57.914Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3W9pkJkQkz56EL4hsjvm2W" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3W9pkJkQkz56EL4hsjvm2W" + } + } + }, + "name": "Acclaro Translations", + "src": "https://ctf-translations.acclaro-apps.com/frontend/index.html", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "entry-editor" + }, + { + "location": "page", + "navigationItem": { + "name": "Acclaro Translations", + "path": "/" + } + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "6RGLVmXYrGaIIRIda1HwAC", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-01-10T00:02:15.750Z", + "updatedAt": "2025-01-31T19:54:58.984Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "549ZG41aazTYkABSEvfRyA" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.543Z" + }, + "name": "Adapt Essentials Bulk Asset Fields", + "locations": [ + { + "location": "page", + "navigationItem": { + "name": "Adapt Essentials Bulk Asset Fields", + "path": "/" + } + }, + { + "location": "dialog" + }, + { + "location": "home" + }, + { + "location": "app-config" + } + ], + "parameters": {}, + "src": "https://e19813bb-23a9-4502-a311-61ac75874216.ctfcloud.net/3fa8kKWRMBk9K200X0xh8e/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9lMTk4MTNiYi0yM2E5LTQ1MDItYTMxMS02MWFjNzU4NzQyMTYuY3RmY2xvdWQubmV0LzNmYThrS1dSTUJrOUsyMDBYMHhoOGUvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=Ul0bXKM0grmDNpLJWJAGONcqSaXbRFHGIVUND4mWQuBCBK2XfkwsQJrH-Gjr~~wWcYNkxNOwC2-8JXWNrNcbfnADJfHUdlRX1zfdCnWRwrV3oyj81~OEjPQtil~DnapsJeSzB-obVuTWk3xsxqq5fmzz5NPxPWwWVNZzBWMcrI63eUtQKj2s6cXCNUlXxBlRBZku63dIyJDyR0f4VWAcByV~54fL36-0K1kI-g1MlItoflkNTxRKK8cHqVvOEDouuGtYBhrQcwuPwWyFR4s4tby6s9BFJlTBWICkSAKiS2wTZLKr3003PywnT8VOKgshLDN0fCoI9cGv1ATN0tUyHg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "3iszK8Gl7aaxLvxGyCOhgA", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-03-27T20:14:47.291Z", + "updatedAt": "2024-11-20T23:45:15.094Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6iUaAfJg2ZoKe4oEYF7kxe" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.545Z" + }, + "name": "AI Content Generator", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "src": "https://6c5a9a19-156a-46c4-a6ea-d4e406a18cd8.ctfcloud.net/66LlxbQubgBbmO7UjuQXQn/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly82YzVhOWExOS0xNTZhLTQ2YzQtYTZlYS1kNGU0MDZhMThjZDguY3RmY2xvdWQubmV0LzY2TGx4YlF1YmdCYm1PN1VqdVFYUW4vaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=nIBSp8Oy9fv-dn9U7AKBv2M008XNNGQ3M0EVnaeRJHfEUjbHGktdRqlLoNvGTIYlHuhaahrovewUYcK4Q66WY1ayozsck91A8F1EQUEb-ccnIA1dohzvlIKP4BghhvAHPzoecxUeuy8K~mmgDpsMNiuv~wzS~vuVIKXY~UB1AZdsj0H9Zk-jNEfyeRoPa9yuJQBCa~yl6xBxHZe5l9vxMdMuEpF9VkBDVfO-ad98eyn4CnkUp4b08qtGWLgGPhS3SPy5CtAVVkYMttNTYA6dOZZUkjnDyfwQkoHjfZDOGhTsN~RtAMLxHlPeu5KHcfoNiQ2L8PlIlHbwRpj0gXyscw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "3RheWQRagirMFgWrhMOBxL", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-08-01T18:43:48.712Z", + "updatedAt": "2024-09-25T16:03:48.103Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FJf3IvgmQotV5As5zpGhc" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.547Z" + }, + "name": "AI Image Generator", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "parameters": {}, + "src": "https://7ece24c6-f6ff-4ad7-8cfd-a5d59bdc1cd1.ctfcloud.net/2oIeB0suYvcMq0vp3iDHfD/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly83ZWNlMjRjNi1mNmZmLTRhZDctOGNmZC1hNWQ1OWJkYzFjZDEuY3RmY2xvdWQubmV0LzJvSWVCMHN1WXZjTXEwdnAzaURIZkQvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=mYq304b1JQkAl4RD9iXZa0ImF9Bi7trCZ7Y24mbtwRIF2G9y8fYi99qB5568xd4rNy9E0DL6gZMtRWieLvz965d-rpNTiP0FKlPvz-z40lF-CLdwn927UlbEuQEp0GB7ceKi4QpvIJ5N1f9RsYkuYtNoEZfIqKKkphjYDOWIsdpyZGTND6r4pWuHufcDfWl6PKo-rCROcqcnsVT5C1W7~zZLIoy8e2ilQWdxIk8l7x1pskqP2VYbi44AYQw7aMINwlUbjYlNCrC6gMuDVCI75RDEdnnVrViOQ7rfWru43vg9g0LjmRohjUS0~sFqZgedY0KG9nG1GjMqaqllIWFQtA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "5bWaMz0w0jPWvYmkgcVCX3", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-02-12T15:27:52.465Z", + "updatedAt": "2020-04-27T12:26:41.444Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5FvvIcNbfAn7SPSO97fIMp" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5NItczv8FWvPn5UTJpTOMM" + } + } + }, + "name": "AI Image Tagging", + "src": "https://ai-image-tagging.ctfapps.net/frontend/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + } + ] + }, + { + "sys": { + "id": "5iQYfM7S9CWFeywx0lrF6A", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "3HXcJCikRb72JNTFI0kUEI" + } + }, + "shared": true, + "createdAt": "2023-02-24T10:25:25.169Z", + "updatedAt": "2024-09-02T12:47:22.963Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5CawfuQcCBeg31D5FjPxYG" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5CawfuQcCBeg31D5FjPxYG" + } + }, + "expiresAt": "2025-02-05T20:05:50.549Z" + }, + "name": "Alt Text AI", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + } + ] + }, + { + "location": "page", + "navigationItem": { + "name": "AltText.ai: Bulk Update", + "path": "/Page" + } + } + ], + "src": "https://ae46b17f-42c6-4df6-bdca-b2647758d4f4.ctfcloud.net/sjvZ8VI5Gl9dNGZxg6Thd/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9hZTQ2YjE3Zi00MmM2LTRkZjYtYmRjYS1iMjY0Nzc1OGQ0ZjQuY3RmY2xvdWQubmV0L3Nqdlo4Vkk1R2w5ZE5HWnhnNlRoZC9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=bGeYbSidg6MMrioVNpLZIEpqaZ90zpOxWhZJ5o~vunGwL-UoCPosi8LlA36j4dEmKI3tJ0qNX4qz9NJ~qrKJ8aY5KQRiaR-JKXEJ7fCri7HmrNJLDptHfl9fXe3LLsKXSosG0OQuEK6b1~DwvIGtqiU7JcNZwdBG9GeRkEQJbod-nbXpvWJuGy3sXx--bVNk6zquOlfLAVW4YcL-QQt8l0tLukNieRwrOpSpSP567eEkq6gJm1ZOONg8gmhrsejnyKvSM6gmOWHpWC6nDS8Q2XF28HWEL1slybLAIEvaCMi72nR6DNm-xVTg2tFjwRyct2NClXUggtcYh6cKx6Ekfg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "jTed08LvhkveeUoBpJOim", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-01-25T16:14:16.679Z", + "updatedAt": "2024-10-28T19:41:52.339Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0VYEozm0sWFT6Wee4Zm9Dn" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.550Z" + }, + "name": "Amazon Bedrock Content Generator", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {}, + "src": "https://0a8a864c-2d27-4881-ba3b-3b0627c259c2.ctfcloud.net/5YBzEzuBdpUFXkf4LPCad8/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8wYThhODY0Yy0yZDI3LTQ4ODEtYmEzYi0zYjA2MjdjMjU5YzIuY3RmY2xvdWQubmV0LzVZQnpFenVCZHBVRlhrZjRMUENhZDgvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=Hx7JNbX4hXwIUqasoGT4v4Lih4vDS~xUaaEWtiaw6YHNzIZGWvEG4IB4BzpeVYrr-cZDgkuPt5olh7yluWo4R9a66R~HQgePR7QbSR5weXAmZkYxN~DGvXJZGtb1I6WvGr~vija4~M8LnqV37uOAubI1BkwiSJetTKKH3f6cpYXhtYOZ4VaHszga2w4SSytyMP1RH7swIS82H852DWU5SBaeNIF0NF6qCW1c-gcNW04NGLXMPGteFjJr1X6~-F8iX93XqAlmrICU3aSfYaED0IjFQbeNz8eWc~BaNTNm~-2clb7Zifh4JMYPU7CM345y6vx~Zf73i-HzQXt8GJwZlw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "5HVpneN2ZR6uYrOs2TOumr", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "4J91ewqssC6Q5X8EkneCGX" + } + }, + "shared": true, + "createdAt": "2024-01-25T00:15:37.655Z", + "updatedAt": "2025-01-23T02:27:41.845Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4J52AcomYtlp9LGabXlCrR" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6HJDZrUnh9Nc0a3JErpOqa" + } + }, + "expiresAt": "2025-02-05T20:05:50.551Z" + }, + "name": "Amplitude", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "entry-editor" + } + ], + "parameters": {}, + "src": "https://bb901422-1114-41dd-a15b-91a7e312b887.ctfcloud.net/4UVBDXiCpT3oH85Vh7PoIl/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9iYjkwMTQyMi0xMTE0LTQxZGQtYTE1Yi05MWE3ZTMxMmI4ODcuY3RmY2xvdWQubmV0LzRVVkJEWGlDcFQzb0g4NVZoN1BvSWwvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=KpVHbXHfLWj9mjQGVjztlq6oXZ6kOTjUxn7wGS~V2BA~771opeCoB-6udfJPqeHOdMPs7zwOVg1GjZA3RMci0XHQ27pW-Kt2wZikAR0KLfu-5F6S2GoLWP8j-S6BhMS4NR94LpDOIoUigmpE2hWWzmeQiPWGaBefaUMZU9crUeOb1ET4I2hrtiALnKdvcwTih7gb5UiIGb0p0dHPv5ftlS6lqcsPh7ha6Jwdvowm6zGl2uVXwtY-pBOQaC456wkrtYgqXHtf7W7sc7HNDfdh96OT~nycNpPKaVhnDVSVRCMiLkP4mq7N9EgY1WvEXwbSc5C7bgGjQ2BM7DA0IEMjRQ__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "4OxLnZ6demuSG0dz7rgcEB", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "6jM5PF1GV3gL8H96Q4b1px" + } + }, + "shared": true, + "createdAt": "2021-06-21T14:15:44.474Z", + "updatedAt": "2023-12-26T15:15:44.100Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6jL2ThWHHumVn8ZQIZLDM7" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6jL2ThWHHumVn8ZQIZLDM7" + } + }, + "expiresAt": "2025-02-05T20:05:50.553Z" + }, + "name": "api.video", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "instance": [] + }, + "src": "https://9e36a740-73b8-43d6-af8d-3bfc2a3f3895.ctfcloud.net/6fcnBg5UfR7ql11szgwbMX/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly85ZTM2YTc0MC03M2I4LTQzZDYtYWY4ZC0zYmZjMmEzZjM4OTUuY3RmY2xvdWQubmV0LzZmY25CZzVVZlI3cWwxMXN6Z3diTVgvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=dUpBZvt7H28otXdxZabC2zMM9oqSYE~-xeRZnmVqn9A6s~aYOrDNXUgY5GXkLMgfnbY9QjqzOPYgT67IlONPO3xK7K~txglDkywRm97KmT-7ul9M25wwOsHjU6ik5flWekBX3IY-5NvYre1anEkROvUuMiEADJRxVaIE5XeOb~V1T3XF8rjnh~ls3ALhfjPEMSEtFHp6kyMVHwuP3rdmWG4YmHFlko-OQScIBQjGK~hch3R-meHBSDDF8ji7-vk7Bljiyugk4NZncZkQCKX6F3~2u1slga9BD1PAeqCHvOyIqoPezlEjrKExTi-QrTcEQ6RKpjQnVOZXCOy0UwDn1A__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "RkD9DMLgnqahWzcYyQ0RI", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "1UCeHE7rmDOdfNcgpCN3z2" + } + }, + "shared": true, + "createdAt": "2023-04-12T13:44:32.948Z", + "updatedAt": "2023-08-09T19:07:58.814Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0DBVatr5nHZC18z9wRBGd3" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0DBVatr5nHZC18z9wRBGd3" + } + }, + "expiresAt": "2025-02-05T20:05:50.554Z" + }, + "name": "Aprimo App", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "src": "https://1c437f53-b92a-4d1a-9901-8233315ea382.ctfcloud.net/2f8I1i02IKmVOvMDt3aJPM/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8xYzQzN2Y1My1iOTJhLTRkMWEtOTkwMS04MjMzMzE1ZWEzODIuY3RmY2xvdWQubmV0LzJmOEkxaTAySUttVk92TUR0M2FKUE0vaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=RkxWL4R~3B4I~AynSOWK7cvbNlKo-91ODWZsuE417J~bfgPzXb01boh1evohXiXxxqrbmxTvF~F1KU9jHF9pDWj6Pt2WkolC~sYRObEuW2NAt3UFjacgaGX0POlACaPB073~hd2E4mH7E1iJYjFF~72UcWqyL4V9yNL1FrN-iz5PuHBqfkEUhazKn9j81pdXDuxlm0YrYCXsnilTHpaOEP3Q~Wn1FyzHs32qwIx8u~7BHxEUSIhSFMRJ6pI8600FvFkDL730fsKPnWgFzX4ktnEZoHBTPDHinR99kDJcZBUZcP3pCC16CVUt9pMM0xutDaq~NG~aLYuHaCICrEchNQ__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "26OUmTSqwgnCTM5BnkJL83", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "4jYjoMK3b0oP9MJWtwACRJ" + } + }, + "shared": true, + "createdAt": "2023-07-20T19:58:11.391Z", + "updatedAt": "2024-11-13T15:48:26.522Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5jA82i8PO6yYxpusZflUuH" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5jA82i8PO6yYxpusZflUuH" + } + }, + "expiresAt": "2025-02-05T20:05:50.555Z" + }, + "name": "Arboretum", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "page", + "navigationItem": { + "name": "Arboretum", + "path": "/" + } + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Link", + "linkType": "Entry" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "home" + } + ], + "parameters": {}, + "src": "https://45541c4b-f1c2-4de6-912b-e1656654bc67.ctfcloud.net/7khrwvd7hneLQJWeU2JCpg/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly80NTU0MWM0Yi1mMWMyLTRkZTYtOTEyYi1lMTY1NjY1NGJjNjcuY3RmY2xvdWQubmV0LzdraHJ3dmQ3aG5lTFFKV2VVMkpDcGcvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=Mc5oVe77gwrAqZsdkXnM7EZ4ahePlsyZUez8PjUbjh0KH2SEyCiHMOI3DXo~7N-8Ft1V-kT1G7IOxDhRF1c0FBYjZqPR0SV2yempUT7R34nq5zSGU4uqBQKKhgI65-CdyZitfmKvuT88yFw9kpRrntkeCLXxQaGdnHZB2J518x-s49KV6ui-AFm7ZwV495xlKa2LxChgd3Un1nZr8fxm2B-meYMqWLW7TzR2s0qBaWlY6nDa~C64bCuQg0GMA6vIXioV5B~Bno1du4vRepnFm9oZvPref17IcBuhIvg1czFZZZAYyAAcNQAmVWjH9EUF6cbJpFpv-5GyCKpBfgyQfQ__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "1mVogDvuE0GuW4qp4dk4zQ", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-06-15T15:45:53.638Z", + "updatedAt": "2024-12-12T04:15:29.920Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FJf3IvgmQotV5As5zpGhc" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.556Z" + }, + "name": "AWS Amplify", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "src": "https://2d019caf-8897-4528-af41-0460a31949ae.ctfcloud.net/1m3ZeDMfTiS1BDNB6vmknB/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8yZDAxOWNhZi04ODk3LTQ1MjgtYWY0MS0wNDYwYTMxOTQ5YWUuY3RmY2xvdWQubmV0LzFtM1plRE1mVGlTMUJETkI2dm1rbkIvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=OtrtiZTIRIuhO5v9jTTRA0XrvHF2m-3jwLcJJj5YtnsoNOd8dqwwS~RaAUC4BUqigzYgCqdX1gN~XPMzJnK3u7XtDgXkIDCA7EZBJ0gpAZ1plE1SlzhTIp~uh2~bOFtAiRzsoSwsc4yqchVyeosedAvFO48knf8u-E51NCOKpJMLsRCydeffDYFHyAnEFMttLcdcMEgKeop~BHP6dINJ2USGA7pKwQiozf-6bYFiu-WYDbF1ECFzkN-i-K-KGbnHhcaoisLx8Qt5dPDmS2ozOZDLPpc-RZNx3xlB5ZC2zcyn1K0QBKRibqqV0WOkzRO-4p6HfWDX7LUsDFZBNntrrQ__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "5KVbHTjQJT7XGrAy7bLIlC", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "7ujDWYE18wGkFkP8NeByHh" + } + }, + "shared": true, + "createdAt": "2021-10-04T08:46:53.481Z", + "updatedAt": "2022-02-14T08:47:21.274Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "560u6wCl1rlKFX3XwBCshV" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "20n37hdJoDPFuPMRmCt0Q0" + } + }, + "expiresAt": "2025-02-05T20:05:50.558Z" + }, + "name": "BigCommerce app", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "app-config" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + }, + "src": "https://bd2698eb-c97e-4d54-9f91-a9a3df56dac4.ctfcloud.net/6nUzTxsGKY9uhqUpmsxyNJ/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9iZDI2OThlYi1jOTdlLTRkNTQtOWY5MS1hOWEzZGY1NmRhYzQuY3RmY2xvdWQubmV0LzZuVXpUeHNHS1k5dWhxVXBtc3h5TkovaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=kDilQ6NrltYMkuyP4scpw632mjCky3arTFDkiVttE-YF~BHfDDivEEeUi8XW2yPQUPinl5QuAvtCa4RNxe0O9w8CgNRvbJPBPwqdyVDuYy~pPnnyBTz9MODFMyHuI5-hTcOyS-RdG06g7BuKqI9Jax3UoMf4WitKhp9B4bxSYfiLqkAIFlctyNiRzlBunBDziylysrQMlTbDrVo28dRa2mHoxUpf8QVn75-53h4gHo8IlUVyGclrm602VjALZnEzkwyRtpwf2Jlq9jHpsg-9V4u9zIWUI~Z6YuiI4a7kH2iL9JB-BUVSvUi0eC118sA1n0iPy5VjY2orR7A3-sz0VQ__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "4yuhN91ClorVNMXVseJB6r", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5QWhpfISjlF5wNbZ4rkmQk" + } + }, + "shared": true, + "createdAt": "2023-04-24T12:45:14.843Z", + "updatedAt": "2023-05-12T10:27:09.812Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "69AXBWNchCjNtMvSvl9h0a" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "69AXBWNchCjNtMvSvl9h0a" + } + }, + "expiresAt": "2025-02-05T20:05:50.559Z" + }, + "name": "Brand Guardian", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Link", + "linkType": "Asset" + } + ] + }, + { + "location": "entry-sidebar" + } + ], + "src": "https://95b45f3e-b683-4b0a-9950-862639799adb.ctfcloud.net/12HEPsBjXjPqOi4zXp985t/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly85NWI0NWYzZS1iNjgzLTRiMGEtOTk1MC04NjI2Mzk3OTlhZGIuY3RmY2xvdWQubmV0LzEySEVQc0JqWGpQcU9pNHpYcDk4NXQvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=UmYZqFRpiiwIrBidNN080gGAGv1kUDJp4eqJnGu2s5yai0xJJCQlQZ3MGFIClvDqC4cO1JTU3h5uwVn9y~lG3JBXpUCnQwZ1UTZNB-00nyV9AUR3vcsrt~9exYWTe506Ip0IsvPkUUwZYirIBlkllBbfb8vVCB4CpXhPcFAhDP06ThA-VPs8Fn7cg4tp5d0lzT-DMRWXc1~ZpiBCvbHjDOBXKDIdmY5CURGDfLgw3Mca8XJuAc8-8PashVqlawZdg878f6KMtXyVEJhMjS34ikDwrt680sBrrhbCuyFKxr0DYXXzoBFEz9BP374awuLtluK3gMTe9Ep5n5MyT1X24w__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "bgBVVuNbfvUW5tpFnD20s", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-02-24T15:04:26.697Z", + "updatedAt": "2024-12-12T04:10:42.788Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "29B6zorz8plUCN1auThiVH" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.560Z" + }, + "name": "Brandfolder", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "instance": [] + }, + "src": "https://05f8afd5-8130-4e33-866a-ad5dc278aafc.ctfcloud.net/7BeVVNCDi4PPoW8RSHjzrN/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8wNWY4YWZkNS04MTMwLTRlMzMtODY2YS1hZDVkYzI3OGFhZmMuY3RmY2xvdWQubmV0LzdCZVZWTkNEaTRQUG9XOFJTSGp6ck4vaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=QwMeulf7BGlsT8uyxuJEY3a95pe7zpVhJNAirVAT2x9IGpScdUaNVN6zdjC66hR222--Uz5aLAB0uUY2wkAY6LAlp69chAVoKaKsrwRVbw3NqEQhfs6ipAfaiIyjsrdzR2lfoLkWmahzLNb6xDbBKdvaT49YrJTG0XNH8l02w7NkQmdUnTymLcTh1YhtmQUdwWhG0jZ2JGYQ4XFXwaqSBRPWNArfyVvDEvukmMi9WP8DlUQHmtf0qYUlw4ZO3jrF3NWzvujKDI6HsHTsU0Yk0GyO9Uh0zUv9COFXHfqHg1p7X0QRxogbh854vDF7m4KhJmh0Ij9iKg~7LwpPARKUYg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "5KySdUzG7OWuCE2V3fgtIa", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-07-24T12:42:27.828Z", + "updatedAt": "2025-01-31T19:54:58.598Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.561Z" + }, + "name": "Bynder", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": {}, + "src": "https://bcf5c511-c1d8-4bdd-aa3f-35c25a3db376.ctfcloud.net/55On2kbzFcx1LqZsrUFquX/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9iY2Y1YzUxMS1jMWQ4LTRiZGQtYWEzZi0zNWMyNWEzZGIzNzYuY3RmY2xvdWQubmV0LzU1T24ya2J6RmN4MUxxWnNyVUZxdVgvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=WKkjRE7qoFICMJFPYTqOS971yGR8H6ni6onUvnOOR0avRfp0vsJaGDTzvyrYY7kAD0gKldJ51iV9tBM~eK9alyr-DjGod2U2qBPDzauZamQFBqAfCZlRHOp7OZ45cOjY2WdbQ6f2dV9wksFnh0yY~hj7WrlqGnljVi3d3cnr-y8unzDku7or9CLxD9OKSSLGSodsZO0-ytI0vj26W7WUzyIo0gqLBczJkB-i97eWh7uuopxaCB87c-I5EUQcu7FbeMFF3oZrFOIMP7H6K4Db5QeNhL-W13W76Km9u1J~Q-HJfwYa40EOUO7184tXwHDPlbQmdYsX6KOvEGCn8nFA7Q__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "2POIRORfxypO5JsgvufCiZ", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-05-29T16:49:41.594Z", + "updatedAt": "2025-01-31T19:55:11.338Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FNJe2xmShG6mc5Cqsy6eW" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.563Z" + }, + "name": "Bynder Content Workflow", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + } + ] + }, + { + "location": "page", + "navigationItem": { + "name": "Bynder Content Workflow", + "path": "/" + } + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {}, + "src": "https://5d2cb86a-895c-4049-836a-0e26e8381eb9.ctfcloud.net/2GxbNv54GEeSdFE6go7FLX/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly81ZDJjYjg2YS04OTVjLTQwNDktODM2YS0wZTI2ZTgzODFlYjkuY3RmY2xvdWQubmV0LzJHeGJOdjU0R0VlU2RGRTZnbzdGTFgvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=YhNgnIN0Q82fGxMky5AOY35u5La5iXmfSGxQBUDn1VbtterQtUQEfD21mEqRP~9OzS97Err76-JiCzx5ExlrIhH-cr7PWEOqAWS4qkJ6-Lj2b~JJOxu-OJy4PR9TwO-yxQctdoJvsnA3wXGM7g2gNgbCGW9RnFdtQ5Kqkltx46IWC3iX~u-7-Wjfx3JuozyDCKDaI8Njgqw9alamKHWKhbZ1DCgQgiJAGMhqTaweyHXYQCpNdOCRLEdc9jjok-awcBN2Ff4s5noxgQeCjM8Ic7pVVf8ghooBsoqE4m0r2JcWVxl3uTZqkrDPG10KFfZjV0vCcNnk01G4nqwYPqvf4w__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "3ts0Y8tta9da2qV0qQSoZG", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-05-26T12:51:54.718Z", + "updatedAt": "2025-01-31T19:55:10.295Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2RZLldkv24PyQMDfNG56Bb" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.564Z" + }, + "name": "Ceros", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + } + ], + "parameters": { + "instance": [ + { + "name": "Content Type ID", + "description": "The ID of the content type that this app save Ceros Experiences to.", + "id": "contentTypeId", + "type": "Symbol", + "required": true + }, + { + "name": "Title Field ID", + "description": "Field ID (on the content model specified in 'contentModelId') for the title of the Ceros Experience.", + "id": "titleFieldId", + "type": "Symbol", + "required": true + }, + { + "name": "URL Field ID", + "description": "Field ID (on the content model specified in 'contentModelId') for the URL of the Ceros Experience.", + "id": "urlFieldId", + "type": "Symbol" + }, + { + "name": "Embed Code Field ID", + "description": "Field ID (on the content model specified in 'contentModelId') for the embed code of the Ceros Experience.", + "id": "embedCodeFieldId", + "type": "Symbol", + "required": true + } + ] + }, + "src": "https://722db63a-f061-4241-a4a2-cd4286407920.ctfcloud.net/4tCJZGeRRpumT4DX6BotMu/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly83MjJkYjYzYS1mMDYxLTQyNDEtYTRhMi1jZDQyODY0MDc5MjAuY3RmY2xvdWQubmV0LzR0Q0paR2VSUnB1bVQ0RFg2Qm90TXUvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=SdQ06per0J2kfjmt6aagZypB-x9FJ4X0v~2euF~YavMK0fAlJ1Va3agCXo5eXINr3HNRnDRARSdbp4uR~piSEpSt09PQYegYZgpwrtcko511CU10m9r3XFD9oMRl43UptJcq8fY89FPjhqd0-mXdP2HNYrZax0xy8fGQjMa9~MbFc-z2e1Nv3BG~deGD8da8vepoOCiVsm5NwOONspjKHfmHYNWEVbJMp6O0oG4JjiXaNSSiJ8yoTVedpKJiFQfNFj1xs6dTTjSz4GHCdRyP2D4hV3xPQeiZw208zjVDDPXpbXNCDmvxbhfVNf49HlNmeKcYdnYu95J6psog4ZENmA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "8dgJSrhUhRsKzRKz4oNbW", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5u1hLJSfU79YOdpNtySNat" + } + }, + "shared": true, + "createdAt": "2023-02-16T12:41:41.277Z", + "updatedAt": "2023-02-20T05:48:06.273Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5tiYEmkRQTmzxm19lqi0Md" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5tiYEmkRQTmzxm19lqi0Md" + } + }, + "expiresAt": "2025-02-05T20:05:50.565Z" + }, + "name": "Cloudimage by Scaleflex", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "entry-sidebar" + } + ], + "src": "https://045a5f8d-6fb7-4549-8c80-099cb55d21c8.ctfcloud.net/jBhp8AzIZeXrfI0zeJWlJ/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8wNDVhNWY4ZC02ZmI3LTQ1NDktOGM4MC0wOTljYjU1ZDIxYzguY3RmY2xvdWQubmV0L2pCaHA4QXpJWmVYcmZJMHplSldsSi9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=EVBK25gEJh1EODk1KDwwmW-1KaeRzYCMilrzxGQ8kf2qXoalcGGyYyP3iAstlHKKEU0EPL3hNuU2I5WAaXyGPtWozKpuVb1Yxy1hBAZ4A8rs1bk-8xuyNi7KVMqdiIxiodlEic9jhYliGi3o8OO~BrzgbOhhmk8z82nmCnPugLeRkDMNoToOxQBaECx82sHoLU9St~li1emGwEpge~vyUGds492JrIPY7I4jJlkF~oFyREmu1lp-Ex6I2HeHPb7UwHoknEFW68xPxXMvmsFElTJTB87na8u9InhjX8FmbrETpoqp1IJrls-ZZ9vB2bobgHfCq7L0AQPcf09YmHlUnA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "zjcnWgBknf9zB7IM9HZjE", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-07-24T12:40:36.439Z", + "updatedAt": "2025-01-31T19:55:10.703Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.567Z" + }, + "name": "Cloudinary", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ], + "src": "https://12b65bad-4767-4bf3-b575-081a11b73d6e.ctfcloud.net/6FhbjuO8cHcYuhDVTlDSCt/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8xMmI2NWJhZC00NzY3LTRiZjMtYjU3NS0wODFhMTFiNzNkNmUuY3RmY2xvdWQubmV0LzZGaGJqdU84Y0hjWXVoRFZUbERTQ3QvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=VWgVg86Y11r3EcZlCSQiUbnC3FKMbulbEQxE2PoCUccXh76aJ5yRrA8dCxHgo1dtpbrDtDHV~AFDqHEa9k7lj0Jz0n80EbyD1XccTXU~okMeFsY8tv8njrM9NFkZ1HWPEs1IJxbH~1yRZGoK3Xy0FlZHgvFOEDrHQVJzkiWGtrC23fJA1pTrrCE1t6md~6dnjaeS3stnTLdSlDUOl2RyuC-HPbPL-fQ8tnho6Vw1tVe354-~dwvNw-r691vxcRqnyqGEpOX~8BbGFelTVBXWhtHjaWNKwZvo2borL2~7C4gXdP8vUeIEAu8654ImBxRwd-fAHevM1E9j3WciT~MKVw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "4Vy3oAINwRgnxakoTz06tG", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2022-09-19T14:36:12.034Z", + "updatedAt": "2024-12-12T04:07:24.722Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2kPIZqSR5zjoujwXVx3dqK" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.568Z" + }, + "name": "Color Picker", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Object" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "parameters": { + "instance": [ + { + "name": "Allow custom value", + "default": true, + "id": "withCustomValue", + "type": "Boolean", + "labels": {} + } + ] + }, + "src": "https://a1ecf543-f4d1-4aa1-817e-6d409f83c098.ctfcloud.net/BPUQeVUgmogGJyeQ4zrBo/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9hMWVjZjU0My1mNGQxLTRhYTEtODE3ZS02ZDQwOWY4M2MwOTguY3RmY2xvdWQubmV0L0JQVVFlVlVnbW9nR0p5ZVE0enJCby9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=Q274MMz7AwBeHhWKu0cYYSuGylJpiQ4HhqPTwCj5Wxogx3uuwnBuJIfddlMQRkXdbxpta~PuHDBbyPFP9Ma6K7gtuM74~CqS1l9lvWQYqwQE~jGE2XtQJd93yB~p2D1qtkKTRQJgQgJMl7GQ8~-8BQCD3pu0AEtzYQb70D2aEzkq4iv31ZNkqzs5S9A8KvOqQGgOEpexKqhT711QXXahxwzilcwNn~j5NeeA~SumErparb5hs9Sqcnu9mogtwdmJMK4bc2XZpczG99lHY3VTc1xNRJN6rWdjiCFzv91XXvZdtbbw8bMtGXFvRKxsmI56VIVODPQPH72YxPi7KnNyzw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "1ENTlXR17q1veUn74QF9ns", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "41cviVbFZhsyGL7zXM0N1b" + } + }, + "shared": true, + "createdAt": "2019-12-10T08:25:13.578Z", + "updatedAt": "2024-11-08T10:22:30.987Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2MzbkIYbpZL19Dtc16UoJy" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4lnZtuZtUG8pqyhaQattvb" + } + }, + "expiresAt": "2025-02-05T20:05:50.569Z" + }, + "name": "Commerce Layer", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [ + { + "default": "skus", + "name": "Resource", + "options": [ + { + "skus": "Skus" + }, + { + "bundles": "Bundles" + }, + { + "sku_lists": "SKU lists" + }, + { + "markets": "Markets" + } + ], + "description": "Select which resource you want to get from Commerce Layer", + "id": "resource", + "type": "Enum", + "labels": {} + } + ] + }, + "src": "https://367b35c6-55c3-4128-8195-974177c99f8a.ctfcloud.net/KPiXheMx4f3O9e8Nm9N6m/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8zNjdiMzVjNi01NWMzLTQxMjgtODE5NS05NzQxNzdjOTlmOGEuY3RmY2xvdWQubmV0L0tQaVhoZU14NGYzTzllOE5tOU42bS9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=Yc2QSu2IDk706Mp10vkrJkGZECA2i8rf0np4fnYqNMlqLeACrhbxubrkwngE2Irbf1JZpfHd4vBp~Odo3v9CZe2X0AdZBbhclqSzRimqcHdpx5DFA5xoGiz0PW4bZpDhBY0MulHO6FNJxUTE01sPKe20bgwKM4VqKqOYlDt1IzUN6adjz0LPii-COmmfPV9sw6nJxWIW4dOl5-HR6qdrsJlovricLaYVByix-b~MFo92VUHNGfaiHTawLie~KzHzQa1zBt4JvMf7N7S1OOcA2nzcwAs1BncuS5OpMRoS7JHI~H2yZ5uLWXDEph2Nfun4Zi9i-bihhqKUxZWD8kbtUg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "3GBoHfsPvqyV74chvKCzNP", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0Ri9IrGVAtHGIMIwTwtXr1" + } + }, + "shared": true, + "createdAt": "2021-12-16T01:38:40.267Z", + "updatedAt": "2021-12-17T17:59:31.453Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0R27Cf3qXKc6BpvM7Ci8l9" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0R27Cf3qXKc6BpvM7Ci8l9" + } + } + }, + "name": "Commerce.js App", + "src": "https://contentful-app.chec.io/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "7yUlnpgAofvRDee0n6Ocv2", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-12-04T09:35:42.602Z", + "updatedAt": "2024-12-12T03:58:13.108Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2MzbkIYbpZL19Dtc16UoJy" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.639Z" + }, + "name": "Commercetools", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + }, + "src": "https://f87f74d2-2653-42c3-8603-d69b15a38ea4.ctfcloud.net/3ugsvOg1UjQN6bznZq0y4u/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9mODdmNzRkMi0yNjUzLTQyYzMtODYwMy1kNjliMTVhMzhlYTQuY3RmY2xvdWQubmV0LzN1Z3N2T2cxVWpRTjZiem5acTB5NHUvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=DEMeC5a6oS1cJWMrUGYyU4RaSAXM-XynZs2RAyg9NEDn5ATxeZFc3eGyjI-ooNKey-5I~X2Utrf9hekeMyOvV9nE4Tl7mmxoe0fMJqk0Grse-ppqzVc4qKSTwNlBqouMYlni3mxc3HUOkH49uKb5ek7KxIQxXv35R-S1skxDsLwI7EFl5N97baEe2O2TpTpGoTaE4g8jAcF~OqPTqzijpXG-WJiH5jE1aOYrNC75J2dnK1gYJK~F4ttXm5YNWvuHMHKlXj4Hv~a3u5HfkbER9gRjTIbWJZ22-Z45qg4ffWL6oRiHJFRiyl5a3OrrVwotg0aC7~cgx6qC0GzNi7UeBA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "4TVVNA8Ske9pUajCsEXTly", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "6stNN8XMtvIWzLchRHV7GI" + } + }, + "shared": true, + "createdAt": "2022-10-12T11:54:55.656Z", + "updatedAt": "2023-12-12T09:45:09.036Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5zswZwDK3vwrhiQKxwc9Db" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5zswZwDK3vwrhiQKxwc9Db" + } + } + }, + "name": "Conditional Fields", + "src": "https://conditional-fields-app-production.netlify.app", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Text" + }, + { + "type": "Date" + }, + { + "type": "Boolean" + }, + { + "type": "Integer" + }, + { + "type": "Number" + }, + { + "type": "RichText" + }, + { + "type": "Location" + }, + { + "type": "Object" + }, + { + "type": "Link", + "linkType": "Entry" + }, + { + "type": "Link", + "linkType": "Asset" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Asset" + } + } + ] + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "6ZBUT0ZhkMRAZ7C1KNtbBk", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5BAUF0LQ64OqOEs9hHF7Qz" + } + }, + "shared": true, + "createdAt": "2022-09-03T09:56:48.416Z", + "updatedAt": "2023-11-01T13:14:27.120Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5BxXAzpRsCxKLeeFJe9bFd" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5BxXAzpRsCxKLeeFJe9bFd" + } + }, + "expiresAt": "2025-02-05T20:05:50.640Z" + }, + "name": "Crowdin", + "locations": [ + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "parameters": { + "instance": [ + { + "name": "Project ID", + "description": "Crowdin Project ID (can be found in Project -> Tools -> API)", + "id": "projectId", + "type": "Number", + "required": true + } + ] + }, + "src": "https://e5cac9e2-f38a-4896-9780-e3162a0703de.ctfcloud.net/XU2X5bNtbkkL5NN4IWPqF/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9lNWNhYzllMi1mMzhhLTQ4OTYtOTc4MC1lMzE2MmEwNzAzZGUuY3RmY2xvdWQubmV0L1hVMlg1Yk50YmtrTDVOTjRJV1BxRi9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=emM5YXmMa2tA057arTUtrWHPSuuNPy-ty2KEHYjJZRWeCyrnvOkFP~vmvBzEJcjJstN9rryPyrpUQv0vdBlJH2h1l5vz9GAhCanvNaVPyBVkQX21cOdiOQXHbCG16aK3HwdUkFg-1s4EtB99eQKJn1YbxUDgKqDEDVo00neDHh7JboJmaVdnKrXyQFR7hEQau3kd6dQlnSlzV~aV1xafmhEsIaQLfqOupE2jtMX6nyr03EsrY6hSedQ3Mo6qIyBqMOUP6xeBC95~axw4byaiAHgx7aCCc9dfEozX467uoC3tR1UINpW~A9LPEf3vrjadVB6~nbRFonZ8w3MTxqF6Rw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "57yilZEN9oBolHz9vD6jwY", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5NC6Cypz4leJZnIweXydYZ" + } + }, + "shared": true, + "createdAt": "2022-11-21T19:14:13.271Z", + "updatedAt": "2023-01-04T07:50:26.877Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5NxhJi8jFFu0Q5TtqyBJI5" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5NxhJi8jFFu0Q5TtqyBJI5" + } + }, + "expiresAt": "2025-02-05T20:05:50.646Z" + }, + "name": "Digizuite DAM", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [ + { + "name": "Digizuite MM URL", + "description": "Provide your media manager embedded URL", + "default": "https://dmo10-mm.digizuitedam.com/embedded/", + "id": "digizuiteMmUrl", + "type": "Symbol" + } + ] + }, + "src": "https://a8497d7d-1386-421d-b7b4-5519e5385368.ctfcloud.net/3Ddhfg3gD4xcWzuD9UROmq/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9hODQ5N2Q3ZC0xMzg2LTQyMWQtYjdiNC01NTE5ZTUzODUzNjguY3RmY2xvdWQubmV0LzNEZGhmZzNnRDR4Y1d6dUQ5VVJPbXEvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=VfSfBuHZ9vGE8iFYMU25i4zuXLa9GHSw~2lPLFtLCYhi8nOSWErRrHI-~DP7MvC3KMZQc1D3V3209IB5DarvXZsFuUt~ag-wFFFLhEdf-zISB0g4L4D5cruD2NQJftHKzvjGFa6ObguHx3dBlwVjRvl5-oQzN6zciCuGAC4j4hJDlfH3wSn6uJ39Sxl5QFjfop9LSMJToITvpHwOC1E~0L6RsqJcPI1tFQ2msArmlNUJonEVm5xIfrXYWHdMUz8dT6YAXIGsqDIxqfbBAA9pkNpj~KIjnFtq8o~b4k8XBOVNprAfROJhCQnbN-UOvPJKCdp49bMOOk~NUjQPj9pquA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "4tDyevo7sMwvZhDGKzFHVw", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2025-01-08T18:11:25.804Z", + "updatedAt": "2025-01-31T19:55:21.389Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1TxB84jpuvrlDUiXNmjAnk" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.647Z" + }, + "name": "Docs to Rich Text", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "RichText" + } + ] + } + ], + "parameters": {}, + "src": "https://93224f92-a680-497c-87c1-27bccd9663c2.ctfcloud.net/1CdS7ioTlUoESJvsHpEHgq/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly85MzIyNGY5Mi1hNjgwLTQ5N2MtODdjMS0yN2JjY2Q5NjYzYzIuY3RmY2xvdWQubmV0LzFDZFM3aW9UbFVvRVNKdnNIcEVIZ3EvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=dHiSmXtuqMJfGgES5FC7eqlN3~5TfM-cDrLZBnxgfFDTobs1ghgi95uXb-7aZuMv-beIukeSsOYsc-NLYW0b-mvGtgR94zIiGnAZgn1GiwwEVGUUE0HBFwkh4AmtDC6ye72JQPwRjM5KT4VRDwCqB18~ZsLFd8hSu3z2Qqh59QljQoZe0bQArrdS6i2bPjg3jWGjy~3RIAujWNMc3Ced93wAhsFaqPL2ded1BOoJ09kYxihSY31ovSHIuL~w6RFBo3w-~Ld9bxaAIM9V8ojdk0TjyvHWLwltmu7q3K0NJHSDiEF64D-zinoctYoDpcSyeLl3aEGBZvClAcxyqF55yQ__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "6YdAwxoPHopeTeuwh43UJu", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-11-13T15:12:53.401Z", + "updatedAt": "2024-12-12T03:54:39.597Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.649Z" + }, + "name": "Dropbox", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "src": "https://e50de2fd-6464-4b67-8c00-dd928f0737ec.ctfcloud.net/4v8nupiM6QKbO8TtSJj1oK/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9lNTBkZTJmZC02NDY0LTRiNjctOGMwMC1kZDkyOGYwNzM3ZWMuY3RmY2xvdWQubmV0LzR2OG51cGlNNlFLYk84VHRTSmoxb0svaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=PUF8yaiTj1r~ffVxS74PChw677LMxLQwKaL0lrX92147BT5Vgm44zPw-2sTk9iZAy~Ji8Sx2~Zy9WNcENPCw1eOAGZYw4A94GDoQAaFKWWrBRyUJovqQoHmze0eX~jtQ5d071HvlrbzQ9bMYRYQVMsQBJzlc455cO-kpgbLRzC~1r7aE8QAibBWMNg7i4mis69tmzs2Gsf0wZiCKpONa00790WBeRW8~U8ek2Ll67CPrLNjSHa3jecwq~LSsU4WdjT2z62LYrCpYUieAoQVx-oj09S9R~Q06OV986~hcdbeap3dJP43IGrrWmo0V~ULdYOHrUhjVULlK7B7uGTGOoA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "6JCQ2X5GbvJ4xRGEJbWIrz", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "1JMZ8tf4t7c5mnKzAELjRD" + } + }, + "shared": true, + "createdAt": "2022-02-22T13:29:05.836Z", + "updatedAt": "2024-02-12T13:37:38.510Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1JKGArcrenIZjNrFPEXnxL" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1JKGArcrenIZjNrFPEXnxL" + } + } + }, + "name": "EasyTranslate", + "src": "https://contentful-app.easytranslate.com/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "EasyTranslate", + "path": "/" + } + } + ], + "parameters": {} + }, + { + "sys": { + "id": "2NHTUlzatPT8jLceaVpkG5", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "06jjPu1EENrkBYwR2X37wJ" + } + }, + "shared": true, + "createdAt": "2021-07-05T12:08:08.382Z", + "updatedAt": "2024-12-04T09:03:08.087Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "065tcZyXh4M0Lj7LQGal9f" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "065tcZyXh4M0Lj7LQGal9f" + } + }, + "expiresAt": "2025-02-05T20:05:50.650Z" + }, + "name": "emporix", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + }, + { + "type": "Symbol" + }, + { + "type": "Text" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "entry-editor" + }, + { + "location": "page" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + }, + "src": "https://5c0e7571-6b5a-4e0d-bb56-8d23af300189.ctfcloud.net/Mmk1l7wy0kjK0QVjwwPjr/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly81YzBlNzU3MS02YjVhLTRlMGQtYmI1Ni04ZDIzYWYzMDAxODkuY3RmY2xvdWQubmV0L01tazFsN3d5MGtqSzBRVmp3d1Bqci9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=LuccL9U~~9Ut6NDwty3GGPVf1D6o0ge6FdJVGkllCHwUmJ0VBskCshMokSLHKI8CHZYS6AIPuDiq7fx2Uv6klmU9seN6IkqdqrA31blVpyxW~-rtPI7xuRckDadgnHE07qO9dWGv~9~IlXUHKaxyE6rUJKWnaRYXFy5pHuVONqZmItSb8chkxGEiMovkYJhLqVQwCQCcRzYlCF-tZy1QO5M1tTVTActERmUOzZpKIzIM0So-AmFS4d0P-Ea7RnfZkGdpxa~5ZFrgTshBrGJbfIOBt~DeBC21kR3eEj8rqVY7R-ghaqY8~xk85yuBNvPeg3lIeNtL33ysSkndybYwcg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "7EFM8G3tm6fJwrsPRL0VpW", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-10-28T21:47:52.085Z", + "updatedAt": "2025-01-31T19:55:22.313Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "24lQRrtm3GTwuPHzmOqcFY" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.652Z" + }, + "name": "Eppo", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + } + ], + "parameters": { + "instance": [], + "installation": [ + { + "name": "Eppo API Key", + "id": "eppoApiKey", + "type": "Symbol", + "required": true + }, + { + "name": "Default Entity ID", + "type": "Number", + "id": "defaultEntityId" + }, + { + "name": "Default Assignment Source ID", + "type": "Number", + "id": "defaultAssignmentSourceId" + }, + { + "name": "Eppo API Base URL", + "id": "eppoApiBaseUrl", + "type": "Symbol", + "required": true + } + ] + }, + "src": "https://fb8d948e-7b23-4dff-a2b0-834c18d9ac3c.ctfcloud.net/4ESGEzGXoDovOUwD348Rs5/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9mYjhkOTQ4ZS03YjIzLTRkZmYtYTJiMC04MzRjMThkOWFjM2MuY3RmY2xvdWQubmV0LzRFU0dFekdYb0Rvdk9Vd0QzNDhSczUvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=XwXzHKXkuh-KtLjbMlcTlY9qHW0ug-w3exKEUNu6SF8xDu0B6LrgivICEx53iBioGuM9fvZmTjNk3rO~c7r-1BxPy0QT46EE56pinb~JpuUp3dJ6bZvdIrd4N77TxItN7XVInjXLVQDlTeSuqrPCh7X7LLlJ25bRVivukQ~OgBNjP2Fw13EJsaB4f1~J3DME9yzj75YXQvSeiLCyTsLTiEvqjqxRIrPicE5BBa1ta2IBe9B4HvI8XotKnJranfRoI~xNdkhRpnDHSNxo~ch8KMnYbbQyCgynkA7rJEImdYn5ZC3Im36udbYZyCJOL-mdjI8V-XZfPhi3mfDtCn-XHg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "7GbS2x3SdVh7D2hb1FFsS6", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-09-27T16:38:03.221Z", + "updatedAt": "2025-01-31T19:55:21.908Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2D8ljY8aA7f32Wxhcf8lxD" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.653Z" + }, + "name": "FlexFields", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + } + ], + "src": "https://fc5b7a2d-eb90-4d14-9323-ab3c41126bf2.ctfcloud.net/4bdHOGjNjrUGUzsScRnt4J/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9mYzViN2EyZC1lYjkwLTRkMTQtOTMyMy1hYjNjNDExMjZiZjIuY3RmY2xvdWQubmV0LzRiZEhPR2pOanJVR1V6c1NjUm50NEovaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=PoAu57KDAj0OTOYJ5W3YG4OSmNVroZFQnnZVp9Xl1R9PZl8PMB0vNmfLa4EQmYo9eIFgJwadVjuUsiMAeEARjH4WrmYMnRom3Se48~5QzjMGsv~Ir4h-zmSiZEaH0sQadwkwITJ9GPdkGpq~NueHYeQpSOnOMMeIx1A0qniuTFFwJZPA09luyAkAek9kZWN9lp06qB~YIDmP3AnJqh0Tnqn4jHcTvMGDSc9nZsMDB7rMPXaTDqPNXu0a7JL1xeryvCMFswFaGTqZtdDGATLcmBdb8ZrI0rtl2rE7gj2k-gYF5XCoqT62RlxAmVAO4nEsbxcWk-J0ir-WEU1kjkHaVg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "5wHGALSJtz7y2EQOLfGhKH", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-11-13T15:14:21.970Z", + "updatedAt": "2024-12-12T03:50:27.317Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.655Z" + }, + "name": "Frontify", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": {}, + "src": "https://b59db6f3-efe4-4a4f-bf0d-91b9048d8cd3.ctfcloud.net/6QmWeg6X7mplYaVOORmlau/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9iNTlkYjZmMy1lZmU0LTRhNGYtYmYwZC05MWI5MDQ4ZDhjZDMuY3RmY2xvdWQubmV0LzZRbVdlZzZYN21wbFlhVk9PUm1sYXUvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=Mbv9nIZjuo5bEOnhLLj1iV5kIXzp-1JDt~oAdJOt0xtfzGQpgULeHBZKRwv-HwMIy5qLtZarCkhY1DEfDEera7Wr8O~SFBR1plzx6OWyS6s6axUgINYbw~tyhMsByQdJvEBh4N6twFXrk468tDNypPNH961WI7wz3tOKrI7308IP~uusqgYldPJPK--~JHCOAEOaKkS81BzmUGw4GDH2YDSODJlydeaz-3rN846l4p2QeBYUpv4QSP5JgtdNlu25aFKtyye0OlNtX68NPsQ7gTB0p5gHjnJleqSDfvNfeGMPFf7VRenjrWGA3Qrz5KUWOkkdgY4v~z6J5RH99i4yww__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "2K5TL6cBI8hXXRvuDvg1K", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "4noCerPY9pAzAwYUXcWMEE" + } + }, + "shared": true, + "createdAt": "2021-09-15T13:07:45.069Z", + "updatedAt": "2022-02-14T10:11:11.672Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4nnAK8Q6dCVvPtz8VRVArC" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4nnAK8Q6dCVvPtz8VRVArC" + } + }, + "expiresAt": "2025-02-05T20:05:50.656Z" + }, + "name": "Frosmo Segments", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + } + ], + "parameters": { + "instance": [] + }, + "src": "https://017432cb-49c3-40d0-86b4-1d636efb41a4.ctfcloud.net/4w6N8nK38uOMwV1OoT6sgE/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8wMTc0MzJjYi00OWMzLTQwZDAtODZiNC0xZDYzNmVmYjQxYTQuY3RmY2xvdWQubmV0LzR3Nk44bkszOHVPTXdWMU9vVDZzZ0UvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=SL3T7T1r0hjJcDRaiO2fcnhlhjCgk91wKdMCwdKE6vS5kHClUV4MVReMyF1YU~5-stihULWk-3qUZW4sQuLyntYx41n3L3YLEvrmdtGdBt2wzYOvdhwfYb78BckauIG7GDPbK7rhhm8XQmGVIQ-WTq76jbwdp3QVUq6gVp9yNlMY71jm0grzHO7dv2rVhP768Gpih88HuQfMhB6Mq97gIPO82CgdFXF0raYGVkRWBqHVbzpNfD5zd00SqQ6Ah4jLrltSmyhrnOW64SvA1Ea8m3Il~zmMMpbF6g2Ot1XU2Mj~~N~O9ab40mI62Gpib~~XHhUKFiIFRNDfEqrfapPF~Q__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "4kJlo5koeq6SSrirCFQAeJ", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "7pw414MkO7J58dWK105e0u" + } + }, + "shared": true, + "createdAt": "2020-10-23T21:54:41.281Z", + "updatedAt": "2020-10-23T21:54:41.281Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3SUN5V3fIJSPUEbu8EDepA" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3SUN5V3fIJSPUEbu8EDepA" + } + } + }, + "name": "GlobalLink Connect", + "src": "https://gl-contentful.translations.com/marketplace/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "GlobalLink Connect", + "path": "/globallink" + } + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "5DlxOS0KvGS1Wk362xgvbN", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-02-17T22:10:38.871Z", + "updatedAt": "2024-12-17T22:46:44.282Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2D8ljY8aA7f32Wxhcf8lxD" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.657Z" + }, + "name": "Google Analytics 4", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "src": "https://b922ef2b-607e-4411-9386-597b9fac89a7.ctfcloud.net/VIr4O387Fuw3MsJwWkmCU/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9iOTIyZWYyYi02MDdlLTQ0MTEtOTM4Ni01OTdiOWZhYzg5YTcuY3RmY2xvdWQubmV0L1ZJcjRPMzg3RnV3M01zSndXa21DVS9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=aSJjHnmiizZmf0UUYnToUGzfS23LZXoVBMgpTVlKZFtqqnTus~ZIhgnUM9xIM44iH1dwR2rdm~SYYax9Xc2h6zKrQ71sU~Dts4yVycCaqs70qtDmu7rEFfoYppfl9z6k0yOcmG2i9j9KmfKp72PmaLax4SOSveEiXVPlPYGvxqUW0Fnz93-wb0kqOMXLyRYxqbDLCQsby9qS4hU1YHcO1t0Dsq~y00Rce5hh6gc985MMWH8rZni-hdeX11FQ4d4uVK7APNMWELEckihFJrI-cgS4PPjjuD3yPvUtOPI522NVzesUMUdXo1YF1biK-A-20P1miQ9Wfe-g58BHqjF00Q__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "4fD58pKkn4Tdlm7IW9FbvK", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "6tedZUtnDb5ugxASlwKsmz" + } + }, + "shared": true, + "createdAt": "2021-09-21T19:57:43.796Z", + "updatedAt": "2023-10-05T18:37:33.749Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6t4JdmDzUzpppfl8710tKf" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6t4JdmDzUzpppfl8710tKf" + } + } + }, + "name": "GPI Translation Services Connector", + "src": "https://contentful.globalizationpartners.com/", + "locations": [ + { + "location": "entry-sidebar" + }, + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "page", + "navigationItem": { + "name": "GPI Translation Services Connector", + "path": "/gpi-tsc" + } + } + ], + "parameters": { + "instance": [ + { + "name": "Auth Token", + "description": "Auth Token", + "default": "", + "id": "authToken", + "type": "Symbol", + "required": true + }, + { + "name": "secretKey", + "id": "secretKey", + "type": "Symbol", + "required": true + } + ] + } + }, + { + "sys": { + "id": "6o8NJOeW54fY2UYY8zQUZY", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-08-15T21:07:30.751Z", + "updatedAt": "2025-01-21T21:13:45.907Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FNJe2xmShG6mc5Cqsy6eW" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.659Z" + }, + "name": "GraphiQL", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "GraphiQL", + "path": "/" + } + } + ], + "parameters": {}, + "src": "https://d1ef6648-d9c8-4616-9eb6-e28af914b872.ctfcloud.net/73xzvb2f2hBsNrd6SmQOqh/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kMWVmNjY0OC1kOWM4LTQ2MTYtOWViNi1lMjhhZjkxNGI4NzIuY3RmY2xvdWQubmV0LzczeHp2YjJmMmhCc05yZDZTbVFPcWgvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=OTJBUdjS2cxzhuwWhxlR6Ez0SJ0zf~ch8iel59eHwXDrxp-crEgOB~IUEU5R5jyNiQQWfkWLDe6L0RRbH5j2G09mLQhB2vJVRNe7GxkUMuXGe~PyMqwoFbFe0iCVMHLJGA5OeH6lAKZV-xpEFFrVtCNsXpjK9YgwmI9AL5LodwnljGOqQ8qP23~sTTR5mOuQiRpkIVQUFZchKpYY~kPG2zZig564iUbgqJZG9G4tSgfkAe8eZp2vCoCqC7XDFkjvHPwS5IGnHVPPUgsvQhgJDzoeXCw~4PXvfUcMb1vQoWD7KJeK0Y~MmvN9vqIJrwjRCsbXwRWKwuugQNsUfLLBUw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "66frtrAqmWSowDJzQNDiD", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-08-18T12:40:08.484Z", + "updatedAt": "2025-01-21T21:09:51.178Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6dV4yzcXnTFJpBQNTwolmx" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.660Z" + }, + "name": "GraphQL Playground", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "GraphQL Playground", + "path": "/graphql" + } + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + }, + "src": "https://033bad1b-c8e2-4ee5-b8f8-f4c19c33ca37.ctfcloud.net/5PU7QvhB9REZTiOd5VqorB/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8wMzNiYWQxYi1jOGUyLTRlZTUtYjhmOC1mNGMxOWMzM2NhMzcuY3RmY2xvdWQubmV0LzVQVTdRdmhCOVJFWlRpT2Q1VnFvckIvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=K0R8mmpJq9hDtBxO5zNbe68mbUcB2XyvAwSZjjVGpq3DpDKOA~112NOFHTz26cogWeiE87Tan4h8yj1vwv-zD2lKq1lubqMsjYIOczGngLXRcKZ9EZdAkA208PsvoYExQPmhvOSNwr6a3Y353J0CKJXdZCt0P2AqzjtChlTdZOGqhGITZftC8B3VbZzLvtt4A0xdNF6OlfF551B5rZdhShT0uRK9Y7fHM~qDTL3HVdHs4FAf2Vz4StQklkuSFVz4zi9mxMqK-T~LHeDS~GhtZZmBn8JiBZWQOIiRJWXk3G20G2GuSu291DwW37Nk0RP5sbmGj1ybH4wkJnbZ20mrZg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "2m6GPV4H181rNthvN0yxdJ", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-12-10T17:33:24.519Z", + "updatedAt": "2025-01-31T19:55:32.302Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1TxB84jpuvrlDUiXNmjAnk" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.662Z" + }, + "name": "GrowthBook Experiment", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {}, + "src": "https://4d6e0680-9bd4-4db3-8163-1fe8138283e7.ctfcloud.net/6TMDCMeZ7auO6EVJyPxxJr/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly80ZDZlMDY4MC05YmQ0LTRkYjMtODE2My0xZmU4MTM4MjgzZTcuY3RmY2xvdWQubmV0LzZUTURDTWVaN2F1TzZFVkp5UHh4SnIvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=FGzagQsQyoKafyj1jNWeNz2OecJ5kpWPksTNuAfWvpsEeepqxFwRYQ0zRqiPrdeeBJQs8WqkEc1haZJXfCz0lGJJKL0dhx~ElzO~9f~gddKWUMiVXBVe3yshzQJpIts00sZe4o3f3b41IqwYnLUh9pwv5yutg1urmYlguUTNieI5Xvh3K6NGz2Ei2wYPkIKE--PcBG4OHGahcmqZYbi9kWLL1zzbYQtIaS~OxC0fSO1k35aYwd7CX3~0vxVz47iyDQMlgVyvr~aHpctw7JWLLxxoomFPfTH5K0vp6M41u5stfnvK4aCjZk2kYBJzebxEpDZEYl3LYZugUgmrZZh7Qw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "342Q2DqCjmsdN5BJCEPkrJ", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-10-01T09:21:49.757Z", + "updatedAt": "2025-01-21T21:05:59.716Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2MzbkIYbpZL19Dtc16UoJy" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.663Z" + }, + "name": "Image Focal Point", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "instance": [] + }, + "src": "https://64b6f241-4926-436c-bd20-edc8a218cfef.ctfcloud.net/H8Fs4Mxz7w5lYyozY2tKK/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly82NGI2ZjI0MS00OTI2LTQzNmMtYmQyMC1lZGM4YTIxOGNmZWYuY3RmY2xvdWQubmV0L0g4RnM0TXh6N3c1bFl5b3pZMnRLSy9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=KOYY764IkbMHGIBJx~Ucel7YDRoPPZyNgz2jc3nxjlUpK-tbgr4VfP~GmpNOPr20hBhB9WYzhrGYaO8DqhZfl5y6XOT1wt7aBuB~n7gLQOjD9E-5Kq7Q--66xFCy-Cvhi3okHNmuQNL0Uy4J-EUoqhnE8RU1N1nB5ckczYgSJXfYWVGALA~KuG0GljLahTtY6aO7VkFaYdj1UnC7JiGQMxzZ2OYIlN9Db-qw2LKqrNmqXX5O1tas81KTbwV5NoAd0Wx2~G7UfAKgx3GLzAE~y5VhulfFHUIW-mFp3fbxD4zn~9zg7R0tmrhbktaOXQiWL2~XCveJNFvEC7f2DPNKDw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "3BGvGx9eF1bYGJw7tmHdXv", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-11-20T20:51:38.909Z", + "updatedAt": "2025-01-31T19:55:32.009Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2cesFtOix28UbXshy4iXK8" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.664Z" + }, + "name": "Image Hotspot Creator", + "locations": [ + { + "location": "entry-editor" + }, + { + "location": "dialog" + } + ], + "parameters": {}, + "src": "https://768ac43b-36a2-4e75-ad0f-0beff2c245c5.ctfcloud.net/zPnHdZOjqEbeXunoXEzaL/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly83NjhhYzQzYi0zNmEyLTRlNzUtYWQwZi0wYmVmZjJjMjQ1YzUuY3RmY2xvdWQubmV0L3pQbkhkWk9qcUViZVh1bm9YRXphTC9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=Z8QIL6UvjubYDVY4uiEVL2JF~bcgaKGPC8XrLOXgED1qytn3dkzCs1O5N-h9nMu5by5DxevGA7KQnmHJ2oVYaCTIc6znejmtzFEphhUwd3K25RRW76jWbk9lizqvZIBCOa7--EJyVyb2FMTGLymCjthPgJkknfGXOgyrFEk8lfZaNF85-MJbuXExBmJWcN-2XU~rcb-gqvkzDZshrqiU9CSwjjsn2yoq8FFT3-2evS8jkUrVP9sMoUOSMlqD~R3yJjPC0Tu-dpko2oMvsl6oOo72vgE2HzT69FyP1hRdd3GRZZGdKukr3ugT8nim~6NrdxNw8bFK9ODmhc7nICyxLw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "7v6c0ylAgt7KSAmgedz4ed", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0XenNsx0QCqtKgZsXtiWJk" + } + }, + "shared": true, + "createdAt": "2021-01-17T00:35:30.734Z", + "updatedAt": "2022-08-11T17:23:28.626Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0XdiloXVewCZvwsuNzTocy" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0XdiloXVewCZvwsuNzTocy" + } + } + }, + "name": "imgix", + "src": "https://contentful-psi.vercel.app/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "z0uyReYKxjYGR7Aj7DjFc", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "3jnZ6YgPY4u2MQrtKXZ038" + } + }, + "shared": true, + "createdAt": "2020-08-20T17:00:06.260Z", + "updatedAt": "2021-08-23T12:31:57.540Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3jmJyK2gmnvmAykKLpzAEO" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0OqydBwBE7LCTESG8kkZ0G" + } + } + }, + "name": "IntelligenceBank", + "src": "https://contentfulconnector.intelligencebank.com/", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "page", + "navigationItem": { + "name": "IntelligenceBank", + "path": "/" + } + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "5q6VO8UT97XSTix4gnRbPE", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-03-01T22:55:41.032Z", + "updatedAt": "2025-01-31T19:55:32.928Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "03fzTwuuEEPDj1HaDHyeDM" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.666Z" + }, + "name": "Intershop", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": {}, + "src": "https://b21f4978-6506-4fa6-8c86-5995705c8af6.ctfcloud.net/3PXmdcgKb7rerJVp7ADJaI/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9iMjFmNDk3OC02NTA2LTRmYTYtOGM4Ni01OTk1NzA1YzhhZjYuY3RmY2xvdWQubmV0LzNQWG1kY2dLYjdyZXJKVnA3QURKYUkvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=Ul8~HZJX86qnlefKwetKrN6PDIQu~S26jHqOY8CeW-N3mreSskilOq-0mm7pVwRF6TQBfr7dgK8vqK8x~wbcfwKEDvqeYoRUnT5AQdOk1vFibWEAwTL6B63N70V0rdeD~HeK2WV0fJuybSbQYL~jwUMaVnesMKQCOM3nbAMcdMEc87R02vZCSNjMe3Zcw-Uc7HkURE-K8FpznadriHTG48Mw08-n6KvkunE06Vi71sajIDELZNPi6cac~Q84E3p79xkprlqMyT2i9rzNKU6jlKqhj7hXVfrxmPE68RCNP7sLGD0hx7n9SGS7bZ4m1LPm64yUdlhpS0NrKesTAa~M2A__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "3tkiX2zjB7aqEiiKX5hRwc", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-01-17T14:29:02.114Z", + "updatedAt": "2020-04-27T12:28:08.688Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2jvc3kU4n7OIABiFMTaGyB" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5NItczv8FWvPn5UTJpTOMM" + } + } + }, + "name": "Jira", + "src": "https://app.jira.ctfapps.net", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + } + ] + }, + { + "sys": { + "id": "3fLf4DnjbkN1yUA2V2fMgE", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-07-11T15:16:00.763Z", + "updatedAt": "2025-01-21T20:58:29.937Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FJf3IvgmQotV5As5zpGhc" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.667Z" + }, + "name": "JSON Viewer", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + } + ], + "src": "https://6aec7260-34d8-407f-8e73-6e14bf2a1cd0.ctfcloud.net/3LBCSIpWCbmtuGOazPHMDQ/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly82YWVjNzI2MC0zNGQ4LTQwN2YtOGU3My02ZTE0YmYyYTFjZDAuY3RmY2xvdWQubmV0LzNMQkNTSXBXQ2JtdHVHT2F6UEhNRFEvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=YNJAkn7~idzxQFs-EvO~ExlJw7gReLNyyd9bMZ6wE2a7240Y1mBnl8zxvCzzh2H035~~sJfbvnv16r~WgKeWY5aAG60bh~WQKuLl1RSs~xmWRuOTPX1dVb~mlj6MYuOOJ0fP89GNewaoN9OF-MHna5cM06NKl5f348Fo-HKeaOrBwTlQWvk1t3IJBAm3qj1YX6~am4pG-YDFPfPuPD72V4m22QWO0cKqIdzlmujTR-f0enulkIz4rdqgJmM-7EVu96RF2GEmRXWxWWys4H-bLdtBqVmdCDPTFPYRQ7-0i6yiSlMehTnMbCjUMF23Ico5meD24BuBXMpIPrqyFOWJQA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "znp3ZloaqTn5g5VankRqD", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "2cARw0ayWLd1vWvA3xX3pZ" + } + }, + "shared": true, + "createdAt": "2022-03-02T17:42:08.820Z", + "updatedAt": "2023-03-08T10:39:04.851Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2cxxu5IH4VwGITxLRg03NB" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2cxxu5IH4VwGITxLRg03NB" + } + } + }, + "name": "Kameleoon", + "src": "https://contentful-app.kameleoon.com", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + }, + { + "type": "Text" + }, + { + "type": "RichText" + }, + { + "type": "Integer" + }, + { + "type": "Number" + }, + { + "type": "Date" + }, + { + "type": "Boolean" + }, + { + "type": "Location" + }, + { + "type": "Object" + }, + { + "type": "Link", + "linkType": "Entry" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + }, + { + "type": "Link", + "linkType": "Asset" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Asset" + } + } + ] + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + }, + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "4F6cpGJEuEzZDPTno9nq1f", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "7e3UZK73OoV22a7UaWtGZv" + } + }, + "shared": true, + "createdAt": "2021-11-17T19:33:04.159Z", + "updatedAt": "2021-12-28T15:27:21.195Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7dRVfKdqcMHRYJwRaifUJn" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7dRVfKdqcMHRYJwRaifUJn" + } + }, + "expiresAt": "2025-02-05T20:05:50.668Z" + }, + "name": "Kibo Commerce", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + }, + { + "type": "Text" + }, + { + "type": "RichText" + }, + { + "type": "Integer" + }, + { + "type": "Number" + }, + { + "type": "Date" + }, + { + "type": "Location" + }, + { + "type": "Boolean" + }, + { + "type": "Object" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Asset" + } + }, + { + "type": "Link", + "linkType": "Asset" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + }, + { + "type": "Link", + "linkType": "Entry" + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "entry-editor" + }, + { + "location": "page" + } + ], + "parameters": { + "instance": [] + }, + "src": "https://993555c8-30b6-4571-8388-c64f3e09abcd.ctfcloud.net/6sSvqEM7xGmmKkGT81kTXj/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly85OTM1NTVjOC0zMGI2LTQ1NzEtODM4OC1jNjRmM2UwOWFiY2QuY3RmY2xvdWQubmV0LzZzU3ZxRU03eEdtbUtrR1Q4MWtUWGovaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=Nb8cdYnVEvQSGbdw2CJHGnG35vfvurVW3VO4MjmsO4zU8N5IHq9XUiuv4NGZW9s~SNPaQAac27ubwBtJ1bxI8nNlu06f9DoqGMDB~7byN59k541FFD-g-GsG9MOiWnO2WSdTrCuwiW2qy1B5YKx3ljhFzBsMysw2xnJwQESJCwbkXtjFogVzibcUOGMS88~XZgIXIoOK6sCg3zdwY-rjdoyAFicHcIk4dTSJ5AvBEcc04VgLMAzwxwdRwvPi0c2DojI5WhOD8JrT1QitP1SzMoZcsNA3B80M-B1EQ8c100P7sjrTrSV9BWI30LJeNpdrr6Wiwq4LltrhYj4Qiws7Iw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "4uUaxd0lfvVJpY7PsmKBb5", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "7uWRGc4lv1K36wcfhbdCJF" + } + }, + "shared": true, + "createdAt": "2021-01-15T02:26:20.922Z", + "updatedAt": "2024-01-16T19:43:43.440Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "31XdODbMrVICB7JEdcInIa" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "31XdODbMrVICB7JEdcInIa" + } + } + }, + "name": "Lilt", + "src": "https://storage.googleapis.com/lilt_contentful/index.html?ignoreCache=1", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "10ec9foxs591x36kLhTYT2", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "7pFE7su6qcypDfkpytSWYC" + } + }, + "shared": true, + "createdAt": "2023-03-15T07:21:27.107Z", + "updatedAt": "2023-03-15T07:24:58.409Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7miHtW58hNWv7IeeY7iCQE" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7miHtW58hNWv7IeeY7iCQE" + } + } + }, + "name": "Linguiny", + "src": "https://contentful-i18n.vercel.app", + "locations": [ + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ] + }, + { + "sys": { + "id": "7tmjHWJ6M0KGqrOKrhHdhe", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "03vYXC72caQvKlMA5tgu1L" + } + }, + "shared": true, + "createdAt": "2022-03-10T08:53:36.303Z", + "updatedAt": "2024-08-05T11:53:02.236Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "26cKXW6ey72xUG0NahqVl0" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0IlkG3SeMEfIDd7qVLiybN" + } + }, + "expiresAt": "2025-02-05T20:05:50.669Z" + }, + "name": "Lionbridge Connector", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "Lionbridge Connector", + "path": "/" + } + } + ], + "src": "https://f58eaa10-50bc-4b29-b440-0b7784180a38.ctfcloud.net/1rDLwN9sFbPwhECR6lXCJe/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9mNThlYWExMC01MGJjLTRiMjktYjQ0MC0wYjc3ODQxODBhMzguY3RmY2xvdWQubmV0LzFyREx3TjlzRmJQd2hFQ1I2bFhDSmUvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=FVTObH2Frbk12YJcC~Appcxk-fl2BR1HpLshh4dRRoSKd5wq7onH4jIQvNqUhmBTbAfzOsTlQm7uPDQEKPJ3TwQVOkjHC6n~C9sEpY3njDqBZiUxJxb1KWdusCSbzs~8uvEeBXAkTmaOmxDuD~CrFKkWVnGBR1bUfwruydBuNDv7F3TOwhgj8q2RNRg3WHbwY~kCfqOMvrOVKHT9vwPHRYdVtgexAE1iC6mwlSSmBhbeJn~f1g7qcGVsOnRoXt4ohn~qArYX9Celkk6Ms8LKjijD-e8SMKC62tDrE0p9bQWYqdc3yTxs8hsBjh~---vJfrCWkDs2eG1DasJQGEpt3g__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "3kMGvoFeVdMPIkolBPdPIg", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-11-08T17:57:44.339Z", + "updatedAt": "2025-01-31T19:55:43.504Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "668Oko9O5Fb63WY5P2lss6" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.671Z" + }, + "name": "Live Story", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + } + ], + "parameters": { + "installation": [ + { + "name": "Content Type ID", + "type": "Symbol", + "id": "contentTypeId" + }, + { + "name": "Title Field Id", + "type": "Symbol", + "id": "titleFieldId" + }, + { + "name": "Content Id Field Id", + "type": "Symbol", + "id": "contentIdFieldId" + }, + { + "name": "Content Type Field Id", + "type": "Symbol", + "id": "contentTypeFieldId" + } + ] + }, + "src": "https://6d95f02d-6e4e-4289-acfa-e4acb61e5aec.ctfcloud.net/ZCnbGHkTsovHNPKtQeIMb/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly82ZDk1ZjAyZC02ZTRlLTQyODktYWNmYS1lNGFjYjYxZTVhZWMuY3RmY2xvdWQubmV0L1pDbmJHSGtUc292SE5QS3RRZUlNYi9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=fdR2lnmMleQy~l0-h1T2PaS9d5HXcNWwTqQv5VSUJskIJwVxrBupe8lXWVrgf1aUOQfIgTDJ6qqGF6awtOL~2vLFoY3awmYjqVktiGiBr1f2U57CeYa7~9W8PcUR~rBXQ87C9CagrP~75SghUwVu2JZL7Lymxm7ty9V8aqWNB2gqnRC39wYSi9OsuhUQx6ORqnNKljmW~e-qX7po14yQrZ4NnmQOO28JItozCf-HUa7opw0pTWyg18Fwacbmbz~3kjThty-LxLpMO8oSFiLVIl58QZdCzmeb7B9uM9QDUgpAq8RoXpU71zxjU9cGMjPV-5QH~SlwHj3fiXqRELB7pw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "70ssKop5SL98q1JOJy3AcA", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5mrBsdeobqqOHiCIyhvJbp" + } + }, + "shared": true, + "createdAt": "2023-07-04T09:49:39.244Z", + "updatedAt": "2024-03-29T21:18:50.344Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5mn4ytNTDxT1pYPuWpZ5QX" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5mn4ytNTDxT1pYPuWpZ5QX" + } + }, + "expiresAt": "2025-02-05T20:05:50.672Z" + }, + "name": "Lokalise", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {}, + "src": "https://e63dc4d7-e723-4618-9bed-12694008d404.ctfcloud.net/3GEdi69xDtJX4nNQgJSTny/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9lNjNkYzRkNy1lNzIzLTQ2MTgtOWJlZC0xMjY5NDAwOGQ0MDQuY3RmY2xvdWQubmV0LzNHRWRpNjl4RHRKWDRuTlFnSlNUbnkvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=bpETqI4oiUJ83NziRYgstLKZZytZSgSB~dYUOYyk-q1HTWYH25~G6ZlmNqbP7KnYAjrbIU7ujmO4asoZogWcsQgopIlSOsKmFi8hWWWaTqVo-zrHNUpL1q~CyPEZpLownXqEWr-fbhi0wlMRTwXp~Svox~X7KvzInC-72PtQhXC4JCVX9j15FaF9wQ8QnEnUpaPIAa2wOVke-nGokNiCnycs78W8rHMHkK-CiXQr7KiWk1J~MuKq-GvsUMcfA1tuYfp~~uo-C79XdMfI-na0L5n6xIyB4jbJzcDQjsRuBv9V6uK9ewi-BqxtT74FCFKvN-6Fp3qQxIK0deKA9QUvqA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "cQeaauOu1yUCYVhQ00atE", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2022-05-10T13:12:32.052Z", + "updatedAt": "2025-01-29T09:05:31.096Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7du7N9sCpTXRcuH75iBAX2" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7du7N9sCpTXRcuH75iBAX2" + } + }, + "expiresAt": "2025-02-05T20:05:50.673Z" + }, + "name": "Merge", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "page", + "navigationItem": { + "name": "Merge", + "path": "/" + } + } + ], + "parameters": { + "instance": [] + }, + "src": "https://06ce4a11-ec2b-4004-b40a-eae3f7ba5e96.ctfcloud.net/7dgeATZJnWgT3vi8RE60Ow/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8wNmNlNGExMS1lYzJiLTQwMDQtYjQwYS1lYWUzZjdiYTVlOTYuY3RmY2xvdWQubmV0LzdkZ2VBVFpKbldnVDN2aThSRTYwT3cvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=Mumh1lRxbk62viT2xIfp1tfzjsXz14zTyTzSPE3VdmHiVUeDt6DU1143JVevFCPRRIoeLPO8mw6d90qmuLRbBSv7gT9PgTd-rVPF9LLl~DK3ctQjxtbueVDJ8N7f6ASEQz-XCejpU~ID5Km9gUT8b2xZJ0V9n95E9IyRupXec-uAZB3~zGS0YFh7BtrNaBKW4MXREDJGYddVLJ~WNNVt16Nw7hnQ6xFYaMCV7FulhyUbKXtKRVi67V5Lx2Bymgn~0cVQHLqwq3jLUzP6GQSz3lOHeuZU2pVhTbvXYQi9pvEAZRBFgylIuWeQjac55M6Jy9MibPUfZN-f5bnDY91jBA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "7lcE2IF8TiXXKiMj2UGM8k", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-10-24T18:21:06.358Z", + "updatedAt": "2025-01-21T20:56:08.386Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "03fzTwuuEEPDj1HaDHyeDM" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.674Z" + }, + "name": "Microsoft Teams", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + } + ], + "parameters": {}, + "src": "https://f13c2a01-b0c6-49f8-b75a-01dc8ec46174.ctfcloud.net/13NLM92PvmJCXTeSHS2uMT/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9mMTNjMmEwMS1iMGM2LTQ5ZjgtYjc1YS0wMWRjOGVjNDYxNzQuY3RmY2xvdWQubmV0LzEzTkxNOTJQdm1KQ1hUZVNIUzJ1TVQvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=AMH~KMiZY7pdor07BcTLspnv4E-Of0KuZzvWQcBhK-Y1Ei1v0yfpJ4yeAMbOR6m0LCoz65~VSP5vwnqyafYdp988aL0K7pLj7AppBMDEyNtmI~PuC0jk7uA9ngPgm4l-6wxktWIY9JrKuo7uBwBREIhkoqdQ9UzZlpGcCfOBVxsnmwzq82lv8eE7mHdm2hd6mPVToLcVnW36PoyMJbtuDLwoIwxPdbPKMeORc7RFYv32MnbafEP7DHb~pqqIxUm4CH6UX2NkYb75XGckouBYQUcXGZyqCI7hGX3T8D0mglRxYLg9cK3EuHyq9IeTtKzpCv00s08Hb60a30KQZsdjYg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "5l4WmuXdhJGcADHfCm1v4k", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-05-20T07:12:51.850Z", + "updatedAt": "2025-01-21T20:51:19.536Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2jvc3kU4n7OIABiFMTaGyB" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.675Z" + }, + "name": "Mux", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + }, + "src": "https://af749859-2493-46d0-993b-3eec3084d760.ctfcloud.net/1RwnoLYeRXZvJwc8QGfFAE/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9hZjc0OTg1OS0yNDkzLTQ2ZDAtOTkzYi0zZWVjMzA4NGQ3NjAuY3RmY2xvdWQubmV0LzFSd25vTFllUlhadkp3YzhRR2ZGQUUvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=WmCGymoiVyBe~I3ewFHYeOvp6KlKkDCwri1~LjpNp7pI2u820hjwz~haZdH9sBOJ7gCEMLxeCO0ao94RHWLF1f2HuGT~Qzj-KLsYG~9kORBSEFpuGdOTbXzYTx5qB1yMOTcYBXXX0HvE2Q250vn-KkfdII6iIDPA5ByUGr69pIR3UKaFRGp9nr8yfA4xunP8jk4IJT47RyXO0IsT0FlW9J1PQ1j-6Z9MapRVLPCvpfgduNPKgRxdJkQH7kEedkchArMnQ02aXylSXgFOVv7X2gZskqGgAlYinqz1jLnpl16WiQzw2M7RMFo2KQRjg65lDJ0JXhB7TTmz8W3YWYhS6w__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "1VchawWvbIClHuMIyxwR5m", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-07-24T09:09:45.574Z", + "updatedAt": "2025-01-21T20:46:33.401Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.677Z" + }, + "name": "Netlify", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + } + ], + "src": "https://3f2b3d36-f809-44ab-bd81-f412a4a418f0.ctfcloud.net/3iEI26pdrWHvrnIREDdV6F/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8zZjJiM2QzNi1mODA5LTQ0YWItYmQ4MS1mNDEyYTRhNDE4ZjAuY3RmY2xvdWQubmV0LzNpRUkyNnBkcldIdnJuSVJFRGRWNkYvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=J0qg1W7DOgrYm-GsJ77Uf7xyxhQrvdSu9B8CdX9Y3txST1XeQB9YZteEbtY3mly6CgR2fqMB9XbYJVl5CTLfHHHU5MTEryFN1OQ1OMyeVbX8Gi70goxK~wGm-1t0QzsNFsk2mA2b5jyz-7vdPejhqABs1o~7wj1q4AYUm~~j-U4TTRx50BhFMXnNabI9o8BUP-a-ICuTsXQD83FWEI-Ol4dUOXMfBhHnsVkeTpHw1Ay~qZsji3tEM-Gk0XCb2g0jjgcIW~XiVSEoGYn9DJvzT6z~HDvP1DF5CPXYJDru1ESRh4uysmzonOsshJv3EnYbKwVnG3d22ZYhu8UFXfUkpw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "4QYnIIKna8TpXegJp3oSBi", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "4WuVKeXdeRlqpw8go7Rkal" + } + }, + "shared": true, + "createdAt": "2021-01-19T15:16:33.569Z", + "updatedAt": "2025-01-21T09:22:53.016Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "79M4NDLgejkZSShtdJDuvD" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "79M4NDLgejkZSShtdJDuvD" + } + } + }, + "name": "Ninetailed", + "src": "https://contentful.ninetailed.io", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + }, + { + "type": "Link", + "linkType": "Entry" + }, + { + "type": "Object" + }, + { + "type": "Symbol" + }, + { + "type": "Text" + } + ] + }, + { + "location": "page" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "2KGwCxSgYcS5KKsb8ZyN86", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0qUM6SnNjkKqN2JVBUDk4a" + } + }, + "shared": true, + "createdAt": "2022-10-24T22:13:23.538Z", + "updatedAt": "2024-04-03T19:53:55.580Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3AV2DZ5Pn9oQJqQ6SFVBC6" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3AV2DZ5Pn9oQJqQ6SFVBC6" + } + }, + "expiresAt": "2025-02-05T20:05:50.678Z" + }, + "name": "Octana", + "locations": [ + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + }, + { + "location": "page", + "navigationItem": { + "name": "Octana", + "path": "/" + } + }, + { + "location": "app-config" + }, + { + "location": "home" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Link", + "linkType": "Entry" + } + ] + } + ], + "parameters": {}, + "src": "https://5a747299-a334-4837-84dc-4bff3dffdc3a.ctfcloud.net/77RP6IMXl9Mt9q5NQrLi4u/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly81YTc0NzI5OS1hMzM0LTQ4MzctODRkYy00YmZmM2RmZmRjM2EuY3RmY2xvdWQubmV0Lzc3UlA2SU1YbDlNdDlxNU5RckxpNHUvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=c3UNzdWHgPutvjhiG0COqeC6yOUe3n67i8WGsIdgt1umRxzeKEVwNL-mFu0ebhifB0HyxwB8KrSKuo5hdiydGL4CbVrfM29ZttYHb2xy3K9hdGf0sygTELXUQ484vkIlIoWGh5hMNMGXIUq1JV3Hb~q7FylbBNznIVxAx1l5dpIxgP7vvugW5DVBqBtiGShKnhWgeKUrG4k94k9P3OgVDbN2GVJ~xrCsT-zUGIFiX5fMZkPQiOEUsOkNDPMSpY2tmGFTXp1K73ldDy8kQkLS42Z5asPqrLOl1vvQ9y8dSOx7Bc4VMy-2yL~g7jxZd2z3nEfR37C8~QaIvRvhBQX9Ug__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "i43PggcHag2PCrGjYTiIX", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-07-24T12:38:34.885Z", + "updatedAt": "2021-08-03T12:11:21.857Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1lbcJCitOqcNZToAh8Mkxz" + } + } + }, + "name": "Optimizely", + "src": "https://optimizely.ctfapps.net", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-editor" + }, + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "3Xh8uDnRiZ0hpUyWCZtWmn", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0NCstxnb2tyMr22ly7sBI7" + } + }, + "shared": true, + "createdAt": "2022-11-07T16:34:30.956Z", + "updatedAt": "2023-03-15T16:56:43.577Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0Nxch2ljQM7Txe1noKMEDx" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5SsU5BsjOoYnI1BVGDrmGt" + } + }, + "expiresAt": "2025-02-05T20:05:50.679Z" + }, + "name": "PhotoShelter", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "src": "https://81fbeafe-26d6-4422-9adb-3d55d88348fb.ctfcloud.net/2wKsot67ek0iKNRsFL7gVr/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly84MWZiZWFmZS0yNmQ2LTQ0MjItOWFkYi0zZDU1ZDg4MzQ4ZmIuY3RmY2xvdWQubmV0LzJ3S3NvdDY3ZWswaUtOUnNGTDdnVnIvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=N6uvGB3B6rz-FTiPYVVHdOALhygZRrz86zIXgeRqUWgP8BJUsrc-DiUQbM8UQ3AVS7wdhfh33XizT8G9-NOrVDqVmkBnOSEZQ0db~oEM6YqEH5w38j2gYUV3cxqvnvYP4bqry0BTQOjDEfb1Ych8vq7hh0tGIdmewiZuAEindBmltNLaq1Z~nVHW5KhrwtS0JjKx0Xoaz7ClnirLZ-cwqyqEiXQRPE4Su447I-wv-haZ3JBH-o64ssy-l19LhzS-nK8Qn-~H1dEmeRUDOhQ5J4J5HoOmhx~ZlG1jLqodBOaro8ydoFdnklUI4jnWwA3mwblDEFb24ruwVQG55iR0VQ__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "5O9v59Lbugb5tFCMeyLP8K", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0g2JAivWiSKz1VCe23uUe8" + } + }, + "shared": true, + "createdAt": "2020-08-05T21:29:37.674Z", + "updatedAt": "2020-10-23T08:21:24.446Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0g04BohAJNYkYM0FOLCPKs" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0g04BohAJNYkYM0FOLCPKs" + } + } + }, + "name": "phrase", + "src": "https://pa-contentful.netlify.app", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + }, + { + "type": "Text" + }, + { + "type": "RichText" + } + ] + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "1wxoLYYtUviNg9e6m5Ai54", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0dPFwFwaNijMAAcuiJT5TX" + } + }, + "shared": true, + "createdAt": "2023-04-27T08:38:08.011Z", + "updatedAt": "2024-11-19T14:30:12.782Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0dOTTmNbAKcqKjfuPCrkXT" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0dOTTmNbAKcqKjfuPCrkXT" + } + }, + "expiresAt": "2025-02-05T20:05:50.680Z" + }, + "name": "Phrase TMS", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "Phrase TMS", + "path": "/" + } + } + ], + "parameters": {}, + "src": "https://3219c8a7-33fa-4b75-99c3-31c816004f72.ctfcloud.net/2BgFHrPZm2dYOGkHKxZP2N/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8zMjE5YzhhNy0zM2ZhLTRiNzUtOTljMy0zMWM4MTYwMDRmNzIuY3RmY2xvdWQubmV0LzJCZ0ZIclBabTJkWU9Ha0hLeFpQMk4vaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=hT~4FDjf6QSYF80yu1uuk3iW4obncyhEGQPsU2zXvKm9KwlOkmkkRujlUllLWn0KlW4sokt8ObrkQ5tDPtiOenOFzYbMakePHqH~wl5tDddFynaLa0NoD86gN2gHJTojp8pynCLfQW69uDARsoMmp-jP4MjIR-nXq-KI5moy4i3g6K5rh8xjE7YcBGW9THR4Y7YWbXEDdcj5gmU09E6B8ON1wPFzt6p3-K4m8kJ8MwYs3uaHI6~rR7B5w95MdlD2PmhmE24n7YGgmEg2-hRyvct~fFeYF97fffNsCeAnp5oFw6ZT0JcQZAPsFlAc93f4cB~vNNRki4UyI8Tn5wCYKg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "5WpRlPR9T0hdBeXGQ5bEiz", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "2BWdsuNrGXGPjplGDwjpuP" + } + }, + "shared": true, + "createdAt": "2021-01-27T06:46:34.442Z", + "updatedAt": "2021-01-28T13:12:36.030Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0TqLKiJJkt2PzzENv41cyv" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0TqLKiJJkt2PzzENv41cyv" + } + } + }, + "name": "Qencode", + "src": "https://contentful.qencode.com/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "2YQkSSHsqSIwWhqzisdovW", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-08-19T21:44:18.814Z", + "updatedAt": "2025-01-31T19:55:43.291Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5wnS4py3wwn4xgtUhYXaA5" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.682Z" + }, + "name": "Raster", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "installation": [ + { + "name": "apiKey", + "type": "Symbol", + "id": "apiKey" + }, + { + "name": "orgId", + "type": "Symbol", + "id": "orgId" + } + ] + }, + "src": "https://61f540e2-289b-49e3-bbd9-ab1727a6e6f4.ctfcloud.net/6WXuJ4OCGRgsQ0pwJ1ynOK/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly82MWY1NDBlMi0yODliLTQ5ZTMtYmJkOS1hYjE3MjdhNmU2ZjQuY3RmY2xvdWQubmV0LzZXWHVKNE9DR1Jnc1EwcHdKMXluT0svaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=IwPL9cEpFCW-YCkDoAi3rS2HmuTfz4Z2UYkefazhAjCs0rSW7Dku8yypO6sAFtR5H~UgA38F8zybXab38~8uKRZPWzqnv2EB9-pfjsxYwHnOdv9PvbOtx9Jp7PUGhqC3oYhSWTz4thf3n1e2bPrajhmG6aBGCztQh41IgZ6UG-qB19r-1ES0sXMRi8sYJgsQHjl4p2LHyobQzN~WDLcVHzE41jL4kaRKBEmaHhLbu0lMrKxvfMa-7v7trl7xISIdFFKqntnKBsNJ7wvAyMysIWf50xdXFGlIvdAB58qsmQSiqYlPY-mLNFSDxFMK7U7u66KflfW6YJsc3f5CapInZA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "7ek22esW2z9i1kdmevLJXd", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2021-03-11T15:29:55.343Z", + "updatedAt": "2021-03-11T15:29:55.343Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2YVRzNgF2sE64ooav1eKSd" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2YVRzNgF2sE64ooav1eKSd" + } + } + }, + "name": "Repeater", + "src": "https://hopeful-ptolemy-922717.netlify.app/", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [ + { + "name": "Custom Value Name", + "id": "valueName", + "type": "Symbol", + "required": false + } + ] + } + }, + { + "sys": { + "id": "6sLWDUsuXcyIfkPeokdRxJ", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-10-28T08:43:21.403Z", + "updatedAt": "2025-01-21T20:30:47.119Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2LSyXwc717JeKfw5DIgg6W" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.683Z" + }, + "name": "Saleor", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + }, + "src": "https://d463b888-1d06-4f10-b416-9b1566b178d7.ctfcloud.net/6O0BY9hY5wG75yJSgUD5HP/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kNDYzYjg4OC0xZDA2LTRmMTAtYjQxNi05YjE1NjZiMTc4ZDcuY3RmY2xvdWQubmV0LzZPMEJZOWhZNXdHNzV5SlNnVUQ1SFAvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=eSDqh3kpp3pZak8OiF0L52wgZBC6PiVcJcXh7a9a69c4sWr7Wn9hGws0-GcWwnGgzgjJs8OUYLmNXOPrufnf~5wxaBjfHAC5tn5bkfRBY46idN7D5H47zdcBPkPibe1tz2ud~us8RqSLp6fq~ZUqy-ZFb1VrzpriGD-E1oaW9fJ4z4i5e9A4d0VIJJU4M3H-4wzCL6X~WM0HHEA4pKLK744jzBlaHifLRgeBvCOJkuwt8WEGpmISVrGjrRQ8Zvjfyi5-zR6d9hv95xy6~hehRjvvokUDaq~MaCSQSDLEd35VaOyTvyvVDwWX6ZUoQMdnpuFcRgGINQYq3Lj6je2JSA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "1O8njPYTGO44VueSJNBrdZ", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-06-01T18:58:45.824Z", + "updatedAt": "2024-12-12T03:19:05.979Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7J9Yl0eiCbWcz1a6dZz2ou" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.684Z" + }, + "name": "Salesforce Commerce Cloud Connector", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + } + ], + "parameters": { + "instance": [ + { + "default": "product", + "name": "Field Type", + "options": [ + { + "product": "Product" + }, + { + "category": "Category" + } + ], + "id": "fieldType", + "type": "Enum", + "required": true, + "labels": {} + } + ] + }, + "src": "https://3b6d08cb-0ba0-4fec-a881-3fc521652297.ctfcloud.net/CsrBcNciwbL2ttD739JKv/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8zYjZkMDhjYi0wYmEwLTRmZWMtYTg4MS0zZmM1MjE2NTIyOTcuY3RmY2xvdWQubmV0L0NzckJjTmNpd2JMMnR0RDczOUpLdi9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=MFE67sU1ZdkxRH0DGZMxvB71gMEspih75khTl8kgsZftYpTsEK66LYMNuWk5YhM4h6fovDLtrZoQs-SZGKc6otfeMFVo4AWwr9Io1o83x7Klqcw5h0rJVbY5j3SwBnfFrg7z59BzXY5wVExYH6f4MfjAl6Rs~SAFk9LuF6ziE4XK5w9p~fBhIl5l8C--BrN7hbZRtrosPD7vEUDcHjTDs3EbwcER1Mk9qrPmNUjGjjwrBIBjeoZZQGfv9W0XKAbiptonDG11zs5HIwdWeLIUXugMzVn4A9S7oLGTy4R9bBGBY2l2fzBrDiJtz2i3rTIyx0W5nmFy9F0L7cVG7i5enQ__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "GdOFzqcDrEbmn2teDQE2i", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-03-29T19:19:08.656Z", + "updatedAt": "2025-01-21T20:39:53.281Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FNJe2xmShG6mc5Cqsy6eW" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.685Z" + }, + "name": "SAP Commerce Cloud", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + } + ], + "src": "https://16603fd4-eabd-4d70-b938-60532dd0717e.ctfcloud.net/3DkLV6i7HmiVKF0FzrEOg8/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8xNjYwM2ZkNC1lYWJkLTRkNzAtYjkzOC02MDUzMmRkMDcxN2UuY3RmY2xvdWQubmV0LzNEa0xWNmk3SG1pVktGMEZ6ckVPZzgvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=BCCEHswZERo4GsK6tioIdc1~37H74GH5i-wvZl7FUOTkThfTiiT23Y7ulZbJBZocAzBAVqom-xd~UMfANVlibq5FtHx0lllDc3mREueuxaiXiebscX7b4gmOaK7WwCLb-H2Y8v-P~qvNORHnGTdDYRxxOUsiqxKQaVnXrMBZRmvlJr2L-BSuzIK5UV9U2IIwZ2xl9Y85W1jjWPex~7XYac33ht~bWb1BvHb0FMKQIUrYtp9jaB~mIQ0-u20Edb~NrQ5icqru4rCexokQfQfhW0IiTxFo0KMsx9ESUFa6Xdc2s9DfJ3lMVW6s1uqNZO5srJmXWNIAXUPhOypyuQW9EA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "7jJoGTAjjjTZqedusaIU7M", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5u1hLJSfU79YOdpNtySNat" + } + }, + "shared": true, + "createdAt": "2023-02-16T12:35:48.878Z", + "updatedAt": "2024-09-19T04:28:44.262Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5tiYEmkRQTmzxm19lqi0Md" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5tiYEmkRQTmzxm19lqi0Md" + } + } + }, + "name": "Scaleflex DAM", + "src": "https://contentful.demo.sfxconnector.com", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "60S8P6KWlzfazXqMjhsJ1v", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-12-16T15:07:42.148Z", + "updatedAt": "2025-01-31T19:55:54.596Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2MzbkIYbpZL19Dtc16UoJy" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.739Z" + }, + "name": "Shopify", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + } + ], + "src": "https://c59a9a72-be13-4a13-80d7-b016b22bbde1.ctfcloud.net/k2g7OVjDMtSFIUKGDkOam/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9jNTlhOWE3Mi1iZTEzLTRhMTMtODBkNy1iMDE2YjIyYmJkZTEuY3RmY2xvdWQubmV0L2syZzdPVmpETXRTRklVS0dEa09hbS9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=j9F3ufuBHT7rrU6igR50CFypGneKjhdmXcFHYqmlwOSiv-sh3JY6hEg-bW1K73FVLwp8VGEY6vb9~AlPj6ADWihMobOg5CMNbTGUdGfo3jcdgX6ndbs6OnVf9Z~rkhokvFOOx1fWTb1fw033lmuNy9ne-5SzhiH-VAO~nn~g2epgsnhyA~kzJIrOmtMRWVMQi6aeaDvw-2RxGCb5aANAHlcF90DMcFZk9D9cZs4UOZhCzrfe3oVpZDEF77L4bneRXhLIW-BQORHy-ToQ79Ajr8uVY4n3szcygrqUj8QDkNOcrvDNEfb~GR7~gWgbLBll9hShAWL4v15JC8baZ83JNg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "5E71q6bdze3Haj9F2n9czY", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0SEv9uJudA095dlkpARGvs" + } + }, + "shared": true, + "createdAt": "2022-06-30T08:32:20.862Z", + "updatedAt": "2023-07-19T09:19:26.677Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5rhzcuH9Wx3nurftHBCYVZ" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5rhzcuH9Wx3nurftHBCYVZ" + } + } + }, + "name": "Shopstory", + "src": "https://contentful.shopstory.app/", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "parameters": { + "instance": [ + { + "name": "Mode", + "default": "content", + "id": "mode", + "type": "Symbol", + "required": true + }, + { + "name": "Canvas URL", + "description": "With this parameter you can override global canvas URL for this specific field. In most cases it should stay empty.", + "id": "canvasUrl", + "type": "Symbol" + } + ] + } + }, + { + "sys": { + "id": "2unqOCspPxYbyM295yh51V", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5FxqrACp1SSuw3oSAUCXcw" + } + }, + "shared": true, + "createdAt": "2023-05-12T15:57:51.375Z", + "updatedAt": "2023-05-19T14:24:16.626Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7spvExYxsoecxOkXu6JpTN" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7spvExYxsoecxOkXu6JpTN" + } + }, + "expiresAt": "2025-02-05T20:05:50.740Z" + }, + "name": "SiteSpect", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "src": "https://51cffec0-7ac9-402d-9ba6-8ef67bab4cc3.ctfcloud.net/6jO80YvyLTqsFOa78bFnSz/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly81MWNmZmVjMC03YWM5LTQwMmQtOWJhNi04ZWY2N2JhYjRjYzMuY3RmY2xvdWQubmV0LzZqTzgwWXZ5TFRxc0ZPYTc4YkZuU3ovaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=bowf74djgocqeb1xUWCb6pKlS7hKBCZz6mSHF3YnJ4ngxqDsIIulbklm~BVC4wFIPCF3ug4XdZIibUrtLOmkgcmUizP2RTAJTU9lIS3FCJ-~ifO7SvjJE6kVpZSNiOdSFCeIxSzJvsrI2Ut8FI6gvWYLvnX3ctQ3VtJLL0Z~q6yzNN2otMQS6Oh~7cQtMB9uNm~k97XjnrrL5rmuouMPxRTq-zfosv1~siKYFSiu2Lm7IKToX4-k4GKe2lZHC-DLagBPIhv1iUZsRLSu4wXxzWIuhSK1qirH-GpZr6MlKb707f4vJouF3avy5TnojRvdhNtBQd6KXuVA8MWuvGAbXg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "7ir40h24qLGSQWJ6JCS3sk", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2021-12-02T12:36:53.667Z", + "updatedAt": "2022-02-09T10:11:47.526Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1lbcJCitOqcNZToAh8Mkxz" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1lbcJCitOqcNZToAh8Mkxz" + } + } + }, + "name": "Slack", + "src": "https://slack.ctfapps.net/index.html", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + } + ] + }, + { + "sys": { + "id": "24SX6dqadSbp2kTSBSNw0L", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "2QOGgGnLgLCv0ROiZ3wOBr" + } + }, + "shared": true, + "createdAt": "2021-08-03T18:26:51.989Z", + "updatedAt": "2022-08-16T13:50:52.528Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5oh1nnjVvZgRgkijq7lW1t" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5LG9NsobZHM3BS2bNr4wcn" + } + }, + "expiresAt": "2025-02-05T20:05:50.742Z" + }, + "name": "Slatwall", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + } + ], + "parameters": { + "instance": [] + }, + "src": "https://444da026-d75e-480f-b9bb-a58dff8402e7.ctfcloud.net/2JkgvZqkwMNMCrWJeeNlAV/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly80NDRkYTAyNi1kNzVlLTQ4MGYtYjliYi1hNThkZmY4NDAyZTcuY3RmY2xvdWQubmV0LzJKa2d2WnFrd01OTUNyV0plZU5sQVYvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=ROVevEA6nnKAHctmw-3WYnrdJY7D2KjtVbN4jOQNNAUC5AYsFY7HGhHMfTl5iPTxPZAezyysmFLEl~MtClCf4Fkx8GIk8S8X00MeLB5DVhlbiPvi923B2iFURN5B9OfVNQrxzfRLukcap42dFj3hcA0f4KxGRybOizn2uGXn9w6vwNlVaanTV8gTTAG~LxTRT2N-9fi8bGpjwJPuKDjqqyWX6hOcROSoV0sKX9c1KXgRzjOJ59FI3OzifC5tIHvmZBKWTY1tDGcZvNwYe1eNHF1ly4caw69w~~7IJbt7110KuLyVBicfYjnK3DboQXRM5n8--EwqK4NkrkDoQd1iiA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "7fJGa8IE51jJdakiyBwcJ5", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "12AsJraQyXh1tM0uoQ51K5" + } + }, + "shared": true, + "createdAt": "2022-06-27T12:49:30.113Z", + "updatedAt": "2024-12-09T16:01:23.574Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "12rWPvzWa14PM2cI0c83Gd" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "12rWPvzWa14PM2cI0c83Gd" + } + }, + "expiresAt": "2025-02-05T20:05:50.743Z" + }, + "name": "Smartcat", + "locations": [ + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "page" + } + ], + "parameters": { + "instance": [] + }, + "src": "https://ee567258-62f2-4830-bce5-e892540632ab.ctfcloud.net/52Iw1IbBDsfMNgmasSjpIH/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9lZTU2NzI1OC02MmYyLTQ4MzAtYmNlNS1lODkyNTQwNjMyYWIuY3RmY2xvdWQubmV0LzUySXcxSWJCRHNmTU5nbWFzU2pwSUgvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=Y6xwuLrrzRRrFg6BpGMCSstp3-EDa2GksSssALdoWDz5O2i3wARb61yLvrBztwE28BVj9o~800sfQNrK728Zy8~Mqr96f0J~ppKV0Th0k3vJh8CHJ7vhe1VE5cYg~5rTf8ltBMiD9kkg7U0s5v5WNoZb62YBdT5JNXmlpJPwD-yK6JaENzzc9MQjZAHp2zwCHQq4tugfsbSP8lXJQDRINhW0Ozg7v1wC~4TEpDNRrrjeg5T4KWOx~KrE26PFWyIZLV4kFtI3nycPPmiq9RUSy5ADmSsCyfChzq3RfLXSWlwCFE4D-5mlNxiied1kgKuR0k1IuWxsnO~JytitRSVXjg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "6ABxlejtWcEubKLM42fjMD", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-01-31T11:06:22.084Z", + "updatedAt": "2020-04-27T12:28:47.438Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5NItczv8FWvPn5UTJpTOMM" + } + } + }, + "name": "Smartling", + "src": "https://smartling.ctfapps.net/frontend/index.html", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + } + ] + }, + { + "sys": { + "id": "4c6SxDAXoHPLcFmoMLvGde", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-09-27T19:17:22.793Z", + "updatedAt": "2025-01-31T19:55:54.291Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2D8ljY8aA7f32Wxhcf8lxD" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.744Z" + }, + "name": "Surfer", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "src": "https://89d87a7a-bf41-4aa8-8890-796c16c5bad4.ctfcloud.net/1BuauoUv7GkWuh6Q8U7Jio/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly84OWQ4N2E3YS1iZjQxLTRhYTgtODg5MC03OTZjMTZjNWJhZDQuY3RmY2xvdWQubmV0LzFCdWF1b1V2N0drV3VoNlE4VTdKaW8vaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=nMWO2SVEaQ5PbreaWWXOAexksAk9YDm7n7zWga1RImNQGd6kfXFxCPP67dELmmPmqVHn8nOQgFKySzA6-WvzQ6l4i6nw6gNH4FLf6fQbPzLm~o5RLQt3eq8Q73Xr0qX2uFPCLedCkKlD2O~pVAWubIO7t46~wCBenin~8Q1895ctQ1FKP8RMtQhTtwWJ~OjCxDauplHZ~~ETe3x1zr8ruwPIjcm3HjXvrG8vqat8qYjC-u-khqWXerzuzRMCRnhbEMNKRiQgKr70sjoELqIAOQPK4AWNIaLO0LvAIFptn46gP6SAPLI3UsQPvtraaYy~TBk9lMeDiJaoNjMiWDHQ9Q__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "QMdzLmdwbV0j4ZrVY4WOv", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0uSnG7ikBn0c6T0kS6hhlx" + } + }, + "shared": true, + "createdAt": "2021-03-18T14:58:18.720Z", + "updatedAt": "2021-03-18T14:58:18.720Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3IatEc5aJ2AXeP0sgPkLUM" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3IatEc5aJ2AXeP0sgPkLUM" + } + } + }, + "name": "Swell", + "src": "https://swell-contentful-picker.vercel.app", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "7CPoljE4C0HpsVZ7a7HrZG", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2021-07-05T09:39:05.993Z", + "updatedAt": "2025-02-04T08:06:39.045Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7JWRGOYWY5AnjuoNVzBwyO" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7JWRGOYWY5AnjuoNVzBwyO" + } + }, + "expiresAt": "2025-02-05T20:05:50.745Z" + }, + "name": "Tasks", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page" + } + ], + "parameters": { + "instance": [] + }, + "src": "https://fa9349c7-7c39-42e4-849d-b577e6e9a374.ctfcloud.net/4x8Wfpo5QSpXPe3z5dNRCS/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9mYTkzNDljNy03YzM5LTQyZTQtODQ5ZC1iNTc3ZTZlOWEzNzQuY3RmY2xvdWQubmV0LzR4OFdmcG81UVNwWFBlM3o1ZE5SQ1MvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=IzdrRVv2kfK1evdhjWb46UeCR8AqumVtwQ3PLtqRA37F8MFEggB2ACK6ffIACqhC1Xzn5tF88Cz03f96DZe4H7zYLoZy5k69yXLgO4Nggp3jljZXpLg7j5gtQsjxG46TGCAC5oztHj8s01p5WbCt-tvvTPbh3dZKG-UceNoNCBLVEfH3QSgCnLUQgQgFkIS2jdgyxwfYedvVY42EY8Gn~6jFIE2HZNW-Q1bK6A4uZ1i8Upg2mRdsquP5cA1dVvI2gonDrDf3YZMM63bCtUA068EHY1iB-YPEfeA4ALRHKOPURdSRDkXmJwHVBntgfSyy7QkW48UYGVFLdsBL6u0frA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "EPRcLyDrBeAQgLtTRfPwu", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "25nCTg3Bl7iHWXk541IXcc" + } + }, + "shared": true, + "createdAt": "2022-05-05T07:11:38.645Z", + "updatedAt": "2024-11-13T11:41:18.327Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "25dziZyGrZWrZ6gsQmtQze" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4pwK4DjXHKcAdt4nv6ZSyO" + } + }, + "expiresAt": "2025-02-05T20:05:50.747Z" + }, + "name": "Trados", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "page", + "navigationItem": { + "name": "Trados", + "path": "/" + } + } + ], + "parameters": {}, + "src": "https://15a427d1-bb86-4b42-84fd-d2a4f6ee3a62.ctfcloud.net/KwZyWqOAgBnqjCnRi9aW6/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8xNWE0MjdkMS1iYjg2LTRiNDItODRmZC1kMmE0ZjZlZTNhNjIuY3RmY2xvdWQubmV0L0t3WnlXcU9BZ0JucWpDblJpOWFXNi9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=CknYAVR-87Xa5QC5wOVrZsXSPcVH8F4Lrw6JDwF3RGvagr1C8NE5IWvsn3O3-OUcv2K6hq8lGa9RdE7saN1QX2i1nwCVa0z9jfP87pNsrfFPSKTX-XNr6mQmfCaAwvptB3QB3~MbLv~1IhAHqoO0KJd1DzMGJCY4W0kqK-RkV898lwjeVCOWJycX19jCXvG1LpAYQLTXej4LhbuGPzXysWFz4JEiEoloBVzSVjfb6zM4H~rIlt~S3AM~5BhkoE1mAe1Qsd6omSENgbZBdgqwIdGtW2na5WCLt84iqXLbe1D95Q7NtNv5~EBuBP1yYwtPbDBKbworVL2WXbAxGgCeGQ__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "b7SVv0k1EYbQRsusviQDi", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-01-04T14:49:53.208Z", + "updatedAt": "2025-01-31T19:55:54.908Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "549ZG41aazTYkABSEvfRyA" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.748Z" + }, + "name": "Transifex", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {}, + "src": "https://05e597ce-691d-48da-8adc-eedca26c54b4.ctfcloud.net/4yTnBmPutHfeQkRHdyHizn/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8wNWU1OTdjZS02OTFkLTQ4ZGEtOGFkYy1lZWRjYTI2YzU0YjQuY3RmY2xvdWQubmV0LzR5VG5CbVB1dEhmZVFrUkhkeUhpem4vaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=l4IUqFtr-yydo0l5-IZW9rWhadLA4rM1pWjoUos3EDO8zX6UndXR4PxHWvemHch4ME77BAO1Lv8N5SbdUzj3KhTmVk9djuhifxs7mkN5h0LdV4cjvi5-KixWEH59AXsm4tgDWvvUZc4r1pPPX9knweFuT9oB7N7omxIixgNdqIy1pJ7BW8XF4mlw-tGCEfoexg-sbNoke6HZrhS-WLN7wAaunoi-vIkIYW4WB-zVifgR6bbcnoyAndPPOWq5r7DRrIQS9HzcvSYnmeBESNkw7kZugBXeenR7XHYRfFXw5pdkasuuylC0YniIEpp-PY1quuhWDZXie3LfFleL~WG8sA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "1SZgLiOT63ijEzPJZQ4QWT", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-03-20T13:46:37.843Z", + "updatedAt": "2023-09-28T16:03:15.817Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2jvc3kU4n7OIABiFMTaGyB" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2D8ljY8aA7f32Wxhcf8lxD" + } + } + }, + "name": "Typeform", + "src": "https://typeform.ctfapps.net/frontend/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + } + ] + }, + { + "location": "dialog" + }, + { + "location": "home" + } + ] + }, + { + "sys": { + "id": "1BeY7xDfJfvD5El9ymsOZF", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "14pf4vP1CA4EGu7AXnr1P5" + } + }, + "shared": true, + "createdAt": "2020-08-20T23:27:10.487Z", + "updatedAt": "2022-04-26T20:01:40.373Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0SJxBnMuapGsHZPLP1q7US" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5uDNLZHF9vPRvtZ88GeNGi" + } + } + }, + "name": "Uniform", + "src": "https://contentful.uniform.app/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + } + ] + } + ] + }, + { + "sys": { + "id": "3Ju8DSs6cEG3TnqFa979vc", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-09-27T19:12:10.394Z", + "updatedAt": "2025-01-31T19:56:05.979Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2D8ljY8aA7f32Wxhcf8lxD" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.749Z" + }, + "name": "Uploadcare", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "instance": [ + { + "name": "Max number of files", + "description": "The max number of files that can be added to a single field. 0 means no limit.", + "id": "maxFiles", + "type": "Number" + }, + { + "name": "Upload sources string", + "description": "Comma separated list of possible upload sources. E.g. `local, camera, dropbox`. See docs for details: https://uploadcare.com/docs/upload-sources/", + "id": "uploadSourcesString", + "type": "Symbol" + }, + { + "default": "useGlobalAppSetting", + "name": "Allow to upload images only", + "options": [ + { + "allowImagesOnly": "Allow images only" + }, + { + "allowAnyFiles": "Allow any files" + }, + { + "useGlobalAppSetting": "Use global app setting" + } + ], + "description": "If selected `Allow images only` then editors won't be able to upload anything but images.", + "id": "imgOnly", + "type": "Enum", + "labels": {} + } + ] + }, + "src": "https://7aad0801-b0a2-4382-9455-624148cb550a.ctfcloud.net/aKexNUjkGdX7VRRIClMCI/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly83YWFkMDgwMS1iMGEyLTQzODItOTQ1NS02MjQxNDhjYjU1MGEuY3RmY2xvdWQubmV0L2FLZXhOVWprR2RYN1ZSUklDbE1DSS9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=YcCav-D3LbV5mzRB~4vx6AUgB9GteZDEMEetxo3ROF6EbYgiY42ICTVs6NK5-aLWSB0jvBXoDNSVn7AnfwhiUjRBJnTbrwvjWgNYBERiVEsGo787-24nGZxupTuxv16F1qWgncI6KFh~z9mbpNn-29pt6c70SZI8tAVaV3XpYkpgEd01--csRuxA1pvzhlq06O~gC-0jmp8WC8-5OrVOFWOAm-0h3AS5ou9aXPkWmpzSS2DNWhp0efUpl1M5NuXU66L~m8TurFBrDeIyT72OYrGr7ysZQ0qL~tXr5urY-oJIo67wkCcv3wQcR7~G~Sm7~LAGdlV-80wOxeP1mA5MAA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "4QsJrTg4fFjX7UmQDkeayq", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-01-23T22:37:02.320Z", + "updatedAt": "2025-01-24T23:01:55.307Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0VYEozm0sWFT6Wee4Zm9Dn" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.750Z" + }, + "name": "Vercel", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {}, + "src": "https://9f3afa65-6214-4de1-bd24-408fe715c06e.ctfcloud.net/6M05o3q40mxTfvUOu3ZnOS/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly85ZjNhZmE2NS02MjE0LTRkZTEtYmQyNC00MDhmZTcxNWMwNmUuY3RmY2xvdWQubmV0LzZNMDVvM3E0MG14VGZ2VU91M1puT1MvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=J32Z1RejHhcoKzXhfsGiCJc7hRORUdtkF~9gWOzMIcSWrZLNoOvS6L0-REZ2Vbnl9yE~SD1myeyvf6w6CZM8Y3dO4TYklnQcYgIKZOwJ~Nc207Ae2txQAwrSm2G6CzYXuz~YnUtq7kGxsg6NBYxAOICvZ3A7C8aJEgPnEfbaB9tcqSm-YrwThp-OQp0fwwyHS~NEeWdimlYHpiw0kkU-MEO41Dt6imcAK9im5~BUjO6~vzKK0teT3VWDrcMIRntRClbggWdPIF-JGoetTNHXW4zob1A8TlGO7MZcopZ8dCZlFL6WoMp8xLd5Ns5txGK3jw1dvYGfR12KlOi9aJzHeg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "3HFf3DxTPYMh2L8214oW1s", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-09-13T18:26:51.771Z", + "updatedAt": "2025-01-31T19:56:05.440Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "03fzTwuuEEPDj1HaDHyeDM" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.752Z" + }, + "name": "Voucherify", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "src": "https://79b5fe5d-d537-470a-924e-236b97b7ce22.ctfcloud.net/6CVqOrdznLgtiDsfW2eiwo/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly83OWI1ZmU1ZC1kNTM3LTQ3MGEtOTI0ZS0yMzZiOTdiN2NlMjIuY3RmY2xvdWQubmV0LzZDVnFPcmR6bkxndGlEc2ZXMmVpd28vaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=TslVcLqYpx5E3ykY0FJk~n8ow8q-9tg~kDT-Pobl234D3I9ZTRT1uw0rpgGvsy8Z~QUhw36dylCbKO8d7QQImaTFO6LbZdSVS~sY5KuE32nbyNKFnFLImf4TQwZzYgZ3Bd~A1vf8F3lnBThmJJQEscnrSNF8svfIklRsL6KydaTdbKZ~9UwdgSqqkV4MovJM1TfZZ-UN85k7xjAhMPQQHZoWENtqMySOixp9lH6FS3q~gOg9yyvFX19yMaOMmBthorVAfKbXk8E2eAdsBt~0aCrVFSpiJlrLwn6rF~v6p5EvfWvWSJpHvXPgX8O6AWYbO~ZjdmIuVl8P3lMwYl~OLQ__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "7DnamgI4qKntUVMcOfZtQk", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0obnPYhku3jo775GiGSivz" + } + }, + "shared": true, + "createdAt": "2021-06-14T06:34:10.948Z", + "updatedAt": "2021-07-27T15:46:09.562Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0i6k6A8gvnzsopMOPMqoqT" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5Pdjlm0t7kKPqgRXTEcoDV" + } + }, + "expiresAt": "2025-02-05T20:05:50.753Z" + }, + "name": "VWO", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "entry-editor" + }, + { + "location": "page" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + }, + "src": "https://fadd3153-6e93-4991-b002-21f3001d4fe8.ctfcloud.net/2nZR4C05uQJr3skPaYUXyL/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9mYWRkMzE1My02ZTkzLTQ5OTEtYjAwMi0yMWYzMDAxZDRmZTguY3RmY2xvdWQubmV0LzJuWlI0QzA1dVFKcjNza1BhWVVYeUwvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=VKdpSa-Y~yQCxKH2UxmOI1uwwEmxhVpJ69A7skBRVnZyg79sDzj9ffgh-MkvTmhAQBl2KukiLtfhdO1mkETTpjpC~NMSmaXFw5O8FBtM065nTfZ-a5szlrLatjva4lQcF3yj8Ghi94AKLbPgjhhrfsWbT-e6byBTjau69Z35bn7A1IzZAzd9PWhga21EyNjQwUY7dpKLQDDxwrh5DMk41aSHKw0fVOrqziUirVQVUhFmEBPKOGwwOZexVtxH4~PP~FGSsTTT-yc3~34D9VfnBJRCmZ8QTqLUeuIlNJbIUaJOrsLqzX9q0Cd20cYzxPUT~zAX-zZrbCjalOxzfwpZkA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "71oYmQJFCIWn9pxizjN8dZ", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2025-01-29T16:54:50.238Z", + "updatedAt": "2025-01-31T19:56:06.115Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1TxB84jpuvrlDUiXNmjAnk" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.754Z" + }, + "name": "VWO - Feature Management & Experimentation", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {}, + "src": "https://e6bdcc98-c07e-4c14-a5db-82277287e4cb.ctfcloud.net/KH2X9F4QeHzT8SLQKD5CN/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9lNmJkY2M5OC1jMDdlLTRjMTQtYTVkYi04MjI3NzI4N2U0Y2IuY3RmY2xvdWQubmV0L0tIMlg5RjRRZUh6VDhTTFFLRDVDTi9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=aOD3jLKKuxWNVSxZ8oWmYk9iPJ-AJlrnD3ypcMAYV2tCEm~RFWoh8ApCjUXauFsHdTLX~6JKrYzOICKFAu6BE3pQRtnyvrGkEg2LO48BgSO3IUd2JpdCmu0Wym0utoSovSkf8CqI4XCEvWeX1aWccVpPs4siTz7w3k0IL-lEATwMscWMoI3q6GMR7izxn7QXiRic7PPXyIfbYqFvqwrLKGEbz01T-xzNM90UA5~mD4bQs~h5b3P8gFZuiYDW5dp5N01OWt8DdpBmGfFmRpYzY0CgfJBDPV-laL-pUZ9mOU2TpTfbZEFQegMuROci8oUeqjgQSQe56XUv-bRiyeBY0w__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "6StWOM1AZBDHDjynDkm1iz", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2022-08-16T11:51:02.704Z", + "updatedAt": "2024-09-10T18:08:55.958Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0xAU1rz5uyEJ0ItTExcjsa" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.755Z" + }, + "name": "Wistia", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "src": "https://e203aea8-0a3f-4b7f-96ec-eeb349422af3.ctfcloud.net/58RN96o2neL68XlitQnmGX/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9lMjAzYWVhOC0wYTNmLTRiN2YtOTZlYy1lZWIzNDk0MjJhZjMuY3RmY2xvdWQubmV0LzU4Uk45Nm8ybmVMNjhYbGl0UW5tR1gvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=UbQU89WyTJA4y3M052mGTH1-LHuIajsHaQypphZhV~gO4Z7fyj6QlwX~IzADp6PVeNNjnnOWDsbXc~5a4NUdq~S4lkaUrbyUqmMrgI90k-ie1ZeOWFMnchL~Uagnl3taTRbkVRUBw6hXsintPA9HJoQdqLyr-rzj2vd3CTb5kTxeIgVygaShI1muJCPylDJU4~LlPRujGMnUEajOKWfjcioDGlqGKCzx3CLWP-hTRZcnsNC1F8X2UVNp8nSnRxPbBaaQ~KOfPmOE1qI5lqgabxmfF82vApJMD1ta3b9giZ~0tYryBXjce9qleuQIQz0ztuqUKsU7dbk3linL51ABRg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "44A0iM4wuqcQBDfg6qrlQx", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-03-01T23:19:13.465Z", + "updatedAt": "2025-01-31T19:56:16.427Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "03fzTwuuEEPDj1HaDHyeDM" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.757Z" + }, + "name": "Wix", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + } + ], + "parameters": {}, + "src": "https://85dadf93-16f5-446b-a2a9-2a0d1b1e1a95.ctfcloud.net/1tWK9eLCM0S4xpGsULxO39/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly84NWRhZGY5My0xNmY1LTQ0NmItYTJhOS0yYTBkMWIxZTFhOTUuY3RmY2xvdWQubmV0LzF0V0s5ZUxDTTBTNHhwR3NVTHhPMzkvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=dOS7mSBBBMOhbm7pZtxTiVWaM~A9dsJG8IdwN3TBvVoIBoet~yImIOvk-GxqjHxFYi-VAXJju36~c030-NGCAukY3b1PuRKtFX4ydh-RRI3EIVMb-nTGCS2dAWIZeyq049gxTNxczgkyGMTIL5R5Y~TG1SkWBRUJARzfFEhGq33vcJqAAMVy5Du0qc5LHnmQY4h58vXefoinzrqEs21Q8-V3By4QjrJtSNT2Vq7gL7U9OOTCdvzhZufV8npZONEeAmbqXMuEfC3JqNIA87C6yRrSXMI2-1Zj5MifBpomUeW-ROINWgiqS1K6Swd6RxdEafpGYRE1CWtWvrYMxGCDUg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "IzXGEKn1YcF831Z2r6TtN", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2021-11-15T13:57:44.050Z", + "updatedAt": "2025-02-04T08:09:09.786Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0jz6hPHbUidMTiQCdO2KmW" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7JWRGOYWY5AnjuoNVzBwyO" + } + }, + "expiresAt": "2025-02-05T20:05:50.758Z" + }, + "name": "Workflows App", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "Workflows", + "path": "/" + } + } + ], + "parameters": { + "instance": [] + }, + "src": "https://17a00aa2-860a-4c54-849b-d831f0198a13.ctfcloud.net/3o2ZmDGW4KWe1f40Ws9FCl/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8xN2EwMGFhMi04NjBhLTRjNTQtODQ5Yi1kODMxZjAxOThhMTMuY3RmY2xvdWQubmV0LzNvMlptREdXNEtXZTFmNDBXczlGQ2wvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=gAEGSHcrCIroudwkSbNNYmNIAlv~r8OYrXV3l~7os~-ufRsuuAu9iDprKYztVMbR8Mcgv7bJvQ3nQ33gtLvsIZmsZ0gIJMTt17hlMQwBEbmJ01yu2EV0D29e78917Vnm0XHpxblqlNuGZxSbuP4SmgKD5HHSxQLpKFHV~tgBjDv7B3sLVJGRrW-XdmJp14bNEKx1ksm2-IyfA9CdhmbWKOKlGjnZEe677yamLQ4SXrXO7qHPh3XYQSnD5SSiPvbD--DA~E2CZb2SOod6arJ~LwJP~55W~UABufGftnWryRbpfD54mAM7v4PFbK4tN6WQQxymQdIuKapldvYpBQNE7Q__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "6C8a6ICmjODMMsNC0Un0Xe", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5RHAZeCcIG0BSCJll8MFMs" + } + }, + "shared": true, + "createdAt": "2023-08-24T14:06:10.167Z", + "updatedAt": "2023-09-12T20:57:19.352Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5RACtD6G9a7W26r6lzrO00" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5RACtD6G9a7W26r6lzrO00" + } + } + }, + "name": "Writer AI Content Detector", + "src": "https://contentful-ai-detector.writer.com/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Text" + }, + { + "type": "RichText" + } + ] + } + ] + }, + { + "sys": { + "id": "5wmH6IpRamZ66ofjP9THlz", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "1o92OHmPmIOWNYuX0jJQQE" + } + }, + "shared": true, + "createdAt": "2021-12-08T11:05:03.091Z", + "updatedAt": "2022-06-08T17:24:53.207Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1o835krXYQ8Rtv4GEKxaaI" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1o835krXYQ8Rtv4GEKxaaI" + } + } + }, + "name": "Writer Contentful Extension", + "src": "https://contentful-plugin.writer.com/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Text" + }, + { + "type": "Symbol" + }, + { + "type": "RichText" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "5i8iZ60GpkbZQJzutNXit", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-03-29T16:48:17.872Z", + "updatedAt": "2025-01-31T19:56:16.827Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0VYEozm0sWFT6Wee4Zm9Dn" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.759Z" + }, + "name": "Xillio Transcreate", + "locations": [ + { + "location": "page", + "navigationItem": { + "name": "Xillio Transcreate", + "path": "/" + } + }, + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {}, + "src": "https://02ce03f3-9853-4db8-a4c3-d933d4b0822d.ctfcloud.net/24oi7FCTTLvoXDO0u6dFRH/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8wMmNlMDNmMy05ODUzLTRkYjgtYTRjMy1kOTMzZDRiMDgyMmQuY3RmY2xvdWQubmV0LzI0b2k3RkNUVEx2b1hETzB1NmRGUkgvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=IDT4~ggM220eDseM~DzpJ2HPNhaYSm0sd63m4~MvBrbNNL2GqEmVwLNBCwZ3pnaRAcpWPkqogejsT7Hux8m8OiryG54B2LWbZIF0dn70A4efjeaSF1DPS6zWLthUcXx-oqQNDLtZ9LDVOwoTMZd1IxJsVyhT-hhk3u4YohyTY9YKjrzZC9m0dcYxoAaQysstQIuBUQdg6nVBNzRtAekLu1YpnbPhlEhNIzoqdJh65vO3AAloqq686oJCLV2a4FtH7zU4YuEUjWEqZbu7F~~pSwzbzqwRfrREgGEiT8OS1FmRxAbKKxJPdFAuwTSUInb61E5VITfKmuIiO1cczad8pw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "4u3pN6m2aOOBTr9kGP8LJK", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "28CeCjl0ZH2X0gql3fnuHZ" + } + }, + "shared": true, + "createdAt": "2020-10-29T09:22:15.212Z", + "updatedAt": "2021-09-29T12:04:10.546Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4PkXeFfQ9DyvCf9Y0yWP96" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4PkXeFfQ9DyvCf9Y0yWP96" + } + } + }, + "name": "XTM Connect", + "src": "https://contentful-connector.xtm-intl.com/app/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "XTM Connect", + "path": "/" + } + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + } + ] + } +} \ No newline at end of file From d9859d8a71bb335911a5de4e882b675359c97f3e Mon Sep 17 00:00:00 2001 From: umeshmore45 Date: Tue, 18 Feb 2025 03:20:29 +0530 Subject: [PATCH 02/10] code changes --- api/src/services/contentful.service.ts | 18 +++++++++++++++--- .../libs/contentTypeMapper.js | 8 +++++++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/api/src/services/contentful.service.ts b/api/src/services/contentful.service.ts index 335e9ed1b..0e7d0e80d 100644 --- a/api/src/services/contentful.service.ts +++ b/api/src/services/contentful.service.ts @@ -209,9 +209,21 @@ const processField = ( return isPresent?.value ?? fieldData?.advanced?.default_value; } case 'file': { - const id = lang_value?.sys?.id; - if (lang_value.sys === "Asset" && id in assetId) return assetId?.[id]; - return []; + if (fieldData?.advanced?.multiple) { + const assetsData: any = []; + for (const asset of lang_value) { + if (asset?.sys?.id in assetId) { + assetsData?.push(assetId?.[asset?.sys?.id]) + } + } + return assetsData; + } else { + const id = lang_value?.sys?.id; + if (id in assetId) { + return assetId?.[id] + } + return null; + } } case 'reference': { const id = lang_value?.sys?.id; diff --git a/upload-api/migration-contentful/libs/contentTypeMapper.js b/upload-api/migration-contentful/libs/contentTypeMapper.js index 1190ba521..97e7e7af7 100644 --- a/upload-api/migration-contentful/libs/contentTypeMapper.js +++ b/upload-api/migration-contentful/libs/contentTypeMapper.js @@ -225,7 +225,13 @@ const contentTypeMapper = (data) => { case 'assetLinkEditor': case 'assetLinksEditor': case 'assetGalleryEditor': - acc.push(createFieldObject(item, 'file', 'file')); + if (item.type === 'Array') { + const data = createFieldObject(item, 'file', 'file'); + data.advanced.multiple = true; + acc.push(data); + } else { + acc.push(createFieldObject(item, 'file', 'file')); + } break; case 'entryLinksEditor': From 8ec1cbc64c09b4b698cf76eaae86ccfa72af630b Mon Sep 17 00:00:00 2001 From: AishDani Date: Tue, 18 Feb 2025 18:06:20 +0530 Subject: [PATCH 03/10] refactor:removed happy migrating sentence from empty project dashboard --- ui/src/cmsData/projects.json | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/ui/src/cmsData/projects.json b/ui/src/cmsData/projects.json index 7c8516da2..bde386e2b 100644 --- a/ui/src/cmsData/projects.json +++ b/ui/src/cmsData/projects.json @@ -56,20 +56,6 @@ "text": "Begin your content migration journey by creating a new project. Follow the steps to ensure a smooth and efficient transfer of your content." } ] - }, - { - "type": "p", - "attrs": { - "style": {}, - "redactor-attributes": {}, - "dir": "ltr" - }, - "uid": "9ecb9e032e8844f0be6414dd13e318a4", - "children": [ - { - "text": "Happy migrating!" - } - ] } ], "type": "doc", From 5df7608fbab776f0974c458e2bdbe27339edecb0 Mon Sep 17 00:00:00 2001 From: umeshmore45 Date: Wed, 19 Feb 2025 02:48:14 +0530 Subject: [PATCH 04/10] added extension --- api/src/constants/index.ts | 5 ++ api/src/services/contentful.service.ts | 58 ++++++++++---- api/src/services/extension.service.ts | 75 +++++++++++++++++++ api/src/services/migration.service.ts | 6 +- api/src/utils/content-type-creator.utils.ts | 49 +++++++++--- .../libs/contentTypeMapper.js | 4 +- 6 files changed, 172 insertions(+), 25 deletions(-) create mode 100644 api/src/services/extension.service.ts diff --git a/api/src/constants/index.ts b/api/src/constants/index.ts index 56c9de7e1..097299474 100644 --- a/api/src/constants/index.ts +++ b/api/src/constants/index.ts @@ -183,6 +183,8 @@ export const LOCALE_MAPPER: any = { } export const CHUNK_SIZE = 1048576; +export const LIST_EXTENSION_UID = 'bltc44e51cc9f4b0d80'; + export const KEYTOREMOVE = [ "update", "fetch", "delete", "oauth", "hosting", "install", "reinstall", "upgrade", "getRequests", "authorize", "authorization", "listInstallations" @@ -209,11 +211,14 @@ export const MIGRATION_DATA_CONFIG = { CONTENT_TYPES_DIR_NAME: "content_types", EXTENSIONS_MAPPER_DIR_NAME: "extension-mapper.json", + CUSTOM_MAPPER_FILE_NAME: "custmon-mapper.json", CONTENT_TYPES_FILE_NAME: "contenttype.json", CONTENT_TYPES_MASTER_FILE: "contenttypes.json", CONTENT_TYPES_SCHEMA_FILE: "schema.json", MARKETPLACE_APPS_DIR_NAME: "marketplace_apps", MARKETPLACE_APPS_FILE_NAME: "marketplace_apps.json", + EXTENSION_APPS_DIR_NAME: "extensions", + EXTENSION_APPS_FILE_NAME: "extensions.json", REFERENCES_DIR_NAME: "reference", REFERENCES_FILE_NAME: "reference.json", diff --git a/api/src/services/contentful.service.ts b/api/src/services/contentful.service.ts index 0e7d0e80d..6ddea522c 100644 --- a/api/src/services/contentful.service.ts +++ b/api/src/services/contentful.service.ts @@ -6,7 +6,8 @@ import _ from "lodash"; import axios from "axios"; import jsonpath from "jsonpath"; import pLimit from 'p-limit'; -import { jsonToHtml, jsonToMarkdown } from '@contentstack/json-rte-serializer'; +import { JSDOM } from "jsdom"; +import { jsonToHtml, jsonToMarkdown, htmlToJson } from '@contentstack/json-rte-serializer'; import { CHUNK_SIZE, MIGRATION_DATA_CONFIG } from "../constants/index.js"; @@ -200,14 +201,17 @@ const processField = ( case 'text': { return lang_value; } + case 'json': { return processRTEOrNestedObject(lang_value, lang, destination_stack_id); } + case 'dropdown': case 'radio': { const isPresent = fieldData?.advanced?.options?.find((option: any) => lang_value === option?.value); return isPresent?.value ?? fieldData?.advanced?.default_value; } + case 'file': { if (fieldData?.advanced?.multiple) { const assetsData: any = []; @@ -225,17 +229,31 @@ const processField = ( return null; } } + case 'reference': { + if (Array?.isArray?.(lang_value) && fieldData?.advanced?.multiple) { + const refs = []; + for (const entry of lang_value) { + const id = entry?.sys?.id; + if (id in entryId) { + refs?.push(entryId?.[id]); + } + } + return refs; + } const id = lang_value?.sys?.id; - if (lang_value?.sys?.linkType === "Entry" && id in entryId) return [entryId?.[id]]; - return []; + if (id in entryId) return [[entryId?.[id]]]; + return null; } + case 'app': { return damApp(fieldData?.otherCmsType, lang_value) } + case 'boolean': { return lang_value; } + case 'number': { if (typeof lang_value === 'string') { return parseInt?.(lang_value) @@ -275,21 +293,33 @@ const processField = ( return jsonToMarkdown(jsonValue); } + case 'extension': { + if (['listInput', 'tagEditor']?.includes(fieldData?.otherCmsType)) { + if (Array.isArray(lang_value) && lang_value?.length) { + return { value: lang_value?.map((element: any) => ({ key: element, value: element })) } + } + return { value: [] }; + } + break; + } + + case 'group': { + if (lang_value.lat) return lang_value; + break; + } + default: { if (Array.isArray(lang_value)) { return processArrayFields(lang_value, entryId, assetId); } - console.info("🚀 ~ fieldData?.otherCmsType:", fieldData?.contentstackFieldType) + if (typeof lang_value !== "object") { + return typeof lang_value === "number" ? lang_value + : cleanBrackets(lang_value); + } + console.info("Missing ===>", fieldData?.contentstackFieldType) break; } } - // If lang_value is not an object - if (typeof lang_value !== "object") { - return typeof lang_value === "number" ? lang_value - : cleanBrackets(lang_value); - } - // Check if it's a location (lat/lon) - if (lang_value.lat) return lang_value; }; // Helper function to clean up brackets in non-numeric lang_value @@ -324,10 +354,12 @@ const processArrayFields = (array: any, entryId: any, assetId: any) => { // Helper function to process Rich Text Editor (RTE) or nested object const processRTEOrNestedObject = (lang_value: any, lang: any, destination_stack_id: string) => { - if (lang_value.data) { + if (lang_value?.data) { return jsonRTE(lang_value, lang.toLowerCase(), destination_stack_id); } else { - return lang_value; + const dom = new JSDOM(lang_value); + const htmlDoc = dom.window.document.querySelector("body"); + return htmlToJson(htmlDoc); } }; diff --git a/api/src/services/extension.service.ts b/api/src/services/extension.service.ts new file mode 100644 index 000000000..ed9fbb8ce --- /dev/null +++ b/api/src/services/extension.service.ts @@ -0,0 +1,75 @@ +import path from "path"; +import fs from 'fs'; +import { MIGRATION_DATA_CONFIG, LIST_EXTENSION_UID } from "../constants/index.js"; + +const { + CUSTOM_MAPPER_FILE_NAME, + EXTENSION_APPS_DIR_NAME, + EXTENSION_APPS_FILE_NAME +} = MIGRATION_DATA_CONFIG; + +const writeExtFile = async ({ destinationStackId, extensionData }: any) => { + const dirPath = path.join(process.cwd(), MIGRATION_DATA_CONFIG.DATA, destinationStackId, EXTENSION_APPS_DIR_NAME); + try { + await fs.promises.access(dirPath); + } catch (err) { + try { + await fs.promises.mkdir(dirPath, { recursive: true }); + } catch (mkdirErr) { + console.error("🚀 ~ fs.mkdir ~ err:", mkdirErr); + return; + } + } + try { + const filePath = path.join(dirPath, EXTENSION_APPS_FILE_NAME); + await fs.promises.writeFile(filePath, JSON.stringify(extensionData, null, 2)); + } catch (writeErr) { + console.error("🚀 ~ fs.writeFile ~ err:", writeErr); + } +} + +const getExtension = ({ uid, destinationStackId }: any) => { + if (uid === LIST_EXTENSION_UID) { + return { + "stackHeaders": { "api_key": destinationStackId }, + "urlPath": `/extensions/${destinationStackId}`, + "uid": LIST_EXTENSION_UID, + "created_at": "2025-02-18T14:45:22.630Z", + "updated_at": "2025-02-18T14:45:22.630Z", + "created_by": "bltba052dc70a273dd2", + "updated_by": "bltba052dc70a273dd2", + "tags": [], + "_version": 1, + "title": "Key-value Field", + "config": {}, + "type": "field", + "data_type": "json", + "multiple": false, + "srcdoc": "\n\n\n\n \n \n \n \n \n \n \n\n\n\n
\n
\n
\n
\n :\n \n \n \n
\n
\n
\n
\n\n
\n \n\n\n" + } + } + return null; +} + +const createExtension = async ({ destinationStackId }: any) => { + const extensionPath = path.join(MIGRATION_DATA_CONFIG.DATA, destinationStackId, CUSTOM_MAPPER_FILE_NAME); + const extMapper: any = await fs.promises.readFile(extensionPath, "utf-8").catch(async () => { }); + if (extMapper !== undefined) { + const extensionData: any = {}; + const extJson = JSON?.parse(extMapper); + const uniqueExtUids: any = [...new Set(extJson?.map?.((item: any) => item.extensionUid))]; + for await (const extUid of uniqueExtUids ?? []) { + const extData = getExtension({ uid: extUid, destinationStackId }); + if (extData) { + extensionData[extUid] = extData; + } + } + await writeExtFile({ destinationStackId, extensionData }) + } +} + + + +export const extensionService = { + createExtension +} \ No newline at end of file diff --git a/api/src/services/migration.service.ts b/api/src/services/migration.service.ts index b20d6fbf3..83fc59c14 100644 --- a/api/src/services/migration.service.ts +++ b/api/src/services/migration.service.ts @@ -19,6 +19,7 @@ import { setLogFilePath } from "../server.js"; import fs from 'fs'; import { contentfulService } from "./contentful.service.js"; import { marketPlaceAppService } from "./marketplace.service.js"; +import { extensionService } from "./extension.service.js"; @@ -223,6 +224,7 @@ const startTestMigration = async (req: Request): Promise => { await setLogFilePath(loggerPath); const contentTypes = await fieldAttacher({ orgId, projectId, destinationStackId: project?.current_test_stack_id, region, user_id }); await marketPlaceAppService?.createAppManifest({ orgId, destinationStackId: project?.current_test_stack_id, region, userId: user_id }); + await extensionService?.createExtension({ destinationStackId: project?.current_test_stack_id }); switch (cms) { case CMS.SITECORE_V8: case CMS.SITECORE_V9: @@ -256,9 +258,9 @@ const startTestMigration = async (req: Request): Promise => { await contentfulService?.createRefrence(file_path, project?.current_test_stack_id, projectId); await contentfulService?.createWebhooks(file_path, project?.current_test_stack_id, projectId); await contentfulService?.createEnvironment(file_path, project?.current_test_stack_id, projectId); - // await contentfulService?.createAssets(file_path, project?.current_test_stack_id, projectId); + await contentfulService?.createAssets(file_path, project?.current_test_stack_id, projectId); await contentfulService?.createEntry(file_path, project?.current_test_stack_id, projectId, contentTypes); - // await contentfulService?.createVersionFile(project?.current_test_stack_id, projectId); + await contentfulService?.createVersionFile(project?.current_test_stack_id, projectId); break; } default: diff --git a/api/src/utils/content-type-creator.utils.ts b/api/src/utils/content-type-creator.utils.ts index fc87a6131..6e3c754eb 100644 --- a/api/src/utils/content-type-creator.utils.ts +++ b/api/src/utils/content-type-creator.utils.ts @@ -3,7 +3,7 @@ import path from 'path'; import _ from 'lodash'; import customLogger from './custom-logger.utils.js'; import { getLogMessage } from './index.js'; -import { MIGRATION_DATA_CONFIG } from '../constants/index.js'; +import { LIST_EXTENSION_UID, MIGRATION_DATA_CONFIG } from '../constants/index.js'; import { contentMapperService } from "../services/contentMapper.service.js"; import appMeta from '../constants/app/index.json'; @@ -12,7 +12,8 @@ const { GLOBAL_FIELDS_DIR_NAME, CONTENT_TYPES_DIR_NAME, CONTENT_TYPES_SCHEMA_FILE, - EXTENSIONS_MAPPER_DIR_NAME + EXTENSIONS_MAPPER_DIR_NAME, + CUSTOM_MAPPER_FILE_NAME } = MIGRATION_DATA_CONFIG; interface Group { @@ -73,7 +74,7 @@ const arrangGroups = ({ schema, newStack }: any) => { return dtSchema; } -const saveAppMapper = async ({ marketPlacePath, data }: any) => { +const saveAppMapper = async ({ marketPlacePath, data, fileName }: any) => { try { await fs.promises.access(marketPlacePath); } catch (err) { @@ -84,7 +85,7 @@ const saveAppMapper = async ({ marketPlacePath, data }: any) => { return; } } - const marketPlaceFilePath = path.join(marketPlacePath, EXTENSIONS_MAPPER_DIR_NAME); + const marketPlaceFilePath = path.join(marketPlacePath, fileName); const newData: any = await fs.promises.readFile(marketPlaceFilePath, "utf-8").catch(async () => { await fs.promises.writeFile(marketPlaceFilePath, JSON.stringify([data])); }); @@ -475,7 +476,11 @@ const convertToSchemaFormate = ({ field, advanced = true, marketPlacePath }: any const title = field?.title?.split?.(' ')?.[0]; const appDetails = appMeta?.entries?.find?.((item: any) => item?.title === appName); if (appDetails?.uid) { - saveAppMapper({ marketPlacePath, data: { appUid: appDetails?.app_uid, extensionUid: `${appDetails?.uid}-cs.cm.stack.custom_field` } }); + saveAppMapper({ + marketPlacePath, + data: { appUid: appDetails?.app_uid, extensionUid: `${appDetails?.uid}-cs.cm.stack.custom_field` }, + fileName: EXTENSIONS_MAPPER_DIR_NAME + }); return { "display_name": title, "extension_uid": appDetails?.uid, @@ -483,12 +488,38 @@ const convertToSchemaFormate = ({ field, advanced = true, marketPlacePath }: any "extension": true }, "uid": field?.uid, - "mandatory": false, - "non_localizable": false, - "unique": false, "config": {}, "data_type": "json", - "multiple": false + "multiple": field?.advanced?.multiple ?? false, + "mandatory": field?.advanced?.mandatory ?? false, + "unique": field?.advanced?.unique ?? false, + "non_localizable": field.advanced?.nonLocalizable ?? false, + } + } + break; + } + + case 'extension': { + if (['listInput', 'tagEditor']?.includes(field?.otherCmsType)) { + const extensionUid = LIST_EXTENSION_UID; + saveAppMapper({ + marketPlacePath, + data: { extensionUid }, + fileName: CUSTOM_MAPPER_FILE_NAME + }); + return { + "display_name": field?.title, + "uid": field?.uid, + "extension_uid": extensionUid, + "field_metadata": { + "extension": true + }, + "config": {}, + "multiple": field?.advanced?.multiple ?? false, + "mandatory": field?.advanced?.mandatory ?? false, + "unique": field?.advanced?.unique ?? false, + "non_localizable": field.advanced?.nonLocalizable ?? false, + "data_type": "json", } } break; diff --git a/upload-api/migration-contentful/libs/contentTypeMapper.js b/upload-api/migration-contentful/libs/contentTypeMapper.js index 97e7e7af7..2e0bb7197 100644 --- a/upload-api/migration-contentful/libs/contentTypeMapper.js +++ b/upload-api/migration-contentful/libs/contentTypeMapper.js @@ -290,8 +290,10 @@ const contentTypeMapper = (data) => { acc.push(createDropdownOrRadioFieldObject(item, item.widgetId)); break; case 'tagEditor': - acc.push(createFieldObject(item, 'json', 'json')); + case 'listInput': { + acc.push(createFieldObject(item, 'extension', 'extension')) break; + } } break; case 'Boolean': From d46ea941b5f0e021cb85a9f0c5dc0f9accf7c098 Mon Sep 17 00:00:00 2001 From: umeshmore45 Date: Thu, 20 Feb 2025 01:57:40 +0530 Subject: [PATCH 05/10] fixed json rte --- api/src/services/contentful.service.ts | 33 ++++++++------ api/src/services/contentful/jsonRTE.ts | 53 ++++++++++++---------- api/src/services/migration.service.ts | 13 +++--- api/src/utils/test-folder-creator.utils.ts | 4 +- 4 files changed, 58 insertions(+), 45 deletions(-) diff --git a/api/src/services/contentful.service.ts b/api/src/services/contentful.service.ts index 6ddea522c..a56c12fad 100644 --- a/api/src/services/contentful.service.ts +++ b/api/src/services/contentful.service.ts @@ -552,7 +552,7 @@ const saveAsset = async ( * * @throws Will log errors encountered during file reading, writing, or asset processing. */ -const createAssets = async (packagePath: any, destination_stack_id: string, projectId: string,) => { +const createAssets = async (packagePath: any, destination_stack_id: string, projectId: string, isTest = false) => { const srcFunc = 'createAssets'; try { const assetsSave = path?.join?.(DATA, destination_stack_id, ASSETS_DIR_NAME); @@ -561,9 +561,12 @@ const createAssets = async (packagePath: any, destination_stack_id: string, proj const assetData: any = {}; const metadata: AssetMetaData[] = []; const fileMeta = { "1": ASSETS_SCHEMA_FILE }; - const assets = JSON.parse(data)?.assets; + let assets = JSON.parse(data)?.assets; if (assets && assets.length > 0) { + if (isTest) { + assets = assets?.slice(0, 10); + } const limit = pLimit(10); // Limit concurrent operations to 10 const tasks = assets.map((asset: any) => limit(() => saveAsset(asset, failedJSON, assetData, metadata, projectId, destination_stack_id, 0)) @@ -708,7 +711,7 @@ const createEnvironment = async (packagePath: any, destination_stack_id: string, * * @throws Will log errors encountered during file reading, processing, or writing of entries. */ -const createEntry = async (packagePath: any, destination_stack_id: string, projectId: string, contentTypes: any): Promise => { +const createEntry = async (packagePath: any, destination_stack_id: string, projectId: string, contentTypes: any, mapperKeys: any): Promise => { const srcFunc = 'createEntry'; try { const entriesSave = path.join(DATA, destination_stack_id, ENTRIES_DIR_NAME); @@ -721,7 +724,6 @@ const createEntry = async (packagePath: any, destination_stack_id: string, proje if (entries && entries.length > 0) { const assetId = await readFile(assetsSave, ASSETS_SCHEMA_FILE) ?? []; const entryId = await readFile(path.join(DATA, destination_stack_id, REFERENCES_DIR_NAME), REFERENCES_FILE_NAME); - console.info("🚀 ~ createEntry ~ entryId:", destination_stack_id) const environmentsId = await readFile(environmentSave, ENVIRONMENTS_FILE_NAME); const displayField: { [key: string]: any } = {} content.map((item: any) => { @@ -768,7 +770,7 @@ const createEntry = async (packagePath: any, destination_stack_id: string, proje }); const pathName = getDisplayName(name, displayField); locales.forEach((locale) => { - const publishDetails = Object.values(environmentsId) + const publishDetails = Object?.values?.(environmentsId) .filter((env: any) => env?.name === environment_id) ?.map((env: any) => ({ environment: env?.uid, @@ -778,15 +780,15 @@ const createEntry = async (packagePath: any, destination_stack_id: string, proje const title = entryData[name][locale][id][pathName] || ""; const urlTitle = title - .replace(/[^a-zA-Z0-9]+/g, "-") - .toLowerCase(); + ?.replace?.(/[^a-zA-Z0-9]+/g, "-") + ?.toLowerCase?.(); entryData[name][locale][id] = { - title: title.trim() === "" ? urlTitle || id : title, + ...entryData[name][locale][id], + title: title?.trim?.() === "" ? (urlTitle || id) : title, uid: id, - url: `/${name.toLowerCase()}/${urlTitle}`, - locale: locale.toLowerCase(), + url: `/${name?.toLowerCase?.()}/${urlTitle}`, + locale: locale?.toLowerCase?.(), publish_details: publishDetails, - ...entryData[name][locale][id], }; // Format object keys to snake_case Object.entries(entryData[name][locale][id]).forEach( @@ -808,7 +810,10 @@ const createEntry = async (packagePath: any, destination_stack_id: string, proje ); const writePromises = []; - for (const [key, values] of Object.entries(result)) { + for (const [newKey, values] of Object.entries(result)) { + const currentCT = contentTypes?.find((ct: any) => ct?.otherCmsUid === newKey); + const ctName = currentCT?.contentstackUid in mapperKeys ? + mapperKeys?.[currentCT?.contentstackUid] : (currentCT?.contentstackUid ?? newKey.replace(/([A-Z])/g, "_$1").toLowerCase()); for (const [localeKey, localeValues] of Object.entries( values as { [key: string]: any } )) { @@ -816,7 +821,7 @@ const createEntry = async (packagePath: any, destination_stack_id: string, proje for (const [entryKey, entryValue] of Object.entries(localeValues)) { const message = getLogMessage( srcFunc, - `Entry title "${(entryValue as { title: string })?.title}"(${key}) in the ${localeKey} locale has been successfully transformed.`, + `Entry title "${(entryValue as { title: string })?.title}"(${ctName}) in the ${localeKey} locale has been successfully transformed.`, {} ); await customLogger(projectId, destination_stack_id, "info", message); @@ -825,7 +830,7 @@ const createEntry = async (packagePath: any, destination_stack_id: string, proje let chunkIndex = 1; const filePath = path.join( entriesSave, - key.replace(/([A-Z])/g, "_$1").toLowerCase(), localeKey.toLowerCase() + ctName, localeKey.toLowerCase() ); for (const [chunkId, chunkData] of Object.entries(chunks)) { refs[chunkIndex++] = `${chunkId}-entries.json`; diff --git a/api/src/services/contentful/jsonRTE.ts b/api/src/services/contentful/jsonRTE.ts index ca1821c46..90d168b9b 100755 --- a/api/src/services/contentful/jsonRTE.ts +++ b/api/src/services/contentful/jsonRTE.ts @@ -14,7 +14,6 @@ const { RTE_REFERENCES_FILE_NAME, } = MIGRATION_DATA_CONFIG; - type NodeType = string; type LangType = string; type StackId = string; @@ -113,7 +112,7 @@ function parseTableRow(obj: any, lang?: LangType, destination_stack_id?: StackId return parsers.get(e.nodeType)?.(e, lang, destination_stack_id); }).filter(Boolean); - const type = types.has('table-header-cell') ? 'thead' : ''; + const type = types.has('table-header-cell') ? 'thead' : 'th'; return children.length ? { type, attrs: {}, uid: generateUID('tabletype'), children } : null; } @@ -224,7 +223,7 @@ function parseBlockReference(obj: any, lang?: LangType, destination_stack_id?: S if (masterLocale === lang || lang) { for (const [arrayKey, arrayValue] of Object.entries(entryId)) { - if (arrayValue[obj.data.target.sys.id] && lang === arrayKey) { + if (arrayValue?.[obj?.data?.target?.sys?.id]?._content_type_uid && lang === arrayKey) { return { type: 'reference', attrs: { @@ -242,7 +241,7 @@ function parseBlockReference(obj: any, lang?: LangType, destination_stack_id?: S } } return { - type: 'reference', + type: 'p', attrs: {}, uid: generateUID('reference'), children: [{ text: '' }], @@ -255,23 +254,25 @@ function parseInlineReference(obj: any, lang?: LangType, destination_stack_id?: if (entry) { const [arrayKey, arrayValue] = entry; - return { - type: 'reference', - attrs: { - 'display-type': 'block', - type: 'entry', - 'class-name': 'embedded-entry redactor-component block-entry', - 'entry-uid': obj.data.target.sys.id, - locale: arrayKey, - 'content-type-uid': arrayValue._content_type_uid, - }, - uid: generateUID('reference'), - children: [{ text: '' }], - }; + if (arrayValue?.[obj?.data?.target?.sys?.id]?._content_type_uid && arrayKey) { + return { + type: 'reference', + attrs: { + 'display-type': 'block', + type: 'entry', + 'class-name': 'embedded-entry redactor-component block-entry', + 'entry-uid': obj.data.target.sys.id, + locale: arrayKey, + 'content-type-uid': arrayValue?.[obj?.data?.target?.sys?.id]?._content_type_uid, + }, + uid: generateUID('reference'), + children: [{ text: '' }], + }; + } } return { - type: 'reference', + type: 'p', attrs: {}, uid: generateUID('reference'), children: [{ text: '' }], @@ -281,18 +282,24 @@ function parseInlineReference(obj: any, lang?: LangType, destination_stack_id?: function parseBlockAsset(obj: any, lang?: LangType, destination_stack_id?: StackId): any { const assetId = destination_stack_id && readFile(path.join(process.cwd(), DATA, destination_stack_id, ASSETS_DIR_NAME, ASSETS_SCHEMA_FILE)); const asset = assetId?.[obj?.data?.target?.sys?.id]; - // const attrs: any = {}; if (asset) { return { type: 'reference', attrs: { 'display-type': 'download', + "type": "asset", 'asset-uid': obj.data.target.sys.id, 'class-name': 'embedded-asset redactor-component block-asset', - title: asset.title, - filename: asset.fileName, - locale: asset.locale, + "asset-type": asset?.content_type, + title: asset?.title, + filename: asset?.fileName, + locale: asset?.locale, + "content-type-uid": "sys_assets", + "asset-link": asset?.url, + "asset-name": asset?.title, + "alt": "", + "asset-alt": "", }, uid: generateUID('reference'), children: [{ text: '' }], @@ -300,7 +307,7 @@ function parseBlockAsset(obj: any, lang?: LangType, destination_stack_id?: Stack } return { - type: 'reference', + type: 'p', attrs: {}, uid: generateUID('reference'), children: [{ text: '' }], diff --git a/api/src/services/migration.service.ts b/api/src/services/migration.service.ts index 83fc59c14..5b7a6c781 100644 --- a/api/src/services/migration.service.ts +++ b/api/src/services/migration.service.ts @@ -258,16 +258,16 @@ const startTestMigration = async (req: Request): Promise => { await contentfulService?.createRefrence(file_path, project?.current_test_stack_id, projectId); await contentfulService?.createWebhooks(file_path, project?.current_test_stack_id, projectId); await contentfulService?.createEnvironment(file_path, project?.current_test_stack_id, projectId); - await contentfulService?.createAssets(file_path, project?.current_test_stack_id, projectId); - await contentfulService?.createEntry(file_path, project?.current_test_stack_id, projectId, contentTypes); + await contentfulService?.createAssets(file_path, project?.current_test_stack_id, projectId, true); + await contentfulService?.createEntry(file_path, project?.current_test_stack_id, projectId, contentTypes, project?.mapperKeys); await contentfulService?.createVersionFile(project?.current_test_stack_id, projectId); break; } default: break; } - // await testFolderCreator?.({ destinationStackId: project?.current_test_stack_id }); - // await utilsCli?.runCli(region, user_id, project?.current_test_stack_id, projectId, true, loggerPath); + await testFolderCreator?.({ destinationStackId: project?.current_test_stack_id }); + await utilsCli?.runCli(region, user_id, project?.current_test_stack_id, projectId, true, loggerPath); } } @@ -299,7 +299,8 @@ const startMigration = async (req: Request): Promise => { await customLogger(projectId, project?.destination_stack_id, 'info', message); await setLogFilePath(loggerPath); const contentTypes = await fieldAttacher({ orgId, projectId, destinationStackId: project?.destination_stack_id, region, user_id }); - + await marketPlaceAppService?.createAppManifest({ orgId, destinationStackId: project?.current_test_stack_id, region, userId: user_id }); + await extensionService?.createExtension({ destinationStackId: project?.current_test_stack_id }); switch (cms) { case CMS.SITECORE_V8: case CMS.SITECORE_V9: @@ -336,7 +337,7 @@ const startMigration = async (req: Request): Promise => { await contentfulService?.createWebhooks(file_path, project?.destination_stack_id, projectId); await contentfulService?.createEnvironment(file_path, project?.destination_stack_id, projectId); await contentfulService?.createAssets(file_path, project?.destination_stack_id, projectId); - await contentfulService?.createEntry(file_path, project?.destination_stack_id, projectId); + await contentfulService?.createEntry(file_path, project?.current_test_stack_id, projectId, contentTypes, project?.mapperKeys); await contentfulService?.createVersionFile(project?.destination_stack_id, projectId); break; } diff --git a/api/src/utils/test-folder-creator.utils.ts b/api/src/utils/test-folder-creator.utils.ts index ade1df6a9..bda13e11c 100644 --- a/api/src/utils/test-folder-creator.utils.ts +++ b/api/src/utils/test-folder-creator.utils.ts @@ -276,11 +276,11 @@ export const testFolderCreator = async ({ destinationStackId }: any) => { } } } - const sortData = allData?.length > 3 ? allData.sort((a, b) => b?.count - a?.count).slice?.(1, 4) : allData; + const sortData = allData?.length > 3 ? allData.sort((a, b) => b?.count - a?.count).slice?.(0, 3) : allData; const finalData: any = []; sortData.forEach((et: any) => { const entryObj: any = {}; - const ctData = et?.count > 4 ? Object?.values?.(et?.entryData)?.splice?.(0, 5) : et?.entryData; + const ctData = et?.count > 4 ? Object?.values?.(et?.entryData)?.splice?.(0, 5) : Object?.values?.(et?.entryData); ctData?.forEach?.((entItem: any) => { entryObj[entItem?.uid] = entItem; }) From 00487479abf3ea3cb344a027fe2827fff2cd2061 Mon Sep 17 00:00:00 2001 From: AishDani Date: Thu, 20 Feb 2025 12:55:04 +0530 Subject: [PATCH 06/10] refactor:resolved bugs [CMG-490][CMG-477][CMG-489][CMG-491] --- ui/src/components/ContentMapper/index.tsx | 12 ++++++++++++ .../LegacyCms/Actions/LoadUploadFile.tsx | 4 +++- ui/src/components/LogScreen/index.tsx | 10 +++++++--- ui/src/components/TestMigration/index.tsx | 14 +++++++++++++- 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/ui/src/components/ContentMapper/index.tsx b/ui/src/components/ContentMapper/index.tsx index f74a81566..7f569db7e 100644 --- a/ui/src/components/ContentMapper/index.tsx +++ b/ui/src/components/ContentMapper/index.tsx @@ -1772,6 +1772,18 @@ const ContentMapper = forwardRef(({handleStepChange}: contentMapperProps, ref: R }); if (status === 200) { + const updatedContentMapping = {...newMigrationData?.content_mapping?.content_type_mapping}; + delete updatedContentMapping[selectedContentType?.contentstackUid]; + + const newMigrationDataObj: INewMigration = { + ...newMigrationData, + content_mapping: { + ...newMigrationData?.content_mapping, + content_type_mapping: updatedContentMapping , + isDropDownChanged: false + } + }; + dispatch(updateNewMigrationData(newMigrationDataObj)); const resetCT = filteredContentTypes?.map(ct => ct?.id === selectedContentType?.id ? { ...ct, status: data?.data?.status } : ct ); diff --git a/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx b/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx index 21e235e7b..030aacfbd 100644 --- a/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx @@ -88,6 +88,7 @@ const LoadUploadFile = (props: LoadUploadFileProps) => { const [processing, setProcessing] = useState(''); //const [isCancelLoading, setIsCancelLoading] = useState(false); //const [setIsFormatValid] = useState(false); + const [affix, setAffix] = useState(newMigrationData?.legacy_cms?.affix); const { projectId = '' } = useParams(); @@ -409,6 +410,7 @@ const LoadUploadFile = (props: LoadUploadFileProps) => { useEffect(() => { newMigrationDataRef.current = newMigrationData; + setAffix(newMigrationData?.legacy_cms?.affix); }, [newMigrationData]); const sanitizedCmsType = cmsType?.toLowerCase().replace(/[^\w\s-]/g, ''); @@ -477,7 +479,7 @@ const LoadUploadFile = (props: LoadUploadFileProps) => { isLoading={isLoading} loadingColor="#6c5ce7" version="v2" - disabled={isDisabled} + disabled={isDisabled || isEmptyString(affix)} > Validate File diff --git a/ui/src/components/LogScreen/index.tsx b/ui/src/components/LogScreen/index.tsx index 800fb5277..d595004ec 100644 --- a/ui/src/components/LogScreen/index.tsx +++ b/ui/src/components/LogScreen/index.tsx @@ -40,13 +40,14 @@ type LogsType = { * @param {string} projectId - The project ID for saving state to local storage. */ const TestMigrationLogViewer = ({ serverPath, sendDataToParent,projectId }: LogsType) => { - const [logs, setLogs] = useState([{ message: "Migration logs will appear here once the process begins.", level: ''}]); + const [isLogsLoading, setisLogsLoading] = useState(false) + const [logs, setLogs] = useState([{ message: !isLogsLoading ? "Migration logs will appear here once the process begins." : '', level: ''}]); const newMigrationData = useSelector((state: RootState) => state?.migration?.newMigrationData); const [migratedStack, setmigratedSatck] = useState( (newMigrationData?.testStacks ?? [])?.find((test) => test?.stackUid === newMigrationData?.test_migration?.stack_api_key)); - const [isLogsLoading, setisLogsLoading] = useState(false) + // Redux dispatcher const dispatch = useDispatch(); @@ -93,7 +94,10 @@ const TestMigrationLogViewer = ({ serverPath, sendDataToParent,projectId }: Logs console.log("error in parsing logs : ", error); } }); - setLogs((prevLogs) => [...prevLogs, ...parsedLogsArray]); + setLogs((prevLogs) => + [...prevLogs.filter(log => log.message !== "Migration logs will appear here once the process begins."), + ...parsedLogsArray] + ); }) return () => { socket.disconnect(); // Cleanup on component unmount diff --git a/ui/src/components/TestMigration/index.tsx b/ui/src/components/TestMigration/index.tsx index 80a1ffcd5..02b62d9d5 100644 --- a/ui/src/components/TestMigration/index.tsx +++ b/ui/src/components/TestMigration/index.tsx @@ -161,7 +161,19 @@ const TestMigration = () => { // Update migration data in Redux const newMigrationDataObj: INewMigration = { ...newMigrationData, - test_migration: { ...newMigrationData?.test_migration, stack_link: res?.data?.data?.url, stack_api_key: res?.data?.data?.data?.stack?.api_key, stack_name: res?.data?.data?.data?.stack?.name } + test_migration: { + ...newMigrationData?.test_migration, + stack_link: res?.data?.data?.url, + stack_api_key: res?.data?.data?.data?.stack?.api_key, + stack_name: res?.data?.data?.data?.stack?.name }, + testStacks:[ + ...(newMigrationData.testStacks), + { + stackUid: res?.data?.data?.data?.stack?.api_key, + stackName: res?.data?.data?.data?.stack?.name, + isMigrated: false + } + ] }; dispatch(updateNewMigrationData((newMigrationDataObj))); } From 0ebc199f597540499631f1955ce14b3240fe9a4c Mon Sep 17 00:00:00 2001 From: AishDani Date: Thu, 20 Feb 2025 16:47:56 +0530 Subject: [PATCH 07/10] refactor:added backupFieldUid key, publish_details array for entry in wordpress --- api/src/constants/index.ts | 2 +- api/src/services/contentMapper.service.ts | 2 +- api/src/services/wordpress.service.ts | 24 +++++++++++------ .../libs/contenttypemapper.js | 27 ++++++++++++------- 4 files changed, 36 insertions(+), 19 deletions(-) diff --git a/api/src/constants/index.ts b/api/src/constants/index.ts index 097299474..8e311ed26 100644 --- a/api/src/constants/index.ts +++ b/api/src/constants/index.ts @@ -244,7 +244,7 @@ export const MIGRATION_DATA_CONFIG = { CATEGORIES_FILE_NAME: "en-us.json", CATEGORIES_MASTER_FILE: "categories.json", - TAG_DIR_NAME: "tags", + TAG_DIR_NAME: "tag", TAG_FILE_NAME: "en-us.json", TAG_MASTER_FILE: "tag.json", diff --git a/api/src/services/contentMapper.service.ts b/api/src/services/contentMapper.service.ts index de08fbeb0..2af4c371d 100644 --- a/api/src/services/contentMapper.service.ts +++ b/api/src/services/contentMapper.service.ts @@ -631,7 +631,7 @@ const resetToInitialMapping = async (req: Request) => { [ NEW_PROJECT_STATUS[0], NEW_PROJECT_STATUS[5], - NEW_PROJECT_STATUS[4], + //NEW_PROJECT_STATUS[4], ].includes(project.status) || project.current_step < STEPPER_STEPS.CONTENT_MAPPING ) { diff --git a/api/src/services/wordpress.service.ts b/api/src/services/wordpress.service.ts index 7a45cdb1d..561fb32e9 100644 --- a/api/src/services/wordpress.service.ts +++ b/api/src/services/wordpress.service.ts @@ -763,6 +763,7 @@ async function saveAuthors(authorDetails: any[], destinationStackId: string, pro uid: customId, ...mapContentTypeToEntry(contentType, authordata), }; + acc[customId].publish_details = []; return acc; @@ -1463,7 +1464,7 @@ async function saveTerms(termsDetails: any[], destinationStackId: string, projec uid: customId, ...mapContentTypeToEntry(contentType, data), // Pass individual term object }; - + acc[customId].publish_details = []; return acc; }, {} @@ -1587,6 +1588,7 @@ async function saveTags(tagDetails: any[], destinationStackId: string, projectId uid:customId, ...mapContentTypeToEntry(contenttype,data), }; + acc[customId].publish_details = []; return acc; }, {}); @@ -1729,6 +1731,7 @@ async function saveCategories(categoryDetails: any[], destinationStackId:string, uid:customId, ...mapContentTypeToEntry(contenttype,data), } + acc[customId].publish_details = []; return acc; }, @@ -1873,10 +1876,13 @@ const limit = limitConcurrency(5); async function featuredImageMapping(postid: string, post: any, postdata: any) { try { - - const assetsId = JSON.parse(fs.readFileSync( - path.join(process.cwd(), assetsSave, MIGRATION_DATA_CONFIG.ASSETS_SCHEMA_FILE),'utf8' - )); + const filePath = path.join(process.cwd(), assetsSave, MIGRATION_DATA_CONFIG.ASSETS_SCHEMA_FILE); + const fileContent = fs.readFileSync(filePath, 'utf8').trim(); + + if (!fileContent) { + throw new Error(`File ${filePath} is empty or missing`); + } + const assetsId = JSON?.parse(fileContent); if (!post["wp:postmeta"] || !assetsId) return; const postmetaArray = Array.isArray(post["wp:postmeta"]) ? post["wp:postmeta"] @@ -2018,14 +2024,15 @@ async function processChunkData( category: postCategories, terms: postTerms, tag: postTags, - featured_image: '' + featured_image: '', + publish_details:[] }; const formatted_posts = await featuredImageMapping( `posts_${data["wp:post_id"]}`, data, postdata ); - const formattedPosts = Object.entries(formatted_posts).reduce( + const formattedPosts = Object?.entries(formatted_posts)?.reduce( (acc: { [key: string]: any }, data:any) => { const customId = idCorrector(data["uid"]) @@ -2035,7 +2042,8 @@ async function processChunkData( ...acc[customId], uid: customId, ...mapContentTypeToEntry(contenttype,data), - } + }; + acc[customId].publish_details = []; return acc; }, diff --git a/upload-api/migration-wordpress/libs/contenttypemapper.js b/upload-api/migration-wordpress/libs/contenttypemapper.js index 544be2637..5b8342940 100644 --- a/upload-api/migration-wordpress/libs/contenttypemapper.js +++ b/upload-api/migration-wordpress/libs/contenttypemapper.js @@ -68,7 +68,8 @@ const ContentTypeSchema = ({ contentstackField: name.toLowerCase(), contentstackFieldUid: uid, contentstackFieldType: 'text', - backupFieldType: 'text' + backupFieldType: 'text', + backupFieldUid: uid }; } if (sitecoreKey === 'url') { @@ -80,7 +81,8 @@ const ContentTypeSchema = ({ contentstackField: name.toLowerCase(), contentstackFieldUid: uid, contentstackFieldType: 'url', - backupFieldType: 'url' + backupFieldType: 'url', + backupFieldUid: uid }; } switch (type) { @@ -94,7 +96,8 @@ const ContentTypeSchema = ({ contentstackFieldUid: uid, contentstackFieldType: 'single_line_text', backupFieldType: 'single_line_text', - advanced: { default_value: default_value !== '' ? default_value : null } + advanced: { default_value: default_value !== '' ? default_value : null }, + backupFieldUid: uid }; } @@ -109,7 +112,8 @@ const ContentTypeSchema = ({ contentstackFieldUid: uid, contentstackFieldType: 'json', backupFieldType: 'json', - advanced: { default_value: default_value !== '' ? default_value : null } + advanced: { default_value: default_value !== '' ? default_value : null }, + backupFieldUid: uid }; } @@ -124,7 +128,8 @@ const ContentTypeSchema = ({ contentstackFieldUid: uid, contentstackFieldType: 'file', backupFieldType: 'file', - advanced: { default_value: default_value !== '' ? default_value : null } + advanced: { default_value: default_value !== '' ? default_value : null }, + backupFieldUid: uid }; } @@ -138,7 +143,8 @@ const ContentTypeSchema = ({ contentstackFieldUid: uid, contentstackFieldType: 'multi_line_text', backupFieldType: 'multi_line_text', - advanced: { default_value: default_value !== '' ? default_value : null } + advanced: { default_value: default_value !== '' ? default_value : null }, + backupFieldUid: uid }; } @@ -153,7 +159,8 @@ const ContentTypeSchema = ({ contentstackFieldUid: uid, contentstackFieldType: 'number', backupFieldType: 'number', - advanced: { default_value: default_value !== '' ? default_value : null } + advanced: { default_value: default_value !== '' ? default_value : null }, + backupFieldUid: uid }; } @@ -169,7 +176,8 @@ const ContentTypeSchema = ({ contentstackFieldUid: uid, contentstackFieldType: 'isodate', backupFieldType: 'isodate', - advanced: { default_value: default_value !== '' ? default_value : null } + advanced: { default_value: default_value !== '' ? default_value : null }, + backupFieldUid: uid }; } @@ -183,7 +191,8 @@ const ContentTypeSchema = ({ contentstackFieldUid: uid, contentstackFieldType: 'reference', backupFieldType: 'reference', - refrenceTo: reference_to + refrenceTo: reference_to, + backupFieldUid: uid }; } } From 15f3d315c0a24590f341f7c3cd848b2ae983928a Mon Sep 17 00:00:00 2001 From: Sayali Joshi Date: Thu, 20 Feb 2025 19:07:24 +0530 Subject: [PATCH 08/10] [CMG-516] - Enable the 'Embed Object' flag based on the embedded content types identified in the Legacy CMS --- ui/src/components/AdvancePropertise/index.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ui/src/components/AdvancePropertise/index.tsx b/ui/src/components/AdvancePropertise/index.tsx index 4bd709a99..add4d4472 100644 --- a/ui/src/components/AdvancePropertise/index.tsx +++ b/ui/src/components/AdvancePropertise/index.tsx @@ -53,7 +53,7 @@ const AdvancePropertise = (props: SchemaProps) => { mandatory: props?.value?.mandatory, allowImagesOnly: props?.value?.allowImagesOnly, nonLocalizable: props?.value?.nonLocalizable, - embedObject: true, + embedObject: (props?.value?.embedObjects?.length ?? 0) > 0, embedAssests: true, multiple: props?.value?.multiple, embedObjects: props?.value?.embedObjects, @@ -537,12 +537,12 @@ const AdvancePropertise = (props: SchemaProps) => { label="Embed Object(s)" labelColor="primary" labelPosition="right" - checked={toggleStates?.embedObject} + checked={(ctValue?.length ?? 0) > 0 || toggleStates?.embedObject} onChange={handleToggleChange && ((e: React.MouseEvent) => handleToggleChange('embedObject', (e.target as HTMLInputElement)?.checked, true))} /> - {toggleStates?.embedObject && ( + {(ctValue && ctValue?.length > 0 || toggleStates?.embedObject) && (