From b85863d371631b5cb9769483662e67953ab5e4f6 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 7 May 2025 16:50:34 -0700 Subject: [PATCH 001/116] update scripts and files --- .github/ISSUE_TEMPLATE/config.yml | 12 + .github/ISSUE_TEMPLATE/incorrect_topic.yaml | 34 +++ .github/ISSUE_TEMPLATE/missing_content.yaml | 27 ++ .github/ISSUE_TEMPLATE/site_bug.yaml | 58 ++++ .github/ISSUE_TEMPLATE/site_feature.yaml | 34 +++ .github/scripts/get-path-prefix.js | 142 ++++++--- .github/scripts/process-mds.sh | 98 +++++++ .github/workflows/deploy.yml | 270 +++++------------- .github/workflows/github-pages.yml | 3 +- .github/workflows/test-pull-request.yml | 89 ++++++ buildNavigation.js | 106 +++++++ buildRedirections.js | 46 +++ normalizeLinks.js | 66 +++++ package.json | 23 +- renameFiles.js | 142 +++++++++ scriptUtils.js | 55 ++++ src/pages/config.md | 232 +++++++++++++++ ..._builder_intro.md => app-builder-intro.md} | 2 +- .../{first_app.md => first-app.md} | 18 +- .../app_builder_get_started/index.md | 4 +- .../{publish_app.md => publish-app.md} | 0 .../{set_up.md => set-up.md} | 2 +- src/pages/get_started/index.md | 6 +- .../runtime_getting_started/activations.md | 6 +- .../runtime_getting_started/entities.md | 8 +- ..._runtime_works.md => how-runtime-works.md} | 2 +- .../runtime_getting_started/index.md | 4 +- .../runtime_getting_started/setup.md | 2 +- ...ng_runtime.md => understanding-runtime.md} | 2 +- .../{first_app.md => first-app.md} | 2 +- ...lication_state.md => application-state.md} | 0 ...og_analytics.md => azure-log-analytics.md} | 0 .../application_logging/logging.md | 18 +- .../{new_relic.md => new-relic.md} | 0 .../{splunk_cloud.md => splunk-cloud.md} | 2 +- ...unk_enterprise.md => splunk-enterprise.md} | 2 +- .../{app_hooks.md => app-hooks.md} | 4 +- ...e_overview.md => architecture-overview.md} | 16 +- ...m.md => introduction-to-react-spectrum.md} | 4 +- .../{using_sdks.md => using-sdks.md} | 6 +- .../configuration/configuration.md | 12 +- ...figuration.md => webpack-configuration.md} | 2 +- ...r_apps.md => cicd-for-app-builder-apps.md} | 2 +- ...ial_rotation.md => credential-rotation.md} | 2 +- .../deployment/deployment.md | 4 +- ...headers.md => setting-response-headers.md} | 0 .../guides/app_builder_guides/distribution.md | 4 +- .../{custom_events.md => custom-events.md} | 0 ...{aec_integration.md => aec-integration.md} | 16 +- .../exc_app/interfaces/modules.md | 22 +- ...jectwithhref.md => page-objectwithhref.md} | 16 +- ...jectwithpath.md => page-objectwithpath.md} | 16 +- .../{page.pageapi.md => page-pageapi.md} | 30 +- ...roperties.md => page-pageapiproperties.md} | 18 +- .../exc_app/interfaces/runtime.md | 16 +- ...{topbar.callback.md => topbar-callback.md} | 14 +- ...nfig.md => topbar-customfeedbackconfig.md} | 16 +- ...config.md => topbar-customsearchconfig.md} | 16 +- ...ig.md => topbar-externalfeedbackconfig.md} | 14 +- ....md => topbar-helpcenterfeedbackconfig.md} | 14 +- ...{topbar.solution.md => topbar-solution.md} | 14 +- ...opbar.topbarapi.md => topbar-topbarapi.md} | 36 +-- ...rties.md => topbar-topbarapiproperties.md} | 18 +- .../{user.userapi.md => user-userapi.md} | 16 +- .../{user.userinfo.md => user-userinfo.md} | 16 +- ...spa.md => migrate-app-to-exp-cloud-spa.md} | 4 +- .../exc_app/modules/index.md | 16 +- .../exc_app/modules/page.md | 28 +- .../exc_app/modules/topbar.md | 34 +-- .../exc_app/modules/user.md | 18 +- ..._guide.md => extension-migration-guide.md} | 2 +- .../extensions/extensions.md | 6 +- src/pages/guides/app_builder_guides/index.md | 8 +- .../guides/app_builder_guides/optimization.md | 2 +- .../app_builder_guides/security/index.md | 18 +- ...ion.md => understanding-authentication.md} | 2 +- .../guides/app_builder_guides/telemetry.md | 2 +- ...ibution_guide.md => contribution-guide.md} | 0 src/pages/guides/index.md | 32 +-- src/pages/guides/references.md | 2 +- ...hronous_calls.md => asynchronous-calls.md} | 0 .../{ci-cd_pipeline.md => ci-cd-pipeline.md} | 6 +- ...reating_actions.md => creating-actions.md} | 8 +- ...ing_rest_apis.md => creating-rest-apis.md} | 4 +- src/pages/guides/runtime_guides/index.md | 24 +- ...ng_monitoring.md => logging-monitoring.md} | 2 +- .../reference_docs/{api_ref.md => api-ref.md} | 0 .../reference_docs/{cli_use.md => cli-use.md} | 0 ..._variables.md => environment-variables.md} | 0 .../runtime_guides/reference_docs/index.md | 10 +- ...ultiple_regions.md => multiple-regions.md} | 0 ...positions.md => sequences-compositions.md} | 2 +- .../reference_docs/{wsk_use.md => wsk-use.md} | 0 ...web_actions.md => securing-web-actions.md} | 4 +- ...ecurity_general.md => security-general.md} | 8 +- ...{system_settings.md => system-settings.md} | 2 +- ...oughput_tuning.md => throughput-tuning.md} | 0 .../tools/{cli_install.md => cli-install.md} | 0 .../guides/runtime_guides/tools/index.md | 2 +- .../guides/runtime_guides/troubleshooting.md | 4 +- .../{using_packages.md => using-packages.md} | 0 .../{using_runtime.md => using-runtime.md} | 22 +- .../{business_case.md => business-case.md} | 0 src/pages/intro_and_overview/community.md | 2 +- src/pages/intro_and_overview/faq.md | 6 +- src/pages/intro_and_overview/index.md | 16 +- ..._app_builder.md => what-is-app-builder.md} | 2 +- src/pages/redirects.json | 1 + .../asset-compute-worker-ps-api/lesson1.md | 4 +- .../{blog_articles.md => blog-articles.md} | 0 src/pages/resources/ci-cd/index.md | 2 +- src/pages/resources/cron-jobs/index.md | 2 +- src/pages/resources/cron-jobs/lesson1.md | 2 +- .../resources/customer-dashboard/lesson2.md | 4 +- src/pages/resources/debugging/requirements.md | 2 +- src/pages/resources/event-driven/lesson1.md | 4 +- src/pages/resources/event-driven/lesson3.md | 4 +- .../resources/journaling-events/index.md | 2 +- .../sample_apps/code_snippets/index.md | 2 +- src/pages/resources/spectrum-intro/lesson4.md | 2 +- .../{_requirements.md => requirements.md} | 6 +- webpack.config.js | 12 + 122 files changed, 1595 insertions(+), 633 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/incorrect_topic.yaml create mode 100644 .github/ISSUE_TEMPLATE/missing_content.yaml create mode 100644 .github/ISSUE_TEMPLATE/site_bug.yaml create mode 100644 .github/ISSUE_TEMPLATE/site_feature.yaml create mode 100755 .github/scripts/process-mds.sh create mode 100644 .github/workflows/test-pull-request.yml create mode 100644 buildNavigation.js create mode 100644 buildRedirections.js create mode 100644 normalizeLinks.js create mode 100644 renameFiles.js create mode 100644 scriptUtils.js create mode 100644 src/pages/config.md rename src/pages/get_started/app_builder_get_started/{app_builder_intro.md => app-builder-intro.md} (99%) rename src/pages/get_started/app_builder_get_started/{first_app.md => first-app.md} (98%) rename src/pages/get_started/app_builder_get_started/{publish_app.md => publish-app.md} (100%) rename src/pages/get_started/app_builder_get_started/{set_up.md => set-up.md} (98%) rename src/pages/get_started/runtime_getting_started/{how_runtime_works.md => how-runtime-works.md} (99%) rename src/pages/get_started/runtime_getting_started/{understanding_runtime.md => understanding-runtime.md} (99%) rename src/pages/getting_started/{first_app.md => first-app.md} (99%) rename src/pages/guides/app_builder_guides/{application_state.md => application-state.md} (100%) rename src/pages/guides/app_builder_guides/application_logging/{azure_log_analytics.md => azure-log-analytics.md} (100%) rename src/pages/guides/app_builder_guides/application_logging/{new_relic.md => new-relic.md} (100%) rename src/pages/guides/app_builder_guides/application_logging/{splunk_cloud.md => splunk-cloud.md} (98%) rename src/pages/guides/app_builder_guides/application_logging/{splunk_enterprise.md => splunk-enterprise.md} (98%) rename src/pages/guides/app_builder_guides/architecture_overview/{app_hooks.md => app-hooks.md} (97%) rename src/pages/guides/app_builder_guides/architecture_overview/{architecture_overview.md => architecture-overview.md} (94%) rename src/pages/guides/app_builder_guides/architecture_overview/{introduction_to_react_spectrum.md => introduction-to-react-spectrum.md} (90%) rename src/pages/guides/app_builder_guides/architecture_overview/{using_sdks.md => using-sdks.md} (96%) rename src/pages/guides/app_builder_guides/configuration/{webpack_configuration.md => webpack-configuration.md} (99%) rename src/pages/guides/app_builder_guides/deployment/{cicd_for_app_builder_apps.md => cicd-for-app-builder-apps.md} (99%) rename src/pages/guides/app_builder_guides/deployment/{credential_rotation.md => credential-rotation.md} (97%) rename src/pages/guides/app_builder_guides/deployment/{setting_response_headers.md => setting-response-headers.md} (100%) rename src/pages/guides/app_builder_guides/events/{custom_events.md => custom-events.md} (100%) rename src/pages/guides/app_builder_guides/exc_app/{aec_integration.md => aec-integration.md} (88%) rename src/pages/guides/app_builder_guides/exc_app/interfaces/{page.objectwithhref.md => page-objectwithhref.md} (65%) rename src/pages/guides/app_builder_guides/exc_app/interfaces/{page.objectwithpath.md => page-objectwithpath.md} (65%) rename src/pages/guides/app_builder_guides/exc_app/interfaces/{page.pageapi.md => page-pageapi.md} (85%) rename src/pages/guides/app_builder_guides/exc_app/interfaces/{page.pageapiproperties.md => page-pageapiproperties.md} (82%) rename src/pages/guides/app_builder_guides/exc_app/interfaces/{topbar.callback.md => topbar-callback.md} (62%) rename src/pages/guides/app_builder_guides/exc_app/interfaces/{topbar.customfeedbackconfig.md => topbar-customfeedbackconfig.md} (62%) rename src/pages/guides/app_builder_guides/exc_app/interfaces/{topbar.customsearchconfig.md => topbar-customsearchconfig.md} (66%) rename src/pages/guides/app_builder_guides/exc_app/interfaces/{topbar.externalfeedbackconfig.md => topbar-externalfeedbackconfig.md} (64%) rename src/pages/guides/app_builder_guides/exc_app/interfaces/{topbar.helpcenterfeedbackconfig.md => topbar-helpcenterfeedbackconfig.md} (64%) rename src/pages/guides/app_builder_guides/exc_app/interfaces/{topbar.solution.md => topbar-solution.md} (68%) rename src/pages/guides/app_builder_guides/exc_app/interfaces/{topbar.topbarapi.md => topbar-topbarapi.md} (72%) rename src/pages/guides/app_builder_guides/exc_app/interfaces/{topbar.topbarapiproperties.md => topbar-topbarapiproperties.md} (76%) rename src/pages/guides/app_builder_guides/exc_app/interfaces/{user.userapi.md => user-userapi.md} (82%) rename src/pages/guides/app_builder_guides/exc_app/interfaces/{user.userinfo.md => user-userinfo.md} (67%) rename src/pages/guides/app_builder_guides/exc_app/{migrate_app_to_exp_cloud_spa.md => migrate-app-to-exp-cloud-spa.md} (93%) rename src/pages/guides/app_builder_guides/extensions/{extension_migration_guide.md => extension-migration-guide.md} (99%) rename src/pages/guides/app_builder_guides/security/{understanding_authentication.md => understanding-authentication.md} (96%) rename src/pages/guides/{contribution_guide.md => contribution-guide.md} (100%) rename src/pages/guides/runtime_guides/{asynchronous_calls.md => asynchronous-calls.md} (100%) rename src/pages/guides/runtime_guides/{ci-cd_pipeline.md => ci-cd-pipeline.md} (90%) rename src/pages/guides/runtime_guides/{creating_actions.md => creating-actions.md} (98%) rename src/pages/guides/runtime_guides/{creating_rest_apis.md => creating-rest-apis.md} (98%) rename src/pages/guides/runtime_guides/{logging_monitoring.md => logging-monitoring.md} (98%) rename src/pages/guides/runtime_guides/reference_docs/{api_ref.md => api-ref.md} (100%) rename src/pages/guides/runtime_guides/reference_docs/{cli_use.md => cli-use.md} (100%) rename src/pages/guides/runtime_guides/reference_docs/{environment_variables.md => environment-variables.md} (100%) rename src/pages/guides/runtime_guides/reference_docs/{multiple_regions.md => multiple-regions.md} (100%) rename src/pages/guides/runtime_guides/reference_docs/{sequences_compositions.md => sequences-compositions.md} (98%) rename src/pages/guides/runtime_guides/reference_docs/{wsk_use.md => wsk-use.md} (100%) rename src/pages/guides/runtime_guides/{securing_web_actions.md => securing-web-actions.md} (97%) rename src/pages/guides/runtime_guides/{security_general.md => security-general.md} (96%) rename src/pages/guides/runtime_guides/{system_settings.md => system-settings.md} (99%) rename src/pages/guides/runtime_guides/{throughput_tuning.md => throughput-tuning.md} (100%) rename src/pages/guides/runtime_guides/tools/{cli_install.md => cli-install.md} (100%) rename src/pages/guides/runtime_guides/{using_packages.md => using-packages.md} (100%) rename src/pages/guides/runtime_guides/{using_runtime.md => using-runtime.md} (56%) rename src/pages/intro_and_overview/{business_case.md => business-case.md} (100%) rename src/pages/intro_and_overview/{what_is_app_builder.md => what-is-app-builder.md} (97%) create mode 100644 src/pages/redirects.json rename src/pages/resources/{blog_articles.md => blog-articles.md} (100%) rename src/pages/resources/transclusions/{_requirements.md => requirements.md} (82%) create mode 100644 webpack.config.js diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..554310ca1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,12 @@ +--- +blank_issues_enabled: false +contact_links: + - name: Help Center + url: https://helpx.adobe.com/support.html + about: Find help with issues unrelated to documentation here. + - name: Community resources + url: https://developer.adobe.com/open + about: Find more resources here. + - name: Adobe Developer Support + url: https://developer.adobe.com/developer-support + about: Ask and answer questions. diff --git a/.github/ISSUE_TEMPLATE/incorrect_topic.yaml b/.github/ISSUE_TEMPLATE/incorrect_topic.yaml new file mode 100644 index 000000000..9828f32b1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/incorrect_topic.yaml @@ -0,0 +1,34 @@ +name: Incorrect or unclear topic +description: "Unclear or incorrect documentation: ambiguous guidelines, wrong or obsolete examples, typos, etc." +body: + - type: markdown + attributes: + value: | + Thank you for taking the time to report this issue! + This request should only relate to the content of the developer.adobe.com website. + Requests that do not comply with our Code of Conduct or do not contain enough information may be closed at the maintainers' discretion. + - type: checkboxes + attributes: + label: Is there an existing issue for this? + description: Please search to see if an issue already exists for the documentation you are requesting. + options: + - label: I have searched the existing issues + required: true + - type: input + attributes: + label: Which topic? + description: A link to the topic that needs clarification or correction + placeholder: "Example: https://developer.adobe.com/commerce/webapi/rest/use-rest/search-endpoint/" + validations: + required: true + - type: textarea + attributes: + label: What's wrong with the content? + validations: + required: true + - type: textarea + attributes: + label: What changes do you propose? + - type: textarea + attributes: + label: Anything else that can help to cover this? diff --git a/.github/ISSUE_TEMPLATE/missing_content.yaml b/.github/ISSUE_TEMPLATE/missing_content.yaml new file mode 100644 index 000000000..53e591ce0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/missing_content.yaml @@ -0,0 +1,27 @@ +name: Missing content +description: Undocumented feature, service, command, API, UI component, procedure, etc. +body: + - type: markdown + attributes: + value: | + Thank you for taking the time to report this issue! + This request should only relate to the content of the developer.adobe.com website. + Requests that do not comply with our Code of Conduct or do not contain enough information may be closed at the maintainers' discretion. + - type: checkboxes + attributes: + label: Is there an existing issue for this? + description: Please search to see if an issue already exists for the documentation you are requesting. + options: + - label: I have searched the existing issues + required: true + - type: textarea + attributes: + label: What's missing? + placeholder: | + - In the or ... + - Missing explanation of how ... works. + - Missing steps or guidelines for .... + - Missing code samples to demonstrate .... + - Something else ... + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/site_bug.yaml b/.github/ISSUE_TEMPLATE/site_bug.yaml new file mode 100644 index 000000000..dad69263b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/site_bug.yaml @@ -0,0 +1,58 @@ +name: Site bug +description: Something isn't working on developer.adobe.com or when building the website locally. +labels: ["bug"] +body: + - type: markdown + attributes: + value: | + Thank you for taking the time to report this issue! + This bug report should only relate to the developer.adobe.com website itself or non-content issues such as rendering, 404 pages, or other unexpected behavior. + Issues that do not comply with our Code of Conduct or do not contain enough information may be closed at the maintainers' discretion. + SECURITY DISCLOSURE: If this is a security disclosure please follow the guidelines in CONTRIBUTING.md. This helps keep folks from accidentally releasing vulnerabilities before the maintainers get a chance to fix the issue. + - type: checkboxes + attributes: + label: Is there an existing issue for this? + description: Please search to see if an issue already exists for the bug you encountered. + options: + - label: I have searched the existing issues + required: true + - type: textarea + attributes: + label: Expected behavior + description: | + Tell us what you expected to happen. + validations: + required: true + - type: textarea + attributes: + label: Actual behavior + description: | + Tell us what happened. Include error messages and issues. + validations: + required: true + - type: textarea + attributes: + label: Steps to reproduce + description: | + Provide a set of clear steps to reproduce this bug. + validations: + required: true + - type: textarea + attributes: + label: Environment + description: | + Describe your environment such as platform, browser, and versions. + Provide all the details that will help us to reproduce the bug. + value: | + - Browser: + - OS: + validations: + required: true + - type: textarea + attributes: + label: Sample code + description: Sample Code that illustrates the problem + - type: textarea + attributes: + label: Logs + description: Logs taken while reproducing problem diff --git a/.github/ISSUE_TEMPLATE/site_feature.yaml b/.github/ISSUE_TEMPLATE/site_feature.yaml new file mode 100644 index 000000000..c0486530c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/site_feature.yaml @@ -0,0 +1,34 @@ +name: Site feature request +description: Propose a new functionality or an improvement of the developer.adobe.com website or of the local development tools. +body: + - type: markdown + attributes: + value: | + Thank you for taking the time to report this issue! + This feature request should only relate to the developer.adobe.com website itself and its behavior. + Requests that do not comply with our Code of Conduct or do not contain enough information may be closed at the maintainers' discretion. + - type: checkboxes + attributes: + label: Is there an existing issue for this? + description: Please search to see if an issue already exists for the feature you are requesting. + options: + - label: I have searched the existing issues + required: true + - type: textarea + attributes: + label: What feature should be added? + validations: + required: true + - type: textarea + attributes: + label: What is the expected behavior? + validations: + required: true + - type: textarea + attributes: + label: How will this feature improve the user experience? + validations: + required: true + - type: textarea + attributes: + label: What would a solution for this issue look like? diff --git a/.github/scripts/get-path-prefix.js b/.github/scripts/get-path-prefix.js index 39ec781c8..53eb27c8a 100644 --- a/.github/scripts/get-path-prefix.js +++ b/.github/scripts/get-path-prefix.js @@ -1,49 +1,127 @@ -// This script retrieves the pathPrefix from the gatsby-config.js file. +// This script retrieves the pathPrefix from the config.md file and validates it against the pathPrefix from devsite-paths.json. // It serves as an example for how to set up external javascript functions // outside workflow .yml files when they get too big or complex to keep them inline. // Documentation for the actions/github-script: // https://github.com/actions/github-script#run-a-separate-file -module.exports = async ({ core }) => { - const { pathPrefix } = await require('../../gatsby-config.js'); +const CONFIG_PATH = `./src/pages/config.md`; +const DEVSITE_STAGE_HOST = `https://main--adp-devsite-stage--adobedocs.aem.page`; +const DEVSITE_PROD_HOST = `https://main--adp-devsite--adobedocs.aem.live`; +const DEVSITE_PATHNAME = `/franklin_assets/devsitepaths.json`; - if (!pathPrefix) { - core.setFailed( - `The pathPrefix in the site's gatsby-config.js file is missing. +module.exports = async ({ core, isStage, isProd }) => { + const fs = await require('fs'); + if (!fs.existsSync(CONFIG_PATH)) { + core.setFailed( + `The site's config.md file is missing. + + To fix this, either create one in ./src/pages, or auto-generate one from the site's gatsby-config.md file by building navigation file.` + ); + return; + } - To fix this, open your gatsby-config.js file, and add it to the config object: + const string = fs.readFileSync(CONFIG_PATH).toString() ?? ""; + const lines = string.split('\n'); - module.exports = { - pathPrefix: "/commerce/frontend-core/", - ... - }` - ); - } else if (pathPrefix === '/') { - core.setFailed( - `The pathPrefix in the site's gatsby-config.js file is set to "/". This is not allowed. + // find the pathPrefix key + const keyIndex = lines.findIndex(line => line.includes("pathPrefix:")); - To fix this, change the pathPrefix to include a name that starts and ends with "/": + if (keyIndex < 0) { + core.setFailed( + `The pathPrefix in the site's config.md file is missing. - pathPrefix: "/commerce/frontend - core/" + To fix this, open your config.md file, and add it to the config object: + + - pathPrefix: + ...` + ); + return; + } - This name identifies the site within the developer.adobe.com domain: - https://developer.adobe.com/document-services/. - ` - ); - } else { - if (!pathPrefix.startsWith('/') || !pathPrefix.endsWith('/')) { + // find the pathPrefix value + const line = lines.slice(keyIndex + 1)?.find(line => line.trimStart().startsWith("-")) ?? ""; + + // remove whitespace at start, remove dash (i.e. first non-whitespace character), and remove whitespace at start and end + const pathPrefix = line.trimStart().substring(1).trim(); + + if (!pathPrefix) { core.setFailed( - `The pathPrefix in the site's gatsby-config.js file does not start or end with "/". + `The pathPrefix in the site's config.md file is missing. - To fix this, change the pathPrefix to include a name that starts and ends with "/". - For example: "/document-services/" or "/commerce/cloud-tools/". + To fix this, open your config.md file, and add it to the config object: - This is required by convention because of the way we construct site URLs. - For example: https://developer.adobe.com + /document-services/ + path/to/files/. - ` + - pathPrefix: + - /commerce/frontend-core/ + ...` ); + } else if (pathPrefix === '/') { + core.setFailed( + `The pathPrefix in the site's config.md file is set to "/". This is not allowed. + + To fix this, change the pathPrefix to include a name that starts and ends with "/". + + For example: "/commerce/frontend - core/" + + This name identifies the site within the developer.adobe.com domain: + https://developer.adobe.com/document-services/. + ` + ); + } else if (!pathPrefix.startsWith('/') || !pathPrefix.endsWith('/')) { + core.setFailed( + `The pathPrefix in the site's config.md file does not start or end with "/". + + pathPrefix: "${pathPrefix}" + + To fix this, change the pathPrefix to include a name that starts and ends with "/". + For example: "/document-services/" or "/commerce/cloud-tools/". + + This is required by convention because of the way we construct site URLs. + For example: https://developer.adobe.com + /document-services/ + path/to/files/. + ` + ); + } + + // TODO: devsitepaths pathPrefix currently do not have a trailing slash + // will need to refactor all path prefix listings to include them + // but for now checked with a popped trailing slash + + const poppedPathPrefix = pathPrefix.substring(0, pathPrefix.length-1); + // must convert values to boolean from string + if(isStage.toLowerCase() === 'true') { + const stageEntries = await (await fetch(`${DEVSITE_STAGE_HOST}${DEVSITE_PATHNAME}`)).json(); + const stageEntry = stageEntries?.data?.find(entry => entry.pathPrefix === poppedPathPrefix); + + if(!stageEntry) { + core.setFailed( + `The pathPrefix in the site's config.md file was not found in the STAGE gdrive's devsitepaths.json. + + pathPrefix from config.md: "${pathPrefix}" + devsitepath.json location: "${DEVSITE_STAGE_HOST}${DEVSITE_PATHNAME}" + + To fix this, make sure the pathPrefix listed in the config.md is in the devsitepath.json location. + ` + ); + } } - } - core.setOutput('path_prefix', pathPrefix); -}; + + // must convert values to boolean from string + if(isProd.toLowerCase() === 'true') { + const prodEntries = await (await fetch(`${DEVSITE_PROD_HOST}${DEVSITE_PATHNAME}`)).json(); + const prodEntry = prodEntries?.data?.find(entry => entry.pathPrefix === poppedPathPrefix); + + if(!prodEntry) { + core.setFailed( + `The pathPrefix in the site's config.md file was not found in the PROD gdrive's devsitepaths.json. + + pathPrefix from config.md: "${pathPrefix}" + devsitepath.json location: "${DEVSITE_PROD_HOST}${DEVSITE_PATHNAME}" + + To fix this, make sure the pathPrefix listed in the config.md is in the devsitepath.json location. + ` + ); + } + } + + core.setOutput('path_prefix', poppedPathPrefix); +} \ No newline at end of file diff --git a/.github/scripts/process-mds.sh b/.github/scripts/process-mds.sh new file mode 100755 index 000000000..0ceb4cb12 --- /dev/null +++ b/.github/scripts/process-mds.sh @@ -0,0 +1,98 @@ +#!/bin/bash + +fail() { + echo "$@" 1>&2 + exit 1 +} + +ROOT="./src/pages" +OPERATION=$1 +ENV=$2 +CONTENT_REPO_BRANCH=$3 +PATH_PREFIX=$4 + +# conditional http_method +case "$OPERATION" in + cache | preview | live) + http_method="POST" + ;; + *) + fail "Unknown operation" + ;; +esac + +# conditional site and code_repo_branch +case "$ENV" in + stage) + site="adp-devsite-stage" + code_repo_branch="stage" + ;; + prod) + site="adp-devsite" + code_repo_branch="main" + ;; + *) + fail "Unknown env" + ;; +esac + +# conditional args +if [ "$ENV" == "stage" ] && [ "$OPERATION" == "preview" ] +then + args="--header \"x-content-source-authorization: ${CONTENT_REPO_BRANCH}\"" +else + args="" +fi + +process() +{ + filename=$1 + path="${PATH_PREFIX:1}/${filename#$ROOT/}" + url="https://admin.hlx.page/${OPERATION}/adobedocs/${site}/${code_repo_branch}/${path}" + cmd="curl -X${http_method} -vi ${args} ${url}" + + echo "" + echo "" + echo "--------------------------------------------------------------------------------" + echo "" + echo "${cmd}" + echo "" + + # run command and extract failure string + failure=$(eval "${cmd} | grep -e \"x-error:\"") + + # append to failures + if [ "$failure" != "" ] + then + failures="${failures}\n${cmd}\n${failure}\n" + fi + + # write failures to stderr so it can be accessed outside this subshell later + echo $failures > 2 +} + +summarize() { + echo "" + echo "" + echo "================================================================================" + echo "" + + # read failures from stderr to access it from this parent shell + read -r failures < 2 + + if [ "${failures}" == "" ] + then + echo "Success!" + else + echo "Failures:" + echo -e "${failures}" + fi + + echo "" +} + +# process mds in root +# TODO: may want to only process certain types of files +find "${ROOT}" -type f \( -name "*.md" -o -name "*.json" \) -exec echo "{}" \; | while read i; do process $i; done + +summarize diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index a445f6223..0e8861e04 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -4,47 +4,55 @@ on: workflow_dispatch: inputs: env: - description: "Deploy to (dev|prod|dev prod)" + description: "Select environment to deploy to" + type: choice required: true - default: "dev" + default: "stage" + options: + - stage + - prod + - stage & prod clean: - description: "Clean cache (yes|no)" + description: "Clean cache?" + type: boolean required: true default: "no" - excludeSubfolder: - description: "Exclude a subfolder from deletion" - required: false - default: "" - index-mode: - description: 'Type of indexing. "index" to push to Algolia, "console" for dry run.' + build-navigation: + description: "Build navigation file?" + type: boolean required: true - default: "index" - type: choice - options: - - console - - index + default: "false" + build-redirections: + description: "Build redirections file?" + type: boolean + required: true + default: "false" + jobs: set-state: runs-on: ubuntu-latest outputs: - deploy_prod: ${{ contains(github.event.inputs.env, 'prod') }} - deploy_dev: ${{ contains(github.event.inputs.env, 'dev') }} - clean_cache: ${{ contains(github.event.inputs.clean, 'yes') }} path_prefix: ${{ steps.get_path_prefix.outputs.path_prefix }} branch_short_ref: ${{ steps.get_branch.outputs.branch }} - exclude_subfolder: ${{ github.event.inputs.excludeSubfolder }} + deploy_stage: ${{ contains(inputs.env, 'stage') }} + deploy_prod: ${{ contains(inputs.env, 'prod') }} + clean_cache: ${{ inputs.clean }} + build_navigation: ${{ inputs.build-navigation }} + build_redirections: ${{ inputs.build-redirections }} + steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - - name: Get pathPrefix - uses: actions/github-script@v6 + - name: Get path prefix + uses: actions/github-script@v7 id: get_path_prefix with: script: | const script = require('./.github/scripts/get-path-prefix.js'); - script({ core }); + script({ core, isStage:"${{ contains(inputs.env, 'stage') }}", isProd:"${{ contains(inputs.env, 'prod') }}" }); result-encoding: string + - name: Get branch name shell: bash run: echo "branch=${GITHUB_REF#refs/heads/}" >> "$GITHUB_OUTPUT" @@ -54,221 +62,79 @@ jobs: needs: [set-state] runs-on: ubuntu-latest steps: - - run: echo "Deploy to dev - ${{ needs.set-state.outputs.deploy_dev }}" + - run: echo "Deploy to stage - ${{ needs.set-state.outputs.deploy_stage }}" - run: echo "Deploy to prod - ${{ needs.set-state.outputs.deploy_prod }}" - run: echo "Clean cache - ${{ needs.set-state.outputs.clean_cache }}" + - run: echo "Build navigation file - ${{ needs.set-state.outputs.build_navigation }}" + - run: echo "Build redirections file - ${{ needs.set-state.outputs.build_redirections }}" + - run: echo "Path prefix - ${{ needs.set-state.outputs.path_prefix }}" - run: echo "Repository org - ${{ github.event.repository.owner.login }}" - run: echo "Repository name - ${{ github.event.repository.name }}" - run: echo "Repository branch - ${{ needs.set-state.outputs.branch_short_ref }}" - - run: echo "Path prefix - ${{ needs.set-state.outputs.path_prefix }}" - - run: echo "Exclude subfolder - ${{ needs.set-state.outputs.exclude_subfolder }}" - - pre-build-dev: - needs: [set-state] - runs-on: ubuntu-latest - if: needs.set-state.outputs.deploy_dev == 'true' - steps: - - name: check dev azure connection string - if: env.AIO_AZURE_DEV_CONNECTION_STRING == null - run: | - echo "::error::Please set the Azure Blob Storage connection string as AIO_AZURE_DEV_CONNECTION_STRING in GitHub Secrets" - exit 1 - env: - AIO_AZURE_DEV_CONNECTION_STRING: ${{ secrets.AIO_AZURE_DEV_CONNECTION_STRING }} - build-dev: + build: defaults: run: shell: bash - needs: [set-state, pre-build-dev] + needs: [set-state] runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - - name: Setup Node v16 for Yarn v3 - uses: actions/setup-node@v3 + - name: Setup Node v18 for Yarn v3 + if: needs.set-state.outputs.build_navigation == 'true' || needs.set-state.outputs.build_redirections == 'true' + uses: actions/setup-node@v4 with: - node-version: "16.15.0" # Current LTS version + node-version: "18" - name: Enable Corepack for Yarn v3 + if: needs.set-state.outputs.build_navigation == 'true' || needs.set-state.outputs.build_redirections == 'true' run: corepack enable - - name: Install Yarn v3 - uses: borales/actions-yarn@v3 + - name: Install Yarn v4 + if: needs.set-state.outputs.build_navigation == 'true' || needs.set-state.outputs.build_redirections == 'true' + uses: borales/actions-yarn@v4 with: cmd: set version stable - name: Install Dependencies + if: needs.set-state.outputs.build_navigation == 'true' || needs.set-state.outputs.build_redirections == 'true' uses: borales/actions-yarn@v3 env: YARN_ENABLE_IMMUTABLE_INSTALLS: false with: cmd: install - - name: Gatsby Cache - uses: actions/cache@v3 - with: - path: | - public - .cache - key: ${{ needs.set-state.outputs.branch_short_ref }}-gatsby-cache-${{ github.run_id }} - restore-keys: | - ${{ needs.set-state.outputs.branch_short_ref }}-gatsby-cache- - - - name: Clean Cache - if: needs.set-state.outputs.clean_cache == 'true' + - name: Build navigation file + if: needs.set-state.outputs.build_navigation == 'true' uses: borales/actions-yarn@v3 with: - cmd: clean + cmd: buildNavigation - - name: Build site + - name: Build redirections file + if: needs.set-state.outputs.build_redirections == 'true' uses: borales/actions-yarn@v3 with: - cmd: build - env: - PREFIX_PATHS: true # equivalent to --prefix-paths flag for 'gatsby build' - PATH_PREFIX: ${{ needs.set-state.outputs.path_prefix }} - GATSBY_ADOBE_LAUNCH_SRC: ${{ secrets.AIO_ADOBE_LAUNCH_DEV_SRC }} - GATSBY_ADDITIONAL_ADOBE_ANALYTICS_ACCOUNTS: ${{ secrets.AIO_REPORT_SUITE_DEV}} - GATSBY_ADOBE_ANALYTICS_ENV: "dev" - REPO_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - REPO_OWNER: ${{ github.event.repository.owner.login }} - REPO_NAME: ${{ github.event.repository.name }} - REPO_BRANCH: ${{ needs.set-state.outputs.branch_short_ref }} - GOOGLE_OAUTH_CLIENT_ID: ${{ secrets.GOOGLE_OAUTH_CLIENT_ID }} - GOOGLE_OAUTH_CLIENT_SECRET: ${{ secrets.GOOGLE_OAUTH_CLIENT_SECRET }} - GOOGLE_DOCS_TOKEN: ${{ secrets.GOOGLE_DOCS_TOKEN }} - GOOGLE_DOCS_FOLDER_ID: ${{ secrets.GOOGLE_DOCS_FOLDER_ID }} - GATSBY_IMS_SRC: ${{ secrets.AIO_IMS_DEV_SRC }} - GATSBY_IMS_CONFIG: ${{ secrets.AIO_IMS_DEV_CONFIG }} - GATSBY_ALGOLIA_APPLICATION_ID: ${{ secrets.AIO_ALGOLIA_APPLICATION_ID }} - GATSBY_ALGOLIA_SEARCH_API_KEY: ${{ secrets.AIO_ALGOLIA_SEARCH_API_KEY }} - GATSBY_ALGOLIA_APP_ID: ${{ secrets.AIO_ALGOLIA_APP_ID }} - GATSBY_ALGOLIA_API_KEY: ${{ secrets.AIO_ALGOLIA_API_KEY }} - GATSBY_ALGOLIA_INDEX_ALL_SRC: ${{ secrets.AIO_ALGOLIA_INDEX_ALL_SRC }} - GATSBY_ALGOLIA_SEARCH_INDEX: ${{ secrets.AIO_ALGOLIA_SEARCH_INDEX }} - GATSBY_ALGOLIA_INDEX_ENV_PREFIX: ${{ secrets.AIO_ALGOLIA_INDEX_ENV_PREFIX }} - GATSBY_FEDS_PRIVACY_ID: ${{ secrets.AIO_FEDS_PRIVACY_ID }} - GATSBY_SITE_DOMAIN_URL: https://developer-stage.adobe.com - - - name: Deploy - uses: AdobeDocs/static-website-deploy@master - with: - enabled-static-website: "true" - source: "public" - target: ${{ needs.set-state.outputs.path_prefix }} - connection-string: ${{ secrets.AIO_AZURE_DEV_CONNECTION_STRING }} - remove-existing-files: "true" - exclude-subfolder: ${{ needs.set-state.outputs.exclude_subfolder }} - - name: Purge Fastly Cache - uses: AdobeDocs/gatsby-fastly-purge-action@master - with: - fastly-token: ${{ secrets.AIO_FASTLY_TOKEN }} - fastly-url: "${{ secrets.AIO_FASTLY_DEV_URL}}${{ needs.set-state.outputs.path_prefix }}" + cmd: buildRedirections - pre-build-production: - needs: [set-state] - runs-on: ubuntu-latest - if: needs.set-state.outputs.deploy_prod == 'true' - steps: - - name: check prod azure connection string - if: env.AIO_AZURE_PROD_CONNECTION_STRING == null + - name: Clean cache on stage + if: needs.set-state.outputs.clean_cache == 'true' && needs.set-state.outputs.deploy_stage == 'true' run: | - echo "::error::Please set the Azure Blob Storage connection string as AIO_AZURE_PROD_CONNECTION_STRING in GitHub Secrets" - exit 1 - env: - AIO_AZURE_PROD_CONNECTION_STRING: ${{ secrets.AIO_AZURE_PROD_CONNECTION_STRING }} + bash .github/scripts/process-mds.sh cache stage ${{ needs.set-state.outputs.branch_short_ref }} "${{ needs.set-state.outputs.path_prefix }}" - build-production: - defaults: - run: - shell: bash - needs: [set-state, pre-build-production] - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Setup Node v16 for Yarn v3 - uses: actions/setup-node@v3 - with: - node-version: "16.15.0" # Current LTS version - - - name: Enable Corepack for Yarn v3 - run: corepack enable - - - name: Install Yarn v3 - uses: borales/actions-yarn@v3 - with: - cmd: set version stable - - - name: Install Dependencies - uses: borales/actions-yarn@v3 - env: - YARN_ENABLE_IMMUTABLE_INSTALLS: false - with: - cmd: install - - - name: Gatsby Cache - uses: actions/cache@v3 - with: - path: | - public - .cache - key: ${{ needs.set-state.outputs.branch_short_ref }}-gatsby-cache-${{ github.run_id }} - restore-keys: | - ${{ needs.set-state.outputs.branch_short_ref }}-gatsby-cache- + - name: Clean cache on prod + if: needs.set-state.outputs.clean_cache == 'true' && needs.set-state.outputs.deploy_prod == 'true' + run: | + bash .github/scripts/process-mds.sh cache prod ${{ needs.set-state.outputs.branch_short_ref }} "${{ needs.set-state.outputs.path_prefix }}" - - name: Clean Cache - if: needs.set-state.outputs.clean_cache == 'true' - uses: borales/actions-yarn@v3 - with: - cmd: clean + - name: Deploy to stage + if: needs.set-state.outputs.deploy_stage == 'true' + run: | + bash .github/scripts/process-mds.sh preview stage ${{ needs.set-state.outputs.branch_short_ref }} "${{ needs.set-state.outputs.path_prefix }}" - - name: Build site - uses: borales/actions-yarn@v3 - with: - cmd: build - env: - PREFIX_PATHS: true # equivalent to --prefix-paths flag for 'gatsby build' - PATH_PREFIX: ${{ needs.set-state.outputs.path_prefix }} - GATSBY_ADOBE_LAUNCH_SRC: ${{ secrets.AIO_ADOBE_LAUNCH_PROD_SRC }} - GATSBY_ADDITIONAL_ADOBE_ANALYTICS_ACCOUNTS: ${{ secrets.AIO_REPORT_SUITE_PROD }} - GATSBY_ADOBE_ANALYTICS_ENV: "production" - REPO_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - REPO_OWNER: ${{ github.event.repository.owner.login }} - REPO_NAME: ${{ github.event.repository.name }} - REPO_BRANCH: ${{ needs.set-state.outputs.branch_short_ref }} - GOOGLE_OAUTH_CLIENT_ID: ${{ secrets.GOOGLE_OAUTH_CLIENT_ID }} - GOOGLE_OAUTH_CLIENT_SECRET: ${{ secrets.GOOGLE_OAUTH_CLIENT_SECRET }} - GOOGLE_DOCS_TOKEN: ${{ secrets.GOOGLE_DOCS_TOKEN }} - GOOGLE_DOCS_FOLDER_ID: ${{ secrets.GOOGLE_DOCS_FOLDER_ID }} - GATSBY_IMS_SRC: ${{ secrets.AIO_IMS_PROD_SRC }} - GATSBY_IMS_CONFIG: ${{ secrets.AIO_IMS_PROD_CONFIG }} - GATSBY_ALGOLIA_APPLICATION_ID: ${{ secrets.AIO_ALGOLIA_APPLICATION_ID }} - GATSBY_ALGOLIA_SEARCH_API_KEY: ${{ secrets.AIO_ALGOLIA_SEARCH_API_KEY }} - GATSBY_ALGOLIA_APP_ID: ${{ secrets.AIO_ALGOLIA_APP_ID }} - GATSBY_ALGOLIA_API_KEY: ${{ secrets.AIO_ALGOLIA_API_KEY }} - ALGOLIA_WRITE_API_KEY: ${{ secrets.AIO_ALGOLIA_WRITE_API_KEY }} - ALGOLIA_INDEXATION_MODE: ${{ github.event.inputs.index-mode || 'index' }} - GATSBY_ALGOLIA_INDEX_NAME: ${{ secrets.ALGOLIA_INDEX_NAME || github.event.repository.name }} - GATSBY_ALGOLIA_INDEX_ALL_SRC: ${{ secrets.AIO_ALGOLIA_INDEX_ALL_SRC }} - GATSBY_ALGOLIA_SEARCH_INDEX: ${{ secrets.AIO_ALGOLIA_SEARCH_INDEX }} - GATSBY_ALGOLIA_INDEX_ENV_PREFIX: ${{ secrets.AIO_ALGOLIA_INDEX_ENV_PREFIX }} - GATSBY_FEDS_PRIVACY_ID: ${{ secrets.AIO_FEDS_PRIVACY_ID }} - GATSBY_SITE_DOMAIN_URL: https://developer.adobe.com - - name: Deploy - uses: AdobeDocs/static-website-deploy@master - with: - enabled-static-website: "true" - source: "public" - target: ${{ needs.set-state.outputs.path_prefix }} - connection-string: ${{ secrets.AIO_AZURE_PROD_CONNECTION_STRING }} - remove-existing-files: "true" - exclude-subfolder: ${{ needs.set-state.outputs.exclude_subfolder }} - - name: Purge Fastly Cache - uses: AdobeDocs/gatsby-fastly-purge-action@master - with: - fastly-token: ${{ secrets.AIO_FASTLY_TOKEN }} - fastly-url: "${{ secrets.AIO_FASTLY_PROD_URL }}${{ needs.set-state.outputs.path_prefix }}" + - name: Deploy to prod + if: needs.set-state.outputs.deploy_prod == 'true' + run: | + bash .github/scripts/process-mds.sh preview prod ${{ needs.set-state.outputs.branch_short_ref }} "${{ needs.set-state.outputs.path_prefix }}" + bash .github/scripts/process-mds.sh live prod ${{ needs.set-state.outputs.branch_short_ref }} "${{ needs.set-state.outputs.path_prefix }}" \ No newline at end of file diff --git a/.github/workflows/github-pages.yml b/.github/workflows/github-pages.yml index 503b6d26e..50521f85f 100644 --- a/.github/workflows/github-pages.yml +++ b/.github/workflows/github-pages.yml @@ -1,7 +1,6 @@ --- -name: GitHub Pages +name: Github Pages on: - workflow_dispatch: push: branches: [main] jobs: diff --git a/.github/workflows/test-pull-request.yml b/.github/workflows/test-pull-request.yml new file mode 100644 index 000000000..115c3d00c --- /dev/null +++ b/.github/workflows/test-pull-request.yml @@ -0,0 +1,89 @@ +--- +########################### +########################### +## Pull request testing ## +########################### +########################### +name: Latest Pull Request + +# Documentation: +# - Workflow: https://help.github.com/en/articles/workflow-syntax-for-github-actions +# - SuperLinter: https://github.com/github/super-linter +# - Markdown linter: https://github.com/DavidAnson/markdownlint +# - Link validation: https://github.com/remarkjs/remark-validate-links + +###################################################### +# Start the job on a pull request to the main branch # +###################################################### +on: + pull_request: + branches: [main] + +############### +# Set the Job # +############### +jobs: + validate: + # Set the agent to run on + runs-on: ubuntu-latest + + ################## + # Load all steps # + ################## + steps: + ########################## + # Checkout the code base # + ########################## + - name: Checkout Code + uses: actions/checkout@v3 + with: + # Full git history is needed to get a proper list of changed files + # within `super-linter` + fetch-depth: 0 + - run: cat ".github/super-linter.env" >> "$GITHUB_ENV" + + ################################ + # Run Linters against code base # + ################################ + - name: Lint Code Base + # + # Use full version number to avoid cases when a next + # released version is buggy + # About slim image: https://github.com/github/super-linter#slim-image + uses: github/super-linter/slim@v4.10.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + DEFAULT_BRANCH: main + VALIDATE_ALL_CODEBASE: false + VALIDATE_GITHUB_ACTIONS: true + + - name: Setup Node v16 for Yarn v3 + uses: actions/setup-node@v3 + with: + node-version: '16.15.0' # Current LTS version + + - name: Enable Corepack for Yarn v3 + run: corepack enable + + - name: Install Yarn v3 + uses: borales/actions-yarn@v3 + with: + cmd: set version stable + + - name: Install dependencies + uses: borales/actions-yarn@v3 + env: + YARN_ENABLE_IMMUTABLE_INSTALLS: false + with: + cmd: install + + - name: Check internal links + uses: borales/actions-yarn@v3 + with: + cmd: test:links + + - name: Build site + if: ${{ success() }} + uses: borales/actions-yarn@v3 + with: + cmd: build diff --git a/buildNavigation.js b/buildNavigation.js new file mode 100644 index 000000000..8b133c44d --- /dev/null +++ b/buildNavigation.js @@ -0,0 +1,106 @@ +const path = require('path'); +const fs = require('node:fs'); +// regex to find sections: +// subPages:((\s* .*)*) + +const { siteMetadata, pathPrefix } = require('./gatsby-config.js'); + +try { + if(!pathPrefix) { + throw new TypeError("pathPrefix not found"); + } + + let topNavMarkdown = ``; + // TODO: prob need url fixer from gatsby theme + // home link defines the first link defaults to Products + // can be hidden + // siteMetadata.versions + // siteMetadata.home + + topNavMarkdown += `- pathPrefix:\n`; + topNavMarkdown += ` - ${pathPrefix}\n`; + + if (siteMetadata.home) { + topNavMarkdown += '\n- home:\n'; + topNavMarkdown += ` - [${siteMetadata.home.title}](${siteMetadata.home.path})\n`; + + if(siteMetadata.home.hidden) { + topNavMarkdown += ` - hidden\n`; + } + } + + if (siteMetadata.versions) { + topNavMarkdown += '\n- versions:\n'; + + siteMetadata.versions.forEach((versionItem) => { + let isSelectedText = versionItem.selected ? `selected` : ''; + let versionPathText = versionItem.path ? versionItem.path : '/'; + topNavMarkdown += ` - [${versionItem.title}](${versionPathText}) ${isSelectedText}\n`; + }); + } + + if(siteMetadata.pages) { + topNavMarkdown += `\n- pages:\n`; + } + + siteMetadata.pages?.forEach((navItem) => { + //let pathText = navItem.path ? navItem.path : ''; + if(navItem.path) { + topNavMarkdown += ` - [${navItem.title}](${navItem.path})\n`; + } else { + topNavMarkdown += ` - ${navItem.title}\n`; + navItem.menu.forEach((menuItem) =>{ + topNavMarkdown += ` - [${menuItem.title}](${menuItem.path})\n`; + }); + } + }); + + if(siteMetadata.subPages) { + topNavMarkdown += `\n- subPages:\n`; + let sideNavMarkdown = ``; + let depth = 1; + + sideNavMarkdown += buildSideNavRecursively(siteMetadata.subPages, depth); + topNavMarkdown += sideNavMarkdown; + } + + let configFilePath = path.resolve(__dirname + '/src/pages/config.md'); + fs.writeFileSync(configFilePath, topNavMarkdown); + console.log(`Generated file: ${configFilePath}`); + +} catch (err) { + console.error(err); +} +// subpages menu should only appear on the subpages path +// need to check paths to +function buildSideNavRecursively(sideNav, depth) { + let sideNavMarkdown = ''; + + for (var k in sideNav) { + let header = sideNav[k].header ? 'header' : ''; + sideNavMarkdown += `${insertSpace(depth)}- [${sideNav[k].title}](${sideNav[k].path}) ${header}\n`; + + if (sideNav[k].pages) { + sideNavMarkdown += buildSideNavRecursively(sideNav[k].pages, depth+1); + } + } + return sideNavMarkdown; +} + +function insertSpace(indentLevel) { + let spaces = ``; + for(var i=0; i { + mdFilePath = mdFilePath.replace(__dirname + '/src/pages', pathPrefix); + mdFilePath = path.resolve(mdFilePath); + + // Fixes paths that don't end in a trailing slash but should. + // index.md is a directory-level URL that needs a trailing slash + if(mdFilePath.endsWith('index.md')) { + const source = mdFilePath.replace('/index.md', ''); + data.push({ + "Source" : source, + "Destination" : source + '/' + }); + data.push({ + "Source" : source + '/index', + "Destination" : source + '/' + }); + } + // Fixes paths that end in a trailing slash but shouldn't. + // skip any index.md or config.md as they don't need redirect + else if(!mdFilePath.endsWith('config.md')) { + const source = mdFilePath.replace('.md', '/'); + data.push({ + "Source" : source, + "Destination" : source.replace(/\/$/, "") + }); + } + }); + + writeRedirectionsFile(data); + +} catch (err) { + console.error(err); +} diff --git a/normalizeLinks.js b/normalizeLinks.js new file mode 100644 index 000000000..5209dfc5d --- /dev/null +++ b/normalizeLinks.js @@ -0,0 +1,66 @@ +const path = require('path'); +const fs = require('node:fs'); +const matchAll = require('string.prototype.matchall'); +const { + getMarkdownFiles, + replaceLinksInFile, + getFindPatternForMarkdownFiles: getFindPattern, + getReplacePatternForMarkdownFiles: getReplacePattern, +} = require('./scriptUtils.js'); + +function normalizeLinksInMarkdownFile(file, files) { + const relativeToDir = path.dirname(file); + const relativeFiles = files.map(file => path.relative(relativeToDir, file)); + const linkMap = new Map(); + + const linkPattern = getFindPattern('[^)#]*'); + let data = fs.readFileSync(file, 'utf8'); + const links = matchAll(data, new RegExp(linkPattern, "gm")); + [...links].forEach(link => { + const optionalPrefix = link[2] ?? ''; + const from = link[3] ?? ''; + let to = from; + + // ensure link includes file name and extension + if(to.endsWith('/') || optionalPrefix.endsWith('/') && !to) { + to = `${to}index.md` + } + if(!to.endsWith('.md') && to) { + to = `${to}.md`; + } + + to = to.replaceAll('/', path.sep); + + // ensure simplest relative path + // this removes trailing slash, so need to do this after the file name and extension checks above + const absolute = path.resolve(relativeToDir, to); + const relative = path.relative(relativeToDir, absolute); + to = relative; + + // ensure the link we constructed above exists + const toExists = relativeFiles.find(file => to === file); + + to = to.replaceAll(path.sep, '/'); + + if(to !== from && toExists) { + linkMap.set(from, to); + } + }) + + replaceLinksInFile({ + file, + linkMap, + getFindPattern, + getReplacePattern, + }); +} + +try { + const files = getMarkdownFiles(); + files.forEach(file => { + normalizeLinksInMarkdownFile(file, files); + }); + +} catch (err) { + console.error(err); +} \ No newline at end of file diff --git a/package.json b/package.json index afafb2ef1..79902c52b 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,18 @@ { "private": true, - "name": "adobe-developer-app-builder", - "version": "1.1.0", + "name": "dev-site-documentation-template", + "version": "1.0.0", "license": "Apache-2.0", "repository": { "type": "git", - "url": "https://github.com/AdobeDocs/adobe-developer-app-builder" + "url": "https://github.com/AdobeDocs/dev-site-documentation-template" + }, + "author": { + "name": "Stephan Ringel", + "url": "https://github.com/icaraps" }, "dependencies": { - "@adobe/gatsby-theme-aio": "4.16.0-rc9", - "@adobe/react-spectrum": "^3.35.1", + "@adobe/gatsby-theme-aio": "^4.14.6", "gatsby": "4.22.0", "react": "^17.0.2", "react-dom": "^17.0.2" @@ -24,19 +27,23 @@ "dev": "gatsby develop", "dev:https": "gatsby develop --https --host localhost.corp.adobe.com --port 9000", "build": "gatsby build", - "build:incremental": "GATSBY_EXPERIMENTAL_PAGE_BUILD_ON_DATA_CHANGES=true gatsby build --log-pages", "serve": "gatsby serve", "clean": "gatsby clean", "test:links": "remark src/pages --quiet --frail", - "lint": "docker run --rm -e RUN_LOCAL=true --env-file '.github/super-linter.env' -v \"$PWD\":/tmp/lint github/super-linter:slim-v4.10.1" + "lint": "docker run --rm -e RUN_LOCAL=true --env-file '.github/super-linter.env' -v \"$PWD\":/tmp/lint github/super-linter:slim-v4.10.1", + "buildNavigation": "node buildNavigation.js", + "buildRedirections": "node buildRedirections.js", + "renameFiles": "node renameFiles.js", + "normalizeLinks": "node normalizeLinks.js" }, "remarkConfig": { "plugins": [ "remark-validate-links" ] }, - "packageManager": "yarn@4.9.1", + "packageManager": "yarn@3.2.1", "devDependencies": { + "glob": "11.0.0", "remark-cli": "^11.0.0", "remark-validate-links": "^12.1.0" } diff --git a/renameFiles.js b/renameFiles.js new file mode 100644 index 000000000..7a18a5bda --- /dev/null +++ b/renameFiles.js @@ -0,0 +1,142 @@ +const path = require('path'); +const fs = require('node:fs'); +const { pathPrefix } = require('./gatsby-config.js'); +const { + readRedirectionsFile, + writeRedirectionsFile, + getRedirectionsFilePath, + getMarkdownFiles, + getFindPatternForMarkdownFiles, + getReplacePatternForMarkdownFiles, + replaceLinksInFile +} = require('./scriptUtils.js'); + +function toKebabCase(str) { + const isScreamingSnakeCase = new RegExp(/^[A-Z0-9_]*$/gm).test(str); + str = isScreamingSnakeCase ? str.toLowerCase() : str; + return str + .match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g) + .map(x => x.toLowerCase()) + .join('-'); +} + +function toEdsCase(str) { + const isValid = Boolean((/^([a-z0-9-]*)$/.test(str))); + return isValid ? str : toKebabCase(str); +} + +function toUrl(file, renameBaseWithoutExt = name => name) { + const base = path.basename(file); + const ext = path.extname(file); + const end = file.length - base.length; + const baseWithoutExt = base.substring(0, base.length - ext.length); + const newBaseWithoutExt = renameBaseWithoutExt(baseWithoutExt); + return `${file.substring(0, end)}${newBaseWithoutExt}` +} + +function renameFile(file, renameBaseWithoutExt) { + const url = toUrl(file, renameBaseWithoutExt); + const ext = path.extname(file); + return `${url}${ext}` +} + +function getFileMap(files) { + const map = new Map(); + files.forEach(from => { + const to = renameFile(from, toEdsCase) + if(to !== from) { + map.set(from, to) + } + }); + return map; +} + +function getLinkMap(fileMap, relativeToDir) { + const linkMap = new Map(); + fileMap.forEach((toFile, fromFile) => { + let fromRelFile = path.relative(relativeToDir, fromFile); + fromRelFile = fromRelFile.replaceAll(path.sep, '/'); + + let toRelFile = path.relative(relativeToDir, toFile); + toRelFile = toRelFile.replaceAll(path.sep, '/'); + + linkMap.set(fromRelFile, toRelFile); + }); + return linkMap; +} + +function renameLinksInMarkdownFile(fileMap, file) { + const dir = path.dirname(file); + replaceLinksInFile({ + file, + linkMap: getLinkMap(fileMap, dir), + getFindPattern: getFindPatternForMarkdownFiles, + getReplacePattern: getReplacePatternForMarkdownFiles, + }); +} + +function renameLinksInRedirectsFile(fileMap) { + const file = getRedirectionsFilePath(); + const dir = path.dirname(file); + replaceLinksInFile({ + file, + linkMap: getLinkMap(fileMap, dir), + getFindPattern: (from) => `(['"]?)(Source|Destination)(['"]?\\s*:\\s*['"])(${pathPrefix}${toUrl(from)})(/?)(#[^'"]*)?(['"])`, + getReplacePattern: (to) => `$1$2$3${pathPrefix}${toUrl(to)}$5$6$7`, + }); +} + +function renameLinksInGatsbyConfigFile(fileMap, file) { + const dir = path.join('src', 'pages'); + replaceLinksInFile({ + file, + linkMap: getLinkMap(fileMap, dir), + getFindPattern: (from) => `(['"]?path['"]?\\s*:\\s*['"])(/|./)?(${from})(#[^'"]*)?(['"])`, + getReplacePattern: (to) => `$1$2${to}$4$5`, + }); +} + +function appendRedirects(fileMap) { + const file = getRedirectionsFilePath(); + const dir = path.dirname(file); + const linkMap = getLinkMap(fileMap, dir); + const newData = []; + linkMap.forEach((to, from) => { + newData.push({ + Source: `${pathPrefix}${toUrl(from)}`, + Destination: `${pathPrefix}${toUrl(to)}`, + }) + }); + const currData = readRedirectionsFile(); + const data = [...currData, ...newData]; + writeRedirectionsFile(data); +} + +function renameFiles(map) { + map.forEach((to, from) => { + fs.renameSync(from, to); + }); +} + +try { + const markdownFiles = getMarkdownFiles(); + const fileMap = getFileMap(markdownFiles); + markdownFiles.forEach(file => { + renameLinksInMarkdownFile(fileMap, file); + }); + renameFiles(fileMap); + + const redirectsFile = getRedirectionsFilePath(); + if(fs.existsSync(redirectsFile)) { + renameLinksInRedirectsFile(fileMap); + appendRedirects(fileMap); + } + + const gatsbyConfigFile = 'gatsby-config.js'; + if(fs.existsSync(gatsbyConfigFile)) { + renameLinksInGatsbyConfigFile(fileMap, gatsbyConfigFile); + } + +} catch (err) { + console.error(err); +} \ No newline at end of file diff --git a/scriptUtils.js b/scriptUtils.js new file mode 100644 index 000000000..1eb2b7c40 --- /dev/null +++ b/scriptUtils.js @@ -0,0 +1,55 @@ +const path = require('path'); +const fs = require('node:fs'); +const { globSync }= require('glob'); + +function getRedirectionsFilePath() { + const redirectionsFilePath = path.join(__dirname, 'src', 'pages', 'redirects.json'); + return path.resolve(redirectionsFilePath); +} + +function readRedirectionsFile() { + const redirectionsFilePath = getRedirectionsFilePath(); + return JSON.parse(fs.readFileSync(redirectionsFilePath)).data; +} + +function writeRedirectionsFile(data) { + let redirectionsData = + { + "total" : data.length, + "offset": 0, + "limit": data.length, + "data" : data, + ":type": "sheet" + }; + + let redirectionsFilePath = getRedirectionsFilePath(); + fs.writeFileSync(redirectionsFilePath, JSON.stringify(redirectionsData)); +} + +function getMarkdownFiles() { + return globSync(__dirname + '/src/pages/**/*.md') + .map(f => path.resolve(f)); +} + +const getFindPatternForMarkdownFiles = (from) => `(\\[[^\\]]*]\\()(/|./)?(${from})(#[^\\()]*)?(\\))`; +const getReplacePatternForMarkdownFiles = (to) => `$1$2${to}$4$5`; + +function replaceLinksInFile({ file, linkMap, getFindPattern, getReplacePattern }) { + let data = fs.readFileSync(file, 'utf8'); + linkMap.forEach((to, from) => { + const find = getFindPattern(from); + const replace = getReplacePattern(to); + data = data.replaceAll(new RegExp(find, "gm"), replace); + }); + fs.writeFileSync(file, data, 'utf-8'); +} + +module.exports = { + getRedirectionsFilePath, + readRedirectionsFile, + writeRedirectionsFile, + getMarkdownFiles, + getFindPatternForMarkdownFiles, + getReplacePatternForMarkdownFiles, + replaceLinksInFile +}; \ No newline at end of file diff --git a/src/pages/config.md b/src/pages/config.md new file mode 100644 index 000000000..47b918ebb --- /dev/null +++ b/src/pages/config.md @@ -0,0 +1,232 @@ +- pathPrefix: + - /app-builder/docs/ + +- home: + - [App Builder](/app-builder) + +- pages: + - [Overview](intro_and_overview) + - [Getting Started](get_started) + - [Guides](guides) + - [Resources](resources) + +- subPages: + - [Introduction](intro_and_overview/index.md) + - [App Builder Overview](intro_and_overview/index.md) + - [What is App Builder](intro_and_overview/what_is_app_builder/) + - [Business Case](intro_and_overview/business_case/) + - [FAQ](intro_and_overview/faq/) + - [Community](intro_and_overview/community/) + - [Quick Start](get_started/index.md) + - [App Builder Getting Started](get_started/app_builder_get_started/app_builder_intro/) + - [Setting Up](get_started/app_builder_get_started/set_up/) + - [Creating your First App](get_started/app_builder_get_started/first_app/) + - [Publishing Your App](get_started/app_builder_get_started/publish_app/) + - [Troubleshooting](get_started/app_builder_get_started/troubleshoot/) + - [Runtime Getting Started](get_started/runtime_getting_started/index.md) + - [Overview](get_started/runtime_getting_started/index.md) + - [Activations](get_started/runtime_getting_started/activations/) + - [Deploy](get_started/runtime_getting_started/deploy/) + - [Entities](get_started/runtime_getting_started/entities/) + - [How Runtime Works](get_started/runtime_getting_started/how_runtime_works/) + - [Resources](get_started/runtime_getting_started/resources/) + - [Setup](get_started/runtime_getting_started/setup/) + - [Understanding Runtime](get_started/runtime_getting_started/understanding_runtime/) + - [Develop](guides/index.md) + - [References](guides/references/) + - [App Builder Guides](guides/app_builder_guides/index.md) + - [Architecture Overview](guides/app_builder_guides/architecture_overview/architecture_overview/) + - [App Hooks](guides/app_builder_guides/architecture_overview/app_hooks/) + - [Introduction to React Spectrum](guides/app_builder_guides/architecture_overview/introduction_to_react_spectrum/) + - [Using SDKs](guides/app_builder_guides/architecture_overview/using_sdks/) + - [Application State](guides/app_builder_guides/application_state/) + - [Application Logging](guides/app_builder_guides/application_logging/logging/) + - [Azure Log Analytics](guides/app_builder_guides/application_logging/azure_log_analytics/) + - [New Relic](guides/app_builder_guides/application_logging/new_relic/) + - [Splunk Cloud](guides/app_builder_guides/application_logging/splunk_cloud/) + - [Splunk Enterprise](guides/app_builder_guides/application_logging/splunk_enterprise/) + - [Configuration](guides/app_builder_guides/configuration/configuration/) + - [Webpack Configuration](guides/app_builder_guides/configuration/webpack_configuration/) + - [Deployment](guides/app_builder_guides/deployment/deployment/) + - [CI/CD for App Builder Apps](guides/app_builder_guides/deployment/cicd_for_app_builder_apps/) + - [Credential Rotation](guides/app_builder_guides/deployment/credential_rotation/) + - [Setting Response Headers](guides/app_builder_guides/deployment/setting_response_headers/) + - [Development](guides/app_builder_guides/development/) + - [Distribution](guides/app_builder_guides/distribution/) + - [Events](guides/app_builder_guides/events/custom_events/) + - [Webhooks](guides/app_builder_guides/events/webhooks/) + - [Exc App](guides/app_builder_guides/exc_app/aec_integration/) + - [Interfaces](guides/app_builder_guides/exc_app/interfaces/) + - [Modules](guides/app_builder_guides/exc_app/interfaces/modules/) + - [Page ObjectWithHref](guides/app_builder_guides/exc_app/interfaces/page.objectwithhref/) + - [Page ObjectWithPath](guides/app_builder_guides/exc_app/interfaces/page.objectwithpath/) + - [Page PageAPI](guides/app_builder_guides/exc_app/interfaces/page.pageapi/) + - [Page PageAPIProperties](guides/app_builder_guides/exc_app/interfaces/page.pageapiproperties/) + - [Runtime](guides/app_builder_guides/exc_app/interfaces/runtime/) + - [TopBar Callback](guides/app_builder_guides/exc_app/interfaces/topbar.callback/) + - [TopBar CustomFeedbackConfig](guides/app_builder_guides/exc_app/interfaces/topbar.customfeedbackconfig/) + - [TopBar CustomSearchConfig](guides/app_builder_guides/exc_app/interfaces/topbar.customsearchconfig/) + - [TopBar ExternalFeedbackConfig](guides/app_builder_guides/exc_app/interfaces/topbar.externalfeedbackconfig/) + - [TopBar HelpCenterFeedbackConfig](guides/app_builder_guides/exc_app/interfaces/topbar.helpcenterfeedbackconfig/) + - [TopBar Solution](guides/app_builder_guides/exc_app/interfaces/topbar.solution/) + - [TopBar TopBarAPI](guides/app_builder_guides/exc_app/interfaces/topbar.topbarapi/) + - [TopBar TopBarAPIProperties](guides/app_builder_guides/exc_app/interfaces/topbar.topbarapiproperties/) + - [User UserAPI](guides/app_builder_guides/exc_app/interfaces/user.userapi/) + - [User UserInfo](guides/app_builder_guides/exc_app/interfaces/user.userinfo/) + - [Migrate App to Exp Cloud SPA](guides/app_builder_guides/exc_app/migrate_app_to_exp_cloud_spa/) + - [Modules](guides/app_builder_guides/exc_app/modules/index.md) + - [Page](guides/app_builder_guides/exc_app/modules/page/) + - [TopBar](guides/app_builder_guides/exc_app/modules/topbar/) + - [User](guides/app_builder_guides/exc_app/modules/user/) + - [Extensions](guides/app_builder_guides/extensions/extensions/) + - [Extension Migration Guide](guides/app_builder_guides/extensions/extension_migration_guide/) + - [Optimization](guides/app_builder_guides/optimization/) + - [Security](guides/app_builder_guides/security/index.md) + - [Understanding Authentication](guides/app_builder_guides/security/understanding_authentication/) + - [Telemetry](guides/app_builder_guides/telemetry/) + - [Runtime Guides](guides/runtime_guides/index.md) + - [Contribution Guide](guides/contribution_guide/) + - [Asynchronous Calls](guides/runtime_guides/asynchronous_calls/) + - [Creating Actions](guides/runtime_guides/creating_actions/) + - [Creating REST APIs](guides/runtime_guides/creating_rest_apis/) + - [CI/CD Pipeline](guides/runtime_guides/ci-cd_pipeline/) + - [Debugging](guides/runtime_guides/debugging/) + - [Logging & Monitoring](guides/runtime_guides/logging_monitoring/) + - [Reference Docs](guides/runtime_guides/reference_docs/index.md) + - [API Reference](guides/runtime_guides/reference_docs/api_ref/) + - [CLI Usage](guides/runtime_guides/reference_docs/cli_use/) + - [Configuring Proxy](guides/runtime_guides/reference_docs/configuringproxy/) + - [Environment Variables](guides/runtime_guides/reference_docs/environment_variables/) + - [Feeds](guides/runtime_guides/reference_docs/feeds/) + - [Multiple Regions](guides/runtime_guides/reference_docs/multiple_regions/) + - [Packages](guides/runtime_guides/reference_docs/packages/) + - [Prepackages](guides/runtime_guides/reference_docs/prepackages/) + - [Runtimes](guides/runtime_guides/reference_docs/runtimes/) + - [Sequences & Compositions](guides/runtime_guides/reference_docs/sequences_compositions/) + - [Triggers & Rules](guides/runtime_guides/reference_docs/triggersrules/) + - [WSK Usage](guides/runtime_guides/reference_docs/wsk_use/) + - [Security General](guides/runtime_guides/security_general/) + - [Securing Web Actions](guides/runtime_guides/securing_web_actions/) + - [System Settings](guides/runtime_guides/system_settings/) + - [Throughput Tuning](guides/runtime_guides/throughput_tuning/) + - [Tools](guides/runtime_guides/tools/index.md) + - [CLI Install](guides/runtime_guides/tools/cli_install/) + - [Troubleshooting](guides/runtime_guides/troubleshooting/) + - [Using Packages](guides/runtime_guides/using_packages/) + - [Using Runtime](guides/runtime_guides/using_runtime/) + - [Contribution Guide](guides/contribution_guide/) + - [Learning](resources/index.md) + - [Asset Compute Worker PS API](resources/asset-compute-worker-ps-api/index.md) + - [Requirements](resources/asset-compute-worker-ps-api/requirements/) + - [Lesson 1: Create an app from Asset Compute template](resources/asset-compute-worker-ps-api/lesson1/) + - [Lesson 2: Configure the app](resources/asset-compute-worker-ps-api/lesson2/) + - [Lesson 3: Develop worker calling Photoshop API](resources/asset-compute-worker-ps-api/lesson3/) + - [Lesson 4: Integrate worker in AEMaaCS](resources/asset-compute-worker-ps-api/lesson4/) + - [Well done](resources/asset-compute-worker-ps-api/welldone/) + - [Barcode Reader](resources/barcode-reader/index.md) + - [Requirements](resources/barcode-reader/requirements/) + - [Lesson 1: Bootstrap a Headless App](resources/barcode-reader/bootstrap/) + - [Lesson 2: Writing a Serverless Action](resources/barcode-reader/barcode/) + - [Lesson 3: Unit and E2E Tests](resources/barcode-reader/test/) + - [Well done](resources/barcode-reader/welldone/) + - [Blog Articles](resources/blog_articles/) + - [Blog Articles](resources/blog_articles/blog_articles/) + - [CI/CD](resources/ci-cd/index.md) + - [Requirements](resources/ci-cd/requirements/) + - [Lesson 1: Setup CI/CD](resources/ci-cd/lesson1/) + - [Lesson 2: Monitoring CI/CD](resources/ci-cd/lesson2/) + - [Lesson 3: Custom CI/CD workflow](resources/ci-cd/lesson3/) + - [Well done](resources/ci-cd/welldone/) + - [Cron Jobs](resources/cron-jobs/index.md) + - [Requirements](resources/cron-jobs/requirements/) + - [Lesson 1: Bootstrap a Headless App](resources/cron-jobs/lesson1/) + - [Lesson 2: Set up Alarm Feed with Trigger and Rule](resources/cron-jobs/lesson2/) + - [Lesson 3: Types of Alarm Feed](resources/cron-jobs/lesson3/) + - [Well done](resources/cron-jobs/welldone/) + - [Custom Asset Compute Worker](resources/custom-asset-compute-worker/index.md) + - [Requirements](resources/custom-asset-compute-worker/requirements/) + - [How AEM as Cloud assets works](resources/custom-asset-compute-worker/aem-cloud-assets/) + - [Architecture of our worker](resources/custom-asset-compute-worker/our-worker/) + - [Configure services](resources/custom-asset-compute-worker/lesson1/) + - [Local environment setup](resources/custom-asset-compute-worker/lesson2/) + - [Implement the worker](resources/custom-asset-compute-worker/lesson3/) + - [Test the worker](resources/custom-asset-compute-worker/lesson4/) + - [Setup AEM to use the worker](resources/custom-asset-compute-worker/lesson5/) + - [Well Done](resources/custom-asset-compute-worker/welldone/) + - [Customer Dashboard](resources/customer-dashboard/index.md) + - [Requirements](resources/customer-dashboard/requirements/) + - [Lesson 1: Create a New App Builder App from Campaign Standard Template](resources/customer-dashboard/lesson1/) + - [Lesson 2: Explore the App Builder App](resources/customer-dashboard/lesson2/) + - [Lesson 3: Run the App Builder App Locally](resources/customer-dashboard/lesson3/) + - [Lesson 4: List All Customer Profiles on the UI](resources/customer-dashboard/lesson4/) + - [Lesson 5: Add Personalized Promotion Emails Triggering](resources/customer-dashboard/lesson5/) + - [Well Done](resources/customer-dashboard/welldone/) + - [Debugging](resources/debugging/index.md) + - [Requirements](resources/debugging/requirements/) + - [Lesson 1: Getting familiar with Debugger](resources/debugging/lesson1/) + - [Lesson 2: Debugging Application Code](resources/debugging/lesson2/) + - [Lesson 3: Managing Application Logs](resources/debugging/lesson3/) + - [Well Done](resources/debugging/welldone/) + - [Event Driven](resources/event-driven/index.md) + - [Requirements](resources/event-driven/requirements/) + - [Lesson 1: Create a New App Builder App from Template](resources/event-driven/lesson1/) + - [Lesson 2: Register the App as Event Provider](resources/event-driven/lesson2/) + - [Lesson 3: Fire an Event](resources/event-driven/lesson3/) + - [Lesson 4: Consume Events](resources/event-driven/lesson4/) + - [Well Done](resources/event-driven/welldone/) + - [Events Runtime](resources/events-runtime/index.md) + - [Requirements](resources/events-runtime/requirements/) + - [Lesson 1: Step by Step Guide](resources/events-runtime/lesson1/) + - [Lesson 2: Verify the result](resources/events-runtime/lesson2/) + - [Well done](resources/events-runtime/welldone/) + - [Journaling Events](resources/journaling-events/index.md) + - [Requirements](resources/journaling-events/requirements/) + - [Lesson 1: Create an Event Provider using App Builder](resources/journaling-events/lesson1/) + - [Lesson 2: Create the Event Consumer using Journaling API](resources/journaling-events/lesson2/) + - [Lesson 3: End to end test](resources/journaling-events/lesson3/) + - [Well done](resources/journaling-events/welldone/) + - [Sample Apps](resources/sample_apps/index.md) + - [Code Snippets](resources/sample_apps/code_snippets/index.md) + - [Caching HTTP responses](resources/sample_apps/code_snippets/caching/) + - [App Builder Files SDK](resources/sample_apps/code_snippets/files/) + - [App Builder State SDK](resources/sample_apps/code_snippets/state/) + - [I/O Events handler](resources/sample_apps/code_snippets/events/) + - [Real-time data from Adobe Analytics API 1.4](resources/sample_apps/code_snippets/analytics/) + - [Spectrum Introduction](resources/spectrum-intro/index.md) + - [Lesson 1: What is Spectrum ?](resources/spectrum-intro/lesson1/) + - [Lesson 2: Using Spectrum CSS](resources/spectrum-intro/lesson2/) + - [Lesson 3: Using React Spectrum](resources/spectrum-intro/lesson3/) + - [Lesson 4: Using React Spectrum in App Builder](resources/spectrum-intro/lesson4/) + - [Well done](resources/spectrum-intro/welldone/) + - [Todo App](resources/todo-app/index.md) + - [Requirements](resources/todo-app/requirements/) + - [Lesson 1: Create a New App Builder App with the React Spectrum template](resources/todo-app/lesson1/) + - [Lesson 2: Setup Runtime actions](resources/todo-app/lesson2/) + - [Lesson 3: Setup the CreateTodoList component](resources/todo-app/lesson3/) + - [Lesson 4: Setup the Todo component](resources/todo-app/lesson4/) + - [Lesson 5: Setup the TodoList component](resources/todo-app/lesson5/) + - [Lesson 6: Bringing the pieces together to build the App](resources/todo-app/lesson6/) + - [Well done](resources/todo-app/welldone/) + - [Videos](resources/videos/index.md) + - [Overview](resources/videos/overview/) + - [Introducing App Builder](resources/videos/overview/introduction/) + - [Getting Started](resources/videos/overview/getting-started/) + - [Architecture](resources/videos/overview/architecture/) + - [A Full Security Overview](resources/videos/overview/security/) + - [User Journey](resources/videos/overview/e2e-user-journey/) + - [Exploring](resources/videos/exploring/) + - [Projects and Workspaces](resources/videos/exploring/projects-and-workspaces/) + - [React Spectrum](resources/videos/exploring/react-spectrum/) + - [Custom Events](resources/videos/exploring/custom-events/) + - [CI/CD](resources/videos/exploring/ci-cd/) + - [Debugging](resources/videos/exploring/debugging/) + - [Learning Resources](resources/videos/exploring/learning-resources/) + - [Dashboard Case Study](resources/videos/exploring/dashboard-case-study/) + - [ODE Case Study](resources/videos/exploring/ode-case-study/) + - [Deep Dive Use Cases](resources/videos/exploring/deep-dive-use-cases/) + - [Live Wired Sneak](resources/videos/exploring/live-wired-sneak/) + - [Softcrylic Partner Showcase](resources/videos/exploring/softcrylic-showcase/) + - [Developers Live](resources/videos/developers-live/) + - [App Builder Deep Dive](resources/videos/developers-live/deep-dive/) + - [Asset Compute Service Extensibility](resources/videos/developers-live/asset-compute-service-extensibility/) + - [Extend Adobe Experience Cloud](resources/videos/developers-live/extend-experience-cloud/) diff --git a/src/pages/get_started/app_builder_get_started/app_builder_intro.md b/src/pages/get_started/app_builder_get_started/app-builder-intro.md similarity index 99% rename from src/pages/get_started/app_builder_get_started/app_builder_intro.md rename to src/pages/get_started/app_builder_get_started/app-builder-intro.md index 2459eb26c..fbdd89442 100644 --- a/src/pages/get_started/app_builder_get_started/app_builder_intro.md +++ b/src/pages/get_started/app_builder_get_started/app-builder-intro.md @@ -49,4 +49,4 @@ Once you are ready to share the application with end users, initiate the publish ## Next step -First, we'll review the access permissions, credentials, local environment, and tools you'll need for your App Builder app: [Set up](set_up.md). +First, we'll review the access permissions, credentials, local environment, and tools you'll need for your App Builder app: [Set up](set-up.md). diff --git a/src/pages/get_started/app_builder_get_started/first_app.md b/src/pages/get_started/app_builder_get_started/first-app.md similarity index 98% rename from src/pages/get_started/app_builder_get_started/first_app.md rename to src/pages/get_started/app_builder_get_started/first-app.md index 6ccc9700d..6f0cb9529 100644 --- a/src/pages/get_started/app_builder_get_started/first_app.md +++ b/src/pages/get_started/app_builder_get_started/first-app.md @@ -13,7 +13,7 @@ This is a guide through the steps to set up and develop an App Builder Applicati ## 1. Check your environment and tools -Make sure you have [access to App Builder](set_up.md#access-and-credentials), and that your [local environment and tooling](set_up.md#local-environment-setup) are up to date, as described in [Set up Access, Environment, and Tools](set_up.md). +Make sure you have [access to App Builder](set-up.md#access-and-credentials), and that your [local environment and tooling](set-up.md#local-environment-setup) are up to date, as described in [Set up Access, Environment, and Tools](set-up.md). ## 2. Create a new project on Developer Console @@ -31,7 +31,7 @@ Follow these instructions to set up your project: 3. Once you are in the correct organization, click on `Quick Start` and select the option `Create project from template` - > **Note:** if you don't see the `Create project from template` option, confirm that the IMS org is correct. If it is, you do not yet have access to App Builder: recheck the process in [Set up Access, Environment, and Tools](set_up.md). + > **Note:** if you don't see the `Create project from template` option, confirm that the IMS org is correct. If it is, you do not yet have access to App Builder: recheck the process in [Set up Access, Environment, and Tools](set-up.md). 4. Select `App Builder` from the list of templates. @@ -259,7 +259,7 @@ If you included `Web Assets` under Adobe I/O App features above, you will be giv - The `Raw HTML/JS UI` will add a raw HTML/JS/CSS UI with [Spectrum CSS](https://opensource.adobe.com/spectrum-css) styles included. - Both templates come with boilerplate code needed to integrate your App Builder application with [Adobe Experience Cloud](../../guides/app_builder_guides/exc_app/aec_integration.md) + Both templates come with boilerplate code needed to integrate your App Builder application with [Adobe Experience Cloud](../../guides/app_builder_guides/exc_app/aec-integration.md) You will be asked to name the instances of selected sample actions, or keep the default names: @@ -459,13 +459,13 @@ To view your deployed application in the Experience Cloud shell: -> https://experience.adobe.com/?devMode=true#/custom-apps/?localDevUrl=https://localhost:9080 ``` -The first URL shows your standalone application on localhost (by default; the port is configurable). The second places your local application in the context of the [Experience Cloud UI](../../guides/app_builder_guides/exc_app/aec_integration.md) for preview. +The first URL shows your standalone application on localhost (by default; the port is configurable). The second places your local application in the context of the [Experience Cloud UI](../../guides/app_builder_guides/exc_app/aec-integration.md) for preview. While most changes in your code are updated in real time when the application is running, the `.env` file is not among them. Running the application depends on `.env` file to provide necessary credentials, so the file is unmodifiable while the app is running. When your app is running, the `.env` file is backed up, and a new one is written with specific values. When you exit the process, the original `.env` is restored. As indicated in the message, when you are done, you can press `CTRL+C` to terminate the local development environment. -To have the application run completely locally, so the actions run on a locally deployed standalone version of OpenWhisk instead of on Adobe I/O Runtime, use `aio app run --local`. Some additional dependencies are required if you have not installed them already; see [Optional tool](set_up.md#optional-tool) section in [Set Up Access, Environment, and Tools](set_up.md) to set them up manually. +To have the application run completely locally, so the actions run on a locally deployed standalone version of OpenWhisk instead of on Adobe I/O Runtime, use `aio app run --local`. Some additional dependencies are required if you have not installed them already; see [Optional tool](set-up.md#optional-tool) section in [Set Up Access, Environment, and Tools](set-up.md) to set them up manually. Usually, we recommend running your applications with deployed Adobe I/O Runtime actions, since your application should run on Adobe I/O Runtimein production. However, if you need to build complex actions or sequencing, the `--local` flag is helpful to debug the application locally. Please see the "Debugging the Application"" section below for more information. @@ -488,7 +488,7 @@ All actions require `Authorization` and `x-gw-ims-org-id` in the headers by defa ![Hello World](../../images/helloworld-2.png) **Note:** If you open your application in the [Experience Cloud Shell](http://experience.adobe.com/) using the second link provided by the CLI, your Experience Cloud Shell user token will automatically be available to the SPA UI and passed to the underlying Adobe I/O Runtime actions of your application. -This is a very useful feature of the SPA UI template, which integrates with the [client-side API](../../guides/app_builder_guides/exc_app/aec_integration.md) of Experience Cloud Shell. +This is a very useful feature of the SPA UI template, which integrates with the [client-side API](../../guides/app_builder_guides/exc_app/aec-integration.md) of Experience Cloud Shell. The other sample actions require invoking additional paramaters. For example, if you try to invoke `analytics` with only the authorization header, you will see an error similar to `"error": "missing parameter(s) 'apiKey,companyId'"`. This is because these sample actions use Adobe API that requires those parameters before the actions can be invoked. @@ -529,7 +529,7 @@ As you modify and extend the application code, you will need to update the tests Adobe uses [jestJS](https://jestjs.io/) for the unit tests of the CLI, SDK, and bootstrapped application. You can change the implementation to your preferred framework. -[CI/CD for App Builder Applications](../../guides/app_builder_guides/deployment/cicd_for_app_builder_apps.md) explains how you can also execute these tests in the context of a CI/CD pipeline. +[CI/CD for App Builder Applications](../../guides/app_builder_guides/deployment/cicd-for-app-builder-apps.md) explains how you can also execute these tests in the context of a CI/CD pipeline. ## 7. Deploy the application @@ -577,7 +577,7 @@ Well done, your app is now online 🏄 Note the last section of the output, `To view your deployed application`, shows two urls of the app by default, for the CDN host and Experience Cloud Shell. In the latter case, The URL format of the app should follow `https://experience.adobe.com/?devMode=true#/custom-apps/?localDevUrl=`. -You can undeploy your app with `aio app undeploy`. To learn more about deployment, please refer to the [Deployment Overview](../../guides/app_builder_guides/deployment/deployment.md). To automate your build, deploy, and build process with out-of-the-box CI/CD GitHub actions, please refer to [CI/CD for App Builder Applications](../../guides/app_builder_guides/deployment/cicd_for_app_builder_apps.md). +You can undeploy your app with `aio app undeploy`. To learn more about deployment, please refer to the [Deployment Overview](../../guides/app_builder_guides/deployment/deployment.md). To automate your build, deploy, and build process with out-of-the-box CI/CD GitHub actions, please refer to [CI/CD for App Builder Applications](../../guides/app_builder_guides/deployment/cicd-for-app-builder-apps.md). ## 8. Common issues @@ -599,4 +599,4 @@ You can undeploy your app with `aio app undeploy`. To learn more about deploymen For more code examples and use cases, please refer to the [Resources page](../../resources/index.md). -Continue the tutorial at [Publishing Your First App Builder Application](publish_app.md) +Continue the tutorial at [Publishing Your First App Builder Application](publish-app.md) diff --git a/src/pages/get_started/app_builder_get_started/index.md b/src/pages/get_started/app_builder_get_started/index.md index c3358972e..7a95efecc 100644 --- a/src/pages/get_started/app_builder_get_started/index.md +++ b/src/pages/get_started/app_builder_get_started/index.md @@ -14,11 +14,11 @@ App Builder greatly simplifies the process of building cloud native applications If you have existing actions (for example, headless applications) deployed on Adobe I/O Runtime and you want to convert them to App Builder applications, these are the main steps: * Create a new project in the [Developer Console](https://developer.adobe.com/developer-console/) and choose the App Builder template -* Configure the Adobe CLI and use it to initialize a new application for the project you created above; see also [Setting Up Your Environment](set_up.md) +* Configure the Adobe CLI and use it to initialize a new application for the project you created above; see also [Setting Up Your Environment](set-up.md) * Create copies of your actions in this project * Deploy and test the new actions * Update your applications to point to the new actions ## Next step -See what else App Builder can do: [Create your First App Builder Application](first_app.md). +See what else App Builder can do: [Create your First App Builder Application](first-app.md). diff --git a/src/pages/get_started/app_builder_get_started/publish_app.md b/src/pages/get_started/app_builder_get_started/publish-app.md similarity index 100% rename from src/pages/get_started/app_builder_get_started/publish_app.md rename to src/pages/get_started/app_builder_get_started/publish-app.md diff --git a/src/pages/get_started/app_builder_get_started/set_up.md b/src/pages/get_started/app_builder_get_started/set-up.md similarity index 98% rename from src/pages/get_started/app_builder_get_started/set_up.md rename to src/pages/get_started/app_builder_get_started/set-up.md index 4953d450e..c327b0f51 100644 --- a/src/pages/get_started/app_builder_get_started/set_up.md +++ b/src/pages/get_started/app_builder_get_started/set-up.md @@ -70,4 +70,4 @@ If you intend to use local development (`aio app dev`) features provided by the ## Next step -Now that you have your environment set up, you can start to [Create your First App Builder Application](first_app.md). +Now that you have your environment set up, you can start to [Create your First App Builder Application](first-app.md). diff --git a/src/pages/get_started/index.md b/src/pages/get_started/index.md index ccb64c05f..326708e68 100644 --- a/src/pages/get_started/index.md +++ b/src/pages/get_started/index.md @@ -12,7 +12,7 @@ If you're new to App Builder, start with our [App Builder Getting Started guide] - Troubleshooting common issues ### Runtime Getting Started -If you're interested in serverless development with Adobe I/O Runtime, check out our [Runtime Getting Started guide](runtime_getting_started/). This guide covers: +If you're interested in serverless development with Adobe I/O Runtime, check out our [Runtime Getting Started guide](runtime_getting_started/index.md). This guide covers: - Understanding Runtime fundamentals - Setting up your environment - Creating and deploying actions @@ -21,6 +21,6 @@ If you're interested in serverless development with Adobe I/O Runtime, check out ## Next Steps -After completing either getting started guide, you can explore our detailed [Guides](../guides/) section for more in-depth information about specific features and capabilities. +After completing either getting started guide, you can explore our detailed [Guides](../guides/index.md) section for more in-depth information about specific features and capabilities. -For additional resources and support, visit our [Resources](../resources/) section. \ No newline at end of file +For additional resources and support, visit our [Resources](../resources/index.md) section. \ No newline at end of file diff --git a/src/pages/get_started/runtime_getting_started/activations.md b/src/pages/get_started/runtime_getting_started/activations.md index 3438223d7..b5dfcd204 100644 --- a/src/pages/get_started/runtime_getting_started/activations.md +++ b/src/pages/get_started/runtime_getting_started/activations.md @@ -98,7 +98,7 @@ At a scale of millions of activations per day, it may be difficult to screen out The exceptions are asynchronous actions invoked in a non-blocking fashion. Their results are persisted regardless of success or failure, so you can extract their responses later. -You can still view the total number of executions, as described in the [Logging and Monitoring](../../guides/runtime_guides/logging_monitoring.md) Guide. +You can still view the total number of executions, as described in the [Logging and Monitoring](../../guides/runtime_guides/logging-monitoring.md) Guide. To review all activation results during development, set the extra logging header to `on` in the request: @@ -129,6 +129,6 @@ Activation time to live is seven days, a system setting, and can't be changed by This completes the "Get Started with Adobe I/O Runtime" tutorial. -For a detailed review of Runtime components, operations, settings, and tuning, see [Understanding I/O Runtime](understanding_runtime.md). +For a detailed review of Runtime components, operations, settings, and tuning, see [Understanding I/O Runtime](understanding-runtime.md). -The procedures described above will help you debug your first actions. For additional details about debugging tools and processes, review the [Logging and Monitoring](../../guides/runtime_guides/logging_monitoring.md) Guide. +The procedures described above will help you debug your first actions. For additional details about debugging tools and processes, review the [Logging and Monitoring](../../guides/runtime_guides/logging-monitoring.md) Guide. diff --git a/src/pages/get_started/runtime_getting_started/entities.md b/src/pages/get_started/runtime_getting_started/entities.md index 1d51bb84b..cca000b2c 100644 --- a/src/pages/get_started/runtime_getting_started/entities.md +++ b/src/pages/get_started/runtime_getting_started/entities.md @@ -8,9 +8,9 @@ Actions are stateless functions that run on Adobe I/O Runtime. Actions can be us For more information, see: -- [Creating Actions](../../guides/runtime_guides/creating_actions.md) -- [Securing Web Actions](../../guides/runtime_guides/securing_web_actions.md) -- [CI/CD Pipeline](../../guides/runtime_guides/ci-cd_pipeline.md) +- [Creating Actions](../../guides/runtime_guides/creating-actions.md) +- [Securing Web Actions](../../guides/runtime_guides/securing-web-actions.md) +- [CI/CD Pipeline](../../guides/runtime_guides/ci-cd-pipeline.md) ## Namespaces @@ -50,4 +50,4 @@ For more information, see [Using Feeds](../../guides/runtime_guides/reference_do ## Next step -Next we'll see how these entities interact to deliver Runtime function-as-a-service, in [How Adobe I/O Runtime works](how_runtime_works.md) +Next we'll see how these entities interact to deliver Runtime function-as-a-service, in [How Adobe I/O Runtime works](how-runtime-works.md) diff --git a/src/pages/get_started/runtime_getting_started/how_runtime_works.md b/src/pages/get_started/runtime_getting_started/how-runtime-works.md similarity index 99% rename from src/pages/get_started/runtime_getting_started/how_runtime_works.md rename to src/pages/get_started/runtime_getting_started/how-runtime-works.md index 8992c57a1..3f73a8f9d 100644 --- a/src/pages/get_started/runtime_getting_started/how_runtime_works.md +++ b/src/pages/get_started/runtime_getting_started/how-runtime-works.md @@ -112,4 +112,4 @@ The Invoker ensures that actions are executed securely, efficiently, and in isol To begin a step-by-step tutorial for creating, deploying, and testing your first Runtime action, start with [Set up Your Environment](setup.md). -For a closer look at the programming model, components, operation, integrations, and security provisions of Adobe I/O Runtime, review [Understanding Adobe I/O Runtime](understanding_runtime.md) +For a closer look at the programming model, components, operation, integrations, and security provisions of Adobe I/O Runtime, review [Understanding Adobe I/O Runtime](understanding-runtime.md) diff --git a/src/pages/get_started/runtime_getting_started/index.md b/src/pages/get_started/runtime_getting_started/index.md index d7dfc6454..fdb415322 100644 --- a/src/pages/get_started/runtime_getting_started/index.md +++ b/src/pages/get_started/runtime_getting_started/index.md @@ -6,7 +6,7 @@ Runtime delivers a flexible, on-demand computing resource: function-as-a-service ## Next steps -For an overview of I/O Runtime terminology and its computing model, see [Entities and Core Concepts](entities.md) and [How Adobe I/O Runtime Works](how_runtime_works.md). +For an overview of I/O Runtime terminology and its computing model, see [Entities and Core Concepts](entities.md) and [How Adobe I/O Runtime Works](how-runtime-works.md). For a step-by-step tutorial for building applications on I/O Runtime, follow this tutorial: @@ -14,4 +14,4 @@ For a step-by-step tutorial for building applications on I/O Runtime, follow thi - [Deploy and invoke your first action](deploy.md) - [Retrieve action invocation results](activations.md) -For detailed description of the Runtime programming model, components, and processes, with recommendations about working with Runtime and optimizing performance, see [Understanding Adobe I/O Runtime ](understanding_runtime.md). +For detailed description of the Runtime programming model, components, and processes, with recommendations about working with Runtime and optimizing performance, see [Understanding Adobe I/O Runtime ](understanding-runtime.md). diff --git a/src/pages/get_started/runtime_getting_started/setup.md b/src/pages/get_started/runtime_getting_started/setup.md index d4370aa59..a4d25a18f 100644 --- a/src/pages/get_started/runtime_getting_started/setup.md +++ b/src/pages/get_started/runtime_getting_started/setup.md @@ -30,7 +30,7 @@ In the Developer Console: There are two ways to configure the `aio` CLI: -* **With Developer Role or System Administrator permissions**, sign in to the `aio` CLI as shown [here](../app_builder_get_started/first_app.md#3-sign-in-from-the-CLI), then use it to retrieve the projects you created in the Developer Console and select the workspace you want to work in. +* **With Developer Role or System Administrator permissions**, sign in to the `aio` CLI as shown [here](../app_builder_get_started/first-app.md#3-sign-in-from-the-CLI), then use it to retrieve the projects you created in the Developer Console and select the workspace you want to work in. * **If you lack the right permissions** but have a namespace and authorization for it, manually configure the `aio` CLI as shown in the next section. diff --git a/src/pages/get_started/runtime_getting_started/understanding_runtime.md b/src/pages/get_started/runtime_getting_started/understanding-runtime.md similarity index 99% rename from src/pages/get_started/runtime_getting_started/understanding_runtime.md rename to src/pages/get_started/runtime_getting_started/understanding-runtime.md index 93672289b..fdff879a1 100644 --- a/src/pages/get_started/runtime_getting_started/understanding_runtime.md +++ b/src/pages/get_started/runtime_getting_started/understanding-runtime.md @@ -58,7 +58,7 @@ When an action invocation request is accepted by I/O Runtime and an ActivationId ## Understanding system settings -Some system limits are relevant to your application design; you can find a full reference in the Adobe I/O Runtime [System Settings Guide](../../guides/runtime_guides/system_settings.md). +Some system limits are relevant to your application design; you can find a full reference in the Adobe I/O Runtime [System Settings Guide](../../guides/runtime_guides/system-settings.md). These are particularly important: diff --git a/src/pages/getting_started/first_app.md b/src/pages/getting_started/first-app.md similarity index 99% rename from src/pages/getting_started/first_app.md rename to src/pages/getting_started/first-app.md index 0ea826a1a..c7ce08e89 100644 --- a/src/pages/getting_started/first_app.md +++ b/src/pages/getting_started/first-app.md @@ -19,7 +19,7 @@ In this tutorial, we'll guide you through the following steps to give you an int 1. Developing the Application 1. Deploying the Application -If you run into any issues during development, please first refer to the [Common Issues section](first_app.md#common-issues) on this page. +If you run into any issues during development, please first refer to the [Common Issues section](first-app.md#common-issues) on this page. ## 1. Set up Local Environment diff --git a/src/pages/guides/app_builder_guides/application_state.md b/src/pages/guides/app_builder_guides/application-state.md similarity index 100% rename from src/pages/guides/app_builder_guides/application_state.md rename to src/pages/guides/app_builder_guides/application-state.md diff --git a/src/pages/guides/app_builder_guides/application_logging/azure_log_analytics.md b/src/pages/guides/app_builder_guides/application_logging/azure-log-analytics.md similarity index 100% rename from src/pages/guides/app_builder_guides/application_logging/azure_log_analytics.md rename to src/pages/guides/app_builder_guides/application_logging/azure-log-analytics.md diff --git a/src/pages/guides/app_builder_guides/application_logging/logging.md b/src/pages/guides/app_builder_guides/application_logging/logging.md index 89f58b0c2..24a1fc7e2 100644 --- a/src/pages/guides/app_builder_guides/application_logging/logging.md +++ b/src/pages/guides/app_builder_guides/application_logging/logging.md @@ -47,7 +47,7 @@ The AIO CLI [App plugin](https://github.com/adobe/aio-cli-plugin-app) provides t To see more command options, run `aio app logs --help` on your terminal. -The `aio app logs` command can be used by developers or by scripts running in a [CI/CD pipeline](../deployment/cicd_for_app_builder_apps.md). The command can also be used for App Builder Applications deployed on Runtime, or running locally through the `aio app run --local` command as discussed in the [Deployment Guide](../deployment/deployment.md). +The `aio app logs` command can be used by developers or by scripts running in a [CI/CD pipeline](../deployment/cicd-for-app-builder-apps.md). The command can also be used for App Builder Applications deployed on Runtime, or running locally through the `aio app run --local` command as discussed in the [Deployment Guide](../deployment/deployment.md). ### Runtime plugin @@ -64,10 +64,10 @@ In addition to viewing application logs using the AIO CLI, Developers can config Supported log management solutions include: - Adobe I/O Runtime (default) -- [Splunk Cloud](splunk_cloud.md) -- [Splunk Enterprise](splunk_enterprise.md) -- [Azure Log Analytics](azure_log_analytics.md) -- [New Relic](new_relic.md) +- [Splunk Cloud](splunk-cloud.md) +- [Splunk Enterprise](splunk-enterprise.md) +- [Azure Log Analytics](azure-log-analytics.md) +- [New Relic](new-relic.md) Follow these links to see how to set up log forwarding using each solution. @@ -102,10 +102,10 @@ Running `aio app deploy --no-actions` or `aio app deploy --no-log-forwarding-upd Please visit the Guide for your log management solution of interest to see how to set up log forwarding. -- [Splunk Cloud](splunk_cloud.md) -- [Splunk Enterprise](splunk_enterprise.md) -- [Azure Log Analytics](azure_log_analytics.md) -- [New Relic](new_relic.md) +- [Splunk Cloud](splunk-cloud.md) +- [Splunk Enterprise](splunk-enterprise.md) +- [Azure Log Analytics](azure-log-analytics.md) +- [New Relic](new-relic.md) #### Viewing the current log forwarding configuration diff --git a/src/pages/guides/app_builder_guides/application_logging/new_relic.md b/src/pages/guides/app_builder_guides/application_logging/new-relic.md similarity index 100% rename from src/pages/guides/app_builder_guides/application_logging/new_relic.md rename to src/pages/guides/app_builder_guides/application_logging/new-relic.md diff --git a/src/pages/guides/app_builder_guides/application_logging/splunk_cloud.md b/src/pages/guides/app_builder_guides/application_logging/splunk-cloud.md similarity index 98% rename from src/pages/guides/app_builder_guides/application_logging/splunk_cloud.md rename to src/pages/guides/app_builder_guides/application_logging/splunk-cloud.md index ada4c6855..5fab0bcfa 100644 --- a/src/pages/guides/app_builder_guides/application_logging/splunk_cloud.md +++ b/src/pages/guides/app_builder_guides/application_logging/splunk-cloud.md @@ -105,7 +105,7 @@ aio app config get log-forwarding errors If you are unable to set up log forwarding using these procedures, please visit [Adobe Experience Leage App Builder Community](https://experienceleaguecommunities.adobe.com/t5/app-builder/ct-p/adobe-app-builder) for support. -Proceed to [Forwarding logs to Splunk Enterprise](splunk_enterprise.md). +Proceed to [Forwarding logs to Splunk Enterprise](splunk-enterprise.md). Return to [Managing Application Logs](logging.md). diff --git a/src/pages/guides/app_builder_guides/application_logging/splunk_enterprise.md b/src/pages/guides/app_builder_guides/application_logging/splunk-enterprise.md similarity index 98% rename from src/pages/guides/app_builder_guides/application_logging/splunk_enterprise.md rename to src/pages/guides/app_builder_guides/application_logging/splunk-enterprise.md index 4e3e0cd80..ad1b720a9 100644 --- a/src/pages/guides/app_builder_guides/application_logging/splunk_enterprise.md +++ b/src/pages/guides/app_builder_guides/application_logging/splunk-enterprise.md @@ -105,7 +105,7 @@ This guide covers configuration of App Builder applications to forward logs to y If you are unable to set up log forwarding using these procedures, please visit [Adobe Experience Leage App Builder Community](https://experienceleaguecommunities.adobe.com/t5/app-builder/ct-p/adobe-app-builder) for support. - Proceed to [Forwarding logs to Splunk Cloud](splunk_cloud.md). + Proceed to [Forwarding logs to Splunk Cloud](splunk-cloud.md). Return to [Managing Application Logs](logging.md). diff --git a/src/pages/guides/app_builder_guides/architecture_overview/app_hooks.md b/src/pages/guides/app_builder_guides/architecture_overview/app-hooks.md similarity index 97% rename from src/pages/guides/app_builder_guides/architecture_overview/app_hooks.md rename to src/pages/guides/app_builder_guides/architecture_overview/app-hooks.md index a995713c3..65262f6d5 100644 --- a/src/pages/guides/app_builder_guides/architecture_overview/app_hooks.md +++ b/src/pages/guides/app_builder_guides/architecture_overview/app-hooks.md @@ -152,6 +152,6 @@ These diagrams show how custom hooks are run, built, deployed, and undeployed wi ## Next steps -Return to [Architecture Overview](architecture_overview.md). +Return to [Architecture Overview](architecture-overview.md). -Return to [Guides Index](../../../guides/index.md). +Return to [Guides Index](../../index.md). diff --git a/src/pages/guides/app_builder_guides/architecture_overview/architecture_overview.md b/src/pages/guides/app_builder_guides/architecture_overview/architecture-overview.md similarity index 94% rename from src/pages/guides/app_builder_guides/architecture_overview/architecture_overview.md rename to src/pages/guides/app_builder_guides/architecture_overview/architecture-overview.md index 1c8ba80a4..d81401e8c 100644 --- a/src/pages/guides/app_builder_guides/architecture_overview/architecture_overview.md +++ b/src/pages/guides/app_builder_guides/architecture_overview/architecture-overview.md @@ -18,7 +18,7 @@ These applications may be headless or headful, as described below. ### Headless applications -Headless applications consist of a set of serverless actions or sequences deployed to [I/O Runtime](../../../intro_and_overview/what_is_app_builder.md#what-is-adobe-io-runtime), Adobe's serverless platform. +Headless applications consist of a set of serverless actions or sequences deployed to [I/O Runtime](../../../intro_and_overview/what-is-app-builder.md#what-is-adobe-io-runtime), Adobe's serverless platform. Headless applications integrate well with remote scripts or processes that invoke them, for example [AEM Assets workflows](https://docs.adobe.com/content/help/en/experience-manager-65/assets/using/assets-workflow.html) or [ACS activities](https://docs.adobe.com/content/help/en/campaign-standard/using/managing-processes-and-data/data-management-activities/external-api.html). @@ -33,7 +33,7 @@ Single-Page App Builder applications with full-fledged UIs should follow the [JA The three main components of App Builder apps are: - Adobe Product APIs, exposed to external Developers and consumers through Adobe I/O API Gateway -- [Javascript-based SDK](https://github.com/adobe/aio-sdk) and serverless actions, sequences, and APIs deployed to [I/O Runtime](../../../intro_and_overview/what_is_app_builder.md#what-is-adobe-io-runtime) +- [Javascript-based SDK](https://github.com/adobe/aio-sdk) and serverless actions, sequences, and APIs deployed to [I/O Runtime](../../../intro_and_overview/what-is-app-builder.md#what-is-adobe-io-runtime) - [React-Spectrum](https://react-spectrum.adobe.com/), Adobe's front-end framework that applies Adobe's design system to React-based components ![JAMStack Architecture](../../../images/jamstack-anatomy-application-march2021.png) @@ -50,7 +50,7 @@ The CLI is supplied with these capabilities: - [Certificate management](https://github.com/adobe/aio-cli-plugin-certificate) - [Configuration management](https://github.com/adobe/aio-cli-plugin-certificate) - [Interactions](https://github.com/adobe/aio-cli-plugin-console) with [Adobe Developer Console](https://developer.adobe.com/developer-console/) -- [Interactions](https://github.com/adobe/aio-cli-plugin-runtime) with [I/O Runtime](../../../intro_and_overview/what_is_app_builder.md#what-is-adobe-io-runtime), Adobe's serverless platform +- [Interactions](https://github.com/adobe/aio-cli-plugin-runtime) with [I/O Runtime](../../../intro_and_overview/what-is-app-builder.md#what-is-adobe-io-runtime), Adobe's serverless platform - [Lifecycle management](https://github.com/adobe/aio-cli-plugin-app) for App Builder ### App Builder generators @@ -125,7 +125,7 @@ It lets Developers perform these actions on behalf of their App Builder applicat ### CI/CD support -[CI/CD support](../deployment/cicd_for_app_builder_apps.md) provided with App Builder for App Builder applications includes: +[CI/CD support](../deployment/cicd-for-app-builder-apps.md) provided with App Builder for App Builder applications includes: - [GitHub Actions](https://github.com/features/actions) to [setup the CLI](https://github.com/adobe/aio-cli-setup-action) and use it to [perform actions](https://github.com/adobe/aio-apps-action) such as application testing, build, and deployment - [GitHub Workflows](https://docs.github.com/en/actions/writing-workflows) to orchestrate the GitHub Actions upon specific events triggered against the application repository @@ -133,16 +133,16 @@ It lets Developers perform these actions on behalf of their App Builder applicat ### Webpack -App Builder uses webpack for bundling I/O Runtime action code. See [Webpack Configuration](../configuration/webpack_configuration.md) for an overview on how to configure webpack. +App Builder uses webpack for bundling I/O Runtime action code. See [Webpack Configuration](../configuration/webpack-configuration.md) for an overview on how to configure webpack. ### Migration guides -- [Migrating Apps to DX Experience Cloud v1 SPAs](../exc_app/migrate_app_to_exp_cloud_spa.md) shows how to migrate App Builder applications initialized as Standalone Applications to a DX Experience Cloud Single-Page Application v1. This is useful if you can't view your application in Adobe Experience Cloud's App Builder Catalog. +- [Migrating Apps to DX Experience Cloud v1 SPAs](../exc_app/migrate-app-to-exp-cloud-spa.md) shows how to migrate App Builder applications initialized as Standalone Applications to a DX Experience Cloud Single-Page Application v1. This is useful if you can't view your application in Adobe Experience Cloud's App Builder Catalog. ## Next steps -Continue to [Dealing with Application State](../application_state.md). +Continue to [Dealing with Application State](../application-state.md). Return to [App Builder Overview](../../../intro_and_overview/app_builder_overview.md). -Return to [Guides Index](../../../guides/index.md). +Return to [Guides Index](../../index.md). diff --git a/src/pages/guides/app_builder_guides/architecture_overview/introduction_to_react_spectrum.md b/src/pages/guides/app_builder_guides/architecture_overview/introduction-to-react-spectrum.md similarity index 90% rename from src/pages/guides/app_builder_guides/architecture_overview/introduction_to_react_spectrum.md rename to src/pages/guides/app_builder_guides/architecture_overview/introduction-to-react-spectrum.md index c70f9551c..c84da695b 100644 --- a/src/pages/guides/app_builder_guides/architecture_overview/introduction_to_react_spectrum.md +++ b/src/pages/guides/app_builder_guides/architecture_overview/introduction-to-react-spectrum.md @@ -25,6 +25,6 @@ To learn more, please review the [React Spectrum Libraries homepage](https://rea ## Next steps -Continue to [Using Client SDKs for Accessing Adobe APIs](using_sdks.md). +Continue to [Using Client SDKs for Accessing Adobe APIs](using-sdks.md). -Return to [Architecture Overview](architecture_overview.md). +Return to [Architecture Overview](architecture-overview.md). diff --git a/src/pages/guides/app_builder_guides/architecture_overview/using_sdks.md b/src/pages/guides/app_builder_guides/architecture_overview/using-sdks.md similarity index 96% rename from src/pages/guides/app_builder_guides/architecture_overview/using_sdks.md rename to src/pages/guides/app_builder_guides/architecture_overview/using-sdks.md index dc865337b..276824c29 100644 --- a/src/pages/guides/app_builder_guides/architecture_overview/using_sdks.md +++ b/src/pages/guides/app_builder_guides/architecture_overview/using-sdks.md @@ -46,7 +46,7 @@ const token = getBearerToken(params) const orgId = params.__ow_headers['x-gw-ims-org-id'] ``` -The remaining parameters, `tenant` and `apiKey`, must be passed as default parameters as detailed in [Application State](../application_state.md). The real values would be set as environment variables in the `.env` file, mapped to the action default parameters in the `manifest.yml` file. Here are sample snippets taken from these files: +The remaining parameters, `tenant` and `apiKey`, must be passed as default parameters as detailed in [Application State](../application-state.md). The real values would be set as environment variables in the `.env` file, mapped to the action default parameters in the `manifest.yml` file. Here are sample snippets taken from these files: ```bash # in .env @@ -77,6 +77,6 @@ While many features of Adobe Analytics API have been [migrated to the new 2.0 AP ## Next steps -Continue to [App Builder Application Tooling Lifecycle Event Hooks](app_hooks.md). +Continue to [App Builder Application Tooling Lifecycle Event Hooks](app-hooks.md). -Return to [Guides Index](../../../guides/index.md). +Return to [Guides Index](../../index.md). diff --git a/src/pages/guides/app_builder_guides/configuration/configuration.md b/src/pages/guides/app_builder_guides/configuration/configuration.md index 7dbad8026..0362a0188 100644 --- a/src/pages/guides/app_builder_guides/configuration/configuration.md +++ b/src/pages/guides/app_builder_guides/configuration/configuration.md @@ -111,7 +111,7 @@ hostname: #### Runtime Manifest -The `runtimeManifest` field holds the back-end configuration deployed into Adobe I/O Runtime; its full spec can be found [here](https://github.com/apache/openwhisk-wskdeploy/tree/master/specification/html). Acceptable values for the `limits` fields below can be found on the [Runtime System Settings](../../runtime_guides/system_settings.md) page. +The `runtimeManifest` field holds the back-end configuration deployed into Adobe I/O Runtime; its full spec can be found [here](https://github.com/apache/openwhisk-wskdeploy/tree/master/specification/html). Acceptable values for the `limits` fields below can be found on the [Runtime System Settings](../../runtime_guides/system-settings.md) page. Here is an example `runtimeManifest`: ```yaml @@ -152,7 +152,7 @@ runtimeManifest: > - `concurrency`: the maximum number of action invocations that can be sent in parallel to the same container (default 200, min: 1,max: 500) > - `logs`: the maximum log size for the action (in MB, default 10, min: 0, max: 10) > -> More info on `limits` can be found on the [Runtime System Settings](../../runtime_guides/system_settings.md) page. +> More info on `limits` can be found on the [Runtime System Settings](../../runtime_guides/system-settings.md) page. ##### Annotations @@ -173,7 +173,7 @@ runtimeManifest: In addition to the [base annotations](https://github.com/adobe-apiplatform/incubator-openwhisk/blob/master/docs/annotations.md) provided by Runtime, there are two special ones: - **disable-download** (default: false) determines whether action code can be downloaded. Once this annotation is set to true, it cannot be set back to false. -- **require-adobe-auth** (Default: false) determines whether the action will require Adobe authentication to invoke. See [here](../../app_builder_guides/security/index.md#authentication-and-authorization-handling) for more. +- **require-adobe-auth** (Default: false) determines whether the action will require Adobe authentication to invoke. See [here](../security/index.md#authentication-and-authorization-handling) for more. ##### API Gateway Configuration @@ -403,8 +403,8 @@ The legacy configuration system does not have an `app.config.yaml` and instead u ## Next steps -If you can't view your application in the App Builder Catalog of Adobe Experience Cloud, this migration protocol may be useful: [Migrating Apps to DX Experience Cloud v1 SPAs](../exc_app/migrate_app_to_exp_cloud_spa.md). +If you can't view your application in the App Builder Catalog of Adobe Experience Cloud, this migration protocol may be useful: [Migrating Apps to DX Experience Cloud v1 SPAs](../exc_app/migrate-app-to-exp-cloud-spa.md). -Proceed to [Webpack Configuration](webpack_configuration.md). +Proceed to [Webpack Configuration](webpack-configuration.md). -Return to [Guides Index](../../../guides/index.md). +Return to [Guides Index](../../index.md). diff --git a/src/pages/guides/app_builder_guides/configuration/webpack_configuration.md b/src/pages/guides/app_builder_guides/configuration/webpack-configuration.md similarity index 99% rename from src/pages/guides/app_builder_guides/configuration/webpack_configuration.md rename to src/pages/guides/app_builder_guides/configuration/webpack-configuration.md index b80362922..502c108ef 100644 --- a/src/pages/guides/app_builder_guides/configuration/webpack_configuration.md +++ b/src/pages/guides/app_builder_guides/configuration/webpack-configuration.md @@ -210,4 +210,4 @@ module.exports = (env) => ({ Return to [Configuration](configuration.md). -Return to [Guides Index](../../../guides/index.md). +Return to [Guides Index](../../index.md). diff --git a/src/pages/guides/app_builder_guides/deployment/cicd_for_app_builder_apps.md b/src/pages/guides/app_builder_guides/deployment/cicd-for-app-builder-apps.md similarity index 99% rename from src/pages/guides/app_builder_guides/deployment/cicd_for_app_builder_apps.md rename to src/pages/guides/app_builder_guides/deployment/cicd-for-app-builder-apps.md index f2efd8373..be0dded04 100644 --- a/src/pages/guides/app_builder_guides/deployment/cicd_for_app_builder_apps.md +++ b/src/pages/guides/app_builder_guides/deployment/cicd-for-app-builder-apps.md @@ -86,7 +86,7 @@ The default implementation of the CI/CD workflow for App Builder Applications re ## Next steps -Continue to [Credential Rotation](credential_rotation.md). +Continue to [Credential Rotation](credential-rotation.md). Return to [Deployment Overview](deployment.md). diff --git a/src/pages/guides/app_builder_guides/deployment/credential_rotation.md b/src/pages/guides/app_builder_guides/deployment/credential-rotation.md similarity index 97% rename from src/pages/guides/app_builder_guides/deployment/credential_rotation.md rename to src/pages/guides/app_builder_guides/deployment/credential-rotation.md index 507288cb2..1056faa4c 100644 --- a/src/pages/guides/app_builder_guides/deployment/credential_rotation.md +++ b/src/pages/guides/app_builder_guides/deployment/credential-rotation.md @@ -60,7 +60,7 @@ Again, it is critically important to pass all parameters in a single `update` ca ## Next steps -Continue to [Setting Response Headers](setting_response_headers.md). +Continue to [Setting Response Headers](setting-response-headers.md). Return to [Deployment Overview](deployment.md). diff --git a/src/pages/guides/app_builder_guides/deployment/deployment.md b/src/pages/guides/app_builder_guides/deployment/deployment.md index b3582f952..1fc4c8aa4 100644 --- a/src/pages/guides/app_builder_guides/deployment/deployment.md +++ b/src/pages/guides/app_builder_guides/deployment/deployment.md @@ -98,7 +98,7 @@ This deployment is triggered when running `aio app deploy` at the root of the Cu ![Remote Runtime Actions and UI](../../../images/remote-actions-remote-ui.png) -The UI is deployed to the Content Delivery Network on behalf of the Developer's Runtime credentials. It communicates with [Runtime](../../../intro_and_overview/what_is_app_builder.md#what-is-adobe-io-runtime) actions deployed to the developer's Runtime namespace. +The UI is deployed to the Content Delivery Network on behalf of the Developer's Runtime credentials. It communicates with [Runtime](../../../intro_and_overview/what-is-app-builder.md#what-is-adobe-io-runtime) actions deployed to the developer's Runtime namespace. The [Token-Vending Machine](https://github.com/adobe/aio-tvm) supplied with App Builder is implicitely used by the CLI `aio app deploy` command, and validates the developer's Runtime credentials against Runtime. @@ -108,6 +108,6 @@ The deployed Custom Application will then be available at `https://.a ## Next steps -Continue to [CI/CD for App Builder Applications](cicd_for_app_builder_apps.md). +Continue to [CI/CD for App Builder Applications](cicd-for-app-builder-apps.md). Return to the [Guides Index](../../index.md). diff --git a/src/pages/guides/app_builder_guides/deployment/setting_response_headers.md b/src/pages/guides/app_builder_guides/deployment/setting-response-headers.md similarity index 100% rename from src/pages/guides/app_builder_guides/deployment/setting_response_headers.md rename to src/pages/guides/app_builder_guides/deployment/setting-response-headers.md diff --git a/src/pages/guides/app_builder_guides/distribution.md b/src/pages/guides/app_builder_guides/distribution.md index 0049fb506..4e0949a0f 100644 --- a/src/pages/guides/app_builder_guides/distribution.md +++ b/src/pages/guides/app_builder_guides/distribution.md @@ -17,7 +17,7 @@ Developers may distribute App Builder applications privately or publicly. Privately distributed apps are available only to users in the Developer's organization. They are submitted through the [Developer Console](https://developer.adobe.com/developer-console/), reviewed by an Administrator of the organization, and accessed through the [App Builder Catalog](https://experience.adobe.com/#/@adobeio/custom-apps). -See [Publishing Your First App Builder Application](../../get_started/app_builder_get_started/publish_app.md) for a thorough discussion of this topic and a hands-on sample project. +See [Publishing Your First App Builder Application](../../get_started/app_builder_get_started/publish-app.md) for a thorough discussion of this topic and a hands-on sample project. > Note: Only Adobe Experience Cloud Shell extensions may appear in the App Builder Catalog. @@ -291,7 +291,7 @@ When a Developer uploads a package to Adobe Developer Distribution, these valida #### Hooks -Two [hooks](architecture_overview/app_hooks.md) are available to customize the packaging step: +Two [hooks](architecture_overview/app-hooks.md) are available to customize the packaging step: 1. `pre-pack` - runs before packaging 2. `post-pack` - runs after packaging diff --git a/src/pages/guides/app_builder_guides/events/custom_events.md b/src/pages/guides/app_builder_guides/events/custom-events.md similarity index 100% rename from src/pages/guides/app_builder_guides/events/custom_events.md rename to src/pages/guides/app_builder_guides/events/custom-events.md diff --git a/src/pages/guides/app_builder_guides/exc_app/aec_integration.md b/src/pages/guides/app_builder_guides/exc_app/aec-integration.md similarity index 88% rename from src/pages/guides/app_builder_guides/exc_app/aec_integration.md rename to src/pages/guides/app_builder_guides/exc_app/aec-integration.md index af80daa57..b6e650c80 100644 --- a/src/pages/guides/app_builder_guides/exc_app/aec_integration.md +++ b/src/pages/guides/app_builder_guides/exc_app/aec-integration.md @@ -153,13 +153,13 @@ Explore the attributes and behavior of Adobe Experience Cloud Interfaces: | Page | Topbar | User | |:----------------------------------------------------------- | --------------------------------------------------------------------- | ---------------------------------------- | -| [Object with Href](interfaces/page.objectwithhref.md) | [Callback](interfaces/topbar.callback.md) | [User API](interfaces/user.userapi.md) | -| [Object with Path](interfaces/page.objectwithpath.md) | [Custom Feedback](interfaces/topbar.customfeedbackconfig.md) | [User Info](interfaces/user.userinfo.md) | -| [Page API](interfaces/page.pageapi.md) | [Custom Search](interfaces/topbar.customsearchconfig.md) | | -| [Page API Properties](interfaces/page.pageapiproperties.md) | [Help Center Feedback](interfaces/topbar.helpcenterfeedbackconfig.md) | | -| | [External Feedback](interfaces/topbar.externalfeedbackconfig.md) | | -| | [Solution](interfaces/topbar.solution.md) | | -| | [Topbar API](interfaces/topbar.topbarapi.md) | | -| | [Topbar API Properties](interfaces/topbar.topbarapiproperties.md) | ` | +| [Object with Href](interfaces/page-objectwithhref.md) | [Callback](interfaces/topbar-callback.md) | [User API](interfaces/user-userapi.md) | +| [Object with Path](interfaces/page-objectwithpath.md) | [Custom Feedback](interfaces/topbar-customfeedbackconfig.md) | [User Info](interfaces/user-userinfo.md) | +| [Page API](interfaces/page-pageapi.md) | [Custom Search](interfaces/topbar-customsearchconfig.md) | | +| [Page API Properties](interfaces/page-pageapiproperties.md) | [Help Center Feedback](interfaces/topbar-helpcenterfeedbackconfig.md) | | +| | [External Feedback](interfaces/topbar-externalfeedbackconfig.md) | | +| | [Solution](interfaces/topbar-solution.md) | | +| | [Topbar API](interfaces/topbar-topbarapi.md) | | +| | [Topbar API Properties](interfaces/topbar-topbarapiproperties.md) | ` | Return to the [Guides Index](../../index.md). diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/modules.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/modules.md index d2eda8097..8b98c071d 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/modules.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/modules.md @@ -31,7 +31,7 @@ ___ ### page -• **page**: *[PageApi](page.pageapi.md)* +• **page**: *[PageApi](page-pageapi.md)* ___ @@ -43,7 +43,7 @@ ___ ### topbar -• **topbar**: *[TopbarApi](topbar.topbarapi.md)* +• **topbar**: *[TopbarApi](topbar-topbarapi.md)* ___ @@ -53,7 +53,7 @@ ___ #### Type declaration: -▸ (): *[UserApi](user.userapi.md)* +▸ (): *[UserApi](user-userapi.md)* ## Next steps @@ -65,13 +65,13 @@ Explore the attributes and behavior of Adobe Experience Cloud Interfaces: | Page | Topbar | User | | ------------------------------------------- | ---------------------------------------------------------- | ------------------------ | -| [Object with Href](page.objectwithhref.md) | [Callback](topbar.callback.md) | [API](user.userapi.md) | -| [Object with Path](page.objectwithpath.md) | [Custom Feedback](topbar.customfeedbackconfig.md) | [Info](user.userinfo.md) | -| [API](page.pageapi.md) | [Custom Search](topbar.customsearchconfig.md) | | -| [API Properties](page.pageapiproperties.md) | [Help Center Feedback](topbar.helpcenterfeedbackconfig.md) | | -| | [External Feedback](topbar.externalfeedbackconfig.md) | | -| | [Solution](topbar.solution.md) | | -| | [API](topbar.topbarapi.md) | | -| | [API Properties](topbar.topbarapiproperties.md) | ` | +| [Object with Href](page-objectwithhref.md) | [Callback](topbar-callback.md) | [API](user-userapi.md) | +| [Object with Path](page-objectwithpath.md) | [Custom Feedback](topbar-customfeedbackconfig.md) | [Info](user-userinfo.md) | +| [API](page-pageapi.md) | [Custom Search](topbar-customsearchconfig.md) | | +| [API Properties](page-pageapiproperties.md) | [Help Center Feedback](topbar-helpcenterfeedbackconfig.md) | | +| | [External Feedback](topbar-externalfeedbackconfig.md) | | +| | [Solution](topbar-solution.md) | | +| | [API](topbar-topbarapi.md) | | +| | [API Properties](topbar-topbarapiproperties.md) | ` | Return to the [Guides Index](../../../index.md). diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/page.objectwithhref.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/page-objectwithhref.md similarity index 65% rename from src/pages/guides/app_builder_guides/exc_app/interfaces/page.objectwithhref.md rename to src/pages/guides/app_builder_guides/exc_app/interfaces/page-objectwithhref.md index a4a0124eb..3d8be31e7 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/page.objectwithhref.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/page-objectwithhref.md @@ -39,13 +39,13 @@ Explore the attributes and behavior of Adobe Experience Cloud Interfaces: | Page | Topbar | User | | ------------------------------------------- | ---------------------------------------------------------- | ------------------------ | -| [Object with Path](page.objectwithpath.md) | [Callback](topbar.callback.md) | [API](user.userapi.md) | -| [API](page.pageapi.md) | [Custom Feedback](topbar.customfeedbackconfig.md) | [Info](user.userinfo.md) | -| [API Properties](page.pageapiproperties.md) | [Custom Search](topbar.customsearchconfig.md) | | -| | [Help Center Feedback](topbar.helpcenterfeedbackconfig.md) | | -| | [External Feedback](topbar.externalfeedbackconfig.md) | | -| | [Solution](topbar.solution.md) | | -| | [API](topbar.topbarapi.md) | | -| | [API Properties](topbar.topbarapiproperties.md) | ` | +| [Object with Path](page-objectwithpath.md) | [Callback](topbar-callback.md) | [API](user-userapi.md) | +| [API](page-pageapi.md) | [Custom Feedback](topbar-customfeedbackconfig.md) | [Info](user-userinfo.md) | +| [API Properties](page-pageapiproperties.md) | [Custom Search](topbar-customsearchconfig.md) | | +| | [Help Center Feedback](topbar-helpcenterfeedbackconfig.md) | | +| | [External Feedback](topbar-externalfeedbackconfig.md) | | +| | [Solution](topbar-solution.md) | | +| | [API](topbar-topbarapi.md) | | +| | [API Properties](topbar-topbarapiproperties.md) | ` | Return to the [Guides Index](../../../index.md). diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/page.objectwithpath.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/page-objectwithpath.md similarity index 65% rename from src/pages/guides/app_builder_guides/exc_app/interfaces/page.objectwithpath.md rename to src/pages/guides/app_builder_guides/exc_app/interfaces/page-objectwithpath.md index b1048a516..ec6f5cb75 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/page.objectwithpath.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/page-objectwithpath.md @@ -39,13 +39,13 @@ Explore the attributes and behavior of Adobe Experience Cloud Interfaces: | Page | Topbar | User | | ------------------------------------------- | ---------------------------------------------------------- | ------------------------ | -| [Object with Href](page.objectwithhref.md) | [Callback](topbar.callback.md) | [API](user.userapi.md) | -| [API](page.pageapi.md) | [Custom Feedback](topbar.customfeedbackconfig.md) | [Info](user.userinfo.md) | -| [API Properties](page.pageapiproperties.md) | [Custom Search](topbar.customsearchconfig.md) | | -| | [Help Center Feedback](topbar.helpcenterfeedbackconfig.md) | | -| | [External Feedback](topbar.externalfeedbackconfig.md) | | -| | [Solution](topbar.solution.md) | | -| | [API](topbar.topbarapi.md) | | -| | [API Properties](topbar.topbarapiproperties.md) | ` | +| [Object with Href](page-objectwithhref.md) | [Callback](topbar-callback.md) | [API](user-userapi.md) | +| [API](page-pageapi.md) | [Custom Feedback](topbar-customfeedbackconfig.md) | [Info](user-userinfo.md) | +| [API Properties](page-pageapiproperties.md) | [Custom Search](topbar-customsearchconfig.md) | | +| | [Help Center Feedback](topbar-helpcenterfeedbackconfig.md) | | +| | [External Feedback](topbar-externalfeedbackconfig.md) | | +| | [Solution](topbar-solution.md) | | +| | [API](topbar-topbarapi.md) | | +| | [API Properties](topbar-topbarapiproperties.md) | ` | Return to the [Guides Index](../../../index.md). diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/page.pageapi.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/page-pageapi.md similarity index 85% rename from src/pages/guides/app_builder_guides/exc_app/interfaces/page.pageapi.md rename to src/pages/guides/app_builder_guides/exc_app/interfaces/page-pageapi.md index 12a05182d..bb624b5f9 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/page.pageapi.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/page-pageapi.md @@ -13,7 +13,7 @@ Defines page-level APIs available to solutions. ## Hierarchy -* [PageApiProperties](page.pageapiproperties.md) +* [PageApiProperties](page-pageapiproperties.md) ↳ **PageApi** @@ -23,7 +23,7 @@ Defines page-level APIs available to solutions. **favicon**: *string* -*Inherited from [PageApiProperties.favicon](page.pageapiproperties.md#favicon)* +*Inherited from [PageApiProperties.favicon](page-pageapiproperties.md#favicon)* Gets or set the favicon for the page. If this isn't set, then the default Experience Cloud favicon will be used. @@ -39,7 +39,7 @@ ___ • **modal**: *boolean* -*Inherited from [PageApiProperties.modal](page.pageapiproperties.md#modal)* +*Inherited from [PageApiProperties.modal](page-pageapiproperties.md#modal)* Configuration to show or hide a modal with full-screen overlay. Defaults to false. @@ -55,7 +55,7 @@ ___ • **preventDefaultCombos**: *object[]* -*Inherited from [PageApiProperties.preventDefaultCombos](page.pageapiproperties.md#preventdefaultcombos)* +*Inherited from [PageApiProperties.preventDefaultCombos](page-pageapiproperties.md#preventdefaultcombos)* An array of key combinations for the shell to prevent default browser behavior, on in cases where an application performs some other action. @@ -76,7 +76,7 @@ ___ • **spinner**: *boolean* -*Inherited from [PageApiProperties.spinner](page.pageapiproperties.md#spinner)* +*Inherited from [PageApiProperties.spinner](page-pageapiproperties.md#spinner)* Gets or sets a value indicating whether or not to show a spinner on the page. This configuration value is not used for the initial loading spinner (see Route Configuration hideInitialSpinner for that), but can be used to dismiss it if the spinner needs to be dismissed before a solution invokes runtime.done(). @@ -92,7 +92,7 @@ ___ • **title**: *string* -*Inherited from [PageApiProperties.title](page.pageapiproperties.md#title)* +*Inherited from [PageApiProperties.title](page-pageapiproperties.md#title)* Gets or sets the title of the page. @@ -108,7 +108,7 @@ ___ • **viewportTakeover**: *boolean* -*Inherited from [PageApiProperties.viewportTakeover](page.pageapiproperties.md#viewporttakeover)* +*Inherited from [PageApiProperties.viewportTakeover](page-pageapiproperties.md#viewporttakeover)* Configuration to alter the z-index ordering of the Shell and iframe based on whether viewport takeover is needed. @@ -238,13 +238,13 @@ Explore the attributes and behavior of Adobe Experience Cloud Interfaces: | Page | Topbar | User | | ------------------------------------------- | ---------------------------------------------------------- | ------------------------ | -| [Object with Href](page.objectwithhref.md) | [Callback](topbar.callback.md) | [API](user.userapi.md) | -| [Object with Path](page.objectwithpath.md) | [Custom Feedback](topbar.customfeedbackconfig.md) | [Info](user.userinfo.md) | -| [API Properties](page.pageapiproperties.md) | [Custom Search](topbar.customsearchconfig.md) | | -| | [Help Center Feedback](topbar.helpcenterfeedbackconfig.md) | | -| | [External Feedback](topbar.externalfeedbackconfig.md) | | -| | [Solution](topbar.solution.md) | | -| | [API](topbar.topbarapi.md) | | -| | [API Properties](topbar.topbarapiproperties.md) | ` | +| [Object with Href](page-objectwithhref.md) | [Callback](topbar-callback.md) | [API](user-userapi.md) | +| [Object with Path](page-objectwithpath.md) | [Custom Feedback](topbar-customfeedbackconfig.md) | [Info](user-userinfo.md) | +| [API Properties](page-pageapiproperties.md) | [Custom Search](topbar-customsearchconfig.md) | | +| | [Help Center Feedback](topbar-helpcenterfeedbackconfig.md) | | +| | [External Feedback](topbar-externalfeedbackconfig.md) | | +| | [Solution](topbar-solution.md) | | +| | [API](topbar-topbarapi.md) | | +| | [API Properties](topbar-topbarapiproperties.md) | ` | Return to the [Guides Index](../../../index.md). diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/page.pageapiproperties.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/page-pageapiproperties.md similarity index 82% rename from src/pages/guides/app_builder_guides/exc_app/interfaces/page.pageapiproperties.md rename to src/pages/guides/app_builder_guides/exc_app/interfaces/page-pageapiproperties.md index 04643f84a..712e4d16f 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/page.pageapiproperties.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/page-pageapiproperties.md @@ -15,7 +15,7 @@ Subset of page-level APIs available to solutions that are settable attributes. * **PageAPIProperties** - ↳ [PageAPI](page.pageapi.md) + ↳ [PageAPI](page-pageapi.md) ## Properties @@ -122,13 +122,13 @@ Explore the attributes and behavior of Adobe Experience Cloud Interfaces: | Page | Topbar | User | | ------------------------------------------- | ---------------------------------------------------------- | ------------------------ | -| [Object with Href](page.objectwithhref.md) | [Callback](topbar.callback.md) | [API](user.userapi.md) | -| [Object with Path](page.objectwithpath.md) | [Custom Feedback](topbar.customfeedbackconfig.md) | [Info](user.userinfo.md) | -| [API](page.pageapi.md) | [Custom Search](topbar.customsearchconfig.md) | | -| [API Properties](page.pageapiproperties.md) | [Help Center Feedback](topbar.helpcenterfeedbackconfig.md) | | -| | [External Feedback](topbar.externalfeedbackconfig.md) | | -| | [Solution](topbar.solution.md) | | -| | [API](topbar.topbarapi.md) | | -| | [API Properties](topbar.topbarapiproperties.md) | ` | +| [Object with Href](page-objectwithhref.md) | [Callback](topbar-callback.md) | [API](user-userapi.md) | +| [Object with Path](page-objectwithpath.md) | [Custom Feedback](topbar-customfeedbackconfig.md) | [Info](user-userinfo.md) | +| [API](page-pageapi.md) | [Custom Search](topbar-customsearchconfig.md) | | +| [API Properties](page-pageapiproperties.md) | [Help Center Feedback](topbar-helpcenterfeedbackconfig.md) | | +| | [External Feedback](topbar-externalfeedbackconfig.md) | | +| | [Solution](topbar-solution.md) | | +| | [API](topbar-topbarapi.md) | | +| | [API Properties](topbar-topbarapiproperties.md) | ` | Return to the [Guides Index](../../../index.md). diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md index 88f22e0c0..4714f4371 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md @@ -122,13 +122,13 @@ Explore the attributes and behavior of Adobe Experience Cloud Interfaces: | Page | Topbar | User | | ------------------------------------------- | ---------------------------------------------------------- | ------------------------ | -| [Object with Href](page.objectwithhref.md) | [Callback](topbar.callback.md) | [API](user.userapi.md) | -| [Object with Path](page.objectwithpath.md) | [Custom Feedback](topbar.customfeedbackconfig.md) | [Info](user.userinfo.md) | -| [API](page.pageapi.md) | [Custom Search](topbar.customsearchconfig.md) | | -| [API Properties](page.pageapiproperties.md) | [Help Center Feedback](topbar.helpcenterfeedbackconfig.md) | | -| | [External Feedback](topbar.externalfeedbackconfig.md) | | -| | [Solution](topbar.solution.md) | | -| | [API](topbar.topbarapi.md) | | -| | [API Properties](topbar.topbarapiproperties.md) | ` | +| [Object with Href](page-objectwithhref.md) | [Callback](topbar-callback.md) | [API](user-userapi.md) | +| [Object with Path](page-objectwithpath.md) | [Custom Feedback](topbar-customfeedbackconfig.md) | [Info](user-userinfo.md) | +| [API](page-pageapi.md) | [Custom Search](topbar-customsearchconfig.md) | | +| [API Properties](page-pageapiproperties.md) | [Help Center Feedback](topbar-helpcenterfeedbackconfig.md) | | +| | [External Feedback](topbar-externalfeedbackconfig.md) | | +| | [Solution](topbar-solution.md) | | +| | [API](topbar-topbarapi.md) | | +| | [API Properties](topbar-topbarapiproperties.md) | ` | Return to the [Guides Index](../../../index.md). diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.callback.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-callback.md similarity index 62% rename from src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.callback.md rename to src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-callback.md index 4ec4327e5..84f7ac2a9 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.callback.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-callback.md @@ -37,12 +37,12 @@ Explore the attributes and behavior of Adobe Experience Cloud Interfaces: | Page | Topbar | User | | ------------------------------------------- | ---------------------------------------------------------- | ------------------------ | -| [Object with Href](page.objectwithhref.md) | [Custom Feedback](topbar.customfeedbackconfig.md) | [API](user.userapi.md) | -| [Object with Path](page.objectwithpath.md) | [Custom Search](topbar.customsearchconfig.md) | [Info](user.userinfo.md) | -| [API](page.pageapi.md) | [Help Center Feedback](topbar.helpcenterfeedbackconfig.md) | | -| [API Properties](page.pageapiproperties.md) | [External Feedback](topbar.externalfeedbackconfig.md) | | -| | [Solution](topbar.solution.md) | | -| | [API](topbar.topbarapi.md) | | -| | [API Properties](topbar.topbarapiproperties.md) | ` | +| [Object with Href](page-objectwithhref.md) | [Custom Feedback](topbar-customfeedbackconfig.md) | [API](user-userapi.md) | +| [Object with Path](page-objectwithpath.md) | [Custom Search](topbar-customsearchconfig.md) | [Info](user-userinfo.md) | +| [API](page-pageapi.md) | [Help Center Feedback](topbar-helpcenterfeedbackconfig.md) | | +| [API Properties](page-pageapiproperties.md) | [External Feedback](topbar-externalfeedbackconfig.md) | | +| | [Solution](topbar-solution.md) | | +| | [API](topbar-topbarapi.md) | | +| | [API Properties](topbar-topbarapiproperties.md) | ` | Return to the [Guides Index](../../../index.md). diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.customfeedbackconfig.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-customfeedbackconfig.md similarity index 62% rename from src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.customfeedbackconfig.md rename to src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-customfeedbackconfig.md index 8c510a471..00ab1187c 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.customfeedbackconfig.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-customfeedbackconfig.md @@ -23,7 +23,7 @@ ___ ### callback -• **callback**: *[Callback](topbar.callback.md)* +• **callback**: *[Callback](topbar-callback.md)* ___ @@ -49,12 +49,12 @@ Explore the attributes and behavior of Adobe Experience Cloud Interfaces: | Page | Topbar | User | | ------------------------------------------- | ---------------------------------------------------------- | ------------------------ | -| [Object with Href](page.objectwithhref.md) | [Callback](topbar.callback.md) | [API](user.userapi.md) | -| [Object with Path](page.objectwithpath.md) | [Custom Search](topbar.customsearchconfig.md) | [Info](user.userinfo.md) | -| [API](page.pageapi.md) | [Help Center Feedback](topbar.helpcenterfeedbackconfig.md) | | -| [API Properties](page.pageapiproperties.md) | [External Feedback](topbar.externalfeedbackconfig.md) | | -| | [Solution](topbar.solution.md) | | -| | [API](topbar.topbarapi.md) | | -| | [API Properties](topbar.topbarapiproperties.md) | ` | +| [Object with Href](page-objectwithhref.md) | [Callback](topbar-callback.md) | [API](user-userapi.md) | +| [Object with Path](page-objectwithpath.md) | [Custom Search](topbar-customsearchconfig.md) | [Info](user-userinfo.md) | +| [API](page-pageapi.md) | [Help Center Feedback](topbar-helpcenterfeedbackconfig.md) | | +| [API Properties](page-pageapiproperties.md) | [External Feedback](topbar-externalfeedbackconfig.md) | | +| | [Solution](topbar-solution.md) | | +| | [API](topbar-topbarapi.md) | | +| | [API Properties](topbar-topbarapiproperties.md) | ` | Return to the [Guides Index](../../../index.md). diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.customsearchconfig.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-customsearchconfig.md similarity index 66% rename from src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.customsearchconfig.md rename to src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-customsearchconfig.md index 361e6f8c8..4792c96d9 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.customsearchconfig.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-customsearchconfig.md @@ -17,7 +17,7 @@ title: 'Interface: CustomSearchConfig' ### `Optional` callback -• **callback**? : *[Callback](topbar.callback.md)* +• **callback**? : *[Callback](topbar-callback.md)* The callback to execute when the search icon is clicked. @@ -49,12 +49,12 @@ Explore the attributes and behavior of Adobe Experience Cloud Interfaces: | Page | Topbar | User | | ------------------------------------------- | ---------------------------------------------------------- | ------------------------ | -| [Object with Href](page.objectwithhref.md) | [Callback](topbar.callback.md) | [API](user.userapi.md) | -| [Object with Path](page.objectwithpath.md) | [Custom Feedback](topbar.customfeedbackconfig.md) | [Info](user.userinfo.md) | -| [API](page.pageapi.md) | [Custom Search](topbar.customsearchconfig.md) | | -| [API Properties](page.pageapiproperties.md) | [Help Center Feedback](topbar.helpcenterfeedbackconfig.md) | | -| | [External Feedback](topbar.externalfeedbackconfig.md) | | -| | [API](topbar.topbarapi.md) | | -| | [API Properties](topbar.topbarapiproperties.md) | ` | +| [Object with Href](page-objectwithhref.md) | [Callback](topbar-callback.md) | [API](user-userapi.md) | +| [Object with Path](page-objectwithpath.md) | [Custom Feedback](topbar-customfeedbackconfig.md) | [Info](user-userinfo.md) | +| [API](page-pageapi.md) | [Custom Search](topbar-customsearchconfig.md) | | +| [API Properties](page-pageapiproperties.md) | [Help Center Feedback](topbar-helpcenterfeedbackconfig.md) | | +| | [External Feedback](topbar-externalfeedbackconfig.md) | | +| | [API](topbar-topbarapi.md) | | +| | [API Properties](topbar-topbarapiproperties.md) | ` | Return to the [Guides Index](../../../index.md). diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.externalfeedbackconfig.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-externalfeedbackconfig.md similarity index 64% rename from src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.externalfeedbackconfig.md rename to src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-externalfeedbackconfig.md index 940d72924..bcf9beca1 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.externalfeedbackconfig.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-externalfeedbackconfig.md @@ -49,12 +49,12 @@ Explore the attributes and behavior of Adobe Experience Cloud Interfaces: | Page | Topbar | User | | ------------------------------------------- | ---------------------------------------------------------- | ------------------------ | -| [Object with Href](page.objectwithhref.md) | [Callback](topbar.callback.md) | [API](user.userapi.md) | -| [Object with Path](page.objectwithpath.md) | [Custom Feedback](topbar.customfeedbackconfig.md) | [Info](user.userinfo.md) | -| [API](page.pageapi.md) | [Custom Search](topbar.customsearchconfig.md) | | -| [API Properties](page.pageapiproperties.md) | [Help Center Feedback](topbar.helpcenterfeedbackconfig.md) | | -| | [Solution](topbar.solution.md) | | -| | [API](topbar.topbarapi.md) | | -| | [API Properties](topbar.topbarapiproperties.md) | ` | +| [Object with Href](page-objectwithhref.md) | [Callback](topbar-callback.md) | [API](user-userapi.md) | +| [Object with Path](page-objectwithpath.md) | [Custom Feedback](topbar-customfeedbackconfig.md) | [Info](user-userinfo.md) | +| [API](page-pageapi.md) | [Custom Search](topbar-customsearchconfig.md) | | +| [API Properties](page-pageapiproperties.md) | [Help Center Feedback](topbar-helpcenterfeedbackconfig.md) | | +| | [Solution](topbar-solution.md) | | +| | [API](topbar-topbarapi.md) | | +| | [API Properties](topbar-topbarapiproperties.md) | ` | Return to the [Guides Index](../../../index.md). diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.helpcenterfeedbackconfig.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-helpcenterfeedbackconfig.md similarity index 64% rename from src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.helpcenterfeedbackconfig.md rename to src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-helpcenterfeedbackconfig.md index 67ad78bc9..5eb560ff9 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.helpcenterfeedbackconfig.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-helpcenterfeedbackconfig.md @@ -49,12 +49,12 @@ Explore the attributes and behavior of Adobe Experience Cloud Interfaces: | Page | Topbar | User | | ------------------------------------------- | ----------------------------------------------------- | ------------------------ | -| [Object with Href](page.objectwithhref.md) | [Callback](topbar.callback.md) | [API](user.userapi.md) | -| [Object with Path](page.objectwithpath.md) | [Custom Feedback](topbar.customfeedbackconfig.md) | [Info](user.userinfo.md) | -| [API](page.pageapi.md) | [Custom Search](topbar.customsearchconfig.md) | | -| [API Properties](page.pageapiproperties.md) | [External Feedback](topbar.externalfeedbackconfig.md) | | -| | [Solution](topbar.solution.md) | | -| | [API](topbar.topbarapi.md) | | -| | [API Properties](topbar.topbarapiproperties.md) | ` | +| [Object with Href](page-objectwithhref.md) | [Callback](topbar-callback.md) | [API](user-userapi.md) | +| [Object with Path](page-objectwithpath.md) | [Custom Feedback](topbar-customfeedbackconfig.md) | [Info](user-userinfo.md) | +| [API](page-pageapi.md) | [Custom Search](topbar-customsearchconfig.md) | | +| [API Properties](page-pageapiproperties.md) | [External Feedback](topbar-externalfeedbackconfig.md) | | +| | [Solution](topbar-solution.md) | | +| | [API](topbar-topbarapi.md) | | +| | [API Properties](topbar-topbarapiproperties.md) | ` | Return to the [Guides Index](../../../index.md). diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.solution.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-solution.md similarity index 68% rename from src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.solution.md rename to src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-solution.md index 3700b924c..3714a5dfb 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.solution.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-solution.md @@ -51,12 +51,12 @@ Explore the attributes and behavior of Adobe Experience Cloud Interfaces: | Page | Topbar | User | | ------------------------------------------- | ---------------------------------------------------------- | ------------------------ | -| [Object with Href](page.objectwithhref.md) | [Callback](topbar.callback.md) | [API](user.userapi.md) | -| [Object with Path](page.objectwithpath.md) | [Custom Feedback](topbar.customfeedbackconfig.md) | [Info](user.userinfo.md) | -| [API](page.pageapi.md) | [Custom Search](topbar.customsearchconfig.md) | | -| [API Properties](page.pageapiproperties.md) | [Help Center Feedback](topbar.helpcenterfeedbackconfig.md) | | -| | [External Feedback](topbar.externalfeedbackconfig.md) | | -| | [API](topbar.topbarapi.md) | | -| | [API Properties](topbar.topbarapiproperties.md) | ` | +| [Object with Href](page-objectwithhref.md) | [Callback](topbar-callback.md) | [API](user-userapi.md) | +| [Object with Path](page-objectwithpath.md) | [Custom Feedback](topbar-customfeedbackconfig.md) | [Info](user-userinfo.md) | +| [API](page-pageapi.md) | [Custom Search](topbar-customsearchconfig.md) | | +| [API Properties](page-pageapiproperties.md) | [Help Center Feedback](topbar-helpcenterfeedbackconfig.md) | | +| | [External Feedback](topbar-externalfeedbackconfig.md) | | +| | [API](topbar-topbarapi.md) | | +| | [API Properties](topbar-topbarapiproperties.md) | ` | Return to the [Guides Index](../../../index.md). diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.topbarapi.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapi.md similarity index 72% rename from src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.topbarapi.md rename to src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapi.md index c5cf38ec1..f8ef79f54 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.topbarapi.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapi.md @@ -13,7 +13,7 @@ Defines page-level APIs available to solutions. ## Hierarchy -* [TopbarAPIProperties](topbar.topbarapiproperties.md) +* [TopbarAPIProperties](topbar-topbarapiproperties.md) ↳ **TopbarAPI** @@ -23,7 +23,7 @@ Defines page-level APIs available to solutions. • **customEnvLabel**: *string* -*Inherited from [TopbarAPIProperties.customEnvLabel](topbar.topbarapiproperties.md#customenvlabel)* +*Inherited from [TopbarAPIProperties.customEnvLabel](topbar-topbarapiproperties.md#customenvlabel)* Gets or sets a custom environment label in the shell. @@ -37,9 +37,9 @@ ___ ### solution -• **solution**: *[Solution](topbar.solution.md)* +• **solution**: *[Solution](topbar-solution.md)* -*Inherited from [TopbarApiProperties.solution](topbar.topbarapiproperties.md#solution).* +*Inherited from [TopbarApiProperties.solution](topbar-topbarapiproperties.md#solution).* Configuration for solution name and hero. @@ -59,7 +59,7 @@ ___ • **workspaces**: *WorkspaceMenu[]* -*Inherited from [TopbarApiProperties](topbar.topbarapiproperties.md#workspaces).* +*Inherited from [TopbarApiProperties](topbar-topbarapiproperties.md#workspaces).* Configuration for the Shell workspaces. Workspace names should be unique, and localized using the unified-shell locale prior to setting runtime.workspaces. @@ -97,7 +97,7 @@ topbar.workspaces = [ ### onHeroClick -▸ **onHeroClick**(`callback`: [Callback](topbar.callback.md)): *void* +▸ **onHeroClick**(`callback`: [Callback](topbar-callback.md)): *void* Registers a callback to execute when the hero (solution) icon in the upper lefthand corner of the Shell is clicked. @@ -105,7 +105,7 @@ Registers a callback to execute when the hero (solution) icon in the upper lefth | Name | Type | Description | | ---------- | ------------------------------ | ------------------------ | -| `callback` | [Callback](topbar.callback.md) | The callback to execute. | +| `callback` | [Callback](topbar-callback.md) | The callback to execute. | **Returns:** *void* @@ -113,7 +113,7 @@ ___ ### setCustomSearch -▸ **setCustomSearch**(`config`: [CustomSearchConfig](topbar.customsearchconfig.md) | null): *void* +▸ **setCustomSearch**(`config`: [CustomSearchConfig](topbar-customsearchconfig.md) | null): *void* Determines whether or not to enable the custom search property, and enacts a callback when the custom search icon is clicked. @@ -121,7 +121,7 @@ Determines whether or not to enable the custom search property, and enacts a cal | Name | Type | | -------- | -------------------------------------------------------------- | -| `config` | [CustomSearchConfig](topbar.customsearchconfig.md) | null | +| `config` | [CustomSearchConfig](topbar-customsearchconfig.md) | null | **Returns:** *void* @@ -129,7 +129,7 @@ ___ ### setFeedbackButton -▸ **setFeedbackButton**(`config`: [CustomFeedbackConfig](topbar.customfeedbackconfig.md) | [HelpCenterFeedbackConfig](topbar.helpcenterfeedbackconfig.md) | [ExternalFeedbackConfig](topbar.externalfeedbackconfig.md) | null): *void* +▸ **setFeedbackButton**(`config`: [CustomFeedbackConfig](topbar-customfeedbackconfig.md) | [HelpCenterFeedbackConfig](topbar-helpcenterfeedbackconfig.md) | [ExternalFeedbackConfig](topbar-externalfeedbackconfig.md) | null): *void* Determines whether or not to enable a feedback button. @@ -137,7 +137,7 @@ Determines whether or not to enable a feedback button. | Name | Type | | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `config` | [CustomFeedbackConfig](topbar.customfeedbackconfig.md) | [HelpCenterFeedbackConfig](topbar.helpcenterfeedbackconfig.md) | [ExternalFeedbackConfig](topbar.externalfeedbackconfig.md) | null | +| `config` | [CustomFeedbackConfig](topbar-customfeedbackconfig.md) | [HelpCenterFeedbackConfig](topbar-helpcenterfeedbackconfig.md) | [ExternalFeedbackConfig](topbar-externalfeedbackconfig.md) | null | **Returns:** *void* @@ -153,12 +153,12 @@ Explore the attributes and behavior of Adobe Experience Cloud Interfaces: | Page | Topbar | User | | ------------------------------------------- | ---------------------------------------------------------- | ------------------------ | -| [Object with Href](page.objectwithhref.md) | [Callback](topbar.callback.md) | [API](user.userapi.md) | -| [Object with Path](page.objectwithpath.md) | [Custom Feedback](topbar.customfeedbackconfig.md) | [Info](user.userinfo.md) | -| [API](page.pageapi.md) | [Custom Search](topbar.customsearchconfig.md) | | -| [API Properties](page.pageapiproperties.md) | [Help Center Feedback](topbar.helpcenterfeedbackconfig.md) | | -| | [External Feedback](topbar.externalfeedbackconfig.md) | | -| | [Solution](topbar.solution.md) | | -| | [API Properties](topbar.topbarapiproperties.md) | ` | +| [Object with Href](page-objectwithhref.md) | [Callback](topbar-callback.md) | [API](user-userapi.md) | +| [Object with Path](page-objectwithpath.md) | [Custom Feedback](topbar-customfeedbackconfig.md) | [Info](user-userinfo.md) | +| [API](page-pageapi.md) | [Custom Search](topbar-customsearchconfig.md) | | +| [API Properties](page-pageapiproperties.md) | [Help Center Feedback](topbar-helpcenterfeedbackconfig.md) | | +| | [External Feedback](topbar-externalfeedbackconfig.md) | | +| | [Solution](topbar-solution.md) | | +| | [API Properties](topbar-topbarapiproperties.md) | ` | Return to the [Guides Index](../../../index.md). diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.topbarapiproperties.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapiproperties.md similarity index 76% rename from src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.topbarapiproperties.md rename to src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapiproperties.md index 946a69295..91a3b3fca 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar.topbarapiproperties.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapiproperties.md @@ -13,7 +13,7 @@ title: 'Interface: TopbarAPIProperties' * **TopbarAPIProperties** - ↳ [TopbarAPI](topbar.topbarapi.md) + ↳ [TopbarAPI](topbar-topbarapi.md) ## Properties @@ -33,7 +33,7 @@ ___ ### solution -• **solution**: *[Solution](topbar.solution.md)* +• **solution**: *[Solution](topbar-solution.md)* Configuration for solution name and hero. @@ -97,12 +97,12 @@ Explore the attributes and behavior of Adobe Experience Cloud Interfaces: | Page | Topbar | User | | ------------------------------------------- | ---------------------------------------------------------- | ------------------------ | -| [Object with Href](page.objectwithhref.md) | [Callback](topbar.callback.md) | [API](user.userapi.md) | -| [Object with Path](page.objectwithpath.md) | [Custom Feedback](topbar.customfeedbackconfig.md) | [Info](user.userinfo.md) | -| [API](page.pageapi.md) | [Custom Search](topbar.customsearchconfig.md) | | -| [API Properties](page.pageapiproperties.md) | [Help Center Feedback](topbar.helpcenterfeedbackconfig.md) | | -| | [External Feedback](topbar.externalfeedbackconfig.md) | | -| | [Solution](topbar.solution.md) | | -| | [API](topbar.topbarapi.md) | | +| [Object with Href](page-objectwithhref.md) | [Callback](topbar-callback.md) | [API](user-userapi.md) | +| [Object with Path](page-objectwithpath.md) | [Custom Feedback](topbar-customfeedbackconfig.md) | [Info](user-userinfo.md) | +| [API](page-pageapi.md) | [Custom Search](topbar-customsearchconfig.md) | | +| [API Properties](page-pageapiproperties.md) | [Help Center Feedback](topbar-helpcenterfeedbackconfig.md) | | +| | [External Feedback](topbar-externalfeedbackconfig.md) | | +| | [Solution](topbar-solution.md) | | +| | [API](topbar-topbarapi.md) | | Return to the [Guides Index](../../../index.md). diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/user.userapi.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/user-userapi.md similarity index 82% rename from src/pages/guides/app_builder_guides/exc_app/interfaces/user.userapi.md rename to src/pages/guides/app_builder_guides/exc_app/interfaces/user-userapi.md index 1d5162167..d0831c96b 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/user.userapi.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/user-userapi.md @@ -158,13 +158,13 @@ Explore the attributes and behavior of Adobe Experience Cloud Interfaces: | Page | Topbar | User | | ------------------------------------------- | ---------------------------------------------------------- | ------------------------ | -| [Object with Href](page.objectwithhref.md) | [Callback](topbar.callback.md) | [Info](user.userinfo.md) | -| [Object with Path](page.objectwithpath.md) | [Custom Feedback](topbar.customfeedbackconfig.md) | | -| [API](page.pageapi.md) | [Custom Search](topbar.customsearchconfig.md) | | -| [API Properties](page.pageapiproperties.md) | [Help Center Feedback](topbar.helpcenterfeedbackconfig.md) | | -| | [External Feedback](topbar.externalfeedbackconfig.md) | | -| | [Solution](topbar.solution.md) | | -| | [API](topbar.topbarapi.md) | | -| | [API Properties](topbar.topbarapiproperties.md) | ` | +| [Object with Href](page-objectwithhref.md) | [Callback](topbar-callback.md) | [Info](user-userinfo.md) | +| [Object with Path](page-objectwithpath.md) | [Custom Feedback](topbar-customfeedbackconfig.md) | | +| [API](page-pageapi.md) | [Custom Search](topbar-customsearchconfig.md) | | +| [API Properties](page-pageapiproperties.md) | [Help Center Feedback](topbar-helpcenterfeedbackconfig.md) | | +| | [External Feedback](topbar-externalfeedbackconfig.md) | | +| | [Solution](topbar-solution.md) | | +| | [API](topbar-topbarapi.md) | | +| | [API Properties](topbar-topbarapiproperties.md) | ` | Return to the [Guides Index](../../../index.md). diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/user.userinfo.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/user-userinfo.md similarity index 67% rename from src/pages/guides/app_builder_guides/exc_app/interfaces/user.userinfo.md rename to src/pages/guides/app_builder_guides/exc_app/interfaces/user-userinfo.md index 79cae1c3b..a508e7c5c 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/user.userinfo.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/user-userinfo.md @@ -79,13 +79,13 @@ Explore the attributes and behavior of Adobe Experience Cloud Interfaces: | Page | Topbar | User | | ------------------------------------------- | ---------------------------------------------------------- | ------------------------ | -| [Object with Href](page.objectwithhref.md) | [Callback](topbar.callback.md) | [API](user.userapi.md) | -| [Object with Path](page.objectwithpath.md) | [Custom Feedback](topbar.customfeedbackconfig.md) | [Info](user.userinfo.md) | -| [API](page.pageapi.md) | [Custom Search](topbar.customsearchconfig.md) | | -| [API Properties](page.pageapiproperties.md) | [Help Center Feedback](topbar.helpcenterfeedbackconfig.md) | | -| | [External Feedback](topbar.externalfeedbackconfig.md) | | -| | [Solution](topbar.solution.md) | | -| | [API](topbar.topbarapi.md) | | -| | [API Properties](topbar.topbarapiproperties.md) | ` | +| [Object with Href](page-objectwithhref.md) | [Callback](topbar-callback.md) | [API](user-userapi.md) | +| [Object with Path](page-objectwithpath.md) | [Custom Feedback](topbar-customfeedbackconfig.md) | [Info](user-userinfo.md) | +| [API](page-pageapi.md) | [Custom Search](topbar-customsearchconfig.md) | | +| [API Properties](page-pageapiproperties.md) | [Help Center Feedback](topbar-helpcenterfeedbackconfig.md) | | +| | [External Feedback](topbar-externalfeedbackconfig.md) | | +| | [Solution](topbar-solution.md) | | +| | [API](topbar-topbarapi.md) | | +| | [API Properties](topbar-topbarapiproperties.md) | ` | Return to the [Guides Index](../../../index.md). diff --git a/src/pages/guides/app_builder_guides/exc_app/migrate_app_to_exp_cloud_spa.md b/src/pages/guides/app_builder_guides/exc_app/migrate-app-to-exp-cloud-spa.md similarity index 93% rename from src/pages/guides/app_builder_guides/exc_app/migrate_app_to_exp_cloud_spa.md rename to src/pages/guides/app_builder_guides/exc_app/migrate-app-to-exp-cloud-spa.md index 5dfd9bfa6..2a7d6ef20 100644 --- a/src/pages/guides/app_builder_guides/exc_app/migrate_app_to_exp_cloud_spa.md +++ b/src/pages/guides/app_builder_guides/exc_app/migrate-app-to-exp-cloud-spa.md @@ -26,7 +26,7 @@ Standalone applications will **not** have the `App Builder ExcShell` sub-heading ## Understanding the difference -The [Extension Migration Guide](../extensions/extension_migration_guide.md#old-file-structure) details the differences between standalone applications and DX Experience Cloud v1 SPAs, provides an overview of the directory structure for DX Experience Cloud v1 SPAs )under [New file structure](../extensions/extension_migration_guide.md#new-file-structure)), and shows how to configure extension points. +The [Extension Migration Guide](../extensions/extension-migration-guide.md#old-file-structure) details the differences between standalone applications and DX Experience Cloud v1 SPAs, provides an overview of the directory structure for DX Experience Cloud v1 SPAs )under [New file structure](../extensions/extension-migration-guide.md#new-file-structure)), and shows how to configure extension points. ## Migration steps @@ -114,6 +114,6 @@ The [Extension Migration Guide](../extensions/extension_migration_guide.md#old-f ## Next steps -Explore migration details in the [Extension Migration Guide](../extensions/extension_migration_guide.md). +Explore migration details in the [Extension Migration Guide](../extensions/extension-migration-guide.md). Return to the [Guides Index](../../index.md). diff --git a/src/pages/guides/app_builder_guides/exc_app/modules/index.md b/src/pages/guides/app_builder_guides/exc_app/modules/index.md index 8659ed68a..bf24c7f44 100644 --- a/src/pages/guides/app_builder_guides/exc_app/modules/index.md +++ b/src/pages/guides/app_builder_guides/exc_app/modules/index.md @@ -91,13 +91,13 @@ Explore the attributes and behavior of Adobe Experience Cloud Interfaces: | Page | Topbar | User | | ------------------------------------------------ | ---------------------------------------------------------- | ----------------------------- | -| [Object with Href](../interfaces/page.objectwithhref.md) | [Callback](../interfaces/topbar.callback.md) | [User API](../interfaces/user.userapi.md) | -| [Object with Path](../interfaces/page.objectwithpath.md) | [Custom Feedback](../interfaces/topbar.customfeedbackconfig.md) | [User Info](../interfaces/user.userinfo.md) | -| [Page API](../interfaces/page.pageapi.md) | [Custom Search](../interfaces/topbar.customsearchconfig.md) | | -| [Page API Properties](../interfaces/page.pageapiproperties.md) | [Help Center Feedback](../interfaces/topbar.helpcenterfeedbackconfig.md) | | -| | [External Feedback](../interfaces/topbar.externalfeedbackconfig.md) | | -| | [Solution](../interfaces/topbar.solution.md) | | -| | [Topbar API](../interfaces/topbar.topbarapi.md) | | -| | [Topbar API Properties](../interfaces/topbar.topbarapiproperties.md) | | +| [Object with Href](../interfaces/page-objectwithhref.md) | [Callback](../interfaces/topbar-callback.md) | [User API](../interfaces/user-userapi.md) | +| [Object with Path](../interfaces/page-objectwithpath.md) | [Custom Feedback](../interfaces/topbar-customfeedbackconfig.md) | [User Info](../interfaces/user-userinfo.md) | +| [Page API](../interfaces/page-pageapi.md) | [Custom Search](../interfaces/topbar-customsearchconfig.md) | | +| [Page API Properties](../interfaces/page-pageapiproperties.md) | [Help Center Feedback](../interfaces/topbar-helpcenterfeedbackconfig.md) | | +| | [External Feedback](../interfaces/topbar-externalfeedbackconfig.md) | | +| | [Solution](../interfaces/topbar-solution.md) | | +| | [Topbar API](../interfaces/topbar-topbarapi.md) | | +| | [Topbar API Properties](../interfaces/topbar-topbarapiproperties.md) | | Return to the [Guides Index](../../../index.md). diff --git a/src/pages/guides/app_builder_guides/exc_app/modules/page.md b/src/pages/guides/app_builder_guides/exc_app/modules/page.md index a4b0a1507..2a92e95ea 100644 --- a/src/pages/guides/app_builder_guides/exc_app/modules/page.md +++ b/src/pages/guides/app_builder_guides/exc_app/modules/page.md @@ -13,16 +13,16 @@ Page APIs let solutions interact with and personalize the main page, for example ### Interfaces -- [ObjectWithHref](../interfaces/page.objectwithhref.md) -- [ObjectWithPath](../interfaces/page.objectwithpath.md) -- [PageApi](../interfaces/page.pageapi.md) -- [PageApiProperties](../interfaces/page.pageapiproperties.md) +- [ObjectWithHref](../interfaces/page-objectwithhref.md) +- [ObjectWithPath](../interfaces/page-objectwithpath.md) +- [PageApi](../interfaces/page-pageapi.md) +- [PageApiProperties](../interfaces/page-pageapiproperties.md) ## Type aliases ### LocationLike -Ƭ **LocationLike**: *[ObjectWithHref](../interfaces/page.objectwithhref.md) | [ObjectWithPath](../interfaces/page.objectwithpath.md)* +Ƭ **LocationLike**: *[ObjectWithHref](../interfaces/page-objectwithhref.md) | [ObjectWithPath](../interfaces/page-objectwithpath.md)* Defines the location-like object for which to get the shell URL. You may specify either a path or an absolute URL. @@ -38,7 +38,7 @@ import page from '@adobe/exc-app/page'; ***Default export:*** -[PageApi](../interfaces/page.pageapi.md) +[PageApi](../interfaces/page-pageapi.md) ***Usage:*** @@ -74,13 +74,13 @@ Explore the attributes and behavior of Adobe Experience Cloud Interfaces: | Page | Topbar | User | | ------------------------------------------------ | ---------------------------------------------------------- | ----------------------------- | -| [Object with Href](../interfaces/page.objectwithhref.md) | [Callback](../interfaces/topbar.callback.md) | [User API](../interfaces/user.userapi.md) | -| [Object with Path](../interfaces/page.objectwithpath.md) | [Custom Feedback](../interfaces/topbar.customfeedbackconfig.md) | [User Info](../interfaces/user.userinfo.md) | -| [Page API](../interfaces/page.pageapi.md) | [Custom Search](../interfaces/topbar.customsearchconfig.md) | | -| [Page API Properties](../interfaces/page.pageapiproperties.md) | [Help Center Feedback](../interfaces/topbar.helpcenterfeedbackconfig.md) | | -| | [External Feedback](../interfaces/topbar.externalfeedbackconfig.md) | | -| | [Solution](../interfaces/topbar.solution.md) | | -| | [Topbar API](../interfaces/topbar.topbarapi.md) | | -| | [Topbar API Properties](../interfaces/topbar.topbarapiproperties.md) | | +| [Object with Href](../interfaces/page-objectwithhref.md) | [Callback](../interfaces/topbar-callback.md) | [User API](../interfaces/user-userapi.md) | +| [Object with Path](../interfaces/page-objectwithpath.md) | [Custom Feedback](../interfaces/topbar-customfeedbackconfig.md) | [User Info](../interfaces/user-userinfo.md) | +| [Page API](../interfaces/page-pageapi.md) | [Custom Search](../interfaces/topbar-customsearchconfig.md) | | +| [Page API Properties](../interfaces/page-pageapiproperties.md) | [Help Center Feedback](../interfaces/topbar-helpcenterfeedbackconfig.md) | | +| | [External Feedback](../interfaces/topbar-externalfeedbackconfig.md) | | +| | [Solution](../interfaces/topbar-solution.md) | | +| | [Topbar API](../interfaces/topbar-topbarapi.md) | | +| | [Topbar API Properties](../interfaces/topbar-topbarapiproperties.md) | | Return to the [Guides Index](../../../index.md). diff --git a/src/pages/guides/app_builder_guides/exc_app/modules/topbar.md b/src/pages/guides/app_builder_guides/exc_app/modules/topbar.md index 466a25585..c40aae1e4 100644 --- a/src/pages/guides/app_builder_guides/exc_app/modules/topbar.md +++ b/src/pages/guides/app_builder_guides/exc_app/modules/topbar.md @@ -13,14 +13,14 @@ Topbar APIs let solutions interact with and personalize the top bar, for example ### Interfaces -- [Callback](../interfaces/topbar.callback.md) -- [CustomFeedbackConfig](../interfaces/topbar.customfeedbackconfig.md) -- [CustomSearchConfig](../interfaces/topbar.customsearchconfig.md) -- [ExternalFeedbackConfig](../interfaces/topbar.externalfeedbackconfig.md) -- [HelpCenterFeedbackConfig](../interfaces/topbar.helpcenterfeedbackconfig.md) -- [Solution](../interfaces/topbar.solution.md) -- [TopbarApi](../interfaces/topbar.topbarapi.md) -- [TopbarApiProperties](../interfaces/topbar.topbarapiproperties.md) +- [Callback](../interfaces/topbar-callback.md) +- [CustomFeedbackConfig](../interfaces/topbar-customfeedbackconfig.md) +- [CustomSearchConfig](../interfaces/topbar-customsearchconfig.md) +- [ExternalFeedbackConfig](../interfaces/topbar-externalfeedbackconfig.md) +- [HelpCenterFeedbackConfig](../interfaces/topbar-helpcenterfeedbackconfig.md) +- [Solution](../interfaces/topbar-solution.md) +- [TopbarApi](../interfaces/topbar-topbarapi.md) +- [TopbarApiProperties](../interfaces/topbar-topbarapiproperties.md) ***Import:*** @@ -30,7 +30,7 @@ import topbar from '@adobe/exc-app/topbar'; ***Default export:*** -[TopbarAPI](../interfaces/topbar.topbarapi.md) +[TopbarAPI](../interfaces/topbar-topbarapi.md) ***Usage:*** @@ -52,13 +52,13 @@ Explore the attributes and behavior of Adobe Experience Cloud Interfaces: | Page | Topbar | User | | ------------------------------------------------ | ---------------------------------------------------------- | ----------------------------- | -| [Object with Href](../interfaces/page.objectwithhref.md) | [Callback](../interfaces/topbar.callback.md) | [User API](../interfaces/user.userapi.md) | -| [Object with Path](../interfaces/page.objectwithpath.md) | [Custom Feedback](../interfaces/topbar.customfeedbackconfig.md) | [User Info](../interfaces/user.userinfo.md) | -| [Page API](../interfaces/page.pageapi.md) | [Custom Search](../interfaces/topbar.customsearchconfig.md) | | -| [Page API Properties](../interfaces/page.pageapiproperties.md) | [Help Center Feedback](../interfaces/topbar.helpcenterfeedbackconfig.md) | | -| | [External Feedback](../interfaces/topbar.externalfeedbackconfig.md) | | -| | [Solution](../interfaces/topbar.solution.md) | | -| | [Topbar API](../interfaces/topbar.topbarapi.md) | | -| | [Topbar API Properties](../interfaces/topbar.topbarapiproperties.md) | | +| [Object with Href](../interfaces/page-objectwithhref.md) | [Callback](../interfaces/topbar-callback.md) | [User API](../interfaces/user-userapi.md) | +| [Object with Path](../interfaces/page-objectwithpath.md) | [Custom Feedback](../interfaces/topbar-customfeedbackconfig.md) | [User Info](../interfaces/user-userinfo.md) | +| [Page API](../interfaces/page-pageapi.md) | [Custom Search](../interfaces/topbar-customsearchconfig.md) | | +| [Page API Properties](../interfaces/page-pageapiproperties.md) | [Help Center Feedback](../interfaces/topbar-helpcenterfeedbackconfig.md) | | +| | [External Feedback](../interfaces/topbar-externalfeedbackconfig.md) | | +| | [Solution](../interfaces/topbar-solution.md) | | +| | [Topbar API](../interfaces/topbar-topbarapi.md) | | +| | [Topbar API Properties](../interfaces/topbar-topbarapiproperties.md) | | Return to the [Guides Index](../../../index.md). diff --git a/src/pages/guides/app_builder_guides/exc_app/modules/user.md b/src/pages/guides/app_builder_guides/exc_app/modules/user.md index f201791da..650da08e0 100644 --- a/src/pages/guides/app_builder_guides/exc_app/modules/user.md +++ b/src/pages/guides/app_builder_guides/exc_app/modules/user.md @@ -19,7 +19,7 @@ import user from '@adobe/exc-app/user'; ***Default export:*** -[UserApi](../interfaces/user.userapi.md) +[UserApi](../interfaces/user-userapi.md) ***Usage:*** @@ -75,13 +75,13 @@ Explore the attributes and behavior of Adobe Experience Cloud Interfaces: | Page | Topbar | User | | ------------------------------------------------ | ---------------------------------------------------------- | ----------------------------- | -| [Object with Href](../interfaces/page.objectwithhref.md) | [Callback](../interfaces/topbar.callback.md) | [User API](../interfaces/user.userapi.md) | -| [Object with Path](../interfaces/page.objectwithpath.md) | [Custom Feedback](../interfaces/topbar.customfeedbackconfig.md) | [User Info](../interfaces/user.userinfo.md) | -| [Page API](../interfaces/page.pageapi.md) | [Custom Search](../interfaces/topbar.customsearchconfig.md) | | -| [Page API Properties](../interfaces/page.pageapiproperties.md) | [Help Center Feedback](../interfaces/topbar.helpcenterfeedbackconfig.md) | | -| | [External Feedback](../interfaces/topbar.externalfeedbackconfig.md) | | -| | [Solution](../interfaces/topbar.solution.md) | | -| | [Topbar API](../interfaces/topbar.topbarapi.md) | | -| | [Topbar API Properties](../interfaces/topbar.topbarapiproperties.md) | | +| [Object with Href](../interfaces/page-objectwithhref.md) | [Callback](../interfaces/topbar-callback.md) | [User API](../interfaces/user-userapi.md) | +| [Object with Path](../interfaces/page-objectwithpath.md) | [Custom Feedback](../interfaces/topbar-customfeedbackconfig.md) | [User Info](../interfaces/user-userinfo.md) | +| [Page API](../interfaces/page-pageapi.md) | [Custom Search](../interfaces/topbar-customsearchconfig.md) | | +| [Page API Properties](../interfaces/page-pageapiproperties.md) | [Help Center Feedback](../interfaces/topbar-helpcenterfeedbackconfig.md) | | +| | [External Feedback](../interfaces/topbar-externalfeedbackconfig.md) | | +| | [Solution](../interfaces/topbar-solution.md) | | +| | [Topbar API](../interfaces/topbar-topbarapi.md) | | +| | [Topbar API Properties](../interfaces/topbar-topbarapiproperties.md) | | Return to the [Guides Index](../../../index.md). diff --git a/src/pages/guides/app_builder_guides/extensions/extension_migration_guide.md b/src/pages/guides/app_builder_guides/extensions/extension-migration-guide.md similarity index 99% rename from src/pages/guides/app_builder_guides/extensions/extension_migration_guide.md rename to src/pages/guides/app_builder_guides/extensions/extension-migration-guide.md index 6e00577ed..63402b6da 100644 --- a/src/pages/guides/app_builder_guides/extensions/extension_migration_guide.md +++ b/src/pages/guides/app_builder_guides/extensions/extension-migration-guide.md @@ -77,7 +77,7 @@ Please follow these steps to migrate your application: ### 1. Update tooling -Make sure your local tooling and environment setup is current, as described [here](../../../get_started/app_builder_get_started/set_up.md#local-environment-setup). +Make sure your local tooling and environment setup is current, as described [here](../../../get_started/app_builder_get_started/set-up.md#local-environment-setup). ### 2. Update configuration diff --git a/src/pages/guides/app_builder_guides/extensions/extensions.md b/src/pages/guides/app_builder_guides/extensions/extensions.md index 8c5063446..3824ca3e4 100644 --- a/src/pages/guides/app_builder_guides/extensions/extensions.md +++ b/src/pages/guides/app_builder_guides/extensions/extensions.md @@ -56,11 +56,11 @@ These instructions will show you how to set up extension point information in ne ### New projects -The instructions in [Creating your First App Builder Application](../../../get_started/app_builder_get_started/first_app.md) show how to set up extension point information by default in App Builder projects. +The instructions in [Creating your First App Builder Application](../../../get_started/app_builder_get_started/first-app.md) show how to set up extension point information by default in App Builder projects. ### Migrating projects and editing endpoints -If you would like to migrate an App Builder application created before July 28, 2021 or edit an application's endpoints, please follow the [Extension Migration Guide](extension_migration_guide.md). +If you would like to migrate an App Builder application created before July 28, 2021 or edit an application's endpoints, please follow the [Extension Migration Guide](extension-migration-guide.md). ## UI extensibility @@ -72,6 +72,6 @@ A complete discussion and hands-on sample project may be found in the [Adobe Dev Explore [Adobe Developer documentation for UI Extensibility](https://developer.adobe.com/uix/docs/). -Continue to the [Extension Migration Guide](extension_migration_guide.md). +Continue to the [Extension Migration Guide](extension-migration-guide.md). Return to the [Guides Index](../../index.md). diff --git a/src/pages/guides/app_builder_guides/index.md b/src/pages/guides/app_builder_guides/index.md index 33d4eb5a2..85a3da5b7 100644 --- a/src/pages/guides/app_builder_guides/index.md +++ b/src/pages/guides/app_builder_guides/index.md @@ -13,8 +13,8 @@ Welcome to the App Builder Guides section. Here you'll find comprehensive docume ## Architecture and Development -* [Architecture Overview](architecture_overview/architecture_overview.md) -* [Application State](application_state.md) +* [Architecture Overview](architecture_overview/architecture-overview.md) +* [Application State](application-state.md) * [Development](development.md) * [Distribution](distribution.md) * [Optimization](optimization.md) @@ -25,13 +25,13 @@ Welcome to the App Builder Guides section. Here you'll find comprehensive docume * [Configuration](configuration/configuration.md) * [Deployment](deployment/deployment.md) * [Application Logging](application_logging/logging.md) -* [Events](events/custom_events.md) +* [Events](events/custom-events.md) * [Extensions](extensions/extensions.md) * [Security](security/index.md) ## Integration -* [Adobe Experience Cloud Integration](exc_app/aec_integration.md) +* [Adobe Experience Cloud Integration](exc_app/aec-integration.md) ## Next step diff --git a/src/pages/guides/app_builder_guides/optimization.md b/src/pages/guides/app_builder_guides/optimization.md index dd3d567fa..4b7dfa8ee 100644 --- a/src/pages/guides/app_builder_guides/optimization.md +++ b/src/pages/guides/app_builder_guides/optimization.md @@ -33,7 +33,7 @@ When you test this functionality for web action using Postman or a web browser w ## Returning large response payloads -An Adobe I/O Runtime action can return a [response payload of 1MB](../runtime_guides/system_settings.md) - enough for most use cases. If your action will return a larger payload, we provide a scalable solution with [App Builder Files SDK](https://github.com/adobe/aio-lib-files). It allows you to [persist a binary file to the blob storage](https://github.com/adobe/aio-lib-files/blob/master/doc/api.md#Files+write), obtain [a temporary downloadable URL](https://github.com/adobe/aio-lib-files/blob/master/doc/api.md#Files+generatePresignURL) and return an [HTTP Redirect response](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/302) to the file with this URL. Here is a demonstration: +An Adobe I/O Runtime action can return a [response payload of 1MB](../runtime_guides/system-settings.md) - enough for most use cases. If your action will return a larger payload, we provide a scalable solution with [App Builder Files SDK](https://github.com/adobe/aio-lib-files). It allows you to [persist a binary file to the blob storage](https://github.com/adobe/aio-lib-files/blob/master/doc/api.md#Files+write), obtain [a temporary downloadable URL](https://github.com/adobe/aio-lib-files/blob/master/doc/api.md#Files+generatePresignURL) and return an [HTTP Redirect response](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/302) to the file with this URL. Here is a demonstration: ```javascript const fileLocation = '/private-dir/large-image.png' diff --git a/src/pages/guides/app_builder_guides/security/index.md b/src/pages/guides/app_builder_guides/security/index.md index 04326bbac..0c426df33 100644 --- a/src/pages/guides/app_builder_guides/security/index.md +++ b/src/pages/guides/app_builder_guides/security/index.md @@ -15,11 +15,11 @@ App Builder saves Developers' time with an [SDK](https://github.com/adobe/aio-sd ## Securing access to App Builder applications -All interactions with [Adobe Product APIs](https://developer.adobe.com/apis) need to be authenticated against Adobe Identity Management Services (IMS). [Understanding Authentication](understanding_authentication.md) outlines Adobe's approach to authentication, with links to in-depth resources and a code library. +All interactions with [Adobe Product APIs](https://developer.adobe.com/apis) need to be authenticated against Adobe Identity Management Services (IMS). [Understanding Authentication](understanding-authentication.md) outlines Adobe's approach to authentication, with links to in-depth resources and a code library. ### Adobe IMS support for App Builder applications -App Builder [SDK](https://github.com/adobe/aio-sdk) and [CLI](https://github.com/adobe/aio-cli) help developers [bootstrap applications](../../../get_started/app_builder_get_started/set_up.md) easily from templates, using `aio app init`. Included are templates for Runtime web actions, which integrate with [Adobe Product APIs](https://developer.adobe.com/apis) that can be extended using App Builder. +App Builder [SDK](https://github.com/adobe/aio-sdk) and [CLI](https://github.com/adobe/aio-cli) help developers [bootstrap applications](../../../get_started/app_builder_get_started/set-up.md) easily from templates, using `aio app init`. Included are templates for Runtime web actions, which integrate with [Adobe Product APIs](https://developer.adobe.com/apis) that can be extended using App Builder. Any generated action is initialized with boilerplate code based on App Builder [SDK libraries](https://github.com/adobe/aio-sdk). Out of the box, these steps are implemented: - **Validation** that an Adobe IMS bearer token has been passed as Authorization header of the request that invoked the action @@ -50,10 +50,10 @@ These SPAs are business-to-employee custom applications that deploy into the [Ex ![SPA Access Sequence Diagram](../../../images/security-spa-access-sequence-diagram.png) The SPA front end interacts with Runtime web actions on specific events triggered at UI level. -In this scenario, the Experience Cloud Shell exposes a [client-side API](../exc_app/aec_integration.md), which can be used by the SPA to obtain the OAuth token generated for the logged-in user. +In this scenario, the Experience Cloud Shell exposes a [client-side API](../exc_app/aec-integration.md), which can be used by the SPA to obtain the OAuth token generated for the logged-in user. This token will be used by back-end Runtime actions to call [Adobe Product APIs](https://developer.adobe.com/apis), which need to be integrated in the application. -SPAs bootstrapped from the [CLI](https://github.com/adobe/aio-cli) using `aio app init` automatically include a [React-Spectrum](https://react-spectrum.adobe.com/)-based front end that integrates with the Experience Cloud Shell [client-side API](../exc_app/aec_integration.md), and sends the user OAuth token from the client to the invoked Runtime actions. +SPAs bootstrapped from the [CLI](https://github.com/adobe/aio-cli) using `aio app init` automatically include a [React-Spectrum](https://react-spectrum.adobe.com/)-based front end that integrates with the Experience Cloud Shell [client-side API](../exc_app/aec-integration.md), and sends the user OAuth token from the client to the invoked Runtime actions. ### Authentication and authorization handling @@ -151,7 +151,7 @@ Please use a different variable until this issue is resolved. ### I/O Runtime Specific guidelines -[Security guidelines for I/O Runtime](../../runtime_guides/security_general.md) generally apply to the back-end actions of App Builder applications. The guidelines below are specific to App Builder applications. +[Security guidelines for I/O Runtime](../../runtime_guides/security-general.md) generally apply to the back-end actions of App Builder applications. The guidelines below are specific to App Builder applications. ### Transport Security @@ -168,11 +168,11 @@ This combination of `Enterprise Organization`, `Project`, `Workspace`, and `Runt #### Runtime actions -Back-end Runtime actions used by App Builder applications respect the [tenant isolation model](../../../get_started/runtime_getting_started/understanding_runtime.md#security-considerations) implemented by I/O Runtime. +Back-end Runtime actions used by App Builder applications respect the [tenant isolation model](../../../get_started/runtime_getting_started/understanding-runtime.md#security-considerations) implemented by I/O Runtime. #### Cloud storage and content delivery network (CDN) for SPA static files -When an App Builder single-page application (SPA) is deployed into the [Experience Cloud Shell](https://experience.adobe.com), the static assets of the SPA are deployed from the CLI or a [CI/CD pipeline](../deployment/cicd_for_app_builder_apps.md) to App Builder's cloud storage and CDN. +When an App Builder single-page application (SPA) is deployed into the [Experience Cloud Shell](https://experience.adobe.com), the static assets of the SPA are deployed from the CLI or a [CI/CD pipeline](../deployment/cicd-for-app-builder-apps.md) to App Builder's cloud storage and CDN. Both of these have a strict isolation according to the Runtime namespace. Cloud Storage containers hosting App Builder SPAs can be accessed only by configuring the [CLI](https://github.com/adobe/aio-cli) with appropriate workspace credentials. @@ -195,6 +195,6 @@ Developers can build serverless processes and user-context-aware applications wi ## Next steps -Continue to [Understanding Authentication](understanding_authentication.md). +Continue to [Understanding Authentication](understanding-authentication.md). -Return to [Guides Index](../../../guides/index.md). +Return to [Guides Index](../../index.md). diff --git a/src/pages/guides/app_builder_guides/security/understanding_authentication.md b/src/pages/guides/app_builder_guides/security/understanding-authentication.md similarity index 96% rename from src/pages/guides/app_builder_guides/security/understanding_authentication.md rename to src/pages/guides/app_builder_guides/security/understanding-authentication.md index 5e6544085..cada18f1e 100644 --- a/src/pages/guides/app_builder_guides/security/understanding_authentication.md +++ b/src/pages/guides/app_builder_guides/security/understanding-authentication.md @@ -23,4 +23,4 @@ The Adobe I/O IMS SDK Library can simplify your interaction with Adobe authentic Return to [Security Overview](index.md). -Return to [Guides Index](../../../guides/index.md). +Return to [Guides Index](../../index.md). diff --git a/src/pages/guides/app_builder_guides/telemetry.md b/src/pages/guides/app_builder_guides/telemetry.md index 1088df8a5..70b6ac8f2 100644 --- a/src/pages/guides/app_builder_guides/telemetry.md +++ b/src/pages/guides/app_builder_guides/telemetry.md @@ -71,6 +71,6 @@ Telemetry itself is implemented as a CLI plugin. It is developed in the open an ## Next steps -Review Adobe policies and guidelines for [contributions](../contribution_guide.md). +Review Adobe policies and guidelines for [contributions](../contribution-guide.md). Return to the [Guides Index](../index.md). diff --git a/src/pages/guides/contribution_guide.md b/src/pages/guides/contribution-guide.md similarity index 100% rename from src/pages/guides/contribution_guide.md rename to src/pages/guides/contribution-guide.md diff --git a/src/pages/guides/index.md b/src/pages/guides/index.md index 82a0bf5cf..715da866b 100644 --- a/src/pages/guides/index.md +++ b/src/pages/guides/index.md @@ -11,38 +11,38 @@ title: Reference Documentation ## App Builder guides -For a close examination of App Builder's components, operation, and resources, follow the [Architecture overview](app_builder_guides/architecture_overview/architecture_overview.md) thread. For details of specific technologies and processes, consult the materials under your topic of interest below. +For a close examination of App Builder's components, operation, and resources, follow the [Architecture overview](app_builder_guides/architecture_overview/architecture-overview.md) thread. For details of specific technologies and processes, consult the materials under your topic of interest below. -* [Architecture overview](app_builder_guides/architecture_overview/architecture_overview.md) +* [Architecture overview](app_builder_guides/architecture_overview/architecture-overview.md) * [Application logging](app_builder_guides/application_logging/logging.md) * [Configuration](app_builder_guides/configuration/configuration.md) * [Deployment](app_builder_guides/deployment/deployment.md) * [Development](app_builder_guides/development.md) * [Distribution](app_builder_guides/distribution.md) -* [Events](app_builder_guides/events/custom_events.md) +* [Events](app_builder_guides/events/custom-events.md) * [Extensions](app_builder_guides/extensions/extensions.md) -* [Integration with Adobe Experience Cloud](app_builder_guides/exc_app/aec_integration.md) +* [Integration with Adobe Experience Cloud](app_builder_guides/exc_app/aec-integration.md) * [Optimization](app_builder_guides/optimization.md) * [Security](app_builder_guides/security/index.md) * [Telemetry](app_builder_guides/telemetry.md) -* [App Builder reference documentation index](../guides/references.md) +* [App Builder reference documentation index](references.md) ## Adobe I/O Runtime guides -These materials may be read as a tutorial or as a set of reference materials. Start the tutorial with [Using Adobe I/O Runtime](runtime_guides/using_runtime.md), or select the reference topic of interest. +These materials may be read as a tutorial or as a set of reference materials. Start the tutorial with [Using Adobe I/O Runtime](runtime_guides/using-runtime.md), or select the reference topic of interest. -* [Creating Actions](runtime_guides/creating_actions.md) -* [Asynchronous Calls](runtime_guides/asynchronous_calls.md) -* [Throughput Tuning](runtime_guides/throughput_tuning.md) -* [Security Guide](runtime_guides/security_general.md) -* [Securing Web Actions](runtime_guides/securing_web_actions.md) -* [Creating REST APIs](runtime_guides/creating_rest_apis.md) -* [Using Packages](runtime_guides/using_packages.md) -* [Logging and Monitoring](runtime_guides/logging_monitoring.md) +* [Creating Actions](runtime_guides/creating-actions.md) +* [Asynchronous Calls](runtime_guides/asynchronous-calls.md) +* [Throughput Tuning](runtime_guides/throughput-tuning.md) +* [Security Guide](runtime_guides/security-general.md) +* [Securing Web Actions](runtime_guides/securing-web-actions.md) +* [Creating REST APIs](runtime_guides/creating-rest-apis.md) +* [Using Packages](runtime_guides/using-packages.md) +* [Logging and Monitoring](runtime_guides/logging-monitoring.md) * [Debugging](runtime_guides/debugging.md) * [Troubleshooting](runtime_guides/troubleshooting.md) -* [System Settings](runtime_guides/system_settings.md) -* [CI/CD Pipeline](runtime_guides/ci-cd_pipeline.md) +* [System Settings](runtime_guides/system-settings.md) +* [CI/CD Pipeline](runtime_guides/ci-cd-pipeline.md) * [I/O Runtime reference documentation index](runtime_guides/reference_docs/index.md) ## Next step diff --git a/src/pages/guides/references.md b/src/pages/guides/references.md index c4197a42c..053f1ddc9 100644 --- a/src/pages/guides/references.md +++ b/src/pages/guides/references.md @@ -38,4 +38,4 @@ title: Reference Documentation ## Next step - Return to [Guides Index](../guides/). + Return to [Guides Index](index.md). diff --git a/src/pages/guides/runtime_guides/asynchronous_calls.md b/src/pages/guides/runtime_guides/asynchronous-calls.md similarity index 100% rename from src/pages/guides/runtime_guides/asynchronous_calls.md rename to src/pages/guides/runtime_guides/asynchronous-calls.md diff --git a/src/pages/guides/runtime_guides/ci-cd_pipeline.md b/src/pages/guides/runtime_guides/ci-cd-pipeline.md similarity index 90% rename from src/pages/guides/runtime_guides/ci-cd_pipeline.md rename to src/pages/guides/runtime_guides/ci-cd-pipeline.md index 885f9786b..7337c4bd8 100644 --- a/src/pages/guides/runtime_guides/ci-cd_pipeline.md +++ b/src/pages/guides/runtime_guides/ci-cd-pipeline.md @@ -8,11 +8,11 @@ Namespaces can be used to separate different environments such as Development, Q ## CLI tools -CLI tools `aio` and `wskdeploy` can help you automate deployments, manage action dependencies, and create manifest files that describe your packages and actions. Details about using `wskdeploy` can be found [here](creating_actions.md). +CLI tools `aio` and `wskdeploy` can help you automate deployments, manage action dependencies, and create manifest files that describe your packages and actions. Details about using `wskdeploy` can be found [here](creating-actions.md). ## Swagger specifications -If you plan to expose your actions as REST APIs, Swagger definition files can help you to manage the API life cycle through creation, editing, and deletion, as described [here](creating_rest_apis.md#using-swagger-files). +If you plan to expose your actions as REST APIs, Swagger definition files can help you to manage the API life cycle through creation, editing, and deletion, as described [here](creating-rest-apis.md#using-swagger-files). ## Versioning actions @@ -24,4 +24,4 @@ The AEM Commerce team documented this approach in a [blog post](https://medium.c ## Next step -Return to the [Guides Index](../../guides/index.md). +Return to the [Guides Index](../index.md). diff --git a/src/pages/guides/runtime_guides/creating_actions.md b/src/pages/guides/runtime_guides/creating-actions.md similarity index 98% rename from src/pages/guides/runtime_guides/creating_actions.md rename to src/pages/guides/runtime_guides/creating-actions.md index 1f970acbf..7c16f9a89 100644 --- a/src/pages/guides/runtime_guides/creating_actions.md +++ b/src/pages/guides/runtime_guides/creating-actions.md @@ -5,7 +5,7 @@ To execute as an action on Adobe I/O Runtime, the function you code must both : - Either be named *main* or have an entry point exported as *main* - the function that will be executed when invoked - Accept valid JSON objects as input, and output valid JSON objects -To create and invoke actions, you must also configure the `aio` CLI on your machine: refer to the [aio CLI](tools/cli_install.md) page for installation and configuration instructions. +To create and invoke actions, you must also configure the `aio` CLI on your machine: refer to the [aio CLI](tools/cli-install.md) page for installation and configuration instructions. Let's assume you have this function available on your machine: @@ -197,7 +197,7 @@ or like this: curl https://[your namespace].adobeioruntime.net/api/v1/web/default/test -X GET ``` -> Note the difference between this URL and the one `aio` returns. This is because when invoking web actions, Runtime adds protections that segregate namespaces from each other . The `aio`-generated link will still work, but it will return a 308 redirect to your namespace's subdomain on Runtime. For a further discussion of this please see [Securing Web Actions](securing_web_actions.md). +> Note the difference between this URL and the one `aio` returns. This is because when invoking web actions, Runtime adds protections that segregate namespaces from each other . The `aio`-generated link will still work, but it will return a 308 redirect to your namespace's subdomain on Runtime. For a further discussion of this please see [Securing Web Actions](securing-web-actions.md). ### Successful response @@ -297,7 +297,7 @@ When executing actions as web actions, the `params` object is decorated with add | `__ow_body` | the request body entity, as a base64-encoded string when its content is binary or JSON object/array, or as a plain string otherwise | | `__ow_query` | the query parameters from the request as an unparsed string | -By default, web actions are accessible to anyone who knows their URLs. To secure access, review [Securing Web Actions](securing_web_actions.md). +By default, web actions are accessible to anyone who knows their URLs. To secure access, review [Securing Web Actions](securing-web-actions.md). ## Deploying ZIP actions @@ -377,4 +377,4 @@ wskdeploy undeploy ## Next step -Return to [Guides Index](../../guides/index.md). +Return to [Guides Index](../index.md). diff --git a/src/pages/guides/runtime_guides/creating_rest_apis.md b/src/pages/guides/runtime_guides/creating-rest-apis.md similarity index 98% rename from src/pages/guides/runtime_guides/creating_rest_apis.md rename to src/pages/guides/runtime_guides/creating-rest-apis.md index 07049d3ad..6e11e586f 100644 --- a/src/pages/guides/runtime_guides/creating_rest_apis.md +++ b/src/pages/guides/runtime_guides/creating-rest-apis.md @@ -57,7 +57,7 @@ curl https://.adobeioruntime.net:443/apis/pet-store/pet/2345 -X In this example, the `{di}` value, 2335, will be mapped to a {payload.id}. -> **Note** that this URL differs from what `aio` returns. This is due to protections in Runtime that segregate namespaces from one another when invoking web actions. The `aio`-generated link will still work, but it will return a `308` redirect to your namespace's subdomain on Runtime. For a further discussion of this issue, please see [Securing Web Actions](securing_web_actions.md). +> **Note** that this URL differs from what `aio` returns. This is due to protections in Runtime that segregate namespaces from one another when invoking web actions. The `aio`-generated link will still work, but it will return a `308` redirect to your namespace's subdomain on Runtime. For a further discussion of this issue, please see [Securing Web Actions](securing-web-actions.md). ## Using Swagger files @@ -274,7 +274,7 @@ This configuration allows the action to accept requests with access tokens that ### Basic authentication -APIs are secured in the same way as web actions. You can read more about this in [Securing Web Actions](securing_web_actions.md). +APIs are secured in the same way as web actions. You can read more about this in [Securing Web Actions](securing-web-actions.md). Once basic authentication is enabled for an action, it's necessary to pass the `X-Require-Whisk-Auth` header and the secret you chose when making an API call. diff --git a/src/pages/guides/runtime_guides/index.md b/src/pages/guides/runtime_guides/index.md index c5482e833..3a87c012d 100644 --- a/src/pages/guides/runtime_guides/index.md +++ b/src/pages/guides/runtime_guides/index.md @@ -13,29 +13,29 @@ Welcome to the Runtime Guides section. Here you'll find comprehensive documentat ## Getting Started -* [Using Adobe I/O Runtime](using_runtime.md) -* [Creating Actions](creating_actions.md) -* [Creating REST APIs](creating_rest_apis.md) -* [Using Packages](using_packages.md) +* [Using Adobe I/O Runtime](using-runtime.md) +* [Creating Actions](creating-actions.md) +* [Creating REST APIs](creating-rest-apis.md) +* [Using Packages](using-packages.md) ## Development and Operations -* [Asynchronous Calls](asynchronous_calls.md) -* [Throughput Tuning](throughput_tuning.md) -* [Logging and Monitoring](logging_monitoring.md) +* [Asynchronous Calls](asynchronous-calls.md) +* [Throughput Tuning](throughput-tuning.md) +* [Logging and Monitoring](logging-monitoring.md) * [Debugging](debugging.md) * [Troubleshooting](troubleshooting.md) -* [System Settings](system_settings.md) -* [CI/CD Pipeline](ci-cd_pipeline.md) +* [System Settings](system-settings.md) +* [CI/CD Pipeline](ci-cd-pipeline.md) ## Security -* [Security Guide](security_general.md) -* [Securing Web Actions](securing_web_actions.md) +* [Security Guide](security-general.md) +* [Securing Web Actions](securing-web-actions.md) ## Tools and Reference -* [CLI Usage](tools/cli_install.md) +* [CLI Usage](tools/cli-install.md) * [WSKDeploy Install](tools/wskdeploy_install.md) * [Reference Documentation](reference_docs/index.md) diff --git a/src/pages/guides/runtime_guides/logging_monitoring.md b/src/pages/guides/runtime_guides/logging-monitoring.md similarity index 98% rename from src/pages/guides/runtime_guides/logging_monitoring.md rename to src/pages/guides/runtime_guides/logging-monitoring.md index 2390272d4..cd80f8d88 100644 --- a/src/pages/guides/runtime_guides/logging_monitoring.md +++ b/src/pages/guides/runtime_guides/logging-monitoring.md @@ -80,7 +80,7 @@ function main(params) { } ``` -You need to package the new relic agent as part of your action code and deploy the action as [.zip file](creating_actions.md#deploying-zip-actions). +You need to package the new relic agent as part of your action code and deploy the action as [.zip file](creating-actions.md#deploying-zip-actions). ## Debugging locally diff --git a/src/pages/guides/runtime_guides/reference_docs/api_ref.md b/src/pages/guides/runtime_guides/reference_docs/api-ref.md similarity index 100% rename from src/pages/guides/runtime_guides/reference_docs/api_ref.md rename to src/pages/guides/runtime_guides/reference_docs/api-ref.md diff --git a/src/pages/guides/runtime_guides/reference_docs/cli_use.md b/src/pages/guides/runtime_guides/reference_docs/cli-use.md similarity index 100% rename from src/pages/guides/runtime_guides/reference_docs/cli_use.md rename to src/pages/guides/runtime_guides/reference_docs/cli-use.md diff --git a/src/pages/guides/runtime_guides/reference_docs/environment_variables.md b/src/pages/guides/runtime_guides/reference_docs/environment-variables.md similarity index 100% rename from src/pages/guides/runtime_guides/reference_docs/environment_variables.md rename to src/pages/guides/runtime_guides/reference_docs/environment-variables.md diff --git a/src/pages/guides/runtime_guides/reference_docs/index.md b/src/pages/guides/runtime_guides/reference_docs/index.md index 4f5d72b81..e4cea6627 100644 --- a/src/pages/guides/runtime_guides/reference_docs/index.md +++ b/src/pages/guides/runtime_guides/reference_docs/index.md @@ -2,16 +2,16 @@ This Guide contains reference documentation for Runtime APIs, command-line tools, and entities. -* [aio CLI](cli_use.md): how to use the `aio` CLI -* [Environment Variables](environment_variables.md): what environment variables you can access -* [Multiple Regions](multiple_regions.md): where actions are deployed -* [API Reference](api_ref.md): I/O Management API +* [aio CLI](cli-use.md): how to use the `aio` CLI +* [Environment Variables](environment-variables.md): what environment variables you can access +* [Multiple Regions](multiple-regions.md): where actions are deployed +* [API Reference](api-ref.md): I/O Management API * [Packages](packages.md): working with packages * [Pre-installed Packages](prepackages.md): what packages are pre-installed with Runtime * [Runtimes](runtimes.md): details about available runtimes * [Triggers and Rules](triggersrules.md): working with triggers and rules * [Feeds](feeds.md): working with feeds -* [Sequences and Compositions](sequences_compositions.md): how to orchestrate actions +* [Sequences and Compositions](sequences-compositions.md): how to orchestrate actions * [Configuring a Secure Proxy](configuringproxy.md): communicating securely with back-end services. #### Next step diff --git a/src/pages/guides/runtime_guides/reference_docs/multiple_regions.md b/src/pages/guides/runtime_guides/reference_docs/multiple-regions.md similarity index 100% rename from src/pages/guides/runtime_guides/reference_docs/multiple_regions.md rename to src/pages/guides/runtime_guides/reference_docs/multiple-regions.md diff --git a/src/pages/guides/runtime_guides/reference_docs/sequences_compositions.md b/src/pages/guides/runtime_guides/reference_docs/sequences-compositions.md similarity index 98% rename from src/pages/guides/runtime_guides/reference_docs/sequences_compositions.md rename to src/pages/guides/runtime_guides/reference_docs/sequences-compositions.md index e8a11cef3..2e465590c 100644 --- a/src/pages/guides/runtime_guides/reference_docs/sequences_compositions.md +++ b/src/pages/guides/runtime_guides/reference_docs/sequences-compositions.md @@ -27,7 +27,7 @@ When invoking a sequence in a blocking manner, there is a 60-second timeout limi If we apply this limitation to the example above, then `actionA` and `actionB` have a total budget of 60 seconds. Although the system allows you to set a higher timeout value for `mySequence`, it will ignore the value and enforce the 60-second limit. -If one of your actions needs more than 60 seconds (therefore putting the sequence over the limit), the only solution is to invoke it as a non-blocking action using the OpenWhisk npm module. So, using the same example, you could have `actionA` calling another action in a non-blocking manner. You can see an example of how to do this [here](../../runtime_guides/asynchronous_calls.md). +If one of your actions needs more than 60 seconds (therefore putting the sequence over the limit), the only solution is to invoke it as a non-blocking action using the OpenWhisk npm module. So, using the same example, you could have `actionA` calling another action in a non-blocking manner. You can see an example of how to do this [here](../asynchronous-calls.md). Read more about sequences on the [OpenWhisk documentation page](https://github.com/apache/incubator-openwhisk/blob/master/docs/actions.md#creating-action-sequences). diff --git a/src/pages/guides/runtime_guides/reference_docs/wsk_use.md b/src/pages/guides/runtime_guides/reference_docs/wsk-use.md similarity index 100% rename from src/pages/guides/runtime_guides/reference_docs/wsk_use.md rename to src/pages/guides/runtime_guides/reference_docs/wsk-use.md diff --git a/src/pages/guides/runtime_guides/securing_web_actions.md b/src/pages/guides/runtime_guides/securing-web-actions.md similarity index 97% rename from src/pages/guides/runtime_guides/securing_web_actions.md rename to src/pages/guides/runtime_guides/securing-web-actions.md index 3bb493c98..e83794c5a 100644 --- a/src/pages/guides/runtime_guides/securing_web_actions.md +++ b/src/pages/guides/runtime_guides/securing-web-actions.md @@ -49,7 +49,7 @@ or aio rt:action:update my-require-validation-web-action main.js --web true -a require-gw-validation true ``` -To interact with the action, set up a security configuration in your Swagger API route for that action. Detailed instructions on how to do this can be found in [Securing API Endpoints](creating_rest_apis.md#securing-api-endpoints). +To interact with the action, set up a security configuration in your Swagger API route for that action. Detailed instructions on how to do this can be found in [Securing API Endpoints](creating-rest-apis.md#securing-api-endpoints). # Non-web actions @@ -69,6 +69,6 @@ For a fuller discussion of this topic you can read [Heroku's discussion of their ## Next steps -Review the [Security Guide](security_general.md). +Review the [Security Guide](security-general.md). Return to [Guides Index](../index.md). diff --git a/src/pages/guides/runtime_guides/security_general.md b/src/pages/guides/runtime_guides/security-general.md similarity index 96% rename from src/pages/guides/runtime_guides/security_general.md rename to src/pages/guides/runtime_guides/security-general.md index 53b3fb6c5..2af33f860 100644 --- a/src/pages/guides/runtime_guides/security_general.md +++ b/src/pages/guides/runtime_guides/security-general.md @@ -16,7 +16,7 @@ Parameters sent to actions are not sanitized by the Runtime system. These inputs You can set cookies in two ways in Runtime: from JavaScript on the page using [document.cookie](https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie) calls, or by passing a [Header object from a web action](https://github.com/apache/incubator-openwhisk/blob/master/docs/webactions.md#web-actions) with a Set-Cookie header directive. The way Runtime hosts functions raises some particular concerns for Developers. -We discourage the use of cookies directly from web actions on Runtime: please see [Securing Web Actions](securing_web_actions.md) for details. +We discourage the use of cookies directly from web actions on Runtime: please see [Securing Web Actions](securing-web-actions.md) for details. ## Secrets @@ -46,7 +46,7 @@ Actions should include the [aio-lib-ims](https://github.com/adobe/aio-lib-ims) l ### Securing web actions -For web actions, see [Securing Web Actions](securing_web_actions.md). +For web actions, see [Securing Web Actions](securing-web-actions.md). ## Transport security @@ -68,7 +68,7 @@ You can secure web actions using any CDN by following these steps: 1. Choose a provider that meets your needs and sign up for their service. [Wikipedia](https://en.wikipedia.org/wiki/Content_delivery_network#notable_content_delivery_service_providers) provides a list of alternatives. 2. Configure the CDN and point it to Runtime’s domain name, `.adobeioruntime.net`. This can usually be done through the CDN provider's web interface or API. -3. Configure your action to use a security header as described in [Securing Web Actions](securing_web_actions.md). +3. Configure your action to use a security header as described in [Securing Web Actions](securing-web-actions.md). 4. Configure the CDN to add the `X-Require-Whisk-Auth` security header, with the secret hash value, for all requests made to the secured web actions. ## Secure communication with back-end services @@ -79,6 +79,6 @@ Runtime ingress IPs are not static. To facilitate operational changes, IPs retu ## Next steps -Proceed to [Securing Web Actions](securing_web_actions.md). +Proceed to [Securing Web Actions](securing-web-actions.md). Return to [Guides Index](../index.md). diff --git a/src/pages/guides/runtime_guides/system_settings.md b/src/pages/guides/runtime_guides/system-settings.md similarity index 99% rename from src/pages/guides/runtime_guides/system_settings.md rename to src/pages/guides/runtime_guides/system-settings.md index a5d38ea0b..c518f690f 100644 --- a/src/pages/guides/runtime_guides/system_settings.md +++ b/src/pages/guides/runtime_guides/system-settings.md @@ -24,7 +24,7 @@ These are the system settings and limitations to consider when designing and deb When invoking a sequence in a blocking manner, there is a 60-second limit for timeout that can't be changed. This means the sum of the execution times of all actions in the sequence must be 60 seconds or less. You can specify a timeout value greater than 60 seconds, but the system will ignore it and impose the 60-second limit. -If one of your actions needs more than 60 seconds (therefore putting the sequence over the limit), the only solution is to invoke it as a non-blocking action using the OpenWhisk npm module. So, using the example above, you could have `actionA` calling another action in a non-blocking manner. You can see an example of how to do this [here](asynchronous_calls.md). +If one of your actions needs more than 60 seconds (therefore putting the sequence over the limit), the only solution is to invoke it as a non-blocking action using the OpenWhisk npm module. So, using the example above, you could have `actionA` calling another action in a non-blocking manner. You can see an example of how to do this [here](asynchronous-calls.md). ## Using pre-warmed containers diff --git a/src/pages/guides/runtime_guides/throughput_tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md similarity index 100% rename from src/pages/guides/runtime_guides/throughput_tuning.md rename to src/pages/guides/runtime_guides/throughput-tuning.md diff --git a/src/pages/guides/runtime_guides/tools/cli_install.md b/src/pages/guides/runtime_guides/tools/cli-install.md similarity index 100% rename from src/pages/guides/runtime_guides/tools/cli_install.md rename to src/pages/guides/runtime_guides/tools/cli-install.md diff --git a/src/pages/guides/runtime_guides/tools/index.md b/src/pages/guides/runtime_guides/tools/index.md index 7a09f3700..9954dc1c1 100644 --- a/src/pages/guides/runtime_guides/tools/index.md +++ b/src/pages/guides/runtime_guides/tools/index.md @@ -2,7 +2,7 @@ The most important tools for working with Adobe I/O Runtime are: -- [aio CLI](cli_install.md) to manage namespaces and authentication for the `aio` CLI +- [aio CLI](cli-install.md) to manage namespaces and authentication for the `aio` CLI - [wskdeploy CLI](wskdeploy_install.md) to deploy multiple actions and packages ## Next step diff --git a/src/pages/guides/runtime_guides/troubleshooting.md b/src/pages/guides/runtime_guides/troubleshooting.md index f44916512..2f876e88e 100644 --- a/src/pages/guides/runtime_guides/troubleshooting.md +++ b/src/pages/guides/runtime_guides/troubleshooting.md @@ -9,7 +9,7 @@ The most common reasons for exceeding local storage for an action are: - Writing too many verbose logs - Storing large files on local storage without cleaning them up -Please refer to the local storage limit configured for an action, found in [System Settings](./system_settings.md) section. +Please refer to the local storage limit configured for an action, found in [System Settings](./system-settings.md) section. Exceeding this limit will result in the action being terminated or not completing successfully. ### Mitigation Strategies @@ -20,6 +20,6 @@ Exceeding this limit will result in the action being terminated or not completin ## Next step -Review [System Settings](system_settings.md) and defaults. +Review [System Settings](system-settings.md) and defaults. Return to [Guides Index](../index.md). diff --git a/src/pages/guides/runtime_guides/using_packages.md b/src/pages/guides/runtime_guides/using-packages.md similarity index 100% rename from src/pages/guides/runtime_guides/using_packages.md rename to src/pages/guides/runtime_guides/using-packages.md diff --git a/src/pages/guides/runtime_guides/using_runtime.md b/src/pages/guides/runtime_guides/using-runtime.md similarity index 56% rename from src/pages/guides/runtime_guides/using_runtime.md rename to src/pages/guides/runtime_guides/using-runtime.md index 6c47b7210..e591b757c 100644 --- a/src/pages/guides/runtime_guides/using_runtime.md +++ b/src/pages/guides/runtime_guides/using-runtime.md @@ -2,32 +2,32 @@ Adobe I/O Runtime is more than a way of deploying individual actions and invoking them directly in the CLI. With Runtime, you can deploy groups of related actions as packages, share them with others, set up actions as webhooks to automate responses to events, and access Runtime actions through the API. The following pages guide you through the process: -* [Creating Actions](creating_actions.md), including actions, web actions, invocation and management, and setting parameters +* [Creating Actions](creating-actions.md), including actions, web actions, invocation and management, and setting parameters -* [Asynchronous Calls](asynchronous_calls.md) and how to execute these long-running, non-blocking calls +* [Asynchronous Calls](asynchronous-calls.md) and how to execute these long-running, non-blocking calls -* [Security](security_general.md) issues to consider when working with I/O Runtime +* [Security](security-general.md) issues to consider when working with I/O Runtime -* [Throughput Tuning](throughput_tuning.md) to maximize invocations and performance +* [Throughput Tuning](throughput-tuning.md) to maximize invocations and performance -* [Securing Web Actions](securing_web_actions.md) through effective access control +* [Securing Web Actions](securing-web-actions.md) through effective access control -* [Creating REST APIs](creating_rest_apis.md) from your web actions +* [Creating REST APIs](creating-rest-apis.md) from your web actions -* [Using Packages](using_packages.md) to bundle and share your actions, set default parameters, and maintain security +* [Using Packages](using-packages.md) to bundle and share your actions, set default parameters, and maintain security -* [Logging and Monitoring](logging_monitoring.md) to assist with troubleshooting your actions +* [Logging and Monitoring](logging-monitoring.md) to assist with troubleshooting your actions * [Debugging](debugging.md) with advanced techniques for debugging Node.js actions -* [System Settings](system_settings.md) and constraints to consider when designing and debugging actions +* [System Settings](system-settings.md) and constraints to consider when designing and debugging actions -* [CI/CD Pipeline](ci-cd_pipeline.md) tools available for the Runtime environment +* [CI/CD Pipeline](ci-cd-pipeline.md) tools available for the Runtime environment * [Troubleshooting](troubleshooting.md) common issues and solutions ## Next steps -Continue to [Creating Actions](creating_actions.md). +Continue to [Creating Actions](creating-actions.md). Return to [Guides Index](../index.md). diff --git a/src/pages/intro_and_overview/business_case.md b/src/pages/intro_and_overview/business-case.md similarity index 100% rename from src/pages/intro_and_overview/business_case.md rename to src/pages/intro_and_overview/business-case.md diff --git a/src/pages/intro_and_overview/community.md b/src/pages/intro_and_overview/community.md index c2bfe82c3..e23a140b5 100644 --- a/src/pages/intro_and_overview/community.md +++ b/src/pages/intro_and_overview/community.md @@ -21,4 +21,4 @@ Adobe welcomes contributions from customer, partner, and independent Developers. * [SDK repository]( https://github.com/adobe/aio-sdk) * [App Builder](https://github.com/AdobeDocs/app-builder) and [I/O Runtime](https://github.com/AdobeDocs/adobe-io-runtime) documentation repositories -Adobe and its contributors agree to a Code of Conduct, and to follow established protocols and best practices to maintain a respectful, productive working environment for all of us. Please review our [contribution guidelines](../guides/contribution_guide.md) for details. +Adobe and its contributors agree to a Code of Conduct, and to follow established protocols and best practices to maintain a respectful, productive working environment for all of us. Please review our [contribution guidelines](../guides/contribution-guide.md) for details. diff --git a/src/pages/intro_and_overview/faq.md b/src/pages/intro_and_overview/faq.md index 29948e9c4..4348a65ae 100644 --- a/src/pages/intro_and_overview/faq.md +++ b/src/pages/intro_and_overview/faq.md @@ -114,11 +114,11 @@ The [Adobe Experience Leage App Builder Community](https://experienceleaguecommu ### What limits does I/O Runtime impose on actions? -Limits and their default values are listed under [System Settings](../guides/runtime_guides/system_settings.md); the most important are function timeouts and the maximum payloads that can be posted to functions. +Limits and their default values are listed under [System Settings](../guides/runtime_guides/system-settings.md); the most important are function timeouts and the maximum payloads that can be posted to functions. ### Do ingress IP addresses for Adobe I/O Runtime ever change? -Yes, IP addresses returned when looking up an Adobe I/O Runtime endpoint's DNS record can change at any time. To avoid issues connecting and routing to the platform, clients should not cache DNS-lookup responses for Adobe I/O Runtime endpoints beyond the TTL of the DNS record. For more information, see [Secure communication with back-end services](../guides/runtime_guides/security_general.md#secure-communication-with-back-end-services) in the [Security Guide](../guides/runtime_guides/security_general.md). +Yes, IP addresses returned when looking up an Adobe I/O Runtime endpoint's DNS record can change at any time. To avoid issues connecting and routing to the platform, clients should not cache DNS-lookup responses for Adobe I/O Runtime endpoints beyond the TTL of the DNS record. For more information, see [Secure communication with back-end services](../guides/runtime_guides/security-general.md#secure-communication-with-back-end-services) in the [Security Guide](../guides/runtime_guides/security-general.md). ### What ports and outbound connections does I/O Runtime support? @@ -132,4 +132,4 @@ If you need a port not on the list, please share the use case with us. I/O Runtime runs in multiple regions, deploys code in all of them, and executes it in the region closest to the caller (latency-based routing). Execution cannot be restricted to a specific region or regions. -For more information about regions and where actions are executed, see [Multiple Regions](../guides/runtime_guides/reference_docs/multiple_regions.md). +For more information about regions and where actions are executed, see [Multiple Regions](../guides/runtime_guides/reference_docs/multiple-regions.md). diff --git a/src/pages/intro_and_overview/index.md b/src/pages/intro_and_overview/index.md index 302bec53c..9e57b5397 100644 --- a/src/pages/intro_and_overview/index.md +++ b/src/pages/intro_and_overview/index.md @@ -10,7 +10,7 @@ App Builder is for Adobe enterprise customers and Adobe partners working with th ## How to use these documents -**Business users and decision-makers** can review the [Business Case for App Builder](business_case.md), outlining the agility, efficiency, and security App Builder brings to the modern enterprise, as well as the most pertinent App Builder [use cases](business_case.md#example-use-cases) and links to [real-world success stories](business_case.md#examples-from-the-real-world) from Adobe customers and partners. +**Business users and decision-makers** can review the [Business Case for App Builder](business-case.md), outlining the agility, efficiency, and security App Builder brings to the modern enterprise, as well as the most pertinent App Builder [use cases](business-case.md#example-use-cases) and links to [real-world success stories](business-case.md#examples-from-the-real-world) from Adobe customers and partners. Please refer to the [FAQ](faq.md) for information about licensing or trial of App Builder, or contact your Adobe Sales representative. @@ -18,15 +18,15 @@ Please refer to the [FAQ](faq.md) for information about licensing or trial of Ap - **Explore** - - App Builder and I/O Runtime design concepts in [What Is App Builder?](what_is_app_builder.md) + - App Builder and I/O Runtime design concepts in [What Is App Builder?](what-is-app-builder.md) - - Key App Builder components and concepts in the [Architecture Overview](../guides/app_builder_guides/architecture_overview/architecture_overview.md) + - Key App Builder components and concepts in the [Architecture Overview](../guides/app_builder_guides/architecture_overview/architecture-overview.md) - - How the App Builder framework aligns to the development cycle in [How App Builder Works](../get_started/app_builder_get_started/app_builder_intro.md#overview) + - How the App Builder framework aligns to the development cycle in [How App Builder Works](../get_started/app_builder_get_started/app-builder-intro.md#overview) - **Learn** how to build custom applications and deploy them on Adobe infrastructure through hands-on tutorials: - - [Get Started with App Builder](../get_started/app_builder_get_started/app_builder_intro.md) covering access, setup, creation, publication, and troubleshooting of your first App Builder app + - [Get Started with App Builder](../get_started/app_builder_get_started/app-builder-intro.md) covering access, setup, creation, publication, and troubleshooting of your first App Builder app - [Get Started with Adobe I/O Runtime](../get_started/runtime_getting_started/runtime_intro.md) covering access, setup, deployment, and invocation of your first Adobe Runtime action, recovery and interpretation of results, and core concepts and tactics for optimizing performance @@ -46,7 +46,7 @@ Please refer to the [FAQ](faq.md) for information about licensing or trial of Ap To learn more about App Builder, please consult the following: -- [What Is App Builder?](what_is_app_builder.md) -- [Architecture Overview](../guides/app_builder_guides/architecture_overview/architecture_overview.md) +- [What Is App Builder?](what-is-app-builder.md) +- [Architecture Overview](../guides/app_builder_guides/architecture_overview/architecture-overview.md) -Or start building right now: [Get Started with App Builder](../get_started/app_builder_get_started/app_builder_intro.md). +Or start building right now: [Get Started with App Builder](../get_started/app_builder_get_started/app-builder-intro.md). diff --git a/src/pages/intro_and_overview/what_is_app_builder.md b/src/pages/intro_and_overview/what-is-app-builder.md similarity index 97% rename from src/pages/intro_and_overview/what_is_app_builder.md rename to src/pages/intro_and_overview/what-is-app-builder.md index 5d97f3d5f..0da3892fc 100644 --- a/src/pages/intro_and_overview/what_is_app_builder.md +++ b/src/pages/intro_and_overview/what-is-app-builder.md @@ -28,4 +28,4 @@ Serverless computing platforms like Adobe I/O Runtime host those portions of app ## Next step -Understand core App Builder concepts and start building your first App Builder application with the [Get Started with App Builder](../get_started/app_builder_get_started/app_builder_intro.md) tutorial series. +Understand core App Builder concepts and start building your first App Builder application with the [Get Started with App Builder](../get_started/app_builder_get_started/app-builder-intro.md) tutorial series. diff --git a/src/pages/redirects.json b/src/pages/redirects.json new file mode 100644 index 000000000..ca875f46e --- /dev/null +++ b/src/pages/redirects.json @@ -0,0 +1 @@ +{"total":300,"offset":0,"limit":300,"data":[{"Source":"/app-builder/docs/resources","Destination":"/app-builder/docs/resources/"},{"Source":"/app-builder/docs/resources/index","Destination":"/app-builder/docs/resources/"},{"Source":"/app-builder/docs/resources/blog-articles/","Destination":"/app-builder/docs/resources/blog-articles"},{"Source":"/app-builder/docs/resources/videos","Destination":"/app-builder/docs/resources/videos/"},{"Source":"/app-builder/docs/resources/videos/index","Destination":"/app-builder/docs/resources/videos/"},{"Source":"/app-builder/docs/resources/videos/overview/security/","Destination":"/app-builder/docs/resources/videos/overview/security"},{"Source":"/app-builder/docs/resources/videos/overview/introduction/","Destination":"/app-builder/docs/resources/videos/overview/introduction"},{"Source":"/app-builder/docs/resources/videos/overview/getting-started/","Destination":"/app-builder/docs/resources/videos/overview/getting-started"},{"Source":"/app-builder/docs/resources/videos/overview/e2e-user-journey/","Destination":"/app-builder/docs/resources/videos/overview/e2e-user-journey"},{"Source":"/app-builder/docs/resources/videos/overview/architecture/","Destination":"/app-builder/docs/resources/videos/overview/architecture"},{"Source":"/app-builder/docs/resources/videos/exploring/softcrylic-showcase/","Destination":"/app-builder/docs/resources/videos/exploring/softcrylic-showcase"},{"Source":"/app-builder/docs/resources/videos/exploring/react-spectrum/","Destination":"/app-builder/docs/resources/videos/exploring/react-spectrum"},{"Source":"/app-builder/docs/resources/videos/exploring/projects-and-workspaces/","Destination":"/app-builder/docs/resources/videos/exploring/projects-and-workspaces"},{"Source":"/app-builder/docs/resources/videos/exploring/ode-case-study/","Destination":"/app-builder/docs/resources/videos/exploring/ode-case-study"},{"Source":"/app-builder/docs/resources/videos/exploring/live-wired-sneak/","Destination":"/app-builder/docs/resources/videos/exploring/live-wired-sneak"},{"Source":"/app-builder/docs/resources/videos/exploring/learning-resources/","Destination":"/app-builder/docs/resources/videos/exploring/learning-resources"},{"Source":"/app-builder/docs/resources/videos/exploring/deep-dive-use-cases/","Destination":"/app-builder/docs/resources/videos/exploring/deep-dive-use-cases"},{"Source":"/app-builder/docs/resources/videos/exploring/debugging/","Destination":"/app-builder/docs/resources/videos/exploring/debugging"},{"Source":"/app-builder/docs/resources/videos/exploring/dashboard-case-study/","Destination":"/app-builder/docs/resources/videos/exploring/dashboard-case-study"},{"Source":"/app-builder/docs/resources/videos/exploring/custom-events/","Destination":"/app-builder/docs/resources/videos/exploring/custom-events"},{"Source":"/app-builder/docs/resources/videos/exploring/ci-cd/","Destination":"/app-builder/docs/resources/videos/exploring/ci-cd"},{"Source":"/app-builder/docs/resources/videos/developers-live/extend-experience-cloud/","Destination":"/app-builder/docs/resources/videos/developers-live/extend-experience-cloud"},{"Source":"/app-builder/docs/resources/videos/developers-live/deep-dive/","Destination":"/app-builder/docs/resources/videos/developers-live/deep-dive"},{"Source":"/app-builder/docs/resources/videos/developers-live/asset-compute-service-extensibility/","Destination":"/app-builder/docs/resources/videos/developers-live/asset-compute-service-extensibility"},{"Source":"/app-builder/docs/resources/transclusions/requirements/","Destination":"/app-builder/docs/resources/transclusions/requirements"},{"Source":"/app-builder/docs/resources/todo-app/welldone/","Destination":"/app-builder/docs/resources/todo-app/welldone"},{"Source":"/app-builder/docs/resources/todo-app/requirements/","Destination":"/app-builder/docs/resources/todo-app/requirements"},{"Source":"/app-builder/docs/resources/todo-app/lesson6/","Destination":"/app-builder/docs/resources/todo-app/lesson6"},{"Source":"/app-builder/docs/resources/todo-app/lesson5/","Destination":"/app-builder/docs/resources/todo-app/lesson5"},{"Source":"/app-builder/docs/resources/todo-app/lesson4/","Destination":"/app-builder/docs/resources/todo-app/lesson4"},{"Source":"/app-builder/docs/resources/todo-app/lesson3/","Destination":"/app-builder/docs/resources/todo-app/lesson3"},{"Source":"/app-builder/docs/resources/todo-app/lesson2/","Destination":"/app-builder/docs/resources/todo-app/lesson2"},{"Source":"/app-builder/docs/resources/todo-app/lesson1/","Destination":"/app-builder/docs/resources/todo-app/lesson1"},{"Source":"/app-builder/docs/resources/todo-app","Destination":"/app-builder/docs/resources/todo-app/"},{"Source":"/app-builder/docs/resources/todo-app/index","Destination":"/app-builder/docs/resources/todo-app/"},{"Source":"/app-builder/docs/resources/spectrum-intro/welldone/","Destination":"/app-builder/docs/resources/spectrum-intro/welldone"},{"Source":"/app-builder/docs/resources/spectrum-intro/requirements/","Destination":"/app-builder/docs/resources/spectrum-intro/requirements"},{"Source":"/app-builder/docs/resources/spectrum-intro/lesson4/","Destination":"/app-builder/docs/resources/spectrum-intro/lesson4"},{"Source":"/app-builder/docs/resources/spectrum-intro/lesson3/","Destination":"/app-builder/docs/resources/spectrum-intro/lesson3"},{"Source":"/app-builder/docs/resources/spectrum-intro/lesson2/","Destination":"/app-builder/docs/resources/spectrum-intro/lesson2"},{"Source":"/app-builder/docs/resources/spectrum-intro/lesson1/","Destination":"/app-builder/docs/resources/spectrum-intro/lesson1"},{"Source":"/app-builder/docs/resources/spectrum-intro","Destination":"/app-builder/docs/resources/spectrum-intro/"},{"Source":"/app-builder/docs/resources/spectrum-intro/index","Destination":"/app-builder/docs/resources/spectrum-intro/"},{"Source":"/app-builder/docs/resources/sample_apps","Destination":"/app-builder/docs/resources/sample_apps/"},{"Source":"/app-builder/docs/resources/sample_apps/index","Destination":"/app-builder/docs/resources/sample_apps/"},{"Source":"/app-builder/docs/resources/sample_apps/demo/","Destination":"/app-builder/docs/resources/sample_apps/demo"},{"Source":"/app-builder/docs/resources/sample_apps/code_snippets/state/","Destination":"/app-builder/docs/resources/sample_apps/code_snippets/state"},{"Source":"/app-builder/docs/resources/sample_apps/code_snippets","Destination":"/app-builder/docs/resources/sample_apps/code_snippets/"},{"Source":"/app-builder/docs/resources/sample_apps/code_snippets/index","Destination":"/app-builder/docs/resources/sample_apps/code_snippets/"},{"Source":"/app-builder/docs/resources/sample_apps/code_snippets/files/","Destination":"/app-builder/docs/resources/sample_apps/code_snippets/files"},{"Source":"/app-builder/docs/resources/sample_apps/code_snippets/events/","Destination":"/app-builder/docs/resources/sample_apps/code_snippets/events"},{"Source":"/app-builder/docs/resources/sample_apps/code_snippets/analytics/","Destination":"/app-builder/docs/resources/sample_apps/code_snippets/analytics"},{"Source":"/app-builder/docs/resources/journaling-events/welldone/","Destination":"/app-builder/docs/resources/journaling-events/welldone"},{"Source":"/app-builder/docs/resources/journaling-events/requirements/","Destination":"/app-builder/docs/resources/journaling-events/requirements"},{"Source":"/app-builder/docs/resources/journaling-events/lesson3/","Destination":"/app-builder/docs/resources/journaling-events/lesson3"},{"Source":"/app-builder/docs/resources/journaling-events/lesson2/","Destination":"/app-builder/docs/resources/journaling-events/lesson2"},{"Source":"/app-builder/docs/resources/journaling-events/lesson1/","Destination":"/app-builder/docs/resources/journaling-events/lesson1"},{"Source":"/app-builder/docs/resources/journaling-events","Destination":"/app-builder/docs/resources/journaling-events/"},{"Source":"/app-builder/docs/resources/journaling-events/index","Destination":"/app-builder/docs/resources/journaling-events/"},{"Source":"/app-builder/docs/resources/events-runtime/welldone/","Destination":"/app-builder/docs/resources/events-runtime/welldone"},{"Source":"/app-builder/docs/resources/events-runtime/requirements/","Destination":"/app-builder/docs/resources/events-runtime/requirements"},{"Source":"/app-builder/docs/resources/events-runtime/lesson2/","Destination":"/app-builder/docs/resources/events-runtime/lesson2"},{"Source":"/app-builder/docs/resources/events-runtime/lesson1/","Destination":"/app-builder/docs/resources/events-runtime/lesson1"},{"Source":"/app-builder/docs/resources/events-runtime","Destination":"/app-builder/docs/resources/events-runtime/"},{"Source":"/app-builder/docs/resources/events-runtime/index","Destination":"/app-builder/docs/resources/events-runtime/"},{"Source":"/app-builder/docs/resources/event-driven/welldone/","Destination":"/app-builder/docs/resources/event-driven/welldone"},{"Source":"/app-builder/docs/resources/event-driven/requirements/","Destination":"/app-builder/docs/resources/event-driven/requirements"},{"Source":"/app-builder/docs/resources/event-driven/lesson4/","Destination":"/app-builder/docs/resources/event-driven/lesson4"},{"Source":"/app-builder/docs/resources/event-driven/lesson3/","Destination":"/app-builder/docs/resources/event-driven/lesson3"},{"Source":"/app-builder/docs/resources/event-driven/lesson2/","Destination":"/app-builder/docs/resources/event-driven/lesson2"},{"Source":"/app-builder/docs/resources/event-driven/lesson1/","Destination":"/app-builder/docs/resources/event-driven/lesson1"},{"Source":"/app-builder/docs/resources/event-driven","Destination":"/app-builder/docs/resources/event-driven/"},{"Source":"/app-builder/docs/resources/event-driven/index","Destination":"/app-builder/docs/resources/event-driven/"},{"Source":"/app-builder/docs/resources/debugging/welldone/","Destination":"/app-builder/docs/resources/debugging/welldone"},{"Source":"/app-builder/docs/resources/debugging/requirements/","Destination":"/app-builder/docs/resources/debugging/requirements"},{"Source":"/app-builder/docs/resources/debugging/lesson3/","Destination":"/app-builder/docs/resources/debugging/lesson3"},{"Source":"/app-builder/docs/resources/debugging/lesson2/","Destination":"/app-builder/docs/resources/debugging/lesson2"},{"Source":"/app-builder/docs/resources/debugging/lesson1/","Destination":"/app-builder/docs/resources/debugging/lesson1"},{"Source":"/app-builder/docs/resources/debugging","Destination":"/app-builder/docs/resources/debugging/"},{"Source":"/app-builder/docs/resources/debugging/index","Destination":"/app-builder/docs/resources/debugging/"},{"Source":"/app-builder/docs/resources/customer-dashboard/welldone/","Destination":"/app-builder/docs/resources/customer-dashboard/welldone"},{"Source":"/app-builder/docs/resources/customer-dashboard/requirements/","Destination":"/app-builder/docs/resources/customer-dashboard/requirements"},{"Source":"/app-builder/docs/resources/customer-dashboard/lesson5/","Destination":"/app-builder/docs/resources/customer-dashboard/lesson5"},{"Source":"/app-builder/docs/resources/customer-dashboard/lesson4/","Destination":"/app-builder/docs/resources/customer-dashboard/lesson4"},{"Source":"/app-builder/docs/resources/customer-dashboard/lesson3/","Destination":"/app-builder/docs/resources/customer-dashboard/lesson3"},{"Source":"/app-builder/docs/resources/customer-dashboard/lesson2/","Destination":"/app-builder/docs/resources/customer-dashboard/lesson2"},{"Source":"/app-builder/docs/resources/customer-dashboard/lesson1/","Destination":"/app-builder/docs/resources/customer-dashboard/lesson1"},{"Source":"/app-builder/docs/resources/customer-dashboard","Destination":"/app-builder/docs/resources/customer-dashboard/"},{"Source":"/app-builder/docs/resources/customer-dashboard/index","Destination":"/app-builder/docs/resources/customer-dashboard/"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/welldone/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/welldone"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/requirements/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/requirements"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/our-worker/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/our-worker"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/lesson5/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/lesson5"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/lesson4/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/lesson4"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/lesson3/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/lesson3"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/lesson2/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/lesson2"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/lesson1/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/lesson1"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/index","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/aem-cloud-assets/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/aem-cloud-assets"},{"Source":"/app-builder/docs/resources/cron-jobs/welldone/","Destination":"/app-builder/docs/resources/cron-jobs/welldone"},{"Source":"/app-builder/docs/resources/cron-jobs/requirements/","Destination":"/app-builder/docs/resources/cron-jobs/requirements"},{"Source":"/app-builder/docs/resources/cron-jobs/lesson3/","Destination":"/app-builder/docs/resources/cron-jobs/lesson3"},{"Source":"/app-builder/docs/resources/cron-jobs/lesson2/","Destination":"/app-builder/docs/resources/cron-jobs/lesson2"},{"Source":"/app-builder/docs/resources/cron-jobs/lesson1/","Destination":"/app-builder/docs/resources/cron-jobs/lesson1"},{"Source":"/app-builder/docs/resources/cron-jobs","Destination":"/app-builder/docs/resources/cron-jobs/"},{"Source":"/app-builder/docs/resources/cron-jobs/index","Destination":"/app-builder/docs/resources/cron-jobs/"},{"Source":"/app-builder/docs/resources/ci-cd/welldone/","Destination":"/app-builder/docs/resources/ci-cd/welldone"},{"Source":"/app-builder/docs/resources/ci-cd/requirements/","Destination":"/app-builder/docs/resources/ci-cd/requirements"},{"Source":"/app-builder/docs/resources/ci-cd/lesson3/","Destination":"/app-builder/docs/resources/ci-cd/lesson3"},{"Source":"/app-builder/docs/resources/ci-cd/lesson2/","Destination":"/app-builder/docs/resources/ci-cd/lesson2"},{"Source":"/app-builder/docs/resources/ci-cd/lesson1/","Destination":"/app-builder/docs/resources/ci-cd/lesson1"},{"Source":"/app-builder/docs/resources/ci-cd","Destination":"/app-builder/docs/resources/ci-cd/"},{"Source":"/app-builder/docs/resources/ci-cd/index","Destination":"/app-builder/docs/resources/ci-cd/"},{"Source":"/app-builder/docs/resources/barcode-reader/welldone/","Destination":"/app-builder/docs/resources/barcode-reader/welldone"},{"Source":"/app-builder/docs/resources/barcode-reader/test/","Destination":"/app-builder/docs/resources/barcode-reader/test"},{"Source":"/app-builder/docs/resources/barcode-reader/requirements/","Destination":"/app-builder/docs/resources/barcode-reader/requirements"},{"Source":"/app-builder/docs/resources/barcode-reader","Destination":"/app-builder/docs/resources/barcode-reader/"},{"Source":"/app-builder/docs/resources/barcode-reader/index","Destination":"/app-builder/docs/resources/barcode-reader/"},{"Source":"/app-builder/docs/resources/barcode-reader/bootstrap/","Destination":"/app-builder/docs/resources/barcode-reader/bootstrap"},{"Source":"/app-builder/docs/resources/barcode-reader/barcode/","Destination":"/app-builder/docs/resources/barcode-reader/barcode"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api/welldone/","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/welldone"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api/requirements/","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/requirements"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson4/","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson4"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson3/","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson3"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson2/","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson2"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson1/","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson1"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api/index","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/"},{"Source":"/app-builder/docs/intro_and_overview/what-is-app-builder/","Destination":"/app-builder/docs/intro_and_overview/what-is-app-builder"},{"Source":"/app-builder/docs/intro_and_overview","Destination":"/app-builder/docs/intro_and_overview/"},{"Source":"/app-builder/docs/intro_and_overview/index","Destination":"/app-builder/docs/intro_and_overview/"},{"Source":"/app-builder/docs/intro_and_overview/faq/","Destination":"/app-builder/docs/intro_and_overview/faq"},{"Source":"/app-builder/docs/intro_and_overview/community/","Destination":"/app-builder/docs/intro_and_overview/community"},{"Source":"/app-builder/docs/intro_and_overview/business-case/","Destination":"/app-builder/docs/intro_and_overview/business-case"},{"Source":"/app-builder/docs/guides/references/","Destination":"/app-builder/docs/guides/references"},{"Source":"/app-builder/docs/guides","Destination":"/app-builder/docs/guides/"},{"Source":"/app-builder/docs/guides/index","Destination":"/app-builder/docs/guides/"},{"Source":"/app-builder/docs/guides/contribution-guide/","Destination":"/app-builder/docs/guides/contribution-guide"},{"Source":"/app-builder/docs/guides/runtime_guides/using-runtime/","Destination":"/app-builder/docs/guides/runtime_guides/using-runtime"},{"Source":"/app-builder/docs/guides/runtime_guides/using-packages/","Destination":"/app-builder/docs/guides/runtime_guides/using-packages"},{"Source":"/app-builder/docs/guides/runtime_guides/troubleshooting/","Destination":"/app-builder/docs/guides/runtime_guides/troubleshooting"},{"Source":"/app-builder/docs/guides/runtime_guides/throughput-tuning/","Destination":"/app-builder/docs/guides/runtime_guides/throughput-tuning"},{"Source":"/app-builder/docs/guides/runtime_guides/system-settings/","Destination":"/app-builder/docs/guides/runtime_guides/system-settings"},{"Source":"/app-builder/docs/guides/runtime_guides/security-general/","Destination":"/app-builder/docs/guides/runtime_guides/security-general"},{"Source":"/app-builder/docs/guides/runtime_guides/securing-web-actions/","Destination":"/app-builder/docs/guides/runtime_guides/securing-web-actions"},{"Source":"/app-builder/docs/guides/runtime_guides/logging-monitoring/","Destination":"/app-builder/docs/guides/runtime_guides/logging-monitoring"},{"Source":"/app-builder/docs/guides/runtime_guides","Destination":"/app-builder/docs/guides/runtime_guides/"},{"Source":"/app-builder/docs/guides/runtime_guides/index","Destination":"/app-builder/docs/guides/runtime_guides/"},{"Source":"/app-builder/docs/guides/runtime_guides/debugging/","Destination":"/app-builder/docs/guides/runtime_guides/debugging"},{"Source":"/app-builder/docs/guides/runtime_guides/creating-rest-apis/","Destination":"/app-builder/docs/guides/runtime_guides/creating-rest-apis"},{"Source":"/app-builder/docs/guides/runtime_guides/creating-actions/","Destination":"/app-builder/docs/guides/runtime_guides/creating-actions"},{"Source":"/app-builder/docs/guides/runtime_guides/ci-cd-pipeline/","Destination":"/app-builder/docs/guides/runtime_guides/ci-cd-pipeline"},{"Source":"/app-builder/docs/guides/runtime_guides/asynchronous-calls/","Destination":"/app-builder/docs/guides/runtime_guides/asynchronous-calls"},{"Source":"/app-builder/docs/guides/runtime_guides/tools","Destination":"/app-builder/docs/guides/runtime_guides/tools/"},{"Source":"/app-builder/docs/guides/runtime_guides/tools/index","Destination":"/app-builder/docs/guides/runtime_guides/tools/"},{"Source":"/app-builder/docs/guides/runtime_guides/tools/cli-install/","Destination":"/app-builder/docs/guides/runtime_guides/tools/cli-install"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/wsk-use/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/wsk-use"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/triggersrules/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/triggersrules"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/sequences-compositions/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/sequences-compositions"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/runtimes/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/runtimes"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/prepackages/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/prepackages"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/packages/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/packages"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/multiple-regions/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/multiple-regions"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/index","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/feeds/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/feeds"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/environment-variables/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/environment-variables"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/configuringproxy/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/configuringproxy"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/cli-use/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/cli-use"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/api-ref/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/api-ref"},{"Source":"/app-builder/docs/guides/app_builder_guides/telemetry/","Destination":"/app-builder/docs/guides/app_builder_guides/telemetry"},{"Source":"/app-builder/docs/guides/app_builder_guides/optimization/","Destination":"/app-builder/docs/guides/app_builder_guides/optimization"},{"Source":"/app-builder/docs/guides/app_builder_guides","Destination":"/app-builder/docs/guides/app_builder_guides/"},{"Source":"/app-builder/docs/guides/app_builder_guides/index","Destination":"/app-builder/docs/guides/app_builder_guides/"},{"Source":"/app-builder/docs/guides/app_builder_guides/distribution/","Destination":"/app-builder/docs/guides/app_builder_guides/distribution"},{"Source":"/app-builder/docs/guides/app_builder_guides/development/","Destination":"/app-builder/docs/guides/app_builder_guides/development"},{"Source":"/app-builder/docs/guides/app_builder_guides/application-state/","Destination":"/app-builder/docs/guides/app_builder_guides/application-state"},{"Source":"/app-builder/docs/guides/app_builder_guides/security/understanding-authentication/","Destination":"/app-builder/docs/guides/app_builder_guides/security/understanding-authentication"},{"Source":"/app-builder/docs/guides/app_builder_guides/security","Destination":"/app-builder/docs/guides/app_builder_guides/security/"},{"Source":"/app-builder/docs/guides/app_builder_guides/security/index","Destination":"/app-builder/docs/guides/app_builder_guides/security/"},{"Source":"/app-builder/docs/guides/app_builder_guides/extensions/extensions/","Destination":"/app-builder/docs/guides/app_builder_guides/extensions/extensions"},{"Source":"/app-builder/docs/guides/app_builder_guides/extensions/extension-migration-guide/","Destination":"/app-builder/docs/guides/app_builder_guides/extensions/extension-migration-guide"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/migrate-app-to-exp-cloud-spa/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/migrate-app-to-exp-cloud-spa"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/aec-integration/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/aec-integration"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/user/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/user"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/topbar/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/topbar"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/page/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/page"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/modules","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/index","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userinfo/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userinfo"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userapi/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userapi"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapiproperties/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapiproperties"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapi/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapi"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-solution/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-solution"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-callback/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-callback"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/runtime/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/runtime"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-pageapiproperties/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-pageapiproperties"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-pageapi/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-pageapi"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-objectwithpath/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-objectwithpath"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-objectwithhref/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-objectwithhref"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/modules/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/modules"},{"Source":"/app-builder/docs/guides/app_builder_guides/events/webhooks/","Destination":"/app-builder/docs/guides/app_builder_guides/events/webhooks"},{"Source":"/app-builder/docs/guides/app_builder_guides/events/custom-events/","Destination":"/app-builder/docs/guides/app_builder_guides/events/custom-events"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/setting-response-headers/","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/setting-response-headers"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/deployment/","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/deployment"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/credential-rotation/","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/credential-rotation"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/cicd-for-app-builder-apps/","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/cicd-for-app-builder-apps"},{"Source":"/app-builder/docs/guides/app_builder_guides/configuration/webpack-configuration/","Destination":"/app-builder/docs/guides/app_builder_guides/configuration/webpack-configuration"},{"Source":"/app-builder/docs/guides/app_builder_guides/configuration/configuration/","Destination":"/app-builder/docs/guides/app_builder_guides/configuration/configuration"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/using-sdks/","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/using-sdks"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/introduction-to-react-spectrum/","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/introduction-to-react-spectrum"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/architecture-overview/","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/architecture-overview"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/app-hooks/","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/app-hooks"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk-enterprise/","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk-enterprise"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk-cloud/","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk-cloud"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/new-relic/","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/new-relic"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/logging/","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/logging"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/azure-log-analytics/","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/azure-log-analytics"},{"Source":"/app-builder/docs/getting_started/first-app/","Destination":"/app-builder/docs/getting_started/first-app"},{"Source":"/app-builder/docs/get_started","Destination":"/app-builder/docs/get_started/"},{"Source":"/app-builder/docs/get_started/index","Destination":"/app-builder/docs/get_started/"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/understanding-runtime/","Destination":"/app-builder/docs/get_started/runtime_getting_started/understanding-runtime"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/setup/","Destination":"/app-builder/docs/get_started/runtime_getting_started/setup"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/resources/","Destination":"/app-builder/docs/get_started/runtime_getting_started/resources"},{"Source":"/app-builder/docs/get_started/runtime_getting_started","Destination":"/app-builder/docs/get_started/runtime_getting_started/"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/index","Destination":"/app-builder/docs/get_started/runtime_getting_started/"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/how-runtime-works/","Destination":"/app-builder/docs/get_started/runtime_getting_started/how-runtime-works"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/entities/","Destination":"/app-builder/docs/get_started/runtime_getting_started/entities"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/deploy/","Destination":"/app-builder/docs/get_started/runtime_getting_started/deploy"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/activations/","Destination":"/app-builder/docs/get_started/runtime_getting_started/activations"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/troubleshoot/","Destination":"/app-builder/docs/get_started/app_builder_get_started/troubleshoot"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/set-up/","Destination":"/app-builder/docs/get_started/app_builder_get_started/set-up"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/publish-app/","Destination":"/app-builder/docs/get_started/app_builder_get_started/publish-app"},{"Source":"/app-builder/docs/get_started/app_builder_get_started","Destination":"/app-builder/docs/get_started/app_builder_get_started/"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/index","Destination":"/app-builder/docs/get_started/app_builder_get_started/"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/first-app/","Destination":"/app-builder/docs/get_started/app_builder_get_started/first-app"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/app-builder-intro/","Destination":"/app-builder/docs/get_started/app_builder_get_started/app-builder-intro"},{"Source":"/app-builder/docs/resources/blog_articles","Destination":"/app-builder/docs/resources/blog-articles"},{"Source":"/app-builder/docs/resources/transclusions/_requirements","Destination":"/app-builder/docs/resources/transclusions/requirements"},{"Source":"/app-builder/docs/intro_and_overview/what_is_app_builder","Destination":"/app-builder/docs/intro_and_overview/what-is-app-builder"},{"Source":"/app-builder/docs/intro_and_overview/business_case","Destination":"/app-builder/docs/intro_and_overview/business-case"},{"Source":"/app-builder/docs/guides/contribution_guide","Destination":"/app-builder/docs/guides/contribution-guide"},{"Source":"/app-builder/docs/guides/runtime_guides/using_runtime","Destination":"/app-builder/docs/guides/runtime_guides/using-runtime"},{"Source":"/app-builder/docs/guides/runtime_guides/using_packages","Destination":"/app-builder/docs/guides/runtime_guides/using-packages"},{"Source":"/app-builder/docs/guides/runtime_guides/throughput_tuning","Destination":"/app-builder/docs/guides/runtime_guides/throughput-tuning"},{"Source":"/app-builder/docs/guides/runtime_guides/system_settings","Destination":"/app-builder/docs/guides/runtime_guides/system-settings"},{"Source":"/app-builder/docs/guides/runtime_guides/security_general","Destination":"/app-builder/docs/guides/runtime_guides/security-general"},{"Source":"/app-builder/docs/guides/runtime_guides/securing_web_actions","Destination":"/app-builder/docs/guides/runtime_guides/securing-web-actions"},{"Source":"/app-builder/docs/guides/runtime_guides/logging_monitoring","Destination":"/app-builder/docs/guides/runtime_guides/logging-monitoring"},{"Source":"/app-builder/docs/guides/runtime_guides/creating_rest_apis","Destination":"/app-builder/docs/guides/runtime_guides/creating-rest-apis"},{"Source":"/app-builder/docs/guides/runtime_guides/creating_actions","Destination":"/app-builder/docs/guides/runtime_guides/creating-actions"},{"Source":"/app-builder/docs/guides/runtime_guides/ci-cd_pipeline","Destination":"/app-builder/docs/guides/runtime_guides/ci-cd-pipeline"},{"Source":"/app-builder/docs/guides/runtime_guides/asynchronous_calls","Destination":"/app-builder/docs/guides/runtime_guides/asynchronous-calls"},{"Source":"/app-builder/docs/guides/runtime_guides/tools/cli_install","Destination":"/app-builder/docs/guides/runtime_guides/tools/cli-install"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/wsk_use","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/wsk-use"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/sequences_compositions","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/sequences-compositions"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/multiple_regions","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/multiple-regions"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/environment_variables","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/environment-variables"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/cli_use","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/cli-use"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/api_ref","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/api-ref"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_state","Destination":"/app-builder/docs/guides/app_builder_guides/application-state"},{"Source":"/app-builder/docs/guides/app_builder_guides/security/understanding_authentication","Destination":"/app-builder/docs/guides/app_builder_guides/security/understanding-authentication"},{"Source":"/app-builder/docs/guides/app_builder_guides/extensions/extension_migration_guide","Destination":"/app-builder/docs/guides/app_builder_guides/extensions/extension-migration-guide"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/migrate_app_to_exp_cloud_spa","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/migrate-app-to-exp-cloud-spa"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/aec_integration","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/aec-integration"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user.userinfo","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userinfo"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user.userapi","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userapi"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.topbarapiproperties","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapiproperties"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.topbarapi","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapi"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.solution","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-solution"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.helpcenterfeedbackconfig","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-helpcenterfeedbackconfig"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.externalfeedbackconfig","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-externalfeedbackconfig"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.customsearchconfig","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-customsearchconfig"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.customfeedbackconfig","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-customfeedbackconfig"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.callback","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-callback"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page.pageapiproperties","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-pageapiproperties"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page.pageapi","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-pageapi"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page.objectwithpath","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-objectwithpath"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page.objectwithhref","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-objectwithhref"},{"Source":"/app-builder/docs/guides/app_builder_guides/events/custom_events","Destination":"/app-builder/docs/guides/app_builder_guides/events/custom-events"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/setting_response_headers","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/setting-response-headers"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/credential_rotation","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/credential-rotation"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/cicd_for_app_builder_apps","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/cicd-for-app-builder-apps"},{"Source":"/app-builder/docs/guides/app_builder_guides/configuration/webpack_configuration","Destination":"/app-builder/docs/guides/app_builder_guides/configuration/webpack-configuration"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/using_sdks","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/using-sdks"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/introduction_to_react_spectrum","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/introduction-to-react-spectrum"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/architecture_overview","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/architecture-overview"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/app_hooks","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/app-hooks"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk_enterprise","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk-enterprise"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk_cloud","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk-cloud"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/new_relic","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/new-relic"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/azure_log_analytics","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/azure-log-analytics"},{"Source":"/app-builder/docs/getting_started/first_app","Destination":"/app-builder/docs/getting_started/first-app"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/understanding_runtime","Destination":"/app-builder/docs/get_started/runtime_getting_started/understanding-runtime"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/how_runtime_works","Destination":"/app-builder/docs/get_started/runtime_getting_started/how-runtime-works"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/set_up","Destination":"/app-builder/docs/get_started/app_builder_get_started/set-up"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/publish_app","Destination":"/app-builder/docs/get_started/app_builder_get_started/publish-app"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/first_app","Destination":"/app-builder/docs/get_started/app_builder_get_started/first-app"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/app_builder_intro","Destination":"/app-builder/docs/get_started/app_builder_get_started/app-builder-intro"}],":type":"sheet"} \ No newline at end of file diff --git a/src/pages/resources/asset-compute-worker-ps-api/lesson1.md b/src/pages/resources/asset-compute-worker-ps-api/lesson1.md index fcc3b70c1..edb00102a 100644 --- a/src/pages/resources/asset-compute-worker-ps-api/lesson1.md +++ b/src/pages/resources/asset-compute-worker-ps-api/lesson1.md @@ -11,13 +11,13 @@ title: 'Lesson 1: Create an App Builder app from the Asset Compute template' # Lesson 1: Create an App Builder App from the Asset Compute Template -To begin this Code Lab, you should have [a project already created from App Builder Template in Adobe Developer Console](../../get_started/app_builder_get_started/first_app.md#2-create-a-new-project-on-developer-console). Please add the `Asset Compute` and `Adobe Photoshop APIs (Trial)` services to the workspace that you are using for the Code Lab. +To begin this Code Lab, you should have [a project already created from App Builder Template in Adobe Developer Console](../../get_started/app_builder_get_started/first-app.md#2-create-a-new-project-on-developer-console). Please add the `Asset Compute` and `Adobe Photoshop APIs (Trial)` services to the workspace that you are using for the Code Lab. ![Console Workspace](assets/console-workspace.png) Make sure to have the Adobe I/O CLI installed locally. In your terminal, execute the command `aio app init `. -If you have not logged in already, this command prompts a browser asking you to sign into the Adobe Developer Console with your Adobe ID. See [here](../../get_started/app_builder_get_started/first_app.md#3-sign-in-from-the-CLI) for more information on signing in from the CLI. +If you have not logged in already, this command prompts a browser asking you to sign into the Adobe Developer Console with your Adobe ID. See [here](../../get_started/app_builder_get_started/first-app.md#3-sign-in-from-the-CLI) for more information on signing in from the CLI. After logging in, follow the prompts in the CLI and select the Organization, Project, and Workspace to use for the application. Choose the project and workspace you created when you set up your environment. When prompted `Which extension point(s) do you wish to implement? `, make sure to select `DX Asset Compute Worker`: diff --git a/src/pages/resources/blog_articles.md b/src/pages/resources/blog-articles.md similarity index 100% rename from src/pages/resources/blog_articles.md rename to src/pages/resources/blog-articles.md diff --git a/src/pages/resources/ci-cd/index.md b/src/pages/resources/ci-cd/index.md index 3ec62bf7a..b89189f6b 100644 --- a/src/pages/resources/ci-cd/index.md +++ b/src/pages/resources/ci-cd/index.md @@ -18,7 +18,7 @@ App Builder allows you to manage multiple environments called workspaces. Each w * Content Delivery Network (CDN) delegation and sub-domain provisioned on adobeio-static.net * Related credentials and secrets (API Key, access token, Runtime namespace credentials...) -We recommend reviewing the [App Builder CI/CD documentation](../../guides/app_builder_guides/deployment/cicd_for_app_builder_apps.md) to learn more about the architectural details. +We recommend reviewing the [App Builder CI/CD documentation](../../guides/app_builder_guides/deployment/cicd-for-app-builder-apps.md) to learn more about the architectural details. This Code Lab will show you how to create a CI/CD worflow for a stage and production environment using [Github actions](https://github.com/features/actions) within an App Builder App. diff --git a/src/pages/resources/cron-jobs/index.md b/src/pages/resources/cron-jobs/index.md index dbb47ae97..7b0e98947 100644 --- a/src/pages/resources/cron-jobs/index.md +++ b/src/pages/resources/cron-jobs/index.md @@ -17,4 +17,4 @@ This Code Lab will guide you through creating cron jobs in an App Builder applic App Builder simplifies the process of building Cloud Native Applications that use Adobe I/O Runtime, which is based on OpenWhisk and uses its architecture to provide function-as-a-service (FaaS). -For [headless applications](../../guides/app_builder_guides/architecture_overview/architecture_overview.md#headless-applications), you may need to set up recurring jobs or tasks, such as invoking a data importing action every hour. To achieve that, you could use [OpenWhisk Alarms Package](https://github.com/apache/openwhisk-package-alarms) to fire a trigger at a specified frequency. +For [headless applications](../../guides/app_builder_guides/architecture_overview/architecture-overview.md#headless-applications), you may need to set up recurring jobs or tasks, such as invoking a data importing action every hour. To achieve that, you could use [OpenWhisk Alarms Package](https://github.com/apache/openwhisk-package-alarms) to fire a trigger at a specified frequency. diff --git a/src/pages/resources/cron-jobs/lesson1.md b/src/pages/resources/cron-jobs/lesson1.md index 9538e9c3d..fde34c267 100644 --- a/src/pages/resources/cron-jobs/lesson1.md +++ b/src/pages/resources/cron-jobs/lesson1.md @@ -12,7 +12,7 @@ title: 'Lesson 1: Bootstrap a Headless App' # Lesson 1: Bootstrap a Headless App First, you need a new headless app created with AIO CLI. This app needs only a simple action to test the cron job, so all other components have been deselected. -Follow this, from [Creating your First App Builder Application](../../get_started/app_builder_get_started/first_app.md) +Follow this, from [Creating your First App Builder Application](../../get_started/app_builder_get_started/first-app.md) ![app-init](assets/app-init.png) diff --git a/src/pages/resources/customer-dashboard/lesson2.md b/src/pages/resources/customer-dashboard/lesson2.md index 5081e11d3..8f040ff76 100644 --- a/src/pages/resources/customer-dashboard/lesson2.md +++ b/src/pages/resources/customer-dashboard/lesson2.md @@ -47,9 +47,9 @@ runtimeManifest: Your app currently has only one action, `get-profiles`: * Source code is at `src/dx-excshell-1/actions/get-profiles/index.js` -* It is a [web action](../../guides/runtime_guides/creating_actions.md) +* It is a [web action](../../guides/runtime_guides/creating-actions.md) * The action will be run in the `nodejs:18` [runtime container on I/O Runtime](../../guides/runtime_guides/reference_docs/runtimes.md#node-js-v18-14-2) -* It has some [default parameters](../../guides/runtime_guides/creating_actions.md#working-with-parameters) such as `LOG_LEVEL`, `tenant`, `apiKey`, which are automatically available in the `params` object of the action without passing it to the action for every invocation. The `final` annotation set as `true` reveals that those parameters are immutable. +* It has some [default parameters](../../guides/runtime_guides/creating-actions.md#working-with-parameters) such as `LOG_LEVEL`, `tenant`, `apiKey`, which are automatically available in the `params` object of the action without passing it to the action for every invocation. The `final` annotation set as `true` reveals that those parameters are immutable. * Setting the `require-adobe-auth` annotation as `true` enables this action to be protected by the Adobe IMS user token in the request header. Without it, the action will return a `401 Unauthorized` error. Now let's take a deeper look at the action's source code: diff --git a/src/pages/resources/debugging/requirements.md b/src/pages/resources/debugging/requirements.md index 16d1edcbf..73511f6ea 100644 --- a/src/pages/resources/debugging/requirements.md +++ b/src/pages/resources/debugging/requirements.md @@ -15,4 +15,4 @@ import Requirements from '../transclusions/_requirements.md' ## Code Lab Environment -The optional [Visual Studio Code](../../get_started/app_builder_get_started/set_up.md#optional-tool) IDE is required for this lab. Please make sure it is installed. +The optional [Visual Studio Code](../../get_started/app_builder_get_started/set-up.md#optional-tool) IDE is required for this lab. Please make sure it is installed. diff --git a/src/pages/resources/event-driven/lesson1.md b/src/pages/resources/event-driven/lesson1.md index cd5f25d88..31e7e6224 100644 --- a/src/pages/resources/event-driven/lesson1.md +++ b/src/pages/resources/event-driven/lesson1.md @@ -37,7 +37,7 @@ To use the custom events CLI plugin, you need this information from the console ## Initialize an App Builder app using a CLI template -To initialize an App Builder app, let's use the `init` command from the CLI. For more information, please refer to [Creating your First App Builder App](../../get_started/app_builder_get_started/first_app.md). +To initialize an App Builder app, let's use the `init` command from the CLI. For more information, please refer to [Creating your First App Builder App](../../get_started/app_builder_get_started/first-app.md). ```bash aio app init --no-extensions @@ -53,6 +53,6 @@ You will be presented with several options: Once you have named your action, you have created your App Builder template and can use it to start your app. -For this lab, you will use this generic template to create a web page. If this is your first time using App Builder, please follow the instructions at [Creating your First App Builder App](../../get_started/app_builder_get_started/first_app.md). +For this lab, you will use this generic template to create a web page. If this is your first time using App Builder, please follow the instructions at [Creating your First App Builder App](../../get_started/app_builder_get_started/first-app.md). In the next lesson, we will show how to use the custom events plugin to register this app as event provider and click the `invoke` button to fire an event. The event will be consumed by Journaling API, webhook URL, and runtime action. diff --git a/src/pages/resources/event-driven/lesson3.md b/src/pages/resources/event-driven/lesson3.md index 12e5ad3a5..10973d8aa 100644 --- a/src/pages/resources/event-driven/lesson3.md +++ b/src/pages/resources/event-driven/lesson3.md @@ -57,9 +57,9 @@ application: In the template code: * Source code is at `actions/publish-events/index.js` -* It is a [web action](../../guides/runtime_guides/creating_actions.md#invoking-web-actions) +* It is a [web action](../../guides/runtime_guides/creating-actions.md#invoking-web-actions) * The action will be run in the `nodejs:18` [runtime container on I/O Runtime](../../guides/runtime_guides/reference_docs/runtimes.md#nodejs-v18142) -* It has some [default parameters](../../guides/runtime_guides/creating_actions.md#working-with-parameters) such as `LOG_LEVEL`, and those you can pass in your `params` like `apiKey`, `provideId` and `eventCode`from `manifest.yml` +* It has some [default parameters](../../guides/runtime_guides/creating-actions.md#working-with-parameters) such as `LOG_LEVEL`, and those you can pass in your `params` like `apiKey`, `provideId` and `eventCode`from `manifest.yml` ```javascript const { Core, Events } = require('@adobe/aio-sdk') diff --git a/src/pages/resources/journaling-events/index.md b/src/pages/resources/journaling-events/index.md index 7bfb202ef..b3dee690c 100644 --- a/src/pages/resources/journaling-events/index.md +++ b/src/pages/resources/journaling-events/index.md @@ -33,7 +33,7 @@ This Code Lab provides an end-to-end solution that demonstrates how to use the J - **Event consumer**, the most important demonstration in this Code Lab. We will create another App Builder headless app to create cron jobs with alarms, and set up recurring jobs to pull from the Journaling API every x mins and write into App Builder storage. Event provider and event consumer both need to be deployed as App Builder apps under different namespaces to endsure end-to-end workflow. -If you don't have them already, create two projects at Console following the steps detailed in [Creating your First App Builder Application](../../get_started/app_builder_get_started/first_app.md). +If you don't have them already, create two projects at Console following the steps detailed in [Creating your First App Builder Application](../../get_started/app_builder_get_started/first-app.md). When they are successfully set up, you should be able to see your event consumer periodically pull events from the Journaling API and write them into storage. For your convenience, there is a complete solution of this Code Lab [here](https://github.com/AdobeDocs/adobeio-samples-journaling-events). diff --git a/src/pages/resources/sample_apps/code_snippets/index.md b/src/pages/resources/sample_apps/code_snippets/index.md index b35f7b79d..15551f8bf 100644 --- a/src/pages/resources/sample_apps/code_snippets/index.md +++ b/src/pages/resources/sample_apps/code_snippets/index.md @@ -9,7 +9,7 @@ title: App Builder Code Snippets - Caching HTTP responses # Caching HTTP responses -Demonstrates how to cache the response of an action at Gateway level. To test this functionality, make sure that the Cache-Control header in your HTTP request is not set to `no-cache`, the default if you use Postman or your browser's developer tools. More information is available [here](../../../guides/runtime_guides/throughput_tuning.md#caching-responses). +Demonstrates how to cache the response of an action at Gateway level. To test this functionality, make sure that the Cache-Control header in your HTTP request is not set to `no-cache`, the default if you use Postman or your browser's developer tools. More information is available [here](../../../guides/runtime_guides/throughput-tuning.md#caching-responses). ```javascript const { Core } = require('@adobe/aio-sdk') diff --git a/src/pages/resources/spectrum-intro/lesson4.md b/src/pages/resources/spectrum-intro/lesson4.md index d1f722e44..2a8514dda 100644 --- a/src/pages/resources/spectrum-intro/lesson4.md +++ b/src/pages/resources/spectrum-intro/lesson4.md @@ -22,7 +22,7 @@ You'll see several options for your app to include, such as serverless actions, ## Single-Page application -This will generate a single-page application project using [React](https://reactjs.org/) and [Experience Cloud Shell](../../guides/app_builder_guides/exc_app/aec_integration.md) utilities to integrate the SPA within the Adobe Experience Cloud. +This will generate a single-page application project using [React](https://reactjs.org/) and [Experience Cloud Shell](../../guides/app_builder_guides/exc_app/aec-integration.md) utilities to integrate the SPA within the Adobe Experience Cloud. The best ways to use Experience Shell (for example, routing) will be covered in another Code Lab. App Builder SPAs follow [JAMstack principles](https://jamstack.org/): "Fast and secure apps delivered by pre-rendering files and serving them directly from a Content Delivery Network." diff --git a/src/pages/resources/transclusions/_requirements.md b/src/pages/resources/transclusions/requirements.md similarity index 82% rename from src/pages/resources/transclusions/_requirements.md rename to src/pages/resources/transclusions/requirements.md index a506ee5ba..da0ca3922 100644 --- a/src/pages/resources/transclusions/_requirements.md +++ b/src/pages/resources/transclusions/requirements.md @@ -15,6 +15,6 @@ This Code Lab is useful for anyone getting started with developing App Builder a If you haven't already, please follow these links to have your environment set up before starting the Code Lab: -* [How to Get Access to App Builder](../../get_started/app_builder_get_started/set_up.md#access-and-credentials) -* [Setting up Your Environment](../../get_started/app_builder_get_started/set_up.md#local-environment-setup) -* [Creating your First App Builder App](../../get_started/app_builder_get_started/first_app.md) +* [How to Get Access to App Builder](../../get_started/app_builder_get_started/set-up.md#access-and-credentials) +* [Setting up Your Environment](../../get_started/app_builder_get_started/set-up.md#local-environment-setup) +* [Creating your First App Builder App](../../get_started/app_builder_get_started/first-app.md) diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 000000000..3f2480ed1 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,12 @@ +const path = require('path'); + +module.exports = { + entry: './gatsby-config.js', + output: { + path: path.resolve(__dirname, 'build/'), + filename: 'gatsbyConfig.js', + library: 'gatsbyConfig', + libraryTarget: 'commonjs2', + umdNamedDefine: true + } +}; \ No newline at end of file From 5eb48e622feb6ffd533c45cf4adc0935cb071148 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 7 May 2025 21:53:48 -0700 Subject: [PATCH 002/116] update scripts and file paths --- src/pages/config.md | 384 +++++++++--------- src/pages/guides/app_builder_guides/index.md | 2 +- .../runtime_guides/creating-rest-apis.md | 2 +- src/pages/guides/runtime_guides/index.md | 2 +- src/pages/redirects.json | 2 +- src/pages/resources/videos/index.md | 4 +- ...e-user-journey.md => e2-e-user-journey.md} | 0 7 files changed, 198 insertions(+), 198 deletions(-) rename src/pages/resources/videos/overview/{e2e-user-journey.md => e2-e-user-journey.md} (100%) diff --git a/src/pages/config.md b/src/pages/config.md index 47b918ebb..e1ae49c07 100644 --- a/src/pages/config.md +++ b/src/pages/config.md @@ -5,228 +5,228 @@ - [App Builder](/app-builder) - pages: - - [Overview](intro_and_overview) - - [Getting Started](get_started) - - [Guides](guides) - - [Resources](resources) + - [Overview](intro_and_overview/index.md) + - [Getting Started](get_started/index.md) + - [Guides](guides/index.md) + - [Resources](resources/index.md) - subPages: - [Introduction](intro_and_overview/index.md) - [App Builder Overview](intro_and_overview/index.md) - - [What is App Builder](intro_and_overview/what_is_app_builder/) - - [Business Case](intro_and_overview/business_case/) - - [FAQ](intro_and_overview/faq/) - - [Community](intro_and_overview/community/) + - [What is App Builder](intro_and_overview/what-is-app-builder.md) + - [Business Case](intro_and_overview/business-case.md) + - [FAQ](intro_and_overview/faq.md) + - [Community](intro_and_overview/community.md) - [Quick Start](get_started/index.md) - - [App Builder Getting Started](get_started/app_builder_get_started/app_builder_intro/) - - [Setting Up](get_started/app_builder_get_started/set_up/) - - [Creating your First App](get_started/app_builder_get_started/first_app/) - - [Publishing Your App](get_started/app_builder_get_started/publish_app/) - - [Troubleshooting](get_started/app_builder_get_started/troubleshoot/) + - [App Builder Getting Started](get_started/app_builder_get_started/app-builder-intro.md) + - [Setting Up](get_started/app_builder_get_started/set-up.md) + - [Creating your First App](get_started/app_builder_get_started/first-app.md) + - [Publishing Your App](get_started/app_builder_get_started/publish-app.md) + - [Troubleshooting](get_started/app_builder_get_started/troubleshoot.md) - [Runtime Getting Started](get_started/runtime_getting_started/index.md) - [Overview](get_started/runtime_getting_started/index.md) - - [Activations](get_started/runtime_getting_started/activations/) - - [Deploy](get_started/runtime_getting_started/deploy/) - - [Entities](get_started/runtime_getting_started/entities/) - - [How Runtime Works](get_started/runtime_getting_started/how_runtime_works/) - - [Resources](get_started/runtime_getting_started/resources/) - - [Setup](get_started/runtime_getting_started/setup/) - - [Understanding Runtime](get_started/runtime_getting_started/understanding_runtime/) + - [Activations](get_started/runtime_getting_started/activations.md) + - [Deploy](get_started/runtime_getting_started/deploy.md) + - [Entities](get_started/runtime_getting_started/entities.md) + - [How Runtime Works](get_started/runtime_getting_started/how-runtime-works.md) + - [Resources](get_started/runtime_getting_started/resources.md) + - [Setup](get_started/runtime_getting_started/setup.md) + - [Understanding Runtime](get_started/runtime_getting_started/understanding-runtime.md) - [Develop](guides/index.md) - - [References](guides/references/) + - [References](guides/references.md) - [App Builder Guides](guides/app_builder_guides/index.md) - - [Architecture Overview](guides/app_builder_guides/architecture_overview/architecture_overview/) - - [App Hooks](guides/app_builder_guides/architecture_overview/app_hooks/) - - [Introduction to React Spectrum](guides/app_builder_guides/architecture_overview/introduction_to_react_spectrum/) - - [Using SDKs](guides/app_builder_guides/architecture_overview/using_sdks/) - - [Application State](guides/app_builder_guides/application_state/) - - [Application Logging](guides/app_builder_guides/application_logging/logging/) - - [Azure Log Analytics](guides/app_builder_guides/application_logging/azure_log_analytics/) - - [New Relic](guides/app_builder_guides/application_logging/new_relic/) - - [Splunk Cloud](guides/app_builder_guides/application_logging/splunk_cloud/) - - [Splunk Enterprise](guides/app_builder_guides/application_logging/splunk_enterprise/) - - [Configuration](guides/app_builder_guides/configuration/configuration/) - - [Webpack Configuration](guides/app_builder_guides/configuration/webpack_configuration/) - - [Deployment](guides/app_builder_guides/deployment/deployment/) - - [CI/CD for App Builder Apps](guides/app_builder_guides/deployment/cicd_for_app_builder_apps/) - - [Credential Rotation](guides/app_builder_guides/deployment/credential_rotation/) - - [Setting Response Headers](guides/app_builder_guides/deployment/setting_response_headers/) - - [Development](guides/app_builder_guides/development/) - - [Distribution](guides/app_builder_guides/distribution/) - - [Events](guides/app_builder_guides/events/custom_events/) - - [Webhooks](guides/app_builder_guides/events/webhooks/) - - [Exc App](guides/app_builder_guides/exc_app/aec_integration/) + - [Architecture Overview](guides/app_builder_guides/architecture_overview/architecture-overview.md) + - [App Hooks](guides/app_builder_guides/architecture_overview/app-hooks.md) + - [Introduction to React Spectrum](guides/app_builder_guides/architecture_overview/introduction-to-react-spectrum.md) + - [Using SDKs](guides/app_builder_guides/architecture_overview/using-sdks.md) + - [Application State](guides/app_builder_guides/application-state.md) + - [Application Logging](guides/app_builder_guides/application_logging/logging.md) + - [Azure Log Analytics](guides/app_builder_guides/application_logging/azure-log-analytics.md) + - [New Relic](guides/app_builder_guides/application_logging/new-relic.md) + - [Splunk Cloud](guides/app_builder_guides/application_logging/splunk-cloud.md) + - [Splunk Enterprise](guides/app_builder_guides/application_logging/splunk-enterprise.md) + - [Configuration](guides/app_builder_guides/configuration/configuration.md) + - [Webpack Configuration](guides/app_builder_guides/configuration/webpack-configuration.md) + - [Deployment](guides/app_builder_guides/deployment/deployment.md) + - [CI/CD for App Builder Apps](guides/app_builder_guides/deployment/cicd-for-app-builder-apps.md) + - [Credential Rotation](guides/app_builder_guides/deployment/credential-rotation.md) + - [Setting Response Headers](guides/app_builder_guides/deployment/setting-response-headers.md) + - [Development](guides/app_builder_guides/development.md) + - [Distribution](guides/app_builder_guides/distribution.md) + - [Events](guides/app_builder_guides/events/custom-events.md) + - [Webhooks](guides/app_builder_guides/events/webhooks.md) + - [Exc App](guides/app_builder_guides/exc_app/aec-integration.md) - [Interfaces](guides/app_builder_guides/exc_app/interfaces/) - - [Modules](guides/app_builder_guides/exc_app/interfaces/modules/) - - [Page ObjectWithHref](guides/app_builder_guides/exc_app/interfaces/page.objectwithhref/) - - [Page ObjectWithPath](guides/app_builder_guides/exc_app/interfaces/page.objectwithpath/) - - [Page PageAPI](guides/app_builder_guides/exc_app/interfaces/page.pageapi/) - - [Page PageAPIProperties](guides/app_builder_guides/exc_app/interfaces/page.pageapiproperties/) - - [Runtime](guides/app_builder_guides/exc_app/interfaces/runtime/) - - [TopBar Callback](guides/app_builder_guides/exc_app/interfaces/topbar.callback/) - - [TopBar CustomFeedbackConfig](guides/app_builder_guides/exc_app/interfaces/topbar.customfeedbackconfig/) - - [TopBar CustomSearchConfig](guides/app_builder_guides/exc_app/interfaces/topbar.customsearchconfig/) - - [TopBar ExternalFeedbackConfig](guides/app_builder_guides/exc_app/interfaces/topbar.externalfeedbackconfig/) - - [TopBar HelpCenterFeedbackConfig](guides/app_builder_guides/exc_app/interfaces/topbar.helpcenterfeedbackconfig/) - - [TopBar Solution](guides/app_builder_guides/exc_app/interfaces/topbar.solution/) - - [TopBar TopBarAPI](guides/app_builder_guides/exc_app/interfaces/topbar.topbarapi/) - - [TopBar TopBarAPIProperties](guides/app_builder_guides/exc_app/interfaces/topbar.topbarapiproperties/) - - [User UserAPI](guides/app_builder_guides/exc_app/interfaces/user.userapi/) - - [User UserInfo](guides/app_builder_guides/exc_app/interfaces/user.userinfo/) - - [Migrate App to Exp Cloud SPA](guides/app_builder_guides/exc_app/migrate_app_to_exp_cloud_spa/) + - [Modules](guides/app_builder_guides/exc_app/interfaces/modules.md) + - [Page ObjectWithHref](guides/app_builder_guides/exc_app/interfaces/page-objectwithhref.md) + - [Page ObjectWithPath](guides/app_builder_guides/exc_app/interfaces/page-objectwithpath.md) + - [Page PageAPI](guides/app_builder_guides/exc_app/interfaces/page-pageapi.md) + - [Page PageAPIProperties](guides/app_builder_guides/exc_app/interfaces/page-pageapiproperties.md) + - [Runtime](guides/app_builder_guides/exc_app/interfaces/runtime.md) + - [TopBar Callback](guides/app_builder_guides/exc_app/interfaces/topbar-callback.md) + - [TopBar CustomFeedbackConfig](guides/app_builder_guides/exc_app/interfaces/topbar-customfeedbackconfig.md) + - [TopBar CustomSearchConfig](guides/app_builder_guides/exc_app/interfaces/topbar-customsearchconfig.md) + - [TopBar ExternalFeedbackConfig](guides/app_builder_guides/exc_app/interfaces/topbar-externalfeedbackconfig.md) + - [TopBar HelpCenterFeedbackConfig](guides/app_builder_guides/exc_app/interfaces/topbar-helpcenterfeedbackconfig.md) + - [TopBar Solution](guides/app_builder_guides/exc_app/interfaces/topbar-solution.md) + - [TopBar TopBarAPI](guides/app_builder_guides/exc_app/interfaces/topbar-topbarapi.md) + - [TopBar TopBarAPIProperties](guides/app_builder_guides/exc_app/interfaces/topbar-topbarapiproperties.md) + - [User UserAPI](guides/app_builder_guides/exc_app/interfaces/user-userapi.md) + - [User UserInfo](guides/app_builder_guides/exc_app/interfaces/user-userinfo.md) + - [Migrate App to Exp Cloud SPA](guides/app_builder_guides/exc_app/migrate-app-to-exp-cloud-spa.md) - [Modules](guides/app_builder_guides/exc_app/modules/index.md) - - [Page](guides/app_builder_guides/exc_app/modules/page/) - - [TopBar](guides/app_builder_guides/exc_app/modules/topbar/) - - [User](guides/app_builder_guides/exc_app/modules/user/) - - [Extensions](guides/app_builder_guides/extensions/extensions/) - - [Extension Migration Guide](guides/app_builder_guides/extensions/extension_migration_guide/) - - [Optimization](guides/app_builder_guides/optimization/) + - [Page](guides/app_builder_guides/exc_app/modules/page.md) + - [TopBar](guides/app_builder_guides/exc_app/modules/topbar.md) + - [User](guides/app_builder_guides/exc_app/modules/user.md) + - [Extensions](guides/app_builder_guides/extensions/extensions.md) + - [Extension Migration Guide](guides/app_builder_guides/extensions/extension-migration-guide.md) + - [Optimization](guides/app_builder_guides/optimization.md) - [Security](guides/app_builder_guides/security/index.md) - - [Understanding Authentication](guides/app_builder_guides/security/understanding_authentication/) + - [Understanding Authentication](guides/app_builder_guides/security/understanding-authentication.md) - [Telemetry](guides/app_builder_guides/telemetry/) - [Runtime Guides](guides/runtime_guides/index.md) - - [Contribution Guide](guides/contribution_guide/) - - [Asynchronous Calls](guides/runtime_guides/asynchronous_calls/) - - [Creating Actions](guides/runtime_guides/creating_actions/) - - [Creating REST APIs](guides/runtime_guides/creating_rest_apis/) - - [CI/CD Pipeline](guides/runtime_guides/ci-cd_pipeline/) - - [Debugging](guides/runtime_guides/debugging/) - - [Logging & Monitoring](guides/runtime_guides/logging_monitoring/) + - [Contribution Guide](guides/contribution-guide.md) + - [Asynchronous Calls](guides/runtime_guides/asynchronous-calls.md) + - [Creating Actions](guides/runtime_guides/creating-actions.md) + - [Creating REST APIs](guides/runtime_guides/creating-rest-apis.md) + - [CI/CD Pipeline](guides/runtime_guides/ci-cd-pipeline.md) + - [Debugging](guides/runtime_guides/debugging.md) + - [Logging & Monitoring](guides/runtime_guides/logging-monitoring.md) - [Reference Docs](guides/runtime_guides/reference_docs/index.md) - - [API Reference](guides/runtime_guides/reference_docs/api_ref/) - - [CLI Usage](guides/runtime_guides/reference_docs/cli_use/) - - [Configuring Proxy](guides/runtime_guides/reference_docs/configuringproxy/) - - [Environment Variables](guides/runtime_guides/reference_docs/environment_variables/) - - [Feeds](guides/runtime_guides/reference_docs/feeds/) - - [Multiple Regions](guides/runtime_guides/reference_docs/multiple_regions/) - - [Packages](guides/runtime_guides/reference_docs/packages/) - - [Prepackages](guides/runtime_guides/reference_docs/prepackages/) - - [Runtimes](guides/runtime_guides/reference_docs/runtimes/) - - [Sequences & Compositions](guides/runtime_guides/reference_docs/sequences_compositions/) - - [Triggers & Rules](guides/runtime_guides/reference_docs/triggersrules/) - - [WSK Usage](guides/runtime_guides/reference_docs/wsk_use/) - - [Security General](guides/runtime_guides/security_general/) - - [Securing Web Actions](guides/runtime_guides/securing_web_actions/) - - [System Settings](guides/runtime_guides/system_settings/) - - [Throughput Tuning](guides/runtime_guides/throughput_tuning/) + - [API Reference](guides/runtime_guides/reference_docs/api-ref.md) + - [CLI Usage](guides/runtime_guides/reference_docs/cli-use.md) + - [Configuring Proxy](guides/runtime_guides/reference_docs/configuringproxy.md) + - [Environment Variables](guides/runtime_guides/reference_docs/environment-variables.md) + - [Feeds](guides/runtime_guides/reference_docs/feeds.md) + - [Multiple Regions](guides/runtime_guides/reference_docs/multiple-regions.md) + - [Packages](guides/runtime_guides/reference_docs/packages.md) + - [Prepackages](guides/runtime_guides/reference_docs/prepackages.md) + - [Runtimes](guides/runtime_guides/reference_docs/runtimes.md) + - [Sequences & Compositions](guides/runtime_guides/reference_docs/sequences-compositions.md) + - [Triggers & Rules](guides/runtime_guides/reference_docs/triggersrules.md) + - [WSK Usage](guides/runtime_guides/reference_docs/wsk-use.md) + - [Security General](guides/runtime_guides/security-general.md) + - [Securing Web Actions](guides/runtime_guides/securing-web-actions.md) + - [System Settings](guides/runtime_guides/system-settings.md) + - [Throughput Tuning](guides/runtime_guides/throughput-tuning.md) - [Tools](guides/runtime_guides/tools/index.md) - - [CLI Install](guides/runtime_guides/tools/cli_install/) - - [Troubleshooting](guides/runtime_guides/troubleshooting/) - - [Using Packages](guides/runtime_guides/using_packages/) - - [Using Runtime](guides/runtime_guides/using_runtime/) - - [Contribution Guide](guides/contribution_guide/) + - [CLI Install](guides/runtime_guides/tools/cli-install.md) + - [Troubleshooting](guides/runtime_guides/troubleshooting.md) + - [Using Packages](guides/runtime_guides/using-packages.md) + - [Using Runtime](guides/runtime_guides/using-runtime.md) + - [Contribution Guide](guides/contribution-guide.md) - [Learning](resources/index.md) - [Asset Compute Worker PS API](resources/asset-compute-worker-ps-api/index.md) - - [Requirements](resources/asset-compute-worker-ps-api/requirements/) - - [Lesson 1: Create an app from Asset Compute template](resources/asset-compute-worker-ps-api/lesson1/) - - [Lesson 2: Configure the app](resources/asset-compute-worker-ps-api/lesson2/) - - [Lesson 3: Develop worker calling Photoshop API](resources/asset-compute-worker-ps-api/lesson3/) - - [Lesson 4: Integrate worker in AEMaaCS](resources/asset-compute-worker-ps-api/lesson4/) - - [Well done](resources/asset-compute-worker-ps-api/welldone/) + - [Requirements](resources/asset-compute-worker-ps-api/requirements.md) + - [Lesson 1: Create an app from Asset Compute template](resources/asset-compute-worker-ps-api/lesson1.md) + - [Lesson 2: Configure the app](resources/asset-compute-worker-ps-api/lesson2.md) + - [Lesson 3: Develop worker calling Photoshop API](resources/asset-compute-worker-ps-api/lesson3.md) + - [Lesson 4: Integrate worker in AEMaaCS](resources/asset-compute-worker-ps-api/lesson4.md) + - [Well done](resources/asset-compute-worker-ps-api/welldone.md) - [Barcode Reader](resources/barcode-reader/index.md) - - [Requirements](resources/barcode-reader/requirements/) - - [Lesson 1: Bootstrap a Headless App](resources/barcode-reader/bootstrap/) - - [Lesson 2: Writing a Serverless Action](resources/barcode-reader/barcode/) - - [Lesson 3: Unit and E2E Tests](resources/barcode-reader/test/) - - [Well done](resources/barcode-reader/welldone/) - - [Blog Articles](resources/blog_articles/) - - [Blog Articles](resources/blog_articles/blog_articles/) + - [Requirements](resources/barcode-reader/requirements.md) + - [Lesson 1: Bootstrap a Headless App](resources/barcode-reader/bootstrap.md) + - [Lesson 2: Writing a Serverless Action](resources/barcode-reader/barcode.md) + - [Lesson 3: Unit and E2E Tests](resources/barcode-reader/test.md) + - [Well done](resources/barcode-reader/welldone.md) + - [Blog Articles](resources/blog-articles.md) + - [Blog Articles](resources/blog-articles.md) - [CI/CD](resources/ci-cd/index.md) - - [Requirements](resources/ci-cd/requirements/) - - [Lesson 1: Setup CI/CD](resources/ci-cd/lesson1/) - - [Lesson 2: Monitoring CI/CD](resources/ci-cd/lesson2/) - - [Lesson 3: Custom CI/CD workflow](resources/ci-cd/lesson3/) - - [Well done](resources/ci-cd/welldone/) + - [Requirements](resources/ci-cd/requirements.md) + - [Lesson 1: Setup CI/CD](resources/ci-cd/lesson1.md) + - [Lesson 2: Monitoring CI/CD](resources/ci-cd/lesson2.md) + - [Lesson 3: Custom CI/CD workflow](resources/ci-cd/lesson3.md) + - [Well done](resources/ci-cd/welldone.md) - [Cron Jobs](resources/cron-jobs/index.md) - - [Requirements](resources/cron-jobs/requirements/) - - [Lesson 1: Bootstrap a Headless App](resources/cron-jobs/lesson1/) - - [Lesson 2: Set up Alarm Feed with Trigger and Rule](resources/cron-jobs/lesson2/) - - [Lesson 3: Types of Alarm Feed](resources/cron-jobs/lesson3/) - - [Well done](resources/cron-jobs/welldone/) + - [Requirements](resources/cron-jobs/requirements.md) + - [Lesson 1: Bootstrap a Headless App](resources/cron-jobs/lesson1.md) + - [Lesson 2: Set up Alarm Feed with Trigger and Rule](resources/cron-jobs/lesson2.md) + - [Lesson 3: Types of Alarm Feed](resources/cron-jobs/lesson3.md) + - [Well done](resources/cron-jobs/welldone.md) - [Custom Asset Compute Worker](resources/custom-asset-compute-worker/index.md) - - [Requirements](resources/custom-asset-compute-worker/requirements/) - - [How AEM as Cloud assets works](resources/custom-asset-compute-worker/aem-cloud-assets/) - - [Architecture of our worker](resources/custom-asset-compute-worker/our-worker/) - - [Configure services](resources/custom-asset-compute-worker/lesson1/) - - [Local environment setup](resources/custom-asset-compute-worker/lesson2/) - - [Implement the worker](resources/custom-asset-compute-worker/lesson3/) - - [Test the worker](resources/custom-asset-compute-worker/lesson4/) - - [Setup AEM to use the worker](resources/custom-asset-compute-worker/lesson5/) - - [Well Done](resources/custom-asset-compute-worker/welldone/) + - [Requirements](resources/custom-asset-compute-worker/requirements.md) + - [How AEM as Cloud assets works](resources/custom-asset-compute-worker/aem-cloud-assets.md) + - [Architecture of our worker](resources/custom-asset-compute-worker/our-worker.md) + - [Configure services](resources/custom-asset-compute-worker/lesson1.md) + - [Local environment setup](resources/custom-asset-compute-worker/lesson2.md) + - [Implement the worker](resources/custom-asset-compute-worker/lesson3.md) + - [Test the worker](resources/custom-asset-compute-worker/lesson4.md) + - [Setup AEM to use the worker](resources/custom-asset-compute-worker/lesson5.md) + - [Well Done](resources/custom-asset-compute-worker/welldone.md) - [Customer Dashboard](resources/customer-dashboard/index.md) - - [Requirements](resources/customer-dashboard/requirements/) - - [Lesson 1: Create a New App Builder App from Campaign Standard Template](resources/customer-dashboard/lesson1/) - - [Lesson 2: Explore the App Builder App](resources/customer-dashboard/lesson2/) - - [Lesson 3: Run the App Builder App Locally](resources/customer-dashboard/lesson3/) - - [Lesson 4: List All Customer Profiles on the UI](resources/customer-dashboard/lesson4/) - - [Lesson 5: Add Personalized Promotion Emails Triggering](resources/customer-dashboard/lesson5/) - - [Well Done](resources/customer-dashboard/welldone/) + - [Requirements](resources/customer-dashboard/requirements.md) + - [Lesson 1: Create a New App Builder App from Campaign Standard Template](resources/customer-dashboard/lesson1.md) + - [Lesson 2: Explore the App Builder App](resources/customer-dashboard/lesson2.md) + - [Lesson 3: Run the App Builder App Locally](resources/customer-dashboard/lesson3.md) + - [Lesson 4: List All Customer Profiles on the UI](resources/customer-dashboard/lesson4.md) + - [Lesson 5: Add Personalized Promotion Emails Triggering](resources/customer-dashboard/lesson5.md) + - [Well Done](resources/customer-dashboard/welldone.md) - [Debugging](resources/debugging/index.md) - - [Requirements](resources/debugging/requirements/) - - [Lesson 1: Getting familiar with Debugger](resources/debugging/lesson1/) - - [Lesson 2: Debugging Application Code](resources/debugging/lesson2/) - - [Lesson 3: Managing Application Logs](resources/debugging/lesson3/) - - [Well Done](resources/debugging/welldone/) + - [Requirements](resources/debugging/requirements.md) + - [Lesson 1: Getting familiar with Debugger](resources/debugging/lesson1.md) + - [Lesson 2: Debugging Application Code](resources/debugging/lesson2.md) + - [Lesson 3: Managing Application Logs](resources/debugging/lesson3.md) + - [Well Done](resources/debugging/welldone.md) - [Event Driven](resources/event-driven/index.md) - - [Requirements](resources/event-driven/requirements/) - - [Lesson 1: Create a New App Builder App from Template](resources/event-driven/lesson1/) - - [Lesson 2: Register the App as Event Provider](resources/event-driven/lesson2/) - - [Lesson 3: Fire an Event](resources/event-driven/lesson3/) - - [Lesson 4: Consume Events](resources/event-driven/lesson4/) - - [Well Done](resources/event-driven/welldone/) + - [Requirements](resources/event-driven/requirements.md) + - [Lesson 1: Create a New App Builder App from Template](resources/event-driven/lesson1.md) + - [Lesson 2: Register the App as Event Provider](resources/event-driven/lesson2.md) + - [Lesson 3: Fire an Event](resources/event-driven/lesson3.md) + - [Lesson 4: Consume Events](resources/event-driven/lesson4.md) + - [Well Done](resources/event-driven/welldone.md) - [Events Runtime](resources/events-runtime/index.md) - - [Requirements](resources/events-runtime/requirements/) - - [Lesson 1: Step by Step Guide](resources/events-runtime/lesson1/) - - [Lesson 2: Verify the result](resources/events-runtime/lesson2/) - - [Well done](resources/events-runtime/welldone/) + - [Requirements](resources/events-runtime/requirements.md) + - [Lesson 1: Step by Step Guide](resources/events-runtime/lesson1.md) + - [Lesson 2: Verify the result](resources/events-runtime/lesson2.md) + - [Well done](resources/events-runtime/welldone.md) - [Journaling Events](resources/journaling-events/index.md) - - [Requirements](resources/journaling-events/requirements/) - - [Lesson 1: Create an Event Provider using App Builder](resources/journaling-events/lesson1/) - - [Lesson 2: Create the Event Consumer using Journaling API](resources/journaling-events/lesson2/) - - [Lesson 3: End to end test](resources/journaling-events/lesson3/) - - [Well done](resources/journaling-events/welldone/) + - [Requirements](resources/journaling-events/requirements.md) + - [Lesson 1: Create an Event Provider using App Builder](resources/journaling-events/lesson1.md) + - [Lesson 2: Create the Event Consumer using Journaling API](resources/journaling-events/lesson2.md) + - [Lesson 3: End to end test](resources/journaling-events/lesson3.md) + - [Well done](resources/journaling-events/welldone.md) - [Sample Apps](resources/sample_apps/index.md) - [Code Snippets](resources/sample_apps/code_snippets/index.md) - - [Caching HTTP responses](resources/sample_apps/code_snippets/caching/) - - [App Builder Files SDK](resources/sample_apps/code_snippets/files/) - - [App Builder State SDK](resources/sample_apps/code_snippets/state/) - - [I/O Events handler](resources/sample_apps/code_snippets/events/) - - [Real-time data from Adobe Analytics API 1.4](resources/sample_apps/code_snippets/analytics/) + - [Caching HTTP responses](resources/sample_apps/code_snippets/caching) + - [App Builder Files SDK](resources/sample_apps/code_snippets/files.md) + - [App Builder State SDK](resources/sample_apps/code_snippets/state.md) + - [I/O Events handler](resources/sample_apps/code_snippets/events.md) + - [Real-time data from Adobe Analytics API 1.4](resources/sample_apps/code_snippets/analytics.md) - [Spectrum Introduction](resources/spectrum-intro/index.md) - - [Lesson 1: What is Spectrum ?](resources/spectrum-intro/lesson1/) - - [Lesson 2: Using Spectrum CSS](resources/spectrum-intro/lesson2/) - - [Lesson 3: Using React Spectrum](resources/spectrum-intro/lesson3/) - - [Lesson 4: Using React Spectrum in App Builder](resources/spectrum-intro/lesson4/) - - [Well done](resources/spectrum-intro/welldone/) + - [Lesson 1: What is Spectrum ?](resources/spectrum-intro/lesson1.md) + - [Lesson 2: Using Spectrum CSS](resources/spectrum-intro/lesson2.md) + - [Lesson 3: Using React Spectrum](resources/spectrum-intro/lesson3.md) + - [Lesson 4: Using React Spectrum in App Builder](resources/spectrum-intro/lesson4.md) + - [Well done](resources/spectrum-intro/welldone.md) - [Todo App](resources/todo-app/index.md) - - [Requirements](resources/todo-app/requirements/) - - [Lesson 1: Create a New App Builder App with the React Spectrum template](resources/todo-app/lesson1/) - - [Lesson 2: Setup Runtime actions](resources/todo-app/lesson2/) - - [Lesson 3: Setup the CreateTodoList component](resources/todo-app/lesson3/) - - [Lesson 4: Setup the Todo component](resources/todo-app/lesson4/) - - [Lesson 5: Setup the TodoList component](resources/todo-app/lesson5/) - - [Lesson 6: Bringing the pieces together to build the App](resources/todo-app/lesson6/) - - [Well done](resources/todo-app/welldone/) + - [Requirements](resources/todo-app/requirements.md) + - [Lesson 1: Create a New App Builder App with the React Spectrum template](resources/todo-app/lesson1.md) + - [Lesson 2: Setup Runtime actions](resources/todo-app/lesson2.md) + - [Lesson 3: Setup the CreateTodoList component](resources/todo-app/lesson3.md) + - [Lesson 4: Setup the Todo component](resources/todo-app/lesson4.md) + - [Lesson 5: Setup the TodoList component](resources/todo-app/lesson5.md) + - [Lesson 6: Bringing the pieces together to build the App](resources/todo-app/lesson6.md) + - [Well done](resources/todo-app/welldone.md) - [Videos](resources/videos/index.md) - - [Overview](resources/videos/overview/) - - [Introducing App Builder](resources/videos/overview/introduction/) - - [Getting Started](resources/videos/overview/getting-started/) - - [Architecture](resources/videos/overview/architecture/) - - [A Full Security Overview](resources/videos/overview/security/) - - [User Journey](resources/videos/overview/e2e-user-journey/) + - [Overview](resources/videos/overview) + - [Introducing App Builder](resources/videos/overview/introduction.md) + - [Getting Started](resources/videos/overview/getting-started.md) + - [Architecture](resources/videos/overview/architecture.md) + - [A Full Security Overview](resources/videos/overview/security.md) + - [User Journey](resources/videos/overview/e2-e-user-journey.md) - [Exploring](resources/videos/exploring/) - - [Projects and Workspaces](resources/videos/exploring/projects-and-workspaces/) - - [React Spectrum](resources/videos/exploring/react-spectrum/) - - [Custom Events](resources/videos/exploring/custom-events/) - - [CI/CD](resources/videos/exploring/ci-cd/) - - [Debugging](resources/videos/exploring/debugging/) - - [Learning Resources](resources/videos/exploring/learning-resources/) - - [Dashboard Case Study](resources/videos/exploring/dashboard-case-study/) - - [ODE Case Study](resources/videos/exploring/ode-case-study/) - - [Deep Dive Use Cases](resources/videos/exploring/deep-dive-use-cases/) - - [Live Wired Sneak](resources/videos/exploring/live-wired-sneak/) - - [Softcrylic Partner Showcase](resources/videos/exploring/softcrylic-showcase/) - - [Developers Live](resources/videos/developers-live/) - - [App Builder Deep Dive](resources/videos/developers-live/deep-dive/) - - [Asset Compute Service Extensibility](resources/videos/developers-live/asset-compute-service-extensibility/) - - [Extend Adobe Experience Cloud](resources/videos/developers-live/extend-experience-cloud/) + - [Projects and Workspaces](resources/videos/exploring/projects-and-workspaces.md) + - [React Spectrum](resources/videos/exploring/react-spectrum.md) + - [Custom Events](resources/videos/exploring/custom-events.md) + - [CI/CD](resources/videos/exploring/ci-cd.md) + - [Debugging](resources/videos/exploring/debugging.md) + - [Learning Resources](resources/videos/exploring/learning-resources.md) + - [Dashboard Case Study](resources/videos/exploring/dashboard-case-study.md) + - [ODE Case Study](resources/videos/exploring/ode-case-study.md) + - [Deep Dive Use Cases](resources/videos/exploring/deep-dive-use-cases.md) + - [Live Wired Sneak](resources/videos/exploring/live-wired-sneak.md) + - [Softcrylic Partner Showcase](resources/videos/exploring/softcrylic-showcase.md) + - [Developers Live](resources/videos/developers-live/deep-dive.md) + - [App Builder Deep Dive](resources/videos/developers-live/deep-dive.md) + - [Asset Compute Service Extensibility](resources/videos/developers-live/asset-compute-service-extensibility.md) + - [Extend Adobe Experience Cloud](resources/videos/developers-live/extend-experience-cloud.md) diff --git a/src/pages/guides/app_builder_guides/index.md b/src/pages/guides/app_builder_guides/index.md index 85a3da5b7..d2667ae2a 100644 --- a/src/pages/guides/app_builder_guides/index.md +++ b/src/pages/guides/app_builder_guides/index.md @@ -35,4 +35,4 @@ Welcome to the App Builder Guides section. Here you'll find comprehensive docume ## Next step -Return to [Guides Index](../index.md). \ No newline at end of file +Return to [Guides Index](../index.md). diff --git a/src/pages/guides/runtime_guides/creating-rest-apis.md b/src/pages/guides/runtime_guides/creating-rest-apis.md index 6e11e586f..a5245a75a 100644 --- a/src/pages/guides/runtime_guides/creating-rest-apis.md +++ b/src/pages/guides/runtime_guides/creating-rest-apis.md @@ -325,4 +325,4 @@ It can take up to five minutes to see the changes from creation or update of an ## Next step -Return to [Guides Index](../index.md). \ No newline at end of file +Return to [Guides Index](../index.md). diff --git a/src/pages/guides/runtime_guides/index.md b/src/pages/guides/runtime_guides/index.md index 3a87c012d..ae5eb7d79 100644 --- a/src/pages/guides/runtime_guides/index.md +++ b/src/pages/guides/runtime_guides/index.md @@ -41,4 +41,4 @@ Welcome to the Runtime Guides section. Here you'll find comprehensive documentat ## Next step -Return to [Guides Index](../index.md). \ No newline at end of file +Return to [Guides Index](../index.md). diff --git a/src/pages/redirects.json b/src/pages/redirects.json index ca875f46e..9772f6ea3 100644 --- a/src/pages/redirects.json +++ b/src/pages/redirects.json @@ -1 +1 @@ -{"total":300,"offset":0,"limit":300,"data":[{"Source":"/app-builder/docs/resources","Destination":"/app-builder/docs/resources/"},{"Source":"/app-builder/docs/resources/index","Destination":"/app-builder/docs/resources/"},{"Source":"/app-builder/docs/resources/blog-articles/","Destination":"/app-builder/docs/resources/blog-articles"},{"Source":"/app-builder/docs/resources/videos","Destination":"/app-builder/docs/resources/videos/"},{"Source":"/app-builder/docs/resources/videos/index","Destination":"/app-builder/docs/resources/videos/"},{"Source":"/app-builder/docs/resources/videos/overview/security/","Destination":"/app-builder/docs/resources/videos/overview/security"},{"Source":"/app-builder/docs/resources/videos/overview/introduction/","Destination":"/app-builder/docs/resources/videos/overview/introduction"},{"Source":"/app-builder/docs/resources/videos/overview/getting-started/","Destination":"/app-builder/docs/resources/videos/overview/getting-started"},{"Source":"/app-builder/docs/resources/videos/overview/e2e-user-journey/","Destination":"/app-builder/docs/resources/videos/overview/e2e-user-journey"},{"Source":"/app-builder/docs/resources/videos/overview/architecture/","Destination":"/app-builder/docs/resources/videos/overview/architecture"},{"Source":"/app-builder/docs/resources/videos/exploring/softcrylic-showcase/","Destination":"/app-builder/docs/resources/videos/exploring/softcrylic-showcase"},{"Source":"/app-builder/docs/resources/videos/exploring/react-spectrum/","Destination":"/app-builder/docs/resources/videos/exploring/react-spectrum"},{"Source":"/app-builder/docs/resources/videos/exploring/projects-and-workspaces/","Destination":"/app-builder/docs/resources/videos/exploring/projects-and-workspaces"},{"Source":"/app-builder/docs/resources/videos/exploring/ode-case-study/","Destination":"/app-builder/docs/resources/videos/exploring/ode-case-study"},{"Source":"/app-builder/docs/resources/videos/exploring/live-wired-sneak/","Destination":"/app-builder/docs/resources/videos/exploring/live-wired-sneak"},{"Source":"/app-builder/docs/resources/videos/exploring/learning-resources/","Destination":"/app-builder/docs/resources/videos/exploring/learning-resources"},{"Source":"/app-builder/docs/resources/videos/exploring/deep-dive-use-cases/","Destination":"/app-builder/docs/resources/videos/exploring/deep-dive-use-cases"},{"Source":"/app-builder/docs/resources/videos/exploring/debugging/","Destination":"/app-builder/docs/resources/videos/exploring/debugging"},{"Source":"/app-builder/docs/resources/videos/exploring/dashboard-case-study/","Destination":"/app-builder/docs/resources/videos/exploring/dashboard-case-study"},{"Source":"/app-builder/docs/resources/videos/exploring/custom-events/","Destination":"/app-builder/docs/resources/videos/exploring/custom-events"},{"Source":"/app-builder/docs/resources/videos/exploring/ci-cd/","Destination":"/app-builder/docs/resources/videos/exploring/ci-cd"},{"Source":"/app-builder/docs/resources/videos/developers-live/extend-experience-cloud/","Destination":"/app-builder/docs/resources/videos/developers-live/extend-experience-cloud"},{"Source":"/app-builder/docs/resources/videos/developers-live/deep-dive/","Destination":"/app-builder/docs/resources/videos/developers-live/deep-dive"},{"Source":"/app-builder/docs/resources/videos/developers-live/asset-compute-service-extensibility/","Destination":"/app-builder/docs/resources/videos/developers-live/asset-compute-service-extensibility"},{"Source":"/app-builder/docs/resources/transclusions/requirements/","Destination":"/app-builder/docs/resources/transclusions/requirements"},{"Source":"/app-builder/docs/resources/todo-app/welldone/","Destination":"/app-builder/docs/resources/todo-app/welldone"},{"Source":"/app-builder/docs/resources/todo-app/requirements/","Destination":"/app-builder/docs/resources/todo-app/requirements"},{"Source":"/app-builder/docs/resources/todo-app/lesson6/","Destination":"/app-builder/docs/resources/todo-app/lesson6"},{"Source":"/app-builder/docs/resources/todo-app/lesson5/","Destination":"/app-builder/docs/resources/todo-app/lesson5"},{"Source":"/app-builder/docs/resources/todo-app/lesson4/","Destination":"/app-builder/docs/resources/todo-app/lesson4"},{"Source":"/app-builder/docs/resources/todo-app/lesson3/","Destination":"/app-builder/docs/resources/todo-app/lesson3"},{"Source":"/app-builder/docs/resources/todo-app/lesson2/","Destination":"/app-builder/docs/resources/todo-app/lesson2"},{"Source":"/app-builder/docs/resources/todo-app/lesson1/","Destination":"/app-builder/docs/resources/todo-app/lesson1"},{"Source":"/app-builder/docs/resources/todo-app","Destination":"/app-builder/docs/resources/todo-app/"},{"Source":"/app-builder/docs/resources/todo-app/index","Destination":"/app-builder/docs/resources/todo-app/"},{"Source":"/app-builder/docs/resources/spectrum-intro/welldone/","Destination":"/app-builder/docs/resources/spectrum-intro/welldone"},{"Source":"/app-builder/docs/resources/spectrum-intro/requirements/","Destination":"/app-builder/docs/resources/spectrum-intro/requirements"},{"Source":"/app-builder/docs/resources/spectrum-intro/lesson4/","Destination":"/app-builder/docs/resources/spectrum-intro/lesson4"},{"Source":"/app-builder/docs/resources/spectrum-intro/lesson3/","Destination":"/app-builder/docs/resources/spectrum-intro/lesson3"},{"Source":"/app-builder/docs/resources/spectrum-intro/lesson2/","Destination":"/app-builder/docs/resources/spectrum-intro/lesson2"},{"Source":"/app-builder/docs/resources/spectrum-intro/lesson1/","Destination":"/app-builder/docs/resources/spectrum-intro/lesson1"},{"Source":"/app-builder/docs/resources/spectrum-intro","Destination":"/app-builder/docs/resources/spectrum-intro/"},{"Source":"/app-builder/docs/resources/spectrum-intro/index","Destination":"/app-builder/docs/resources/spectrum-intro/"},{"Source":"/app-builder/docs/resources/sample_apps","Destination":"/app-builder/docs/resources/sample_apps/"},{"Source":"/app-builder/docs/resources/sample_apps/index","Destination":"/app-builder/docs/resources/sample_apps/"},{"Source":"/app-builder/docs/resources/sample_apps/demo/","Destination":"/app-builder/docs/resources/sample_apps/demo"},{"Source":"/app-builder/docs/resources/sample_apps/code_snippets/state/","Destination":"/app-builder/docs/resources/sample_apps/code_snippets/state"},{"Source":"/app-builder/docs/resources/sample_apps/code_snippets","Destination":"/app-builder/docs/resources/sample_apps/code_snippets/"},{"Source":"/app-builder/docs/resources/sample_apps/code_snippets/index","Destination":"/app-builder/docs/resources/sample_apps/code_snippets/"},{"Source":"/app-builder/docs/resources/sample_apps/code_snippets/files/","Destination":"/app-builder/docs/resources/sample_apps/code_snippets/files"},{"Source":"/app-builder/docs/resources/sample_apps/code_snippets/events/","Destination":"/app-builder/docs/resources/sample_apps/code_snippets/events"},{"Source":"/app-builder/docs/resources/sample_apps/code_snippets/analytics/","Destination":"/app-builder/docs/resources/sample_apps/code_snippets/analytics"},{"Source":"/app-builder/docs/resources/journaling-events/welldone/","Destination":"/app-builder/docs/resources/journaling-events/welldone"},{"Source":"/app-builder/docs/resources/journaling-events/requirements/","Destination":"/app-builder/docs/resources/journaling-events/requirements"},{"Source":"/app-builder/docs/resources/journaling-events/lesson3/","Destination":"/app-builder/docs/resources/journaling-events/lesson3"},{"Source":"/app-builder/docs/resources/journaling-events/lesson2/","Destination":"/app-builder/docs/resources/journaling-events/lesson2"},{"Source":"/app-builder/docs/resources/journaling-events/lesson1/","Destination":"/app-builder/docs/resources/journaling-events/lesson1"},{"Source":"/app-builder/docs/resources/journaling-events","Destination":"/app-builder/docs/resources/journaling-events/"},{"Source":"/app-builder/docs/resources/journaling-events/index","Destination":"/app-builder/docs/resources/journaling-events/"},{"Source":"/app-builder/docs/resources/events-runtime/welldone/","Destination":"/app-builder/docs/resources/events-runtime/welldone"},{"Source":"/app-builder/docs/resources/events-runtime/requirements/","Destination":"/app-builder/docs/resources/events-runtime/requirements"},{"Source":"/app-builder/docs/resources/events-runtime/lesson2/","Destination":"/app-builder/docs/resources/events-runtime/lesson2"},{"Source":"/app-builder/docs/resources/events-runtime/lesson1/","Destination":"/app-builder/docs/resources/events-runtime/lesson1"},{"Source":"/app-builder/docs/resources/events-runtime","Destination":"/app-builder/docs/resources/events-runtime/"},{"Source":"/app-builder/docs/resources/events-runtime/index","Destination":"/app-builder/docs/resources/events-runtime/"},{"Source":"/app-builder/docs/resources/event-driven/welldone/","Destination":"/app-builder/docs/resources/event-driven/welldone"},{"Source":"/app-builder/docs/resources/event-driven/requirements/","Destination":"/app-builder/docs/resources/event-driven/requirements"},{"Source":"/app-builder/docs/resources/event-driven/lesson4/","Destination":"/app-builder/docs/resources/event-driven/lesson4"},{"Source":"/app-builder/docs/resources/event-driven/lesson3/","Destination":"/app-builder/docs/resources/event-driven/lesson3"},{"Source":"/app-builder/docs/resources/event-driven/lesson2/","Destination":"/app-builder/docs/resources/event-driven/lesson2"},{"Source":"/app-builder/docs/resources/event-driven/lesson1/","Destination":"/app-builder/docs/resources/event-driven/lesson1"},{"Source":"/app-builder/docs/resources/event-driven","Destination":"/app-builder/docs/resources/event-driven/"},{"Source":"/app-builder/docs/resources/event-driven/index","Destination":"/app-builder/docs/resources/event-driven/"},{"Source":"/app-builder/docs/resources/debugging/welldone/","Destination":"/app-builder/docs/resources/debugging/welldone"},{"Source":"/app-builder/docs/resources/debugging/requirements/","Destination":"/app-builder/docs/resources/debugging/requirements"},{"Source":"/app-builder/docs/resources/debugging/lesson3/","Destination":"/app-builder/docs/resources/debugging/lesson3"},{"Source":"/app-builder/docs/resources/debugging/lesson2/","Destination":"/app-builder/docs/resources/debugging/lesson2"},{"Source":"/app-builder/docs/resources/debugging/lesson1/","Destination":"/app-builder/docs/resources/debugging/lesson1"},{"Source":"/app-builder/docs/resources/debugging","Destination":"/app-builder/docs/resources/debugging/"},{"Source":"/app-builder/docs/resources/debugging/index","Destination":"/app-builder/docs/resources/debugging/"},{"Source":"/app-builder/docs/resources/customer-dashboard/welldone/","Destination":"/app-builder/docs/resources/customer-dashboard/welldone"},{"Source":"/app-builder/docs/resources/customer-dashboard/requirements/","Destination":"/app-builder/docs/resources/customer-dashboard/requirements"},{"Source":"/app-builder/docs/resources/customer-dashboard/lesson5/","Destination":"/app-builder/docs/resources/customer-dashboard/lesson5"},{"Source":"/app-builder/docs/resources/customer-dashboard/lesson4/","Destination":"/app-builder/docs/resources/customer-dashboard/lesson4"},{"Source":"/app-builder/docs/resources/customer-dashboard/lesson3/","Destination":"/app-builder/docs/resources/customer-dashboard/lesson3"},{"Source":"/app-builder/docs/resources/customer-dashboard/lesson2/","Destination":"/app-builder/docs/resources/customer-dashboard/lesson2"},{"Source":"/app-builder/docs/resources/customer-dashboard/lesson1/","Destination":"/app-builder/docs/resources/customer-dashboard/lesson1"},{"Source":"/app-builder/docs/resources/customer-dashboard","Destination":"/app-builder/docs/resources/customer-dashboard/"},{"Source":"/app-builder/docs/resources/customer-dashboard/index","Destination":"/app-builder/docs/resources/customer-dashboard/"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/welldone/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/welldone"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/requirements/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/requirements"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/our-worker/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/our-worker"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/lesson5/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/lesson5"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/lesson4/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/lesson4"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/lesson3/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/lesson3"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/lesson2/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/lesson2"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/lesson1/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/lesson1"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/index","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/aem-cloud-assets/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/aem-cloud-assets"},{"Source":"/app-builder/docs/resources/cron-jobs/welldone/","Destination":"/app-builder/docs/resources/cron-jobs/welldone"},{"Source":"/app-builder/docs/resources/cron-jobs/requirements/","Destination":"/app-builder/docs/resources/cron-jobs/requirements"},{"Source":"/app-builder/docs/resources/cron-jobs/lesson3/","Destination":"/app-builder/docs/resources/cron-jobs/lesson3"},{"Source":"/app-builder/docs/resources/cron-jobs/lesson2/","Destination":"/app-builder/docs/resources/cron-jobs/lesson2"},{"Source":"/app-builder/docs/resources/cron-jobs/lesson1/","Destination":"/app-builder/docs/resources/cron-jobs/lesson1"},{"Source":"/app-builder/docs/resources/cron-jobs","Destination":"/app-builder/docs/resources/cron-jobs/"},{"Source":"/app-builder/docs/resources/cron-jobs/index","Destination":"/app-builder/docs/resources/cron-jobs/"},{"Source":"/app-builder/docs/resources/ci-cd/welldone/","Destination":"/app-builder/docs/resources/ci-cd/welldone"},{"Source":"/app-builder/docs/resources/ci-cd/requirements/","Destination":"/app-builder/docs/resources/ci-cd/requirements"},{"Source":"/app-builder/docs/resources/ci-cd/lesson3/","Destination":"/app-builder/docs/resources/ci-cd/lesson3"},{"Source":"/app-builder/docs/resources/ci-cd/lesson2/","Destination":"/app-builder/docs/resources/ci-cd/lesson2"},{"Source":"/app-builder/docs/resources/ci-cd/lesson1/","Destination":"/app-builder/docs/resources/ci-cd/lesson1"},{"Source":"/app-builder/docs/resources/ci-cd","Destination":"/app-builder/docs/resources/ci-cd/"},{"Source":"/app-builder/docs/resources/ci-cd/index","Destination":"/app-builder/docs/resources/ci-cd/"},{"Source":"/app-builder/docs/resources/barcode-reader/welldone/","Destination":"/app-builder/docs/resources/barcode-reader/welldone"},{"Source":"/app-builder/docs/resources/barcode-reader/test/","Destination":"/app-builder/docs/resources/barcode-reader/test"},{"Source":"/app-builder/docs/resources/barcode-reader/requirements/","Destination":"/app-builder/docs/resources/barcode-reader/requirements"},{"Source":"/app-builder/docs/resources/barcode-reader","Destination":"/app-builder/docs/resources/barcode-reader/"},{"Source":"/app-builder/docs/resources/barcode-reader/index","Destination":"/app-builder/docs/resources/barcode-reader/"},{"Source":"/app-builder/docs/resources/barcode-reader/bootstrap/","Destination":"/app-builder/docs/resources/barcode-reader/bootstrap"},{"Source":"/app-builder/docs/resources/barcode-reader/barcode/","Destination":"/app-builder/docs/resources/barcode-reader/barcode"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api/welldone/","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/welldone"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api/requirements/","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/requirements"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson4/","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson4"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson3/","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson3"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson2/","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson2"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson1/","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson1"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api/index","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/"},{"Source":"/app-builder/docs/intro_and_overview/what-is-app-builder/","Destination":"/app-builder/docs/intro_and_overview/what-is-app-builder"},{"Source":"/app-builder/docs/intro_and_overview","Destination":"/app-builder/docs/intro_and_overview/"},{"Source":"/app-builder/docs/intro_and_overview/index","Destination":"/app-builder/docs/intro_and_overview/"},{"Source":"/app-builder/docs/intro_and_overview/faq/","Destination":"/app-builder/docs/intro_and_overview/faq"},{"Source":"/app-builder/docs/intro_and_overview/community/","Destination":"/app-builder/docs/intro_and_overview/community"},{"Source":"/app-builder/docs/intro_and_overview/business-case/","Destination":"/app-builder/docs/intro_and_overview/business-case"},{"Source":"/app-builder/docs/guides/references/","Destination":"/app-builder/docs/guides/references"},{"Source":"/app-builder/docs/guides","Destination":"/app-builder/docs/guides/"},{"Source":"/app-builder/docs/guides/index","Destination":"/app-builder/docs/guides/"},{"Source":"/app-builder/docs/guides/contribution-guide/","Destination":"/app-builder/docs/guides/contribution-guide"},{"Source":"/app-builder/docs/guides/runtime_guides/using-runtime/","Destination":"/app-builder/docs/guides/runtime_guides/using-runtime"},{"Source":"/app-builder/docs/guides/runtime_guides/using-packages/","Destination":"/app-builder/docs/guides/runtime_guides/using-packages"},{"Source":"/app-builder/docs/guides/runtime_guides/troubleshooting/","Destination":"/app-builder/docs/guides/runtime_guides/troubleshooting"},{"Source":"/app-builder/docs/guides/runtime_guides/throughput-tuning/","Destination":"/app-builder/docs/guides/runtime_guides/throughput-tuning"},{"Source":"/app-builder/docs/guides/runtime_guides/system-settings/","Destination":"/app-builder/docs/guides/runtime_guides/system-settings"},{"Source":"/app-builder/docs/guides/runtime_guides/security-general/","Destination":"/app-builder/docs/guides/runtime_guides/security-general"},{"Source":"/app-builder/docs/guides/runtime_guides/securing-web-actions/","Destination":"/app-builder/docs/guides/runtime_guides/securing-web-actions"},{"Source":"/app-builder/docs/guides/runtime_guides/logging-monitoring/","Destination":"/app-builder/docs/guides/runtime_guides/logging-monitoring"},{"Source":"/app-builder/docs/guides/runtime_guides","Destination":"/app-builder/docs/guides/runtime_guides/"},{"Source":"/app-builder/docs/guides/runtime_guides/index","Destination":"/app-builder/docs/guides/runtime_guides/"},{"Source":"/app-builder/docs/guides/runtime_guides/debugging/","Destination":"/app-builder/docs/guides/runtime_guides/debugging"},{"Source":"/app-builder/docs/guides/runtime_guides/creating-rest-apis/","Destination":"/app-builder/docs/guides/runtime_guides/creating-rest-apis"},{"Source":"/app-builder/docs/guides/runtime_guides/creating-actions/","Destination":"/app-builder/docs/guides/runtime_guides/creating-actions"},{"Source":"/app-builder/docs/guides/runtime_guides/ci-cd-pipeline/","Destination":"/app-builder/docs/guides/runtime_guides/ci-cd-pipeline"},{"Source":"/app-builder/docs/guides/runtime_guides/asynchronous-calls/","Destination":"/app-builder/docs/guides/runtime_guides/asynchronous-calls"},{"Source":"/app-builder/docs/guides/runtime_guides/tools","Destination":"/app-builder/docs/guides/runtime_guides/tools/"},{"Source":"/app-builder/docs/guides/runtime_guides/tools/index","Destination":"/app-builder/docs/guides/runtime_guides/tools/"},{"Source":"/app-builder/docs/guides/runtime_guides/tools/cli-install/","Destination":"/app-builder/docs/guides/runtime_guides/tools/cli-install"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/wsk-use/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/wsk-use"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/triggersrules/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/triggersrules"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/sequences-compositions/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/sequences-compositions"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/runtimes/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/runtimes"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/prepackages/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/prepackages"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/packages/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/packages"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/multiple-regions/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/multiple-regions"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/index","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/feeds/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/feeds"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/environment-variables/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/environment-variables"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/configuringproxy/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/configuringproxy"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/cli-use/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/cli-use"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/api-ref/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/api-ref"},{"Source":"/app-builder/docs/guides/app_builder_guides/telemetry/","Destination":"/app-builder/docs/guides/app_builder_guides/telemetry"},{"Source":"/app-builder/docs/guides/app_builder_guides/optimization/","Destination":"/app-builder/docs/guides/app_builder_guides/optimization"},{"Source":"/app-builder/docs/guides/app_builder_guides","Destination":"/app-builder/docs/guides/app_builder_guides/"},{"Source":"/app-builder/docs/guides/app_builder_guides/index","Destination":"/app-builder/docs/guides/app_builder_guides/"},{"Source":"/app-builder/docs/guides/app_builder_guides/distribution/","Destination":"/app-builder/docs/guides/app_builder_guides/distribution"},{"Source":"/app-builder/docs/guides/app_builder_guides/development/","Destination":"/app-builder/docs/guides/app_builder_guides/development"},{"Source":"/app-builder/docs/guides/app_builder_guides/application-state/","Destination":"/app-builder/docs/guides/app_builder_guides/application-state"},{"Source":"/app-builder/docs/guides/app_builder_guides/security/understanding-authentication/","Destination":"/app-builder/docs/guides/app_builder_guides/security/understanding-authentication"},{"Source":"/app-builder/docs/guides/app_builder_guides/security","Destination":"/app-builder/docs/guides/app_builder_guides/security/"},{"Source":"/app-builder/docs/guides/app_builder_guides/security/index","Destination":"/app-builder/docs/guides/app_builder_guides/security/"},{"Source":"/app-builder/docs/guides/app_builder_guides/extensions/extensions/","Destination":"/app-builder/docs/guides/app_builder_guides/extensions/extensions"},{"Source":"/app-builder/docs/guides/app_builder_guides/extensions/extension-migration-guide/","Destination":"/app-builder/docs/guides/app_builder_guides/extensions/extension-migration-guide"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/migrate-app-to-exp-cloud-spa/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/migrate-app-to-exp-cloud-spa"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/aec-integration/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/aec-integration"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/user/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/user"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/topbar/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/topbar"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/page/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/page"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/modules","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/index","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userinfo/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userinfo"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userapi/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userapi"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapiproperties/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapiproperties"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapi/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapi"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-solution/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-solution"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-callback/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-callback"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/runtime/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/runtime"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-pageapiproperties/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-pageapiproperties"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-pageapi/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-pageapi"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-objectwithpath/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-objectwithpath"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-objectwithhref/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-objectwithhref"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/modules/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/modules"},{"Source":"/app-builder/docs/guides/app_builder_guides/events/webhooks/","Destination":"/app-builder/docs/guides/app_builder_guides/events/webhooks"},{"Source":"/app-builder/docs/guides/app_builder_guides/events/custom-events/","Destination":"/app-builder/docs/guides/app_builder_guides/events/custom-events"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/setting-response-headers/","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/setting-response-headers"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/deployment/","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/deployment"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/credential-rotation/","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/credential-rotation"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/cicd-for-app-builder-apps/","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/cicd-for-app-builder-apps"},{"Source":"/app-builder/docs/guides/app_builder_guides/configuration/webpack-configuration/","Destination":"/app-builder/docs/guides/app_builder_guides/configuration/webpack-configuration"},{"Source":"/app-builder/docs/guides/app_builder_guides/configuration/configuration/","Destination":"/app-builder/docs/guides/app_builder_guides/configuration/configuration"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/using-sdks/","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/using-sdks"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/introduction-to-react-spectrum/","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/introduction-to-react-spectrum"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/architecture-overview/","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/architecture-overview"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/app-hooks/","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/app-hooks"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk-enterprise/","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk-enterprise"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk-cloud/","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk-cloud"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/new-relic/","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/new-relic"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/logging/","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/logging"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/azure-log-analytics/","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/azure-log-analytics"},{"Source":"/app-builder/docs/getting_started/first-app/","Destination":"/app-builder/docs/getting_started/first-app"},{"Source":"/app-builder/docs/get_started","Destination":"/app-builder/docs/get_started/"},{"Source":"/app-builder/docs/get_started/index","Destination":"/app-builder/docs/get_started/"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/understanding-runtime/","Destination":"/app-builder/docs/get_started/runtime_getting_started/understanding-runtime"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/setup/","Destination":"/app-builder/docs/get_started/runtime_getting_started/setup"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/resources/","Destination":"/app-builder/docs/get_started/runtime_getting_started/resources"},{"Source":"/app-builder/docs/get_started/runtime_getting_started","Destination":"/app-builder/docs/get_started/runtime_getting_started/"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/index","Destination":"/app-builder/docs/get_started/runtime_getting_started/"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/how-runtime-works/","Destination":"/app-builder/docs/get_started/runtime_getting_started/how-runtime-works"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/entities/","Destination":"/app-builder/docs/get_started/runtime_getting_started/entities"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/deploy/","Destination":"/app-builder/docs/get_started/runtime_getting_started/deploy"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/activations/","Destination":"/app-builder/docs/get_started/runtime_getting_started/activations"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/troubleshoot/","Destination":"/app-builder/docs/get_started/app_builder_get_started/troubleshoot"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/set-up/","Destination":"/app-builder/docs/get_started/app_builder_get_started/set-up"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/publish-app/","Destination":"/app-builder/docs/get_started/app_builder_get_started/publish-app"},{"Source":"/app-builder/docs/get_started/app_builder_get_started","Destination":"/app-builder/docs/get_started/app_builder_get_started/"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/index","Destination":"/app-builder/docs/get_started/app_builder_get_started/"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/first-app/","Destination":"/app-builder/docs/get_started/app_builder_get_started/first-app"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/app-builder-intro/","Destination":"/app-builder/docs/get_started/app_builder_get_started/app-builder-intro"},{"Source":"/app-builder/docs/resources/blog_articles","Destination":"/app-builder/docs/resources/blog-articles"},{"Source":"/app-builder/docs/resources/transclusions/_requirements","Destination":"/app-builder/docs/resources/transclusions/requirements"},{"Source":"/app-builder/docs/intro_and_overview/what_is_app_builder","Destination":"/app-builder/docs/intro_and_overview/what-is-app-builder"},{"Source":"/app-builder/docs/intro_and_overview/business_case","Destination":"/app-builder/docs/intro_and_overview/business-case"},{"Source":"/app-builder/docs/guides/contribution_guide","Destination":"/app-builder/docs/guides/contribution-guide"},{"Source":"/app-builder/docs/guides/runtime_guides/using_runtime","Destination":"/app-builder/docs/guides/runtime_guides/using-runtime"},{"Source":"/app-builder/docs/guides/runtime_guides/using_packages","Destination":"/app-builder/docs/guides/runtime_guides/using-packages"},{"Source":"/app-builder/docs/guides/runtime_guides/throughput_tuning","Destination":"/app-builder/docs/guides/runtime_guides/throughput-tuning"},{"Source":"/app-builder/docs/guides/runtime_guides/system_settings","Destination":"/app-builder/docs/guides/runtime_guides/system-settings"},{"Source":"/app-builder/docs/guides/runtime_guides/security_general","Destination":"/app-builder/docs/guides/runtime_guides/security-general"},{"Source":"/app-builder/docs/guides/runtime_guides/securing_web_actions","Destination":"/app-builder/docs/guides/runtime_guides/securing-web-actions"},{"Source":"/app-builder/docs/guides/runtime_guides/logging_monitoring","Destination":"/app-builder/docs/guides/runtime_guides/logging-monitoring"},{"Source":"/app-builder/docs/guides/runtime_guides/creating_rest_apis","Destination":"/app-builder/docs/guides/runtime_guides/creating-rest-apis"},{"Source":"/app-builder/docs/guides/runtime_guides/creating_actions","Destination":"/app-builder/docs/guides/runtime_guides/creating-actions"},{"Source":"/app-builder/docs/guides/runtime_guides/ci-cd_pipeline","Destination":"/app-builder/docs/guides/runtime_guides/ci-cd-pipeline"},{"Source":"/app-builder/docs/guides/runtime_guides/asynchronous_calls","Destination":"/app-builder/docs/guides/runtime_guides/asynchronous-calls"},{"Source":"/app-builder/docs/guides/runtime_guides/tools/cli_install","Destination":"/app-builder/docs/guides/runtime_guides/tools/cli-install"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/wsk_use","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/wsk-use"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/sequences_compositions","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/sequences-compositions"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/multiple_regions","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/multiple-regions"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/environment_variables","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/environment-variables"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/cli_use","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/cli-use"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/api_ref","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/api-ref"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_state","Destination":"/app-builder/docs/guides/app_builder_guides/application-state"},{"Source":"/app-builder/docs/guides/app_builder_guides/security/understanding_authentication","Destination":"/app-builder/docs/guides/app_builder_guides/security/understanding-authentication"},{"Source":"/app-builder/docs/guides/app_builder_guides/extensions/extension_migration_guide","Destination":"/app-builder/docs/guides/app_builder_guides/extensions/extension-migration-guide"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/migrate_app_to_exp_cloud_spa","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/migrate-app-to-exp-cloud-spa"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/aec_integration","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/aec-integration"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user.userinfo","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userinfo"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user.userapi","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userapi"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.topbarapiproperties","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapiproperties"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.topbarapi","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapi"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.solution","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-solution"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.helpcenterfeedbackconfig","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-helpcenterfeedbackconfig"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.externalfeedbackconfig","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-externalfeedbackconfig"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.customsearchconfig","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-customsearchconfig"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.customfeedbackconfig","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-customfeedbackconfig"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.callback","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-callback"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page.pageapiproperties","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-pageapiproperties"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page.pageapi","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-pageapi"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page.objectwithpath","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-objectwithpath"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page.objectwithhref","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-objectwithhref"},{"Source":"/app-builder/docs/guides/app_builder_guides/events/custom_events","Destination":"/app-builder/docs/guides/app_builder_guides/events/custom-events"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/setting_response_headers","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/setting-response-headers"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/credential_rotation","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/credential-rotation"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/cicd_for_app_builder_apps","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/cicd-for-app-builder-apps"},{"Source":"/app-builder/docs/guides/app_builder_guides/configuration/webpack_configuration","Destination":"/app-builder/docs/guides/app_builder_guides/configuration/webpack-configuration"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/using_sdks","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/using-sdks"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/introduction_to_react_spectrum","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/introduction-to-react-spectrum"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/architecture_overview","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/architecture-overview"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/app_hooks","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/app-hooks"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk_enterprise","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk-enterprise"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk_cloud","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk-cloud"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/new_relic","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/new-relic"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/azure_log_analytics","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/azure-log-analytics"},{"Source":"/app-builder/docs/getting_started/first_app","Destination":"/app-builder/docs/getting_started/first-app"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/understanding_runtime","Destination":"/app-builder/docs/get_started/runtime_getting_started/understanding-runtime"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/how_runtime_works","Destination":"/app-builder/docs/get_started/runtime_getting_started/how-runtime-works"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/set_up","Destination":"/app-builder/docs/get_started/app_builder_get_started/set-up"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/publish_app","Destination":"/app-builder/docs/get_started/app_builder_get_started/publish-app"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/first_app","Destination":"/app-builder/docs/get_started/app_builder_get_started/first-app"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/app_builder_intro","Destination":"/app-builder/docs/get_started/app_builder_get_started/app-builder-intro"}],":type":"sheet"} \ No newline at end of file +{"total":371,"offset":0,"limit":371,"data":[{"Source":"/app-builder/docs/resources","Destination":"/app-builder/docs/resources/"},{"Source":"/app-builder/docs/resources/index","Destination":"/app-builder/docs/resources/"},{"Source":"/app-builder/docs/resources/blog-articles/","Destination":"/app-builder/docs/resources/blog-articles"},{"Source":"/app-builder/docs/resources/videos","Destination":"/app-builder/docs/resources/videos/"},{"Source":"/app-builder/docs/resources/videos/index","Destination":"/app-builder/docs/resources/videos/"},{"Source":"/app-builder/docs/resources/videos/overview/security/","Destination":"/app-builder/docs/resources/videos/overview/security"},{"Source":"/app-builder/docs/resources/videos/overview/introduction/","Destination":"/app-builder/docs/resources/videos/overview/introduction"},{"Source":"/app-builder/docs/resources/videos/overview/getting-started/","Destination":"/app-builder/docs/resources/videos/overview/getting-started"},{"Source":"/app-builder/docs/resources/videos/overview/e2e-user-journey/","Destination":"/app-builder/docs/resources/videos/overview/e2e-user-journey"},{"Source":"/app-builder/docs/resources/videos/overview/architecture/","Destination":"/app-builder/docs/resources/videos/overview/architecture"},{"Source":"/app-builder/docs/resources/videos/exploring/softcrylic-showcase/","Destination":"/app-builder/docs/resources/videos/exploring/softcrylic-showcase"},{"Source":"/app-builder/docs/resources/videos/exploring/react-spectrum/","Destination":"/app-builder/docs/resources/videos/exploring/react-spectrum"},{"Source":"/app-builder/docs/resources/videos/exploring/projects-and-workspaces/","Destination":"/app-builder/docs/resources/videos/exploring/projects-and-workspaces"},{"Source":"/app-builder/docs/resources/videos/exploring/ode-case-study/","Destination":"/app-builder/docs/resources/videos/exploring/ode-case-study"},{"Source":"/app-builder/docs/resources/videos/exploring/live-wired-sneak/","Destination":"/app-builder/docs/resources/videos/exploring/live-wired-sneak"},{"Source":"/app-builder/docs/resources/videos/exploring/learning-resources/","Destination":"/app-builder/docs/resources/videos/exploring/learning-resources"},{"Source":"/app-builder/docs/resources/videos/exploring/deep-dive-use-cases/","Destination":"/app-builder/docs/resources/videos/exploring/deep-dive-use-cases"},{"Source":"/app-builder/docs/resources/videos/exploring/debugging/","Destination":"/app-builder/docs/resources/videos/exploring/debugging"},{"Source":"/app-builder/docs/resources/videos/exploring/dashboard-case-study/","Destination":"/app-builder/docs/resources/videos/exploring/dashboard-case-study"},{"Source":"/app-builder/docs/resources/videos/exploring/custom-events/","Destination":"/app-builder/docs/resources/videos/exploring/custom-events"},{"Source":"/app-builder/docs/resources/videos/exploring/ci-cd/","Destination":"/app-builder/docs/resources/videos/exploring/ci-cd"},{"Source":"/app-builder/docs/resources/videos/developers-live/extend-experience-cloud/","Destination":"/app-builder/docs/resources/videos/developers-live/extend-experience-cloud"},{"Source":"/app-builder/docs/resources/videos/developers-live/deep-dive/","Destination":"/app-builder/docs/resources/videos/developers-live/deep-dive"},{"Source":"/app-builder/docs/resources/videos/developers-live/asset-compute-service-extensibility/","Destination":"/app-builder/docs/resources/videos/developers-live/asset-compute-service-extensibility"},{"Source":"/app-builder/docs/resources/transclusions/requirements/","Destination":"/app-builder/docs/resources/transclusions/requirements"},{"Source":"/app-builder/docs/resources/todo-app/welldone/","Destination":"/app-builder/docs/resources/todo-app/welldone"},{"Source":"/app-builder/docs/resources/todo-app/requirements/","Destination":"/app-builder/docs/resources/todo-app/requirements"},{"Source":"/app-builder/docs/resources/todo-app/lesson6/","Destination":"/app-builder/docs/resources/todo-app/lesson6"},{"Source":"/app-builder/docs/resources/todo-app/lesson5/","Destination":"/app-builder/docs/resources/todo-app/lesson5"},{"Source":"/app-builder/docs/resources/todo-app/lesson4/","Destination":"/app-builder/docs/resources/todo-app/lesson4"},{"Source":"/app-builder/docs/resources/todo-app/lesson3/","Destination":"/app-builder/docs/resources/todo-app/lesson3"},{"Source":"/app-builder/docs/resources/todo-app/lesson2/","Destination":"/app-builder/docs/resources/todo-app/lesson2"},{"Source":"/app-builder/docs/resources/todo-app/lesson1/","Destination":"/app-builder/docs/resources/todo-app/lesson1"},{"Source":"/app-builder/docs/resources/todo-app","Destination":"/app-builder/docs/resources/todo-app/"},{"Source":"/app-builder/docs/resources/todo-app/index","Destination":"/app-builder/docs/resources/todo-app/"},{"Source":"/app-builder/docs/resources/spectrum-intro/welldone/","Destination":"/app-builder/docs/resources/spectrum-intro/welldone"},{"Source":"/app-builder/docs/resources/spectrum-intro/requirements/","Destination":"/app-builder/docs/resources/spectrum-intro/requirements"},{"Source":"/app-builder/docs/resources/spectrum-intro/lesson4/","Destination":"/app-builder/docs/resources/spectrum-intro/lesson4"},{"Source":"/app-builder/docs/resources/spectrum-intro/lesson3/","Destination":"/app-builder/docs/resources/spectrum-intro/lesson3"},{"Source":"/app-builder/docs/resources/spectrum-intro/lesson2/","Destination":"/app-builder/docs/resources/spectrum-intro/lesson2"},{"Source":"/app-builder/docs/resources/spectrum-intro/lesson1/","Destination":"/app-builder/docs/resources/spectrum-intro/lesson1"},{"Source":"/app-builder/docs/resources/spectrum-intro","Destination":"/app-builder/docs/resources/spectrum-intro/"},{"Source":"/app-builder/docs/resources/spectrum-intro/index","Destination":"/app-builder/docs/resources/spectrum-intro/"},{"Source":"/app-builder/docs/resources/sample_apps","Destination":"/app-builder/docs/resources/sample_apps/"},{"Source":"/app-builder/docs/resources/sample_apps/index","Destination":"/app-builder/docs/resources/sample_apps/"},{"Source":"/app-builder/docs/resources/sample_apps/demo/","Destination":"/app-builder/docs/resources/sample_apps/demo"},{"Source":"/app-builder/docs/resources/sample_apps/code_snippets/state/","Destination":"/app-builder/docs/resources/sample_apps/code_snippets/state"},{"Source":"/app-builder/docs/resources/sample_apps/code_snippets","Destination":"/app-builder/docs/resources/sample_apps/code_snippets/"},{"Source":"/app-builder/docs/resources/sample_apps/code_snippets/index","Destination":"/app-builder/docs/resources/sample_apps/code_snippets/"},{"Source":"/app-builder/docs/resources/sample_apps/code_snippets/files/","Destination":"/app-builder/docs/resources/sample_apps/code_snippets/files"},{"Source":"/app-builder/docs/resources/sample_apps/code_snippets/events/","Destination":"/app-builder/docs/resources/sample_apps/code_snippets/events"},{"Source":"/app-builder/docs/resources/sample_apps/code_snippets/analytics/","Destination":"/app-builder/docs/resources/sample_apps/code_snippets/analytics"},{"Source":"/app-builder/docs/resources/journaling-events/welldone/","Destination":"/app-builder/docs/resources/journaling-events/welldone"},{"Source":"/app-builder/docs/resources/journaling-events/requirements/","Destination":"/app-builder/docs/resources/journaling-events/requirements"},{"Source":"/app-builder/docs/resources/journaling-events/lesson3/","Destination":"/app-builder/docs/resources/journaling-events/lesson3"},{"Source":"/app-builder/docs/resources/journaling-events/lesson2/","Destination":"/app-builder/docs/resources/journaling-events/lesson2"},{"Source":"/app-builder/docs/resources/journaling-events/lesson1/","Destination":"/app-builder/docs/resources/journaling-events/lesson1"},{"Source":"/app-builder/docs/resources/journaling-events","Destination":"/app-builder/docs/resources/journaling-events/"},{"Source":"/app-builder/docs/resources/journaling-events/index","Destination":"/app-builder/docs/resources/journaling-events/"},{"Source":"/app-builder/docs/resources/events-runtime/welldone/","Destination":"/app-builder/docs/resources/events-runtime/welldone"},{"Source":"/app-builder/docs/resources/events-runtime/requirements/","Destination":"/app-builder/docs/resources/events-runtime/requirements"},{"Source":"/app-builder/docs/resources/events-runtime/lesson2/","Destination":"/app-builder/docs/resources/events-runtime/lesson2"},{"Source":"/app-builder/docs/resources/events-runtime/lesson1/","Destination":"/app-builder/docs/resources/events-runtime/lesson1"},{"Source":"/app-builder/docs/resources/events-runtime","Destination":"/app-builder/docs/resources/events-runtime/"},{"Source":"/app-builder/docs/resources/events-runtime/index","Destination":"/app-builder/docs/resources/events-runtime/"},{"Source":"/app-builder/docs/resources/event-driven/welldone/","Destination":"/app-builder/docs/resources/event-driven/welldone"},{"Source":"/app-builder/docs/resources/event-driven/requirements/","Destination":"/app-builder/docs/resources/event-driven/requirements"},{"Source":"/app-builder/docs/resources/event-driven/lesson4/","Destination":"/app-builder/docs/resources/event-driven/lesson4"},{"Source":"/app-builder/docs/resources/event-driven/lesson3/","Destination":"/app-builder/docs/resources/event-driven/lesson3"},{"Source":"/app-builder/docs/resources/event-driven/lesson2/","Destination":"/app-builder/docs/resources/event-driven/lesson2"},{"Source":"/app-builder/docs/resources/event-driven/lesson1/","Destination":"/app-builder/docs/resources/event-driven/lesson1"},{"Source":"/app-builder/docs/resources/event-driven","Destination":"/app-builder/docs/resources/event-driven/"},{"Source":"/app-builder/docs/resources/event-driven/index","Destination":"/app-builder/docs/resources/event-driven/"},{"Source":"/app-builder/docs/resources/debugging/welldone/","Destination":"/app-builder/docs/resources/debugging/welldone"},{"Source":"/app-builder/docs/resources/debugging/requirements/","Destination":"/app-builder/docs/resources/debugging/requirements"},{"Source":"/app-builder/docs/resources/debugging/lesson3/","Destination":"/app-builder/docs/resources/debugging/lesson3"},{"Source":"/app-builder/docs/resources/debugging/lesson2/","Destination":"/app-builder/docs/resources/debugging/lesson2"},{"Source":"/app-builder/docs/resources/debugging/lesson1/","Destination":"/app-builder/docs/resources/debugging/lesson1"},{"Source":"/app-builder/docs/resources/debugging","Destination":"/app-builder/docs/resources/debugging/"},{"Source":"/app-builder/docs/resources/debugging/index","Destination":"/app-builder/docs/resources/debugging/"},{"Source":"/app-builder/docs/resources/customer-dashboard/welldone/","Destination":"/app-builder/docs/resources/customer-dashboard/welldone"},{"Source":"/app-builder/docs/resources/customer-dashboard/requirements/","Destination":"/app-builder/docs/resources/customer-dashboard/requirements"},{"Source":"/app-builder/docs/resources/customer-dashboard/lesson5/","Destination":"/app-builder/docs/resources/customer-dashboard/lesson5"},{"Source":"/app-builder/docs/resources/customer-dashboard/lesson4/","Destination":"/app-builder/docs/resources/customer-dashboard/lesson4"},{"Source":"/app-builder/docs/resources/customer-dashboard/lesson3/","Destination":"/app-builder/docs/resources/customer-dashboard/lesson3"},{"Source":"/app-builder/docs/resources/customer-dashboard/lesson2/","Destination":"/app-builder/docs/resources/customer-dashboard/lesson2"},{"Source":"/app-builder/docs/resources/customer-dashboard/lesson1/","Destination":"/app-builder/docs/resources/customer-dashboard/lesson1"},{"Source":"/app-builder/docs/resources/customer-dashboard","Destination":"/app-builder/docs/resources/customer-dashboard/"},{"Source":"/app-builder/docs/resources/customer-dashboard/index","Destination":"/app-builder/docs/resources/customer-dashboard/"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/welldone/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/welldone"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/requirements/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/requirements"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/our-worker/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/our-worker"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/lesson5/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/lesson5"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/lesson4/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/lesson4"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/lesson3/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/lesson3"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/lesson2/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/lesson2"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/lesson1/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/lesson1"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/index","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/"},{"Source":"/app-builder/docs/resources/custom-asset-compute-worker/aem-cloud-assets/","Destination":"/app-builder/docs/resources/custom-asset-compute-worker/aem-cloud-assets"},{"Source":"/app-builder/docs/resources/cron-jobs/welldone/","Destination":"/app-builder/docs/resources/cron-jobs/welldone"},{"Source":"/app-builder/docs/resources/cron-jobs/requirements/","Destination":"/app-builder/docs/resources/cron-jobs/requirements"},{"Source":"/app-builder/docs/resources/cron-jobs/lesson3/","Destination":"/app-builder/docs/resources/cron-jobs/lesson3"},{"Source":"/app-builder/docs/resources/cron-jobs/lesson2/","Destination":"/app-builder/docs/resources/cron-jobs/lesson2"},{"Source":"/app-builder/docs/resources/cron-jobs/lesson1/","Destination":"/app-builder/docs/resources/cron-jobs/lesson1"},{"Source":"/app-builder/docs/resources/cron-jobs","Destination":"/app-builder/docs/resources/cron-jobs/"},{"Source":"/app-builder/docs/resources/cron-jobs/index","Destination":"/app-builder/docs/resources/cron-jobs/"},{"Source":"/app-builder/docs/resources/ci-cd/welldone/","Destination":"/app-builder/docs/resources/ci-cd/welldone"},{"Source":"/app-builder/docs/resources/ci-cd/requirements/","Destination":"/app-builder/docs/resources/ci-cd/requirements"},{"Source":"/app-builder/docs/resources/ci-cd/lesson3/","Destination":"/app-builder/docs/resources/ci-cd/lesson3"},{"Source":"/app-builder/docs/resources/ci-cd/lesson2/","Destination":"/app-builder/docs/resources/ci-cd/lesson2"},{"Source":"/app-builder/docs/resources/ci-cd/lesson1/","Destination":"/app-builder/docs/resources/ci-cd/lesson1"},{"Source":"/app-builder/docs/resources/ci-cd","Destination":"/app-builder/docs/resources/ci-cd/"},{"Source":"/app-builder/docs/resources/ci-cd/index","Destination":"/app-builder/docs/resources/ci-cd/"},{"Source":"/app-builder/docs/resources/barcode-reader/welldone/","Destination":"/app-builder/docs/resources/barcode-reader/welldone"},{"Source":"/app-builder/docs/resources/barcode-reader/test/","Destination":"/app-builder/docs/resources/barcode-reader/test"},{"Source":"/app-builder/docs/resources/barcode-reader/requirements/","Destination":"/app-builder/docs/resources/barcode-reader/requirements"},{"Source":"/app-builder/docs/resources/barcode-reader","Destination":"/app-builder/docs/resources/barcode-reader/"},{"Source":"/app-builder/docs/resources/barcode-reader/index","Destination":"/app-builder/docs/resources/barcode-reader/"},{"Source":"/app-builder/docs/resources/barcode-reader/bootstrap/","Destination":"/app-builder/docs/resources/barcode-reader/bootstrap"},{"Source":"/app-builder/docs/resources/barcode-reader/barcode/","Destination":"/app-builder/docs/resources/barcode-reader/barcode"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api/welldone/","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/welldone"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api/requirements/","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/requirements"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson4/","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson4"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson3/","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson3"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson2/","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson2"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson1/","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/lesson1"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/"},{"Source":"/app-builder/docs/resources/asset-compute-worker-ps-api/index","Destination":"/app-builder/docs/resources/asset-compute-worker-ps-api/"},{"Source":"/app-builder/docs/intro_and_overview/what-is-app-builder/","Destination":"/app-builder/docs/intro_and_overview/what-is-app-builder"},{"Source":"/app-builder/docs/intro_and_overview","Destination":"/app-builder/docs/intro_and_overview/"},{"Source":"/app-builder/docs/intro_and_overview/index","Destination":"/app-builder/docs/intro_and_overview/"},{"Source":"/app-builder/docs/intro_and_overview/faq/","Destination":"/app-builder/docs/intro_and_overview/faq"},{"Source":"/app-builder/docs/intro_and_overview/community/","Destination":"/app-builder/docs/intro_and_overview/community"},{"Source":"/app-builder/docs/intro_and_overview/business-case/","Destination":"/app-builder/docs/intro_and_overview/business-case"},{"Source":"/app-builder/docs/guides/references/","Destination":"/app-builder/docs/guides/references"},{"Source":"/app-builder/docs/guides","Destination":"/app-builder/docs/guides/"},{"Source":"/app-builder/docs/guides/index","Destination":"/app-builder/docs/guides/"},{"Source":"/app-builder/docs/guides/contribution-guide/","Destination":"/app-builder/docs/guides/contribution-guide"},{"Source":"/app-builder/docs/guides/runtime_guides/using-runtime/","Destination":"/app-builder/docs/guides/runtime_guides/using-runtime"},{"Source":"/app-builder/docs/guides/runtime_guides/using-packages/","Destination":"/app-builder/docs/guides/runtime_guides/using-packages"},{"Source":"/app-builder/docs/guides/runtime_guides/troubleshooting/","Destination":"/app-builder/docs/guides/runtime_guides/troubleshooting"},{"Source":"/app-builder/docs/guides/runtime_guides/throughput-tuning/","Destination":"/app-builder/docs/guides/runtime_guides/throughput-tuning"},{"Source":"/app-builder/docs/guides/runtime_guides/system-settings/","Destination":"/app-builder/docs/guides/runtime_guides/system-settings"},{"Source":"/app-builder/docs/guides/runtime_guides/security-general/","Destination":"/app-builder/docs/guides/runtime_guides/security-general"},{"Source":"/app-builder/docs/guides/runtime_guides/securing-web-actions/","Destination":"/app-builder/docs/guides/runtime_guides/securing-web-actions"},{"Source":"/app-builder/docs/guides/runtime_guides/logging-monitoring/","Destination":"/app-builder/docs/guides/runtime_guides/logging-monitoring"},{"Source":"/app-builder/docs/guides/runtime_guides","Destination":"/app-builder/docs/guides/runtime_guides/"},{"Source":"/app-builder/docs/guides/runtime_guides/index","Destination":"/app-builder/docs/guides/runtime_guides/"},{"Source":"/app-builder/docs/guides/runtime_guides/debugging/","Destination":"/app-builder/docs/guides/runtime_guides/debugging"},{"Source":"/app-builder/docs/guides/runtime_guides/creating-rest-apis/","Destination":"/app-builder/docs/guides/runtime_guides/creating-rest-apis"},{"Source":"/app-builder/docs/guides/runtime_guides/creating-actions/","Destination":"/app-builder/docs/guides/runtime_guides/creating-actions"},{"Source":"/app-builder/docs/guides/runtime_guides/ci-cd-pipeline/","Destination":"/app-builder/docs/guides/runtime_guides/ci-cd-pipeline"},{"Source":"/app-builder/docs/guides/runtime_guides/asynchronous-calls/","Destination":"/app-builder/docs/guides/runtime_guides/asynchronous-calls"},{"Source":"/app-builder/docs/guides/runtime_guides/tools","Destination":"/app-builder/docs/guides/runtime_guides/tools/"},{"Source":"/app-builder/docs/guides/runtime_guides/tools/index","Destination":"/app-builder/docs/guides/runtime_guides/tools/"},{"Source":"/app-builder/docs/guides/runtime_guides/tools/cli-install/","Destination":"/app-builder/docs/guides/runtime_guides/tools/cli-install"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/wsk-use/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/wsk-use"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/triggersrules/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/triggersrules"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/sequences-compositions/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/sequences-compositions"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/runtimes/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/runtimes"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/prepackages/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/prepackages"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/packages/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/packages"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/multiple-regions/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/multiple-regions"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/index","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/feeds/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/feeds"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/environment-variables/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/environment-variables"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/configuringproxy/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/configuringproxy"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/cli-use/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/cli-use"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/api-ref/","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/api-ref"},{"Source":"/app-builder/docs/guides/app_builder_guides/telemetry/","Destination":"/app-builder/docs/guides/app_builder_guides/telemetry"},{"Source":"/app-builder/docs/guides/app_builder_guides/optimization/","Destination":"/app-builder/docs/guides/app_builder_guides/optimization"},{"Source":"/app-builder/docs/guides/app_builder_guides","Destination":"/app-builder/docs/guides/app_builder_guides/"},{"Source":"/app-builder/docs/guides/app_builder_guides/index","Destination":"/app-builder/docs/guides/app_builder_guides/"},{"Source":"/app-builder/docs/guides/app_builder_guides/distribution/","Destination":"/app-builder/docs/guides/app_builder_guides/distribution"},{"Source":"/app-builder/docs/guides/app_builder_guides/development/","Destination":"/app-builder/docs/guides/app_builder_guides/development"},{"Source":"/app-builder/docs/guides/app_builder_guides/application-state/","Destination":"/app-builder/docs/guides/app_builder_guides/application-state"},{"Source":"/app-builder/docs/guides/app_builder_guides/security/understanding-authentication/","Destination":"/app-builder/docs/guides/app_builder_guides/security/understanding-authentication"},{"Source":"/app-builder/docs/guides/app_builder_guides/security","Destination":"/app-builder/docs/guides/app_builder_guides/security/"},{"Source":"/app-builder/docs/guides/app_builder_guides/security/index","Destination":"/app-builder/docs/guides/app_builder_guides/security/"},{"Source":"/app-builder/docs/guides/app_builder_guides/extensions/extensions/","Destination":"/app-builder/docs/guides/app_builder_guides/extensions/extensions"},{"Source":"/app-builder/docs/guides/app_builder_guides/extensions/extension-migration-guide/","Destination":"/app-builder/docs/guides/app_builder_guides/extensions/extension-migration-guide"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/migrate-app-to-exp-cloud-spa/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/migrate-app-to-exp-cloud-spa"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/aec-integration/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/aec-integration"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/user/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/user"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/topbar/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/topbar"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/page/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/page"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/modules","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/index","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/modules/"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userinfo/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userinfo"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userapi/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userapi"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapiproperties/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapiproperties"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapi/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapi"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-solution/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-solution"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-callback/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-callback"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/runtime/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/runtime"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-pageapiproperties/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-pageapiproperties"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-pageapi/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-pageapi"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-objectwithpath/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-objectwithpath"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-objectwithhref/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-objectwithhref"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/modules/","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/modules"},{"Source":"/app-builder/docs/guides/app_builder_guides/events/webhooks/","Destination":"/app-builder/docs/guides/app_builder_guides/events/webhooks"},{"Source":"/app-builder/docs/guides/app_builder_guides/events/custom-events/","Destination":"/app-builder/docs/guides/app_builder_guides/events/custom-events"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/setting-response-headers/","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/setting-response-headers"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/deployment/","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/deployment"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/credential-rotation/","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/credential-rotation"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/cicd-for-app-builder-apps/","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/cicd-for-app-builder-apps"},{"Source":"/app-builder/docs/guides/app_builder_guides/configuration/webpack-configuration/","Destination":"/app-builder/docs/guides/app_builder_guides/configuration/webpack-configuration"},{"Source":"/app-builder/docs/guides/app_builder_guides/configuration/configuration/","Destination":"/app-builder/docs/guides/app_builder_guides/configuration/configuration"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/using-sdks/","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/using-sdks"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/introduction-to-react-spectrum/","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/introduction-to-react-spectrum"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/architecture-overview/","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/architecture-overview"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/app-hooks/","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/app-hooks"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk-enterprise/","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk-enterprise"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk-cloud/","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk-cloud"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/new-relic/","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/new-relic"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/logging/","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/logging"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/azure-log-analytics/","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/azure-log-analytics"},{"Source":"/app-builder/docs/getting_started/first-app/","Destination":"/app-builder/docs/getting_started/first-app"},{"Source":"/app-builder/docs/get_started","Destination":"/app-builder/docs/get_started/"},{"Source":"/app-builder/docs/get_started/index","Destination":"/app-builder/docs/get_started/"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/understanding-runtime/","Destination":"/app-builder/docs/get_started/runtime_getting_started/understanding-runtime"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/setup/","Destination":"/app-builder/docs/get_started/runtime_getting_started/setup"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/resources/","Destination":"/app-builder/docs/get_started/runtime_getting_started/resources"},{"Source":"/app-builder/docs/get_started/runtime_getting_started","Destination":"/app-builder/docs/get_started/runtime_getting_started/"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/index","Destination":"/app-builder/docs/get_started/runtime_getting_started/"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/how-runtime-works/","Destination":"/app-builder/docs/get_started/runtime_getting_started/how-runtime-works"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/entities/","Destination":"/app-builder/docs/get_started/runtime_getting_started/entities"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/deploy/","Destination":"/app-builder/docs/get_started/runtime_getting_started/deploy"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/activations/","Destination":"/app-builder/docs/get_started/runtime_getting_started/activations"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/troubleshoot/","Destination":"/app-builder/docs/get_started/app_builder_get_started/troubleshoot"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/set-up/","Destination":"/app-builder/docs/get_started/app_builder_get_started/set-up"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/publish-app/","Destination":"/app-builder/docs/get_started/app_builder_get_started/publish-app"},{"Source":"/app-builder/docs/get_started/app_builder_get_started","Destination":"/app-builder/docs/get_started/app_builder_get_started/"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/index","Destination":"/app-builder/docs/get_started/app_builder_get_started/"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/first-app/","Destination":"/app-builder/docs/get_started/app_builder_get_started/first-app"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/app-builder-intro/","Destination":"/app-builder/docs/get_started/app_builder_get_started/app-builder-intro"},{"Source":"/app-builder/docs/resources/blog-articles","Destination":"/app-builder/docs/resources/blog-articles"},{"Source":"/app-builder/docs/resources/transclusions/_requirements","Destination":"/app-builder/docs/resources/transclusions/requirements"},{"Source":"/app-builder/docs/intro_and_overview/what-is-app-builder","Destination":"/app-builder/docs/intro_and_overview/what-is-app-builder"},{"Source":"/app-builder/docs/intro_and_overview/business-case","Destination":"/app-builder/docs/intro_and_overview/business-case"},{"Source":"/app-builder/docs/guides/contribution-guide","Destination":"/app-builder/docs/guides/contribution-guide"},{"Source":"/app-builder/docs/guides/runtime_guides/using-runtime","Destination":"/app-builder/docs/guides/runtime_guides/using-runtime"},{"Source":"/app-builder/docs/guides/runtime_guides/using-packages","Destination":"/app-builder/docs/guides/runtime_guides/using-packages"},{"Source":"/app-builder/docs/guides/runtime_guides/throughput-tuning","Destination":"/app-builder/docs/guides/runtime_guides/throughput-tuning"},{"Source":"/app-builder/docs/guides/runtime_guides/system-settings","Destination":"/app-builder/docs/guides/runtime_guides/system-settings"},{"Source":"/app-builder/docs/guides/runtime_guides/security-general","Destination":"/app-builder/docs/guides/runtime_guides/security-general"},{"Source":"/app-builder/docs/guides/runtime_guides/securing-web-actions","Destination":"/app-builder/docs/guides/runtime_guides/securing-web-actions"},{"Source":"/app-builder/docs/guides/runtime_guides/logging-monitoring","Destination":"/app-builder/docs/guides/runtime_guides/logging-monitoring"},{"Source":"/app-builder/docs/guides/runtime_guides/creating-rest-apis","Destination":"/app-builder/docs/guides/runtime_guides/creating-rest-apis"},{"Source":"/app-builder/docs/guides/runtime_guides/creating-actions","Destination":"/app-builder/docs/guides/runtime_guides/creating-actions"},{"Source":"/app-builder/docs/guides/runtime_guides/ci-cd_pipeline","Destination":"/app-builder/docs/guides/runtime_guides/ci-cd-pipeline"},{"Source":"/app-builder/docs/guides/runtime_guides/asynchronous-calls","Destination":"/app-builder/docs/guides/runtime_guides/asynchronous-calls"},{"Source":"/app-builder/docs/guides/runtime_guides/tools/cli-install","Destination":"/app-builder/docs/guides/runtime_guides/tools/cli-install"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/wsk-use","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/wsk-use"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/sequences-compositions","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/sequences-compositions"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/multiple-regions","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/multiple-regions"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/environment-variables","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/environment-variables"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/cli-use","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/cli-use"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/api-ref","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/api-ref"},{"Source":"/app-builder/docs/guides/app_builder_guides/application-state","Destination":"/app-builder/docs/guides/app_builder_guides/application-state"},{"Source":"/app-builder/docs/guides/app_builder_guides/security/understanding-authentication","Destination":"/app-builder/docs/guides/app_builder_guides/security/understanding-authentication"},{"Source":"/app-builder/docs/guides/app_builder_guides/extensions/extension-migration-guide","Destination":"/app-builder/docs/guides/app_builder_guides/extensions/extension-migration-guide"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/migrate-app-to-exp-cloud-spa","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/migrate-app-to-exp-cloud-spa"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/aec-integration","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/aec-integration"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userinfo","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userinfo"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userapi","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userapi"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapiproperties","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapiproperties"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapi","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapi"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-solution","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-solution"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-helpcenterfeedbackconfig","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-helpcenterfeedbackconfig"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-externalfeedbackconfig","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-externalfeedbackconfig"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-customsearchconfig","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-customsearchconfig"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-customfeedbackconfig","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-customfeedbackconfig"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-callback","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-callback"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-pageapiproperties","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-pageapiproperties"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-pageapi","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-pageapi"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-objectwithpath","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-objectwithpath"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-objectwithhref","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-objectwithhref"},{"Source":"/app-builder/docs/guides/app_builder_guides/events/custom-events","Destination":"/app-builder/docs/guides/app_builder_guides/events/custom-events"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/setting-response-headers","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/setting-response-headers"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/credential-rotation","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/credential-rotation"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/cicd-for-app-builder-apps","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/cicd-for-app-builder-apps"},{"Source":"/app-builder/docs/guides/app_builder_guides/configuration/webpack-configuration","Destination":"/app-builder/docs/guides/app_builder_guides/configuration/webpack-configuration"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/using-sdks","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/using-sdks"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/introduction-to-react-spectrum","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/introduction-to-react-spectrum"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/architecture-overview","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/architecture-overview"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/app-hooks","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/app-hooks"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk-enterprise","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk-enterprise"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk-cloud","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk-cloud"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/new-relic","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/new-relic"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/azure-log-analytics","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/azure-log-analytics"},{"Source":"/app-builder/docs/getting_started/first_app","Destination":"/app-builder/docs/getting_started/first-app"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/understanding-runtime","Destination":"/app-builder/docs/get_started/runtime_getting_started/understanding-runtime"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/how-runtime-works","Destination":"/app-builder/docs/get_started/runtime_getting_started/how-runtime-works"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/set-up","Destination":"/app-builder/docs/get_started/app_builder_get_started/set-up"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/publish-app","Destination":"/app-builder/docs/get_started/app_builder_get_started/publish-app"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/first-app","Destination":"/app-builder/docs/get_started/app_builder_get_started/first-app"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/app-builder-intro","Destination":"/app-builder/docs/get_started/app_builder_get_started/app-builder-intro"},{"Source":"/app-builder/docs/intro_and_overview/what-is-app-builder","Destination":"/app-builder/docs/intro_and_overview/what-is-app-builder"},{"Source":"/app-builder/docs/intro_and_overview/business-case","Destination":"/app-builder/docs/intro_and_overview/business-case"},{"Source":"/app-builder/docs/intro_and_overview/what_is_app_builder","Destination":"/app-builder/docs/intro_and_overview/what-is-app-builder"},{"Source":"/app-builder/docs/intro_and_overview/business_case","Destination":"/app-builder/docs/intro_and_overview/business-case"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/set_up","Destination":"/app-builder/docs/get_started/app_builder_get_started/set-up"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/publish_app","Destination":"/app-builder/docs/get_started/app_builder_get_started/publish-app"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/first_app","Destination":"/app-builder/docs/get_started/app_builder_get_started/first-app"},{"Source":"/app-builder/docs/get_started/app_builder_get_started/app_builder_intro","Destination":"/app-builder/docs/get_started/app_builder_get_started/app-builder-intro"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/understanding_runtime","Destination":"/app-builder/docs/get_started/runtime_getting_started/understanding-runtime"},{"Source":"/app-builder/docs/get_started/runtime_getting_started/how_runtime_works","Destination":"/app-builder/docs/get_started/runtime_getting_started/how-runtime-works"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/using_sdks","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/using-sdks"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/introduction_to_react_spectrum","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/introduction-to-react-spectrum"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/architecture_overview","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/architecture-overview"},{"Source":"/app-builder/docs/guides/app_builder_guides/architecture_overview/app_hooks","Destination":"/app-builder/docs/guides/app_builder_guides/architecture_overview/app-hooks"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_state","Destination":"/app-builder/docs/guides/app_builder_guides/application-state"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk_enterprise","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk-enterprise"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk_cloud","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/splunk-cloud"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/new_relic","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/new-relic"},{"Source":"/app-builder/docs/guides/app_builder_guides/application_logging/azure_log_analytics","Destination":"/app-builder/docs/guides/app_builder_guides/application_logging/azure-log-analytics"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/setting_response_headers","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/setting-response-headers"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/credential_rotation","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/credential-rotation"},{"Source":"/app-builder/docs/guides/app_builder_guides/deployment/cicd_for_app_builder_apps","Destination":"/app-builder/docs/guides/app_builder_guides/deployment/cicd-for-app-builder-apps"},{"Source":"/app-builder/docs/guides/app_builder_guides/configuration/webpack_configuration","Destination":"/app-builder/docs/guides/app_builder_guides/configuration/webpack-configuration"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/aec_integration","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/aec-integration"},{"Source":"/app-builder/docs/guides/app_builder_guides/events/custom_events","Destination":"/app-builder/docs/guides/app_builder_guides/events/custom-events"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userinfo","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userinfo"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userapi","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userapi"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.topbarapiproperties","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapiproperties"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.topbarapi","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-topbarapi"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.solution","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-solution"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.helpcenterfeedbackconfig","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-helpcenterfeedbackconfig"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.externalfeedbackconfig","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-externalfeedbackconfig"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.customsearchconfig","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-customsearchconfig"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.customfeedbackconfig","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-customfeedbackconfig"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar.callback","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/topbar-callback"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page.pageapiproperties","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-pageapiproperties"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page.pageapi","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-pageapi"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page.objectwithpath","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-objectwithpath"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page.objectwithhref","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/page-objectwithhref"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user.userinfo","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userinfo"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user.userapi","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/interfaces/user-userapi"},{"Source":"/app-builder/docs/guides/app_builder_guides/security/understanding_authentication","Destination":"/app-builder/docs/guides/app_builder_guides/security/understanding-authentication"},{"Source":"/app-builder/docs/guides/app_builder_guides/extensions/extension_migration_guide","Destination":"/app-builder/docs/guides/app_builder_guides/extensions/extension-migration-guide"},{"Source":"/app-builder/docs/guides/app_builder_guides/exc_app/migrate_app_to_exp_cloud_spa","Destination":"/app-builder/docs/guides/app_builder_guides/exc_app/migrate-app-to-exp-cloud-spa"},{"Source":"/app-builder/docs/guides/contribution-guide","Destination":"/app-builder/docs/guides/contribution-guide"},{"Source":"/app-builder/docs/guides/runtime_guides/logging_monitoring","Destination":"/app-builder/docs/guides/runtime_guides/logging-monitoring"},{"Source":"/app-builder/docs/guides/runtime_guides/creating_rest_apis","Destination":"/app-builder/docs/guides/runtime_guides/creating-rest-apis"},{"Source":"/app-builder/docs/guides/runtime_guides/creating_actions","Destination":"/app-builder/docs/guides/runtime_guides/creating-actions"},{"Source":"/app-builder/docs/guides/runtime_guides/ci-cd-pipeline","Destination":"/app-builder/docs/guides/runtime_guides/ci-cd-pipeline"},{"Source":"/app-builder/docs/guides/runtime_guides/asynchronous_calls","Destination":"/app-builder/docs/guides/runtime_guides/asynchronous-calls"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/api_ref","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/api-ref"},{"Source":"/app-builder/docs/guides/runtime_guides/ci_cd_pipeline","Destination":"/app-builder/docs/guides/runtime_guides/ci-cd-pipeline"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/wsk_use","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/wsk-use"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/sequences_compositions","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/sequences-compositions"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/multiple_regions","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/multiple-regions"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/environment_variables","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/environment-variables"},{"Source":"/app-builder/docs/guides/runtime_guides/reference_docs/cli_use","Destination":"/app-builder/docs/guides/runtime_guides/reference_docs/cli-use"},{"Source":"/app-builder/docs/guides/contribution_guide","Destination":"/app-builder/docs/guides/contribution-guide"},{"Source":"/app-builder/docs/guides/runtime_guides/using_runtime","Destination":"/app-builder/docs/guides/runtime_guides/using-runtime"},{"Source":"/app-builder/docs/guides/runtime_guides/using_packages","Destination":"/app-builder/docs/guides/runtime_guides/using-packages"},{"Source":"/app-builder/docs/guides/runtime_guides/throughput_tuning","Destination":"/app-builder/docs/guides/runtime_guides/throughput-tuning"},{"Source":"/app-builder/docs/guides/runtime_guides/system_settings","Destination":"/app-builder/docs/guides/runtime_guides/system-settings"},{"Source":"/app-builder/docs/guides/runtime_guides/security_general","Destination":"/app-builder/docs/guides/runtime_guides/security-general"},{"Source":"/app-builder/docs/guides/runtime_guides/securing_web_actions","Destination":"/app-builder/docs/guides/runtime_guides/securing-web-actions"},{"Source":"/app-builder/docs/guides/runtime_guides/tools/cli_install","Destination":"/app-builder/docs/guides/runtime_guides/tools/cli-install"},{"Source":"/app-builder/docs/resources/blog_articles","Destination":"/app-builder/docs/resources/blog-articles"},{"Source":"/app-builder/docs/resources/videos/overview/e2e_user_journey","Destination":"/app-builder/docs/resources/videos/overview/e2-e-user-journey"},{"Source":"/app-builder/docs/resources/videos/exploring/react_spectrum","Destination":"/app-builder/docs/resources/videos/exploring/react-spectrum"},{"Source":"/app-builder/docs/resources/videos/exploring/projects_and_workspaces","Destination":"/app-builder/docs/resources/videos/exploring/projects-and-workspaces"},{"Source":"/app-builder/docs/resources/videos/exploring/custom_events","Destination":"/app-builder/docs/resources/videos/exploring/custom-events"},{"Source":"/app-builder/docs/resources/videos/exploring/ci_cd","Destination":"/app-builder/docs/resources/videos/exploring/ci-cd"}],":type":"sheet"} \ No newline at end of file diff --git a/src/pages/resources/videos/index.md b/src/pages/resources/videos/index.md index 7cd0152a7..278089e2e 100644 --- a/src/pages/resources/videos/index.md +++ b/src/pages/resources/videos/index.md @@ -47,7 +47,7 @@ A full security overview. ### User journey -[Watch (4mins)](overview/e2e-user-journey.md) +[Watch (4mins)](overview/e2-e-user-journey.md) Presents the end-to-end user journey. @@ -167,4 +167,4 @@ If you want to extend Adobe solutions using a modern architecture that works for [Watch (22mins)](developers-live/asset-compute-service-extensibility.md) -Learn how to use App Builder to build a custom Asset Compute worker for asset processing during ingestion into Adobe Experience Manager. \ No newline at end of file +Learn how to use App Builder to build a custom Asset Compute worker for asset processing during ingestion into Adobe Experience Manager. diff --git a/src/pages/resources/videos/overview/e2e-user-journey.md b/src/pages/resources/videos/overview/e2-e-user-journey.md similarity index 100% rename from src/pages/resources/videos/overview/e2e-user-journey.md rename to src/pages/resources/videos/overview/e2-e-user-journey.md From 7e6dbe0a717bbc291d63f17f0e7f77d93067a095 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 8 May 2025 11:04:48 -0700 Subject: [PATCH 003/116] update --- src/pages/get_started/runtime_getting_started/resources.md | 2 +- .../developers-live/asset-compute-service-extensibility.md | 2 +- src/pages/resources/videos/developers-live/deep-dive.md | 2 +- .../resources/videos/developers-live/extend-experience-cloud.md | 2 +- src/pages/resources/videos/exploring/ci-cd.md | 2 +- src/pages/resources/videos/exploring/custom-events.md | 2 +- src/pages/resources/videos/exploring/dashboard-case-study.md | 2 +- src/pages/resources/videos/exploring/debugging.md | 2 +- src/pages/resources/videos/exploring/deep-dive-use-cases.md | 2 +- src/pages/resources/videos/exploring/learning-resources.md | 2 +- src/pages/resources/videos/exploring/live-wired-sneak.md | 2 +- src/pages/resources/videos/exploring/ode-case-study.md | 2 +- src/pages/resources/videos/exploring/projects-and-workspaces.md | 2 +- src/pages/resources/videos/exploring/react-spectrum.md | 2 +- src/pages/resources/videos/exploring/softcrylic-showcase.md | 2 +- src/pages/resources/videos/overview/architecture.md | 2 +- src/pages/resources/videos/overview/e2-e-user-journey.md | 2 +- src/pages/resources/videos/overview/getting-started.md | 2 +- src/pages/resources/videos/overview/introduction.md | 2 +- src/pages/resources/videos/overview/security.md | 2 +- 20 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/pages/get_started/runtime_getting_started/resources.md b/src/pages/get_started/runtime_getting_started/resources.md index eb01a89e7..90d7dac65 100644 --- a/src/pages/get_started/runtime_getting_started/resources.md +++ b/src/pages/get_started/runtime_getting_started/resources.md @@ -1,4 +1,4 @@ - + # Resources and support diff --git a/src/pages/resources/videos/developers-live/asset-compute-service-extensibility.md b/src/pages/resources/videos/developers-live/asset-compute-service-extensibility.md index a18a5ffd1..a872fe68d 100644 --- a/src/pages/resources/videos/developers-live/asset-compute-service-extensibility.md +++ b/src/pages/resources/videos/developers-live/asset-compute-service-extensibility.md @@ -12,6 +12,6 @@ keywords: Learn how to use App Builder to build custom Asset Compute worker for asset processing during ingestion into Adobe Experience Manager. - + diff --git a/src/pages/resources/videos/developers-live/deep-dive.md b/src/pages/resources/videos/developers-live/deep-dive.md index 7790a59a3..9d54846c1 100644 --- a/src/pages/resources/videos/developers-live/deep-dive.md +++ b/src/pages/resources/videos/developers-live/deep-dive.md @@ -12,6 +12,6 @@ keywords: Join us and see App Builder in action: code, security, headful and headless apps, CI/CD, and more. - + diff --git a/src/pages/resources/videos/developers-live/extend-experience-cloud.md b/src/pages/resources/videos/developers-live/extend-experience-cloud.md index f610ce14a..ac2f87b95 100644 --- a/src/pages/resources/videos/developers-live/extend-experience-cloud.md +++ b/src/pages/resources/videos/developers-live/extend-experience-cloud.md @@ -12,6 +12,6 @@ keywords: If you want to extend Adobe solutions using a modern architecture that works for multiple solutions, we think that you should give App Builder a try. - + diff --git a/src/pages/resources/videos/exploring/ci-cd.md b/src/pages/resources/videos/exploring/ci-cd.md index ca5c3032e..ab84ab67b 100644 --- a/src/pages/resources/videos/exploring/ci-cd.md +++ b/src/pages/resources/videos/exploring/ci-cd.md @@ -12,6 +12,6 @@ keywords: Manik Jindal, App Builder Product Manager, dives into CI/CD. Learn how to set up the Github CI/CD we include with App Builder, and how to set up a custom CI/CD pipeline with your tool of choice. - + diff --git a/src/pages/resources/videos/exploring/custom-events.md b/src/pages/resources/videos/exploring/custom-events.md index d6067589a..fa9dea6e0 100644 --- a/src/pages/resources/videos/exploring/custom-events.md +++ b/src/pages/resources/videos/exploring/custom-events.md @@ -12,6 +12,6 @@ keywords: Join us as we dive deep into the topic of Adobe I/O Events, including our new App Builder feature, Custom Events. Senior Product Manager Kanika Gera and Sangeetha Krishnan share everything you need to know about Adobe I/O Events and how they are used in App Builder applications. - + diff --git a/src/pages/resources/videos/exploring/dashboard-case-study.md b/src/pages/resources/videos/exploring/dashboard-case-study.md index 23af9abd2..58971e1a4 100644 --- a/src/pages/resources/videos/exploring/dashboard-case-study.md +++ b/src/pages/resources/videos/exploring/dashboard-case-study.md @@ -9,6 +9,6 @@ keywords: # Exploring App Builder - Dashboard Case Study - + diff --git a/src/pages/resources/videos/exploring/debugging.md b/src/pages/resources/videos/exploring/debugging.md index 7b7b0153e..00732b48c 100644 --- a/src/pages/resources/videos/exploring/debugging.md +++ b/src/pages/resources/videos/exploring/debugging.md @@ -12,6 +12,6 @@ keywords: In this session in-depth study of debugging, Shazron Abdullah and Duy Nguyen take you through the ins and outs of finding and fixing problems in your code. - + diff --git a/src/pages/resources/videos/exploring/deep-dive-use-cases.md b/src/pages/resources/videos/exploring/deep-dive-use-cases.md index a6f39c35f..c34b77cdb 100644 --- a/src/pages/resources/videos/exploring/deep-dive-use-cases.md +++ b/src/pages/resources/videos/exploring/deep-dive-use-cases.md @@ -12,6 +12,6 @@ keywords: Manik and Ron take a look at a number of great use cases, and share some popular ways to use App Builder. - + diff --git a/src/pages/resources/videos/exploring/learning-resources.md b/src/pages/resources/videos/exploring/learning-resources.md index 8ebc40f85..b06052a76 100644 --- a/src/pages/resources/videos/exploring/learning-resources.md +++ b/src/pages/resources/videos/exploring/learning-resources.md @@ -12,6 +12,6 @@ keywords: We focus on learning resources, from Code Labs to documentation to videos like this, and introduce our digital learning series. - + diff --git a/src/pages/resources/videos/exploring/live-wired-sneak.md b/src/pages/resources/videos/exploring/live-wired-sneak.md index 1fb34bce7..72c03e892 100644 --- a/src/pages/resources/videos/exploring/live-wired-sneak.md +++ b/src/pages/resources/videos/exploring/live-wired-sneak.md @@ -12,6 +12,6 @@ keywords: Join us for a very special Adobe Summit edition of Office Hours. Ron, Alex and Dave go behind the scenes to show how they brought to life a no-code future for building React Spectrum UI for App Builder apps. If you watched Adobe Summit sneaks before, be sure to see how the app works and talk about this exciting new development. - + diff --git a/src/pages/resources/videos/exploring/ode-case-study.md b/src/pages/resources/videos/exploring/ode-case-study.md index 38bd6b33e..f7aa54288 100644 --- a/src/pages/resources/videos/exploring/ode-case-study.md +++ b/src/pages/resources/videos/exploring/ode-case-study.md @@ -9,6 +9,6 @@ keywords: # Exploring App Builder - ODE Case Study - + diff --git a/src/pages/resources/videos/exploring/projects-and-workspaces.md b/src/pages/resources/videos/exploring/projects-and-workspaces.md index 3a39bc328..49f470219 100644 --- a/src/pages/resources/videos/exploring/projects-and-workspaces.md +++ b/src/pages/resources/videos/exploring/projects-and-workspaces.md @@ -12,6 +12,6 @@ keywords: The App Builder team shares a short presentation about projects and workspaces, and how to use customizations to help your team collaborate on building App Builder Applications. - + diff --git a/src/pages/resources/videos/exploring/react-spectrum.md b/src/pages/resources/videos/exploring/react-spectrum.md index 6d3391eef..02de415b0 100644 --- a/src/pages/resources/videos/exploring/react-spectrum.md +++ b/src/pages/resources/videos/exploring/react-spectrum.md @@ -12,6 +12,6 @@ keywords: We are joined by Rob Snow from the React Spectrum team discuss React Spectrum, how to get started using it, and how to get involved in their open source project. - + diff --git a/src/pages/resources/videos/exploring/softcrylic-showcase.md b/src/pages/resources/videos/exploring/softcrylic-showcase.md index e84955c0e..5de7296dd 100644 --- a/src/pages/resources/videos/exploring/softcrylic-showcase.md +++ b/src/pages/resources/videos/exploring/softcrylic-showcase.md @@ -12,6 +12,6 @@ keywords: Sundar Sritharan from Softcrylic joins us to share what they are cooking up with App Builder. - + diff --git a/src/pages/resources/videos/overview/architecture.md b/src/pages/resources/videos/overview/architecture.md index da19e5b33..5269fd5a7 100644 --- a/src/pages/resources/videos/overview/architecture.md +++ b/src/pages/resources/videos/overview/architecture.md @@ -9,6 +9,6 @@ keywords: # A Breakdown of App Builder's Architecture - + diff --git a/src/pages/resources/videos/overview/e2-e-user-journey.md b/src/pages/resources/videos/overview/e2-e-user-journey.md index 94a578a95..e11bafad3 100644 --- a/src/pages/resources/videos/overview/e2-e-user-journey.md +++ b/src/pages/resources/videos/overview/e2-e-user-journey.md @@ -9,6 +9,6 @@ keywords: # Following the End-to-End User Journey - + diff --git a/src/pages/resources/videos/overview/getting-started.md b/src/pages/resources/videos/overview/getting-started.md index 2186c34c9..46618348f 100644 --- a/src/pages/resources/videos/overview/getting-started.md +++ b/src/pages/resources/videos/overview/getting-started.md @@ -12,6 +12,6 @@ keywords: In this video, we will cover how to set up your project in the Adobe Developer Console, initialize the code, review the project structure, test, and play with the working code. - + diff --git a/src/pages/resources/videos/overview/introduction.md b/src/pages/resources/videos/overview/introduction.md index 88180fbd3..a054627ba 100644 --- a/src/pages/resources/videos/overview/introduction.md +++ b/src/pages/resources/videos/overview/introduction.md @@ -12,6 +12,6 @@ keywords: This App Builder tech talk aims to explore what’s possible with App Builder, and answers questions from customers and partners. Join us to learn more about how App Builder helps you to build cloud-native applications for your employees. You’ll learn about common use cases, and see how to get started building with App Builder. - + diff --git a/src/pages/resources/videos/overview/security.md b/src/pages/resources/videos/overview/security.md index 2ff05d618..18dcaf9d4 100644 --- a/src/pages/resources/videos/overview/security.md +++ b/src/pages/resources/videos/overview/security.md @@ -9,6 +9,6 @@ keywords: # A Full Security Overview - + From ce734ed4d4f087768983dc7de3b114058173b83e Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 8 May 2025 11:30:56 -0700 Subject: [PATCH 004/116] update links --- src/pages/get_started/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/get_started/index.md b/src/pages/get_started/index.md index 326708e68..ea5f8bfdb 100644 --- a/src/pages/get_started/index.md +++ b/src/pages/get_started/index.md @@ -5,7 +5,7 @@ Welcome to the Getting Started section of App Builder documentation. Here you'll ## Choose Your Path ### App Builder Getting Started -If you're new to App Builder, start with our [App Builder Getting Started guide](app_builder_get_started/app_builder_intro/). This guide will walk you through: +If you're new to App Builder, start with our [App Builder Getting Started guide](app_builder_get_started/app_builder_intro.md). This guide will walk you through: - Setting up your development environment - Creating your first App Builder application - Publishing your app @@ -23,4 +23,4 @@ If you're interested in serverless development with Adobe I/O Runtime, check out After completing either getting started guide, you can explore our detailed [Guides](../guides/index.md) section for more in-depth information about specific features and capabilities. -For additional resources and support, visit our [Resources](../resources/index.md) section. \ No newline at end of file +For additional resources and support, visit our [Resources](../resources/index.md) section. From 0cf43bc814004120945509a575293e28393acb33 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 8 May 2025 11:52:36 -0700 Subject: [PATCH 005/116] update embed links --- src/pages/resources/events-runtime/lesson2.md | 2 +- src/pages/resources/videos/developers-live/deep-dive.md | 2 +- src/pages/resources/videos/exploring/ci-cd.md | 2 +- src/pages/resources/videos/exploring/ode-case-study.md | 2 +- src/pages/resources/videos/exploring/projects-and-workspaces.md | 2 +- src/pages/resources/videos/overview/architecture.md | 2 +- src/pages/resources/videos/overview/e2-e-user-journey.md | 2 +- src/pages/resources/videos/overview/getting-started.md | 2 +- src/pages/resources/videos/overview/introduction.md | 2 +- src/pages/resources/videos/overview/security.md | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/pages/resources/events-runtime/lesson2.md b/src/pages/resources/events-runtime/lesson2.md index d3a39bb4c..568826cf9 100644 --- a/src/pages/resources/events-runtime/lesson2.md +++ b/src/pages/resources/events-runtime/lesson2.md @@ -30,7 +30,7 @@ You can use this Activation ID in the aio cli to trace the error that occurred i `aio rt activation logs` - +[failed_activation_id] You may now get activation IDs for two types of failed activations: diff --git a/src/pages/resources/videos/developers-live/deep-dive.md b/src/pages/resources/videos/developers-live/deep-dive.md index 9d54846c1..4e460f132 100644 --- a/src/pages/resources/videos/developers-live/deep-dive.md +++ b/src/pages/resources/videos/developers-live/deep-dive.md @@ -14,4 +14,4 @@ Join us and see App Builder in action: code, security, headful and headless apps - +https://youtu.be/Iq-ObRXikDQ diff --git a/src/pages/resources/videos/exploring/ci-cd.md b/src/pages/resources/videos/exploring/ci-cd.md index ab84ab67b..b84bd23e3 100644 --- a/src/pages/resources/videos/exploring/ci-cd.md +++ b/src/pages/resources/videos/exploring/ci-cd.md @@ -14,4 +14,4 @@ Manik Jindal, App Builder Product Manager, dives into CI/CD. Learn how to set up - +https://youtu.be/lbB2jl2rQZM diff --git a/src/pages/resources/videos/exploring/ode-case-study.md b/src/pages/resources/videos/exploring/ode-case-study.md index f7aa54288..c0758dc81 100644 --- a/src/pages/resources/videos/exploring/ode-case-study.md +++ b/src/pages/resources/videos/exploring/ode-case-study.md @@ -11,4 +11,4 @@ keywords: - +https://youtu.be/PtRxpO_2AvE diff --git a/src/pages/resources/videos/exploring/projects-and-workspaces.md b/src/pages/resources/videos/exploring/projects-and-workspaces.md index 49f470219..96dcf5c17 100644 --- a/src/pages/resources/videos/exploring/projects-and-workspaces.md +++ b/src/pages/resources/videos/exploring/projects-and-workspaces.md @@ -14,4 +14,4 @@ The App Builder team shares a short presentation about projects and workspaces, - +https://youtu.be/bXftsgCnwks diff --git a/src/pages/resources/videos/overview/architecture.md b/src/pages/resources/videos/overview/architecture.md index 5269fd5a7..f9f0a2f12 100644 --- a/src/pages/resources/videos/overview/architecture.md +++ b/src/pages/resources/videos/overview/architecture.md @@ -11,4 +11,4 @@ keywords: - +https://youtu.be/LbAVytUm94g diff --git a/src/pages/resources/videos/overview/e2-e-user-journey.md b/src/pages/resources/videos/overview/e2-e-user-journey.md index e11bafad3..e032da621 100644 --- a/src/pages/resources/videos/overview/e2-e-user-journey.md +++ b/src/pages/resources/videos/overview/e2-e-user-journey.md @@ -11,4 +11,4 @@ keywords: - +https://youtu.be/N_0MxSIoKDM diff --git a/src/pages/resources/videos/overview/getting-started.md b/src/pages/resources/videos/overview/getting-started.md index 46618348f..9aebc2215 100644 --- a/src/pages/resources/videos/overview/getting-started.md +++ b/src/pages/resources/videos/overview/getting-started.md @@ -14,4 +14,4 @@ In this video, we will cover how to set up your project in the Adobe Developer C - +https://youtu.be/AwL0QRxH9JQ diff --git a/src/pages/resources/videos/overview/introduction.md b/src/pages/resources/videos/overview/introduction.md index a054627ba..f021e7495 100644 --- a/src/pages/resources/videos/overview/introduction.md +++ b/src/pages/resources/videos/overview/introduction.md @@ -14,4 +14,4 @@ This App Builder tech talk aims to explore what’s possible with App Builder, a - +https://youtu.be/kd2i50J9MZI diff --git a/src/pages/resources/videos/overview/security.md b/src/pages/resources/videos/overview/security.md index 18dcaf9d4..ed556e6c6 100644 --- a/src/pages/resources/videos/overview/security.md +++ b/src/pages/resources/videos/overview/security.md @@ -11,4 +11,4 @@ keywords: - +https://youtu.be/CHPDtDejy6Q From 0b15bb907075ccbb3571bbf3ad76eb56d4c35be3 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 8 May 2025 11:52:58 -0700 Subject: [PATCH 006/116] update embed links --- .../developers-live/asset-compute-service-extensibility.md | 2 +- .../resources/videos/developers-live/extend-experience-cloud.md | 2 +- src/pages/resources/videos/exploring/custom-events.md | 2 +- src/pages/resources/videos/exploring/dashboard-case-study.md | 2 +- src/pages/resources/videos/exploring/debugging.md | 2 +- src/pages/resources/videos/exploring/deep-dive-use-cases.md | 2 +- src/pages/resources/videos/exploring/learning-resources.md | 2 +- src/pages/resources/videos/exploring/live-wired-sneak.md | 2 +- src/pages/resources/videos/exploring/react-spectrum.md | 2 +- src/pages/resources/videos/exploring/softcrylic-showcase.md | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/pages/resources/videos/developers-live/asset-compute-service-extensibility.md b/src/pages/resources/videos/developers-live/asset-compute-service-extensibility.md index a872fe68d..28cad7f12 100644 --- a/src/pages/resources/videos/developers-live/asset-compute-service-extensibility.md +++ b/src/pages/resources/videos/developers-live/asset-compute-service-extensibility.md @@ -14,4 +14,4 @@ Learn how to use App Builder to build custom Asset Compute worker for asset proc - +https://youtu.be/6wdbd050UMM diff --git a/src/pages/resources/videos/developers-live/extend-experience-cloud.md b/src/pages/resources/videos/developers-live/extend-experience-cloud.md index ac2f87b95..fcb06ef78 100644 --- a/src/pages/resources/videos/developers-live/extend-experience-cloud.md +++ b/src/pages/resources/videos/developers-live/extend-experience-cloud.md @@ -14,4 +14,4 @@ If you want to extend Adobe solutions using a modern architecture that works for - +https://youtu.be/FGMhy38OKMg diff --git a/src/pages/resources/videos/exploring/custom-events.md b/src/pages/resources/videos/exploring/custom-events.md index fa9dea6e0..53c096181 100644 --- a/src/pages/resources/videos/exploring/custom-events.md +++ b/src/pages/resources/videos/exploring/custom-events.md @@ -14,4 +14,4 @@ Join us as we dive deep into the topic of Adobe I/O Events, including our new Ap - +https://youtu.be/RWOEZ9RaqRI diff --git a/src/pages/resources/videos/exploring/dashboard-case-study.md b/src/pages/resources/videos/exploring/dashboard-case-study.md index 58971e1a4..75309a18a 100644 --- a/src/pages/resources/videos/exploring/dashboard-case-study.md +++ b/src/pages/resources/videos/exploring/dashboard-case-study.md @@ -11,4 +11,4 @@ keywords: - +https://youtu.be/jvDONM3kJwY diff --git a/src/pages/resources/videos/exploring/debugging.md b/src/pages/resources/videos/exploring/debugging.md index 00732b48c..dce392cf6 100644 --- a/src/pages/resources/videos/exploring/debugging.md +++ b/src/pages/resources/videos/exploring/debugging.md @@ -14,4 +14,4 @@ In this session in-depth study of debugging, Shazron Abdullah and Duy Nguyen tak - +https://youtu.be/RgHNJWTCSqw diff --git a/src/pages/resources/videos/exploring/deep-dive-use-cases.md b/src/pages/resources/videos/exploring/deep-dive-use-cases.md index c34b77cdb..622be1ed6 100644 --- a/src/pages/resources/videos/exploring/deep-dive-use-cases.md +++ b/src/pages/resources/videos/exploring/deep-dive-use-cases.md @@ -14,4 +14,4 @@ Manik and Ron take a look at a number of great use cases, and share some popular - +https://youtu.be/P19nBf6DGAI diff --git a/src/pages/resources/videos/exploring/learning-resources.md b/src/pages/resources/videos/exploring/learning-resources.md index b06052a76..fc6bbdca6 100644 --- a/src/pages/resources/videos/exploring/learning-resources.md +++ b/src/pages/resources/videos/exploring/learning-resources.md @@ -14,4 +14,4 @@ We focus on learning resources, from Code Labs to documentation to videos like t - +https://youtu.be/MLvwAsoXpFg diff --git a/src/pages/resources/videos/exploring/live-wired-sneak.md b/src/pages/resources/videos/exploring/live-wired-sneak.md index 72c03e892..6d8c110da 100644 --- a/src/pages/resources/videos/exploring/live-wired-sneak.md +++ b/src/pages/resources/videos/exploring/live-wired-sneak.md @@ -14,4 +14,4 @@ Join us for a very special Adobe Summit edition of Office Hours. Ron, Alex and D - +https://youtu.be/8TayjL1bONc diff --git a/src/pages/resources/videos/exploring/react-spectrum.md b/src/pages/resources/videos/exploring/react-spectrum.md index 02de415b0..00a40b2f1 100644 --- a/src/pages/resources/videos/exploring/react-spectrum.md +++ b/src/pages/resources/videos/exploring/react-spectrum.md @@ -14,4 +14,4 @@ We are joined by Rob Snow from the React Spectrum team discuss React Spectrum, h - +https://youtu.be/W5Cqb0QYLSs diff --git a/src/pages/resources/videos/exploring/softcrylic-showcase.md b/src/pages/resources/videos/exploring/softcrylic-showcase.md index 5de7296dd..2e2a0db35 100644 --- a/src/pages/resources/videos/exploring/softcrylic-showcase.md +++ b/src/pages/resources/videos/exploring/softcrylic-showcase.md @@ -14,4 +14,4 @@ Sundar Sritharan from Softcrylic joins us to share what they are cooking up with - +https://youtu.be/3q53AlcWlB4 From 47c53aac5d1c1e9076f4414868c8753afea0063d Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 8 May 2025 16:24:16 -0700 Subject: [PATCH 007/116] update application-state --- package.json | 9 +++-- .../app_builder_guides/application-state.md | 38 +++++++++---------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index 79902c52b..8f1e705d1 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,18 @@ { "private": true, - "name": "dev-site-documentation-template", + "name": "adobe-developer-app-builder", "version": "1.0.0", "license": "Apache-2.0", "repository": { "type": "git", - "url": "https://github.com/AdobeDocs/dev-site-documentation-template" + "url": "https://github.com/AdobeDocs/app-builder" }, "author": { "name": "Stephan Ringel", "url": "https://github.com/icaraps" }, "dependencies": { - "@adobe/gatsby-theme-aio": "^4.14.6", + "@adobe/gatsby-theme-aio": "4.16.0-rc9", "gatsby": "4.22.0", "react": "^17.0.2", "react-dom": "^17.0.2" @@ -26,6 +26,7 @@ "start:prefix": "gatsby build --prefix-paths && gatsby serve --prefix-paths", "dev": "gatsby develop", "dev:https": "gatsby develop --https --host localhost.corp.adobe.com --port 9000", + "build:incremental": "GATSBY_EXPERIMENTAL_PAGE_BUILD_ON_DATA_CHANGES=true gatsby build --log-pages", "build": "gatsby build", "serve": "gatsby serve", "clean": "gatsby clean", @@ -41,7 +42,7 @@ "remark-validate-links" ] }, - "packageManager": "yarn@3.2.1", + "packageManager": "yarn@4.9.1", "devDependencies": { "glob": "11.0.0", "remark-cli": "^11.0.0", diff --git a/src/pages/guides/app_builder_guides/application-state.md b/src/pages/guides/app_builder_guides/application-state.md index dd82ff1a1..a2849b7f4 100644 --- a/src/pages/guides/app_builder_guides/application-state.md +++ b/src/pages/guides/app_builder_guides/application-state.md @@ -221,22 +221,22 @@ To learn more please visit the [Adobe I/O File Storage library](https://github.c ## Feature Matrix -| | Files | State | State Legacy -| ----------- | ----------- |----------- | --------- | -| read
write
delete | Y | Y | Y | -| list | Y | Y | N -| streams | Y | N | N -| copy | Y | N | N -| deleteAll | N | Y | N -| sharing | Y (pre-sign URLs) | N | N -| Time-To-Live | N | Y | Y -| max TTL | infinite | 365 days | infinite -| max file/value size | 200GB | 1MB | 2MB | -| max key size | 1KB | 1KB | 1KB | -| key charset | open | `alphanumeric` with `_-.` | any but `/\?#` | -| max load | N/A | 10MB/min, 1MB/s
1k/min `list` requests | 900 RU/min (~KB/min) | -| max key values | N/A | 200K (scalable) | N/A | -| max storage | 1TB | 10GB | 10GB | -| max monthly load | N/A | 1TB (scalable) | N/A | -| regions | East US
West US read-only | Amer (US)
Emea (EU)
Apac (JPN) | East US
Europe read-only -| consistency | strong | strong (CRUD), eventual for `list` | eventual \ No newline at end of file +| | Files | State | State Legacy | +| ----------- | ----------- |----------- |--------------------------------| +| read
write
delete | Y | Y | Y | +| list | Y | Y | N | +| streams | Y | N | N | +| copy | Y | N | N | +| deleteAll | N | Y | N | +| sharing | Y (pre-sign URLs) | N | N | +| Time-To-Live | N | Y | Y | +| max TTL | infinite | 365 days | infinite | +| max file/value size | 200GB | 1MB | 2MB | +| max key size | 1KB | 1KB | 1KB | +| key charset | open | `alphanumeric` with `_-.` | any but `/\?#` | +| max load | N/A | 10MB/min, 1MB/s
1k/min `list` requests | 900 RU/min (~KB/min) | +| max key values | N/A | 200K (scalable) | N/A | +| max storage | 1TB | 10GB | 10GB | +| max monthly load | N/A | 1TB (scalable) | N/A | +| regions | East US
West US read-only | Amer (US)
Emea (EU)
Apac (JPN) | East US
Europe read-only | +| consistency | strong | strong (CRUD), eventual for `list` | eventual | From 320100cb8b28158b5a3ab57286bd2c21db5b4cc6 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 8 May 2025 16:39:35 -0700 Subject: [PATCH 008/116] Update application-state.md --- .../app_builder_guides/application-state.md | 110 ++++++++++-------- 1 file changed, 61 insertions(+), 49 deletions(-) diff --git a/src/pages/guides/app_builder_guides/application-state.md b/src/pages/guides/app_builder_guides/application-state.md index a2849b7f4..597b4baa6 100644 --- a/src/pages/guides/app_builder_guides/application-state.md +++ b/src/pages/guides/app_builder_guides/application-state.md @@ -39,7 +39,7 @@ hello-world: ### Considerations about security -For authentication with Adobe APIs, you should leverage [App Builder Security Guideline](security/index.md) using our supported SDKs. +For authentication with Adobe APIs, you should leverage [App Builder Security Guideline](./security/index.md) using our supported SDKs. For other 3rd party systems and APIs when provisioning actions with the secrets/passwords is a must, you can then use the default params as demonstrated above. In order to support this use case, all default params are automatically encrypted. They are decrypted just before the action code is executed. Thus, the only time you have access to the decrypted value is while executing the action code. @@ -51,6 +51,7 @@ No pre-configuration is required, just install the libraries and use them in you *When should I use Files vs State?* + - Files is good for transferring large payloads (bandwidth oriented) and State is good for fast access (latency oriented). - Files supports sharing data via presigned-url, State supports setting expirations. - As a rule of thumb if you expect your data to grow larger than 100KBs go with Files, otherwise use State. @@ -64,7 +65,7 @@ Please refer to the [feature matrix](#feature-matrix) for a detailed comparison. ***How is my data stored?*** - State is a multi-tenant storage. Your data is isolated in a "State container" which maps to your I/O Runtime namespace and application Workspace. This means that each application Workspace has its own isolated data. -- You have the option to store data in either the `amer`, `emea` or `apac` region. These regions operate independently, so treat them as separate instances. You may prefer one region over the other to optimize latency, as it may be closer to your users, or for compliance reasons such as GDPR. +- You have the option to store data in either the `amer`, `emea` or `apac` region. These regions operate independently, so treat them as separate instances. You may prefer one region over the other to optimize latency, as it may be closer to your users, or for compliance reasons such as GDPR. - Your data is not eternal. There is a configurable time-to-live (TTL) for each key-value pair, the default is 1 day and the maximum is 1 year (365 days). Region Acronyms are abbreviations for one or more continents that are part of a business region. @@ -141,33 +142,43 @@ The default region is `amer`, to access another region, you can use the `--regio Navigate the CLI usage documentation from the repo's [README](https://github.com/adobe/aio-cli-plugin-app-storage?tab=readme-ov-file#usage) or by using the `--help` flag on the desired command. -### Constraints +### Usage limits + +Usage limits are enforced at the **workspace** level within a **single** region. + +**Load** + +- bandwidth + - 10MB/min with up to 1MB/sec peaks for production Workspaces. + - 2MB/min with up to 1MB/sec peaks for non-production Workspaces. + +- requests + - 1000 req/min for `list`, `deleteAll`, `stats` operations on production Workspaces. + - 200 req/min for `list`, `deleteAll`, `stats` operations on non-production Workspaces. + +In case of exceeding the usage limits, the State service will return with 429s. However, a retry mechanism in the State library will mitigate the propagation of the error on short time windows. -- State is only available to Runtime namespaces created via the Developer Console, which follow the App Builder format: `orgId-project(-workspace)?`. Legacy namespaces are not supported. -- Max state value size: `1MB`. -- Max state key size: `1024 bytes`. -- Max-supported TTL is `365 days`. -- Values format: any `string|binary`. -- Keys format: `string` only `alphanumeric` with `-`,`_`,`.`. +**Storage** -### Usage quotas and limits +- 100K key-values pairs +- 1GB storage usage: `2 * key_sizes + value_sizes` -The following quotas and limits apply while dealing with Application State associated with your App Builder application. +In case of exceeding the storage limits the service will return with an error and you will have to delete keys or wait for expiration to resume writing. -Quotas are shared across the organisation. Workspace limits are defined at the *workspace* level. The State service may return 429 (rate-limits) or -403 (storage limits) errors if limits are exceeded. +### Quotas -| Limit | Limit Type | Default Limit | Can it be Increased? | Notes | -|-------|-----------|--------------|----------------------|-------| -| How much data can you store in State? | Quota (increases with number of packs) | Up to 10 GB per App Builder pack | Yes, by purchasing more packs of App Builder | Storage is calculated as: `(2 * total size of keys) + (total size of values)`. | -| How much State bandwidth can you utilize? | Quota (increases with number of packs) | 1 TB per month per App Builder pack | Yes, by purchasing more packs of App Builder | Bandwidth is calculated as: total bytes uploaded + total bytes downloaded. | -| How much data can you store in State in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1 GB for production workspaces
200 MB for other workspaces | Yes, by raising a support ticket. You can request an increase up to 10 GB.
*Note: Increasing the limit beyond 10 GB in a single workspace can be supported depending on your case. Raise a support ticket to find out more.* | Storage is calculated as: `(2 * total size of keys) + (total size of values)`. | -| How much State burst bandwidth can you consume in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1 MB/s (bursts)

10 MB/min for production workspaces
2 MB/min for other workspaces | Yes, by raising a support ticket. You can request an increase up to 3 MB/s and 30 MB/min per App Builder packs purchased. | Bandwidth is calculated as: `total bytes uploaded + total bytes downloaded`. | -| How fast can you increase your bandwidth consumption in a single App Builder workspace? | Workspace limit (fixed per workspace) | 100 KB/s per minute | No | - | -| How many keys can you store in State in a single App Builder workspace? | Workspace limit (fixed per workspace) | 200K | Yes, by raising a support ticket. You can request an increase up to 500K keys. | This limit does not scale with the number of App Builder packs purchased. | -| How many list operations can you run per minute in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1K/min | Yes, by raising a support ticket. You can request an increase up to 10K/min. | This limit does not scale with the number of App Builder packs purchased. | +Every organization with App Builder access is entitled to at least 1 State quota. -### List considerations +At the organization level, 1 quota provides: + +- 200GB/month bandwidth usage (~5MB/min): bandwidth usage = bytes uploaded + bytes downloaded +- 1GB storage: storage usage = 2 * key_sizes + value_sizes + +The quota is shared for all State containers in the organization, across all regions and is tracked for billing purposes. + +*Example: org 123 is entitled to 3 quotas, the total bandwidth usage of the organization should not exceed 600GB/month and the storage across regions should not exceed 3GB.* + +### List guarantees Using `state.list`, you can scan through the keys stored in your State container. `list` is a cursor-based iterator, which requires multiple calls to the State service to traverse all your keys. @@ -177,20 +188,21 @@ It is important to understand that `list` is scanning through your keys: - every call to `list` will iterate over up to 1000 keys. The former `countHint` option is now ignored. - As an example, trying to match 1 key in a 10k key-values data-set will still require 10 calls to `list` to fetch it. -The `list` command is not strongly consistent, and the following points need to be taken into account: +`list` provides the following guarantees: + +- A full iteration always returns all keys that were present in the container during the start to the end of a full iteration. +- A full iteration never returns any key that was deleted prior to an iteration. + +However, list also has the following drawbacks: -- We are sending `list` requests to a replica, there is a ~5ms lag, after which a - full iteration returns keys that were present in the container and doesn't - return keys that were deleted prior to an iteration. -- Keys that were not constantly present in the collection during a full - iteration, may be returned or not: it is undefined. +- Keys that were not constantly present in the collection during a full iteration, may be returned or not: it is undefined. - A given key may be returned multiple times across iterations (but not within a same iteration). You can mitigate this by either performing operations that are safe when applied multiple times (recommended with many keys) or by collecting all keys in an array first and then remove any duplicates. - In some rare cases, `list` may return expired keys. -Please note, that `list` is subject to rate-limiting, so listing many keys may result in 429s. +Please note, that `list` is subject to the bandwidth rate-limiting quotas, so listing many keys may result in 429s. ### `match` option @@ -221,22 +233,22 @@ To learn more please visit the [Adobe I/O File Storage library](https://github.c ## Feature Matrix -| | Files | State | State Legacy | -| ----------- | ----------- |----------- |--------------------------------| -| read
write
delete | Y | Y | Y | -| list | Y | Y | N | -| streams | Y | N | N | -| copy | Y | N | N | -| deleteAll | N | Y | N | -| sharing | Y (pre-sign URLs) | N | N | -| Time-To-Live | N | Y | Y | -| max TTL | infinite | 365 days | infinite | -| max file/value size | 200GB | 1MB | 2MB | -| max key size | 1KB | 1KB | 1KB | -| key charset | open | `alphanumeric` with `_-.` | any but `/\?#` | -| max load | N/A | 10MB/min, 1MB/s
1k/min `list` requests | 900 RU/min (~KB/min) | -| max key values | N/A | 200K (scalable) | N/A | -| max storage | 1TB | 10GB | 10GB | -| max monthly load | N/A | 1TB (scalable) | N/A | -| regions | East US
West US read-only | Amer (US)
Emea (EU)
Apac (JPN) | East US
Europe read-only | -| consistency | strong | strong (CRUD), eventual for `list` | eventual | +| | Files | State | State Legacy | +| ------------------- | -------------------------- |-----------------------------------------| ------------------------- | +| read write delete | Y | Y | Y | +| list | Y | Y | N | +| streams | Y | N | N | +| copy | Y | N | N | +| deleteAll | N | Y | N | +| sharing | Y (pre-sign URLs) | N | N | +| Time-To-Live | N | Y | Y | +| max TTL | infinite | 365 days | infinite | +| max file/value size | 200GB | 1MB | 2MB | +| max key size | 1KB | 1KB | 1KB | +| key charset | open | `alphanumeric` with `_-.` | any but `/\?#` | +| max load | N/A | 10MB/min, 1MB/s 1k/min `list` requests | 900 RU/min (~KB/min) | +| max key values | N/A | 100K (scalable) | N/A | +| max storage | 1TB | 1GB (scalable) | 10GB | +| max monthly load | N/A | 200GB (scalable) | N/A | +| regions | East US West US read-only | Amer (US) Emea (EU) Apac (JPN) | East US Europe read-only | +| consistency | strong | strong (CRUD), eventual for `list` | eventual | From f3f53c3df4bbac49768555ec66e687fffdc541a1 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 8 May 2025 16:43:39 -0700 Subject: [PATCH 009/116] update application-state --- .../app_builder_guides/application-state.md | 67 ++++++++----------- 1 file changed, 28 insertions(+), 39 deletions(-) diff --git a/src/pages/guides/app_builder_guides/application-state.md b/src/pages/guides/app_builder_guides/application-state.md index 597b4baa6..1d4e12f39 100644 --- a/src/pages/guides/app_builder_guides/application-state.md +++ b/src/pages/guides/app_builder_guides/application-state.md @@ -142,43 +142,33 @@ The default region is `amer`, to access another region, you can use the `--regio Navigate the CLI usage documentation from the repo's [README](https://github.com/adobe/aio-cli-plugin-app-storage?tab=readme-ov-file#usage) or by using the `--help` flag on the desired command. -### Usage limits +### Constraints -Usage limits are enforced at the **workspace** level within a **single** region. +- State is only available to Runtime namespaces created via the Developer Console, which follow the App Builder format: `orgId-project(-workspace)?`. Legacy namespaces are not supported. +- Max state value size: `1MB`. +- Max state key size: `1024 bytes`. +- Max-supported TTL is `365 days`. +- Values format: any `string|binary`. +- Keys format: `string` only `alphanumeric` with `-`,`_`,`.`. -**Load** +### Usage quotas and limits -- bandwidth - - 10MB/min with up to 1MB/sec peaks for production Workspaces. - - 2MB/min with up to 1MB/sec peaks for non-production Workspaces. +The following quotas and limits apply while dealing with Application State associated with your App Builder application. -- requests - - 1000 req/min for `list`, `deleteAll`, `stats` operations on production Workspaces. - - 200 req/min for `list`, `deleteAll`, `stats` operations on non-production Workspaces. +Quotas are shared across the organisation. Workspace limits are defined at the *workspace* level. The State service may return 429 (rate-limits) or +403 (storage limits) errors if limits are exceeded. -In case of exceeding the usage limits, the State service will return with 429s. However, a retry mechanism in the State library will mitigate the propagation of the error on short time windows. +| Limit | Limit Type | Default Limit | Can it be Increased? | Notes | +|-------|-----------|--------------|----------------------|-------| +| How much data can you store in State? | Quota (increases with number of packs) | Up to 10 GB per App Builder pack | Yes, by purchasing more packs of App Builder | Storage is calculated as: `(2 * total size of keys) + (total size of values)`. | +| How much State bandwidth can you utilize? | Quota (increases with number of packs) | 1 TB per month per App Builder pack | Yes, by purchasing more packs of App Builder | Bandwidth is calculated as: total bytes uploaded + total bytes downloaded. | +| How much data can you store in State in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1 GB for production workspaces
200 MB for other workspaces | Yes, by raising a support ticket. You can request an increase up to 10 GB.
*Note: Increasing the limit beyond 10 GB in a single workspace can be supported depending on your case. Raise a support ticket to find out more.* | Storage is calculated as: `(2 * total size of keys) + (total size of values)`. | +| How much State burst bandwidth can you consume in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1 MB/s (bursts)

10 MB/min for production workspaces
2 MB/min for other workspaces | Yes, by raising a support ticket. You can request an increase up to 3 MB/s and 30 MB/min per App Builder packs purchased. | Bandwidth is calculated as: `total bytes uploaded + total bytes downloaded`. | +| How fast can you increase your bandwidth consumption in a single App Builder workspace? | Workspace limit (fixed per workspace) | 100 KB/s per minute | No | - | +| How many keys can you store in State in a single App Builder workspace? | Workspace limit (fixed per workspace) | 200K | Yes, by raising a support ticket. You can request an increase up to 500K keys. | This limit does not scale with the number of App Builder packs purchased. | +| How many list operations can you run per minute in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1K/min | Yes, by raising a support ticket. You can request an increase up to 10K/min. | This limit does not scale with the number of App Builder packs purchased. | -**Storage** - -- 100K key-values pairs -- 1GB storage usage: `2 * key_sizes + value_sizes` - -In case of exceeding the storage limits the service will return with an error and you will have to delete keys or wait for expiration to resume writing. - -### Quotas - -Every organization with App Builder access is entitled to at least 1 State quota. - -At the organization level, 1 quota provides: - -- 200GB/month bandwidth usage (~5MB/min): bandwidth usage = bytes uploaded + bytes downloaded -- 1GB storage: storage usage = 2 * key_sizes + value_sizes - -The quota is shared for all State containers in the organization, across all regions and is tracked for billing purposes. - -*Example: org 123 is entitled to 3 quotas, the total bandwidth usage of the organization should not exceed 600GB/month and the storage across regions should not exceed 3GB.* - -### List guarantees +### List considerations Using `state.list`, you can scan through the keys stored in your State container. `list` is a cursor-based iterator, which requires multiple calls to the State service to traverse all your keys. @@ -188,21 +178,20 @@ It is important to understand that `list` is scanning through your keys: - every call to `list` will iterate over up to 1000 keys. The former `countHint` option is now ignored. - As an example, trying to match 1 key in a 10k key-values data-set will still require 10 calls to `list` to fetch it. -`list` provides the following guarantees: - -- A full iteration always returns all keys that were present in the container during the start to the end of a full iteration. -- A full iteration never returns any key that was deleted prior to an iteration. - -However, list also has the following drawbacks: +The `list` command is not strongly consistent, and the following points need to be taken into account: -- Keys that were not constantly present in the collection during a full iteration, may be returned or not: it is undefined. +- We are sending `list` requests to a replica, there is a ~5ms lag, after which a + full iteration returns keys that were present in the container and doesn't + return keys that were deleted prior to an iteration. +- Keys that were not constantly present in the collection during a full + iteration, may be returned or not: it is undefined. - A given key may be returned multiple times across iterations (but not within a same iteration). You can mitigate this by either performing operations that are safe when applied multiple times (recommended with many keys) or by collecting all keys in an array first and then remove any duplicates. - In some rare cases, `list` may return expired keys. -Please note, that `list` is subject to the bandwidth rate-limiting quotas, so listing many keys may result in 429s. +Please note, that `list` is subject to rate-limiting, so listing many keys may result in 429s. ### `match` option From 489582a80e37187dc14752fc0acb6c867123f531 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 8 May 2025 16:55:28 -0700 Subject: [PATCH 010/116] update userapi.md --- .../app_builder_guides/exc_app/interfaces/user-userapi.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/user-userapi.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/user-userapi.md index d0831c96b..5bd03768d 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/user-userapi.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/user-userapi.md @@ -27,7 +27,7 @@ Optional. When specified, this URL will be invoked when the user logs out. This ### emit -▸ **emit**<**K**>(`type`: K, `event?`: UserInfoEvent[K]): *void* +▸ **emit** \<**K**\>(`type`: K, `event?`: UserInfoEvent[K]): *void* *Inherited from void* @@ -50,7 +50,7 @@ ___ ### off -▸ **off**<**K**>(`type`: K, `handler`: function): *void* +▸ **off**\<**K**\>(`type`: K, `handler`: function): *void* *Inherited from void* @@ -84,7 +84,7 @@ ___ ### on -▸ **on**<**K**>(`type`: K, `handler`: function): *void* +▸ **on**\<**K**\>(`type`: K, `handler`: function): *void* *Inherited from void* @@ -130,7 +130,7 @@ ___ ### get -▸ **get**<**T**>(`type`: T): *Promise‹UserInfo[T]›* +▸ **get**\<**T**\>(`type`: T): *Promise‹UserInfo[T]›* Gets the specified type of information about an user. From 45cd2a6a0bea2ef81809c16c312abca33137c53e Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 8 May 2025 16:57:28 -0700 Subject: [PATCH 011/116] update runtime --- .../app_builder_guides/exc_app/interfaces/runtime.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md index 4714f4371..9c679027e 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md @@ -4,10 +4,10 @@ keywords: - Extensibility - API Documentation - Developer Tooling -title: 'Interface: Runtime <**T**>' +title: 'Interface: Runtime /<**T**/>' --- -# Interface: Runtime <**T**> +# Interface: Runtime /<**T**/> Defines the runtime object providing all unified-shell APIs for solution authors. @@ -25,7 +25,7 @@ Defines the runtime object providing all unified-shell APIs for solution authors ### emit -▸ **emit**<**K**>(`type`: K, `event?`: T[K]): *void* +▸ **emit** /<**K**/>(`type`: K, `event?`: T[K]): *void* *Inherited from void* @@ -48,7 +48,7 @@ ___ ### off -▸ **off**<**K**>(`type`: K, `handler`: function): *void* +▸ **off**/<**K**/>(`type`: K, `handler`: function): *void* *Inherited from void* @@ -82,7 +82,7 @@ ___ ### on -▸ **on**<**K**>(`type`: K, `handler`: function): *void* +▸ **on**/<**K**/>(`type`: K, `handler`: function): *void* *Inherited from void* From e1c3e3cf8b03da01f8120f902fc3a23a963c5444 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 8 May 2025 17:31:10 -0700 Subject: [PATCH 012/116] update runtime --- .../app_builder_guides/exc_app/interfaces/runtime.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md index 9c679027e..efc396612 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md @@ -4,10 +4,10 @@ keywords: - Extensibility - API Documentation - Developer Tooling -title: 'Interface: Runtime /<**T**/>' +title: 'Interface: Runtime \<**T**\>' --- -# Interface: Runtime /<**T**/> +# Interface: Runtime \<**T**\> Defines the runtime object providing all unified-shell APIs for solution authors. @@ -25,7 +25,7 @@ Defines the runtime object providing all unified-shell APIs for solution authors ### emit -▸ **emit** /<**K**/>(`type`: K, `event?`: T[K]): *void* +▸ **emit** \<**K**\>(`type`: K, `event?`: T[K]): *void* *Inherited from void* @@ -48,7 +48,7 @@ ___ ### off -▸ **off**/<**K**/>(`type`: K, `handler`: function): *void* +▸ **off**\<**K**\>(`type`: K, `handler`: function): *void* *Inherited from void* @@ -82,7 +82,7 @@ ___ ### on -▸ **on**/<**K**/>(`type`: K, `handler`: function): *void* +▸ **on**\<**K**\>(`type`: K, `handler`: function): *void* *Inherited from void* From e625279018227c7e9b3f0c421468f22436ae3b87 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 8 May 2025 17:33:28 -0700 Subject: [PATCH 013/116] update runtime --- .../guides/app_builder_guides/exc_app/interfaces/runtime.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md index efc396612..3fc70f295 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md @@ -4,7 +4,7 @@ keywords: - Extensibility - API Documentation - Developer Tooling -title: 'Interface: Runtime \<**T**\>' +title: 'Interface: Runtime' --- # Interface: Runtime \<**T**\> From 0226629bfb762e3751ab61749fa81d23bd726530 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 8 May 2025 17:37:16 -0700 Subject: [PATCH 014/116] update runtime --- .../guides/app_builder_guides/exc_app/interfaces/runtime.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md index 3fc70f295..88f670596 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md @@ -4,7 +4,7 @@ keywords: - Extensibility - API Documentation - Developer Tooling -title: 'Interface: Runtime' +title: 'Interface: Runtime \<**T**\>' --- # Interface: Runtime \<**T**\> @@ -44,8 +44,6 @@ Invoke all handlers for the given type. **Returns:** *void* -___ - ### off ▸ **off**\<**K**\>(`type`: K, `handler`: function): *void* From 8c3bdac9364316c6801474b4ae95cac297abf8ab Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 8 May 2025 17:38:02 -0700 Subject: [PATCH 015/116] update runtime --- .../guides/app_builder_guides/exc_app/interfaces/runtime.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md index 88f670596..3a3b7f2af 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md @@ -76,8 +76,6 @@ Handler function to remove. **Returns:** *void* -___ - ### on ▸ **on**\<**K**\>(`type`: K, `handler`: function): *void* From 708e3fcd986e34364569b12b7c61b3fd5a5858ca Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Fri, 9 May 2025 17:02:25 -0700 Subject: [PATCH 016/116] update runtime --- .../guides/app_builder_guides/exc_app/interfaces/runtime.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md index 3a3b7f2af..204df9eb8 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md @@ -44,6 +44,8 @@ Invoke all handlers for the given type. **Returns:** *void* +
+ ### off ▸ **off**\<**K**\>(`type`: K, `handler`: function): *void* @@ -76,6 +78,8 @@ Handler function to remove. **Returns:** *void* +
+ ### on ▸ **on**\<**K**\>(`type`: K, `handler`: function): *void* From d7036e7f7c0730fa5bc19e2dc9f1f7a7acfbf96b Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Fri, 9 May 2025 17:04:32 -0700 Subject: [PATCH 017/116] update runtime --- .../guides/app_builder_guides/exc_app/interfaces/runtime.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md index 204df9eb8..41405e91e 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md @@ -4,7 +4,7 @@ keywords: - Extensibility - API Documentation - Developer Tooling -title: 'Interface: Runtime \<**T**\>' +title: 'Interface: Runtime' --- # Interface: Runtime \<**T**\> From 34762053add9406fe901469ac1463c96106165eb Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Fri, 9 May 2025 17:05:57 -0700 Subject: [PATCH 018/116] update runtime --- .../guides/app_builder_guides/exc_app/interfaces/runtime.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md index 41405e91e..0abc74401 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md @@ -44,8 +44,6 @@ Invoke all handlers for the given type. **Returns:** *void* -
- ### off ▸ **off**\<**K**\>(`type`: K, `handler`: function): *void* @@ -78,7 +76,6 @@ Handler function to remove. **Returns:** *void* -
### on From 7e0f65372d9761ff13235eaba1e678c96e7c1d28 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Mon, 12 May 2025 11:26:13 -0700 Subject: [PATCH 019/116] update files with horizontal ruler --- manifest.yaml | 21 +++++++++++++++ .../guides/app_builder_guides/development.md | 4 +++ .../exc_app/interfaces/runtime.md | 3 ++- src/pages/intro_and_overview/faq.md | 26 +++++++++---------- 4 files changed, 40 insertions(+), 14 deletions(-) create mode 100644 manifest.yaml diff --git a/manifest.yaml b/manifest.yaml new file mode 100644 index 000000000..3066841ce --- /dev/null +++ b/manifest.yaml @@ -0,0 +1,21 @@ +type: navigation +order: 1 +title: ADP App Builder documentation +pages: + - title: Home + url: /src/pages/intro_and_overview/index.md + + - title: App Builder Getting Started + url: /src/pages/get_started/app_builder_get_started/index.md + + - title: Runtime Getting Started + url: /src/pages/get_started/index.md + + - title: Creating your First App Builder Application + url: /src/pages/getting_started/first_app.md + + - title: Guides + url: /src/pages/guides/index.md + + - title: Resources + url: /src/pages/resources/index.md diff --git a/src/pages/guides/app_builder_guides/development.md b/src/pages/guides/app_builder_guides/development.md index a3d034a03..4a8ec8106 100644 --- a/src/pages/guides/app_builder_guides/development.md +++ b/src/pages/guides/app_builder_guides/development.md @@ -101,6 +101,10 @@ Actions are loaded dynamically, so the code is not evaluated until an http reque You can use the step-through debugging features of VS Code, inspect variables, add watches, etc. +### Secure actions + +The `aio app dev` command simulates Adobe authentication (i.e. `require-adobe-auth` annotation). If your actions are secured with `require-adobe-auth: true`, you will have to include both `Authorization` and `x-gw-ims-org-id` headers in your requests. Any value will work. + ## More information Learn more about using a JavaScript debugger diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md index 0abc74401..86e995ad6 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md @@ -43,6 +43,7 @@ Invoke all handlers for the given type. | `event?` | T[K] | Any value passed to each handler -  object is recommended, and powerful | **Returns:** *void* +
### off @@ -75,7 +76,7 @@ Handler function to remove. | `event?` | T[K] | **Returns:** *void* - +
### on diff --git a/src/pages/intro_and_overview/faq.md b/src/pages/intro_and_overview/faq.md index 4348a65ae..459faed11 100644 --- a/src/pages/intro_and_overview/faq.md +++ b/src/pages/intro_and_overview/faq.md @@ -13,7 +13,7 @@ title: Frequently Asked Questions ### What is App Builder? -App Builder is a complete design, application, and runtime framework for building third-party cloud-native applications that run on Adobe infrastructure to extend the functionality of Adobe Experience Platform and Adobe Experience Cloud. Developers use App Builder to create custom integrations between Adobe and third-party products, to improve operational efficiency and workflow. +App Builder is a complete design, application, and runtime framework for building third-party cloud-native applications that run on Adobe infrastructure to extend the functionality of Adobe Experience Cloud and Adobe Experience Platform. Developers use App Builder to create custom integrations between Adobe and third-party products, to improve operational efficiency and workflow. ### What is it used for? @@ -21,7 +21,7 @@ App Builder is ideal for creating small actions that run repeatedly in response App Builder can also be used to create more complex applications. For example, Adobe's marketing team uses an App Builder application to manage tracking codes for marketing campaigns, and makes it available to the extended team using the same Experience Cloud URL they use to access other Adobe Experience Cloud solutions. -Adobe Experience Manager and Adobe Commerce customers can use App Builder to create UI extensions that let users work their own way during AEM authoring or in the Commerce Admin UI. +Adobe Experience Manager and Adobe Commerce customers can use App Builder to create UI extensions that let users work their own way during AEM authoring or in the Commerce Admin UI. In addition, UI extensions are now available in both Adobe Workfront and Adobe GenStudio for Performance Marketing! Adobe Commerce customers can also create an API Mesh, a powerful capability that uses a GraphQL mesh to aggregate API requests from a variety of back-end services. This dramatically increases performance by calling only required objects from APIs.  @@ -41,10 +41,10 @@ App Builder offers a complete application framework for extending Adobe solution * An execution environment so you do not need to bring your own infrastructure: * Adobe I/O Runtime serverless platform for backend * Content Delivery Network for static assets - * experience.adobe.com for surfacing the UI + * experience.adobe.com for applications with UI * Custom events for publishing events through Adobe infrastructure * File and data storage to persist application state -* App Builder apps are surfaced within [experience.adobe.com](https://experience.adobe.com), so end users can move seamlessly between Adobe and App Builder apps +* App Builder apps are surfaced within [experience.adobe.com](https://experience.adobe.com), so end users can move seamlessly between Adobe Experience Cloud applications and App Builder applications. ### How is App Builder different than Adobe I/O Runtime? @@ -66,7 +66,7 @@ Finally, customers can purchase a license for use with any Adobe Experience Clou ### Are trials available? -Yes. App Builder Trial is offered as part of [Adobe Experience Manager Headless Trial](https://commerce.adobe.com/business-trial/sign-up?items%5B0%5D%5Bid%5D=649A1AF5CBC5467A25E84F2561274821&cli=headless_exl_banner_campaign&co=US&lang=en). +Not at this time. ### What is included with an App Builder license? @@ -74,15 +74,15 @@ App Builder is licensed in packs that include runtime, event, storage, and other ### How can I get access to App Builder if my company is already licensed? -App Builder is available from either the Adobe I/O Command Line Interface (CLI) or the Adobe Developer Console to Adobe enterprise users. Users must have Developer or System Admin permissions from an Adobe Identity Management System (IMS) organization licensed for App Builder. Please contact the system administrator of your Adobe IMS organization for help getting Developer access. +First, make sure you have Developer or System Admin permissions from Adobe's Identity Management System (IMS) organization. Please contact the system administrator of your Adobe IMS organization for help getting Developer access. Once you confirm access use either the Adobe I/O Command Line Interface (CLI) or the [Adobe Developer Console](https://developer.adobe.com/console) to start a project. ### Is App Builder available to individuals who are not part of a company? -No. App Builder is availabile only to Adobe enterprise customers and partners. +No. App Builder is availabile only to Adobe enterprise customers and partners. -### **How can I get access to I/O Runtime?** +### How can I get access to I/O Runtime? -Since I/O Runtime is now part of App Builder, you may already have access. If not, consider an [App Builder Trial](https://commerce.adobe.com/business-trial/sign-up?items%5B0%5D%5Bid%5D=649A1AF5CBC5467A25E84F2561274821&cli=headless_exl_banner_campaign&co=US&lang=en). +I/O Runtime is part of App Builder, if your company has a license for App Builder you already have access. ## Using App Builder @@ -94,21 +94,21 @@ Yes. App Builder was built for extensibility, from Adobe's open-source developme We currently support the JavaScript language and Node.js environment, which cover the majority of code used on the web today. The free npm Registry contains ready-made libraries developers can bring into most applications. -App Builder supports the three latest Node.js versions. When a new Node version is added to the system, old versions are still available. So old actions will still work, but new ones can't be created with the old versions. We encourage developers to update actions to the latest version in order to take advantage of the pre-warmed containers feature. +App Builder supports the three latest Node.js versions. When a new Node version is added to the system, old versions are still available. So old actions will still work, but new ones can't be created with the old versions. We encourage developers to update actions to the latest version in order to take advantage of our pre-warmed containers feature. ### Can I use App Builder to extend Document Cloud or Creative Cloud products? -Not now. App Builder's current focus is the Adobe Experience Platform and Adobe Experience Cloud. We may include App Builder access in the future for Adobe Document Cloud and Adobe Creative Cloud. +Not yet. App Builder's current focus is the Adobe Experience Platform and Adobe Experience Cloud. We may include App Builder access in the future for Adobe Document Cloud and Adobe Creative Cloud. ### How can I simplify distribution of custom applications across my company? -Enterprises can use Adobe Exchange to control application lifecycles (test, publish, unpublish), and AEM User Access Control to manage access to App Builder apps. +Enterprises can use [Adobe Exchange](https://exchange.adobe.com) to control application lifecycles (test, publish, unpublish), and AEM User Access Control to manage access to App Builder apps. ### How do I request support for App Builder? App Builder uses the same support process as other Adobe Experience Cloud products. Details can be found in Adobe's [Enterprise Support Programs](https://helpx.adobe.com/support/programs/enterprise-support-programs.html). -The [Adobe Experience Leage App Builder Community](https://experienceleaguecommunities.adobe.com/t5/app-builder/ct-p/adobe-app-builder) page offers Developer support for I/O Runtime questions. +Visit our [App Builder Community](https://experienceleaguecommunities.adobe.com/t5/app-builder/ct-p/adobe-app-builder) page on Experience League for developer support on all things App Builder. ## Using I/O Runtime From 75ec467b42166aa962431f2a576cb1e47afe1e90 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Mon, 12 May 2025 11:55:02 -0700 Subject: [PATCH 020/116] update runtime.md --- .../guides/app_builder_guides/exc_app/interfaces/runtime.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md index 86e995ad6..6c42ded97 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/runtime.md @@ -7,7 +7,7 @@ keywords: title: 'Interface: Runtime' --- -# Interface: Runtime \<**T**\> +# Interface: Runtime Defines the runtime object providing all unified-shell APIs for solution authors. From 02464c019930ce60ac28d08c99ab6b1e0576268b Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 10:29:35 -0700 Subject: [PATCH 021/116] update application-state --- .../app_builder_guides/application-state.md | 220 ------------------ 1 file changed, 220 deletions(-) diff --git a/src/pages/guides/app_builder_guides/application-state.md b/src/pages/guides/app_builder_guides/application-state.md index 1d4e12f39..ab0e24666 100644 --- a/src/pages/guides/app_builder_guides/application-state.md +++ b/src/pages/guides/app_builder_guides/application-state.md @@ -21,223 +21,3 @@ hello-world: inputs: name: Joe ``` - -In many cases, these variables are different depending on the build environment of the app, such as different tenant names in dev, stage, prod, etc. To make it work seamlessly with Git commits, you could store the real value of the variables in the `.env` file (which is not committed to Git), and reference them in the `manifest.yaml` file. - -```bash -# in .env -NAME=Joe -``` - -```yaml -# in manifest.yaml -hello-world: - function: actions/hello/index.js - inputs: - name: $NAME -``` - -### Considerations about security - -For authentication with Adobe APIs, you should leverage [App Builder Security Guideline](./security/index.md) using our supported SDKs. - -For other 3rd party systems and APIs when provisioning actions with the secrets/passwords is a must, you can then use the default params as demonstrated above. In order to support this use case, all default params are automatically encrypted. They are decrypted just before the action code is executed. Thus, the only time you have access to the decrypted value is while executing the action code. - -## Persistence at runtime - -As part of App Builder, you will have out-of-the-box access to *Files* and *State*, our two storage services meant for persisting data dynamically from your Runtime actions. - -No pre-configuration is required, just install the libraries and use them in your project. We will be transparently using your App Builder credentials to authorize and entitle your requests. - -*When should I use Files vs State?* - - -- Files is good for transferring large payloads (bandwidth oriented) and State is good for fast access (latency oriented). -- Files supports sharing data via presigned-url, State supports setting expirations. -- As a rule of thumb if you expect your data to grow larger than 100KBs go with Files, otherwise use State. - -Please refer to the [feature matrix](#feature-matrix) for a detailed comparison. - -## State - -*We've just released a [new State version](https://github.com/adobe/aio-lib-state/releases/tag/4.0.0) built on top of our own storage service. [Legacy State](https://github.com/adobe/aio-lib-state/tree/3.x) (`@adobe/aio-lib-state` < v4 based on CosmosDB) is still available, but we strongly advise new users to use the latest library version to avoid migrating later. Note that this applies also to `State` imported from `@adobe/aio-sdk` < v6. We will be sending out migration steps for existing customers soon. The [feature matrix](#feature-matrix) provides a detailed comparison of both versions.* - -***How is my data stored?*** - -- State is a multi-tenant storage. Your data is isolated in a "State container" which maps to your I/O Runtime namespace and application Workspace. This means that each application Workspace has its own isolated data. -- You have the option to store data in either the `amer`, `emea` or `apac` region. These regions operate independently, so treat them as separate instances. You may prefer one region over the other to optimize latency, as it may be closer to your users, or for compliance reasons such as GDPR. -- Your data is not eternal. There is a configurable time-to-live (TTL) for each key-value pair, the default is 1 day and the maximum is 1 year (365 days). - -Region Acronyms are abbreviations for one or more continents that are part of a business region. - -- `amer`: North, Central, and South America. Data is stored in the US. -- `apac`: Asia and Pacific. Data is stored in Japan. -- `emea`: Europe, the Middle East, and Africa. Data is stored in the EU. - -### Getting started - -***Library usage, from an I/O Runtime Action:*** - -```bash -npm install @adobe/aio-lib-state -``` - -```js - const stateLib = require('@adobe/aio-lib-state') - - // init with implicit I/O Runtime credentials, default region is 'amer'. - const state = await stateLib.init() - // set an explicit region - const state2 = await stateLib.init({ region: 'emea' }) - - // get - const res = await state.get('key') // res = { value, expiration } - const value = res.value - // put - await state.put('key', 'value') // with default ttl of 1 day - await state.put('another key', 'another value', { ttl: 200 }) // in seconds, use stateLib.MAX_TTL for 365 days. - // delete - await state.delete('key') - - // list keys using an iterator, with glob pattern support, omit the match option to list all keys - // Note: match doesn't reduce the amount of work needed to traverse your key-values (see the #list-guarantees section) - for await (const { keys } of state.list({ match: 'ke*' })) { - console.log(keys) - } - - // returns true if you have at least one key and value - await state.any() - // returns usage statistics (storage) - await state.stats() - - // delete selected keys matching a glob pattern - // Note: the match option is required! - await state.deleteAll({ match: 'ke*' }) -``` - -Explore the [full API](https://github.com/adobe/aio-lib-state/blob/main/doc/api.md) - -***CLI usage, from your local machine***: - -Available for `aio --version` >= `10.2`. - -The CLI must be run from within a valid App Builder application folder and uses the Runtime credentials to authenticate your requests to State. Each namespace has its own State container, so please ensure that your are accessing the expected instance by looking in your `.env` file for the `AIO_RUNTIME_NAMESPACE` variable. - -```bash -> aio app state -Manage your App Builder State storage - -USAGE - $ aio app state COMMAND - -COMMANDS - app state delete Delete key-values - app state get Get a key-value - app state list List key-values - app state put Put a key-value - app state stats Display stats -``` - -The default region is `amer`, to access another region, you can use the `--region` flag or add the `AIO_STATE_REGION=emea` variable to your `.env`. - -Navigate the CLI usage documentation from the repo's [README](https://github.com/adobe/aio-cli-plugin-app-storage?tab=readme-ov-file#usage) or by using the `--help` flag on the desired command. - -### Constraints - -- State is only available to Runtime namespaces created via the Developer Console, which follow the App Builder format: `orgId-project(-workspace)?`. Legacy namespaces are not supported. -- Max state value size: `1MB`. -- Max state key size: `1024 bytes`. -- Max-supported TTL is `365 days`. -- Values format: any `string|binary`. -- Keys format: `string` only `alphanumeric` with `-`,`_`,`.`. - -### Usage quotas and limits - -The following quotas and limits apply while dealing with Application State associated with your App Builder application. - -Quotas are shared across the organisation. Workspace limits are defined at the *workspace* level. The State service may return 429 (rate-limits) or -403 (storage limits) errors if limits are exceeded. - -| Limit | Limit Type | Default Limit | Can it be Increased? | Notes | -|-------|-----------|--------------|----------------------|-------| -| How much data can you store in State? | Quota (increases with number of packs) | Up to 10 GB per App Builder pack | Yes, by purchasing more packs of App Builder | Storage is calculated as: `(2 * total size of keys) + (total size of values)`. | -| How much State bandwidth can you utilize? | Quota (increases with number of packs) | 1 TB per month per App Builder pack | Yes, by purchasing more packs of App Builder | Bandwidth is calculated as: total bytes uploaded + total bytes downloaded. | -| How much data can you store in State in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1 GB for production workspaces
200 MB for other workspaces | Yes, by raising a support ticket. You can request an increase up to 10 GB.
*Note: Increasing the limit beyond 10 GB in a single workspace can be supported depending on your case. Raise a support ticket to find out more.* | Storage is calculated as: `(2 * total size of keys) + (total size of values)`. | -| How much State burst bandwidth can you consume in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1 MB/s (bursts)

10 MB/min for production workspaces
2 MB/min for other workspaces | Yes, by raising a support ticket. You can request an increase up to 3 MB/s and 30 MB/min per App Builder packs purchased. | Bandwidth is calculated as: `total bytes uploaded + total bytes downloaded`. | -| How fast can you increase your bandwidth consumption in a single App Builder workspace? | Workspace limit (fixed per workspace) | 100 KB/s per minute | No | - | -| How many keys can you store in State in a single App Builder workspace? | Workspace limit (fixed per workspace) | 200K | Yes, by raising a support ticket. You can request an increase up to 500K keys. | This limit does not scale with the number of App Builder packs purchased. | -| How many list operations can you run per minute in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1K/min | Yes, by raising a support ticket. You can request an increase up to 10K/min. | This limit does not scale with the number of App Builder packs purchased. | - -### List considerations - -Using `state.list`, you can scan through the keys stored in your State container. `list` is a cursor-based iterator, which requires multiple calls to the State service to traverse all your keys. - -It is important to understand that `list` is scanning through your keys: - -- **the more keys you have stored**, the longer a full iteration will take to complete, regardless of whether you use the [using a glob-style pattern](#match-option). -- every call to `list` will iterate over up to 1000 keys. The former `countHint` option is now ignored. -- As an example, trying to match 1 key in a 10k key-values data-set will still require 10 calls to `list` to fetch it. - -The `list` command is not strongly consistent, and the following points need to be taken into account: - -- We are sending `list` requests to a replica, there is a ~5ms lag, after which a - full iteration returns keys that were present in the container and doesn't - return keys that were deleted prior to an iteration. -- Keys that were not constantly present in the collection during a full - iteration, may be returned or not: it is undefined. -- A given key may be returned multiple times across iterations (but not within a - same iteration). You can mitigate this by either performing operations that are - safe when applied multiple times (recommended with many keys) or by collecting all keys in an - array first and then remove any duplicates. -- In some rare cases, `list` may return expired keys. - -Please note, that `list` is subject to rate-limiting, so listing many keys may result in 429s. - -### `match` option - -`state.deleteAll` and `state.list` support a `match` option to filter keys. - -`match` supports a glob-style pattern via the `*` character, suppose you have the following keys: `key`, `base.key`, `key-1` - -- `match=key` will match `key` -- `match=k*` will match `key` -- `match=*k*` will match `key`, `base.key`, `key-1` -- `match=*-1` will match `key-1` -- `match=base.*-1` will match none - -The `match` filter is applied server-side **after** traversing elements, this means: - -- `match` does not reduce the work needed to iterate over your key-values. -- every call to `list` may return only few keys when matching a handful of key-values in a large dataset. - -### Troubleshooting - -Set `DEBUG=@adobe/aio-lib-state*` to see debug logs. - -## Files - -*Files is currently implemented as an abstraction layer over Azure Blob. Major changes and additional features are planned, stay tuned.* - -To learn more please visit the [Adobe I/O File Storage library](https://github.com/adobe/aio-lib-files?tab=readme-ov-file#adobe-io-lib-files) repository. - -## Feature Matrix - -| | Files | State | State Legacy | -| ------------------- | -------------------------- |-----------------------------------------| ------------------------- | -| read write delete | Y | Y | Y | -| list | Y | Y | N | -| streams | Y | N | N | -| copy | Y | N | N | -| deleteAll | N | Y | N | -| sharing | Y (pre-sign URLs) | N | N | -| Time-To-Live | N | Y | Y | -| max TTL | infinite | 365 days | infinite | -| max file/value size | 200GB | 1MB | 2MB | -| max key size | 1KB | 1KB | 1KB | -| key charset | open | `alphanumeric` with `_-.` | any but `/\?#` | -| max load | N/A | 10MB/min, 1MB/s 1k/min `list` requests | 900 RU/min (~KB/min) | -| max key values | N/A | 100K (scalable) | N/A | -| max storage | 1TB | 1GB (scalable) | 10GB | -| max monthly load | N/A | 200GB (scalable) | N/A | -| regions | East US West US read-only | Amer (US) Emea (EU) Apac (JPN) | East US Europe read-only | -| consistency | strong | strong (CRUD), eventual for `list` | eventual | From a991cb6d02ccd13e5d2e46b5e0f9e26fa4bfe424 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 10:59:24 -0700 Subject: [PATCH 022/116] update --- .../app_builder_guides/application-state.md | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/pages/guides/app_builder_guides/application-state.md b/src/pages/guides/app_builder_guides/application-state.md index ab0e24666..70fe4e3c4 100644 --- a/src/pages/guides/app_builder_guides/application-state.md +++ b/src/pages/guides/app_builder_guides/application-state.md @@ -21,3 +21,33 @@ hello-world: inputs: name: Joe ``` + +In many cases, these variables are different depending on the build environment of the app, such as different tenant names in dev, stage, prod, etc. To make it work seamlessly with Git commits, you could store the real value of the variables in the `.env` file (which is not committed to Git), and reference them in the `manifest.yaml` file. + +```bash +# in .env +NAME=Joe +``` + +```yaml +# in manifest.yaml +hello-world: + function: actions/hello/index.js + inputs: + name: $NAME +``` + +### Considerations about security + +For authentication with Adobe APIs, you should leverage [App Builder Security Guideline](./security/index.md) using our supported SDKs. + +For other 3rd party systems and APIs when provisioning actions with the secrets/passwords is a must, you can then use the default params as demonstrated above. In order to support this use case, all default params are automatically encrypted. They are decrypted just before the action code is executed. Thus, the only time you have access to the decrypted value is while executing the action code. + +## Persistence at runtime + +As part of App Builder, you will have out-of-the-box access to *Files* and *State*, our two storage services meant for persisting data dynamically from your Runtime actions. + +No pre-configuration is required, just install the libraries and use them in your project. We will be transparently using your App Builder credentials to authorize and entitle your requests. + +*When should I use Files vs State?* + From df311f8259006c8447ebcc9014bb5d8b27f131a2 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 12:12:02 -0700 Subject: [PATCH 023/116] update for testing --- src/pages/config.md | 6 +- .../app_builder_guides/application-state.md | 71 +++++++++++++++++++ .../runtime_guides/reference_docs/api-ref.md | 71 +++++++++---------- 3 files changed, 109 insertions(+), 39 deletions(-) diff --git a/src/pages/config.md b/src/pages/config.md index e1ae49c07..2d8fada4d 100644 --- a/src/pages/config.md +++ b/src/pages/config.md @@ -53,8 +53,8 @@ - [Setting Response Headers](guides/app_builder_guides/deployment/setting-response-headers.md) - [Development](guides/app_builder_guides/development.md) - [Distribution](guides/app_builder_guides/distribution.md) - - [Events](guides/app_builder_guides/events/custom-events.md) - - [Webhooks](guides/app_builder_guides/events/webhooks.md) + - [Events](https://www.adobe.io/apis/experienceplatform/events/docs.html#!adobedocs/adobeio-events/master/using/custom_events.md) + - [Webhooks](https://www.adobe.io/apis/experienceplatform/events/docs.html#!adobedocs/adobeio-events/master/intro/webhooks_intro.md) - [Exc App](guides/app_builder_guides/exc_app/aec-integration.md) - [Interfaces](guides/app_builder_guides/exc_app/interfaces/) - [Modules](guides/app_builder_guides/exc_app/interfaces/modules.md) @@ -83,7 +83,7 @@ - [Optimization](guides/app_builder_guides/optimization.md) - [Security](guides/app_builder_guides/security/index.md) - [Understanding Authentication](guides/app_builder_guides/security/understanding-authentication.md) - - [Telemetry](guides/app_builder_guides/telemetry/) + - [Telemetry](guides/app_builder_guides/telemetry.md) - [Runtime Guides](guides/runtime_guides/index.md) - [Contribution Guide](guides/contribution-guide.md) - [Asynchronous Calls](guides/runtime_guides/asynchronous-calls.md) diff --git a/src/pages/guides/app_builder_guides/application-state.md b/src/pages/guides/app_builder_guides/application-state.md index 70fe4e3c4..076d4c993 100644 --- a/src/pages/guides/app_builder_guides/application-state.md +++ b/src/pages/guides/app_builder_guides/application-state.md @@ -51,3 +51,74 @@ No pre-configuration is required, just install the libraries and use them in you *When should I use Files vs State?* + +- Files is good for transferring large payloads (bandwidth oriented) and State is good for fast access (latency oriented). +- Files supports sharing data via presigned-url, State supports setting expirations. +- As a rule of thumb if you expect your data to grow larger than 100KBs go with Files, otherwise use State. + +Please refer to the [feature matrix](#feature-matrix) for a detailed comparison. + +## State + +*We've just released a [new State version](https://github.com/adobe/aio-lib-state/releases/tag/4.0.0) built on top of our own storage service. [Legacy State](https://github.com/adobe/aio-lib-state/tree/3.x) (`@adobe/aio-lib-state` < v4 based on CosmosDB) is still available, but we strongly advise new users to use the latest library version to avoid migrating later. Note that this applies also to `State` imported from `@adobe/aio-sdk` < v6. We will be sending out migration steps for existing customers soon. The [feature matrix](#feature-matrix) provides a detailed comparison of both versions.* + +***How is my data stored?*** + +- State is a multi-tenant storage. Your data is isolated in a "State container" which maps to your I/O Runtime namespace and application Workspace. This means that each application Workspace has its own isolated data. +- You have the option to store data in either the `amer`, `emea` or `apac` region. These regions operate independently, so treat them as separate instances. You may prefer one region over the other to optimize latency, as it may be closer to your users, or for compliance reasons such as GDPR. +- Your data is not eternal. There is a configurable time-to-live (TTL) for each key-value pair, the default is 1 day and the maximum is 1 year (365 days). + +Region Acronyms are abbreviations for one or more continents that are part of a business region. + +- `amer`: North, Central, and South America. Data is stored in the US. +- `apac`: Asia and Pacific. Data is stored in Japan. +- `emea`: Europe, the Middle East, and Africa. Data is stored in the EU. + +### Getting started + +***Library usage, from an I/O Runtime Action:*** + +```bash +npm install @adobe/aio-lib-state +``` + +```js + const stateLib = require('@adobe/aio-lib-state') + + // init with implicit I/O Runtime credentials, default region is 'amer'. + const state = await stateLib.init() + // set an explicit region + const state2 = await stateLib.init({ region: 'emea' }) + + // get + const res = await state.get('key') // res = { value, expiration } + const value = res.value + // put + await state.put('key', 'value') // with default ttl of 1 day + await state.put('another key', 'another value', { ttl: 200 }) // in seconds, use stateLib.MAX_TTL for 365 days. + // delete + await state.delete('key') + + // list keys using an iterator, with glob pattern support, omit the match option to list all keys + // Note: match doesn't reduce the amount of work needed to traverse your key-values (see the #list-guarantees section) + for await (const { keys } of state.list({ match: 'ke*' })) { + console.log(keys) + } + + // returns true if you have at least one key and value + await state.any() + // returns usage statistics (storage) + await state.stats() + + // delete selected keys matching a glob pattern + // Note: the match option is required! + await state.deleteAll({ match: 'ke*' }) +``` + +Explore the [full API](https://github.com/adobe/aio-lib-state/blob/main/doc/api.md) + +***CLI usage, from your local machine***: + +Available for `aio --version` >= `10.2`. + +The CLI must be run from within a valid App Builder application folder and uses the Runtime credentials to authenticate your requests to State. Each namespace has its own State container, so please ensure that your are accessing the expected instance by looking in your `.env` file for the `AIO_RUNTIME_NAMESPACE` variable. diff --git a/src/pages/guides/runtime_guides/reference_docs/api-ref.md b/src/pages/guides/runtime_guides/reference_docs/api-ref.md index 6ccba842d..8efb03c7d 100644 --- a/src/pages/guides/runtime_guides/reference_docs/api-ref.md +++ b/src/pages/guides/runtime_guides/reference_docs/api-ref.md @@ -28,10 +28,10 @@ Returns the details of the namespace associated with the specified organization Response content type: `application/json` | Code | Description | -| ---- | ---------------------------------- | -| 200 | Successful operationExample value: | -| { | | +| --- | ---------------------------------- | +| 200 | Successful operationExample value: | +{ "name": "string", "auth": "string" @@ -43,7 +43,7 @@ description: Namespace Details Namespace name auth string Auth associated with Namespace -}| +} ### POST /runtime/admin/namespaces/{orgId}/{intId} @@ -63,7 +63,7 @@ Creates a new namespace and returns the details of the newly created namespace. Response content type: `application/json` |Code|Description| |--- |--- | -|200|Successful operation Example value: +|200|Successful operation Example value:| { "name": "string", "auth": "string" @@ -75,7 +75,7 @@ description: Namespace Details Namespace name auth string Auth associated with Namespace -}| +} ### DELETE /runtime/admin/namespaces/{orgId}/{intId} @@ -115,7 +115,7 @@ Returns the list of actions associated with the specified organization and integ Response content type: `application/json` |Code|Description| |--- |--- | -|200|Successful operation Example value: +|200|Successful operation Example value:| [ { "name": "string", @@ -200,7 +200,7 @@ exec ExecDTO { } url string Action url -}]| +}] ### POST /runtime/namespaces/{orgId}/{intId}/actions @@ -218,8 +218,9 @@ Creates a new action. | "code": "string", | | | "namespace": "string", | | | "version": "string", | | -| "params": [ | | - +|Authorization (string: header)|Authorization token in format: Bearer {token}| +|X-Api-Key (string: header)|Api key| + "params": [ { "key": "string", "value": {} @@ -298,9 +299,7 @@ exec ExecDTO { } url string Action url -}]| -|Authorization (string: header)|Authorization token in format: Bearer {token}| -|X-Api-Key (string: header)|Api key| +}] #### _Responses:_ @@ -328,7 +327,7 @@ Returns the details of an action. Response content type: `application/json` |Code|Description| |--- |--- | -|200|Successful operation Example value: +|200|Successful operation Example value:| { "name": "string", "namespace": "string", @@ -394,7 +393,7 @@ exec ExecDTO { } url string Action url -}]| +}] ### POST /runtime/namespaces/{orgId}/{intId}/actions/{name} @@ -415,7 +414,7 @@ Executes an action. Response content type: `application/json` |Code|Description| |--- |--- | -|200|Successful operation Example value: +|200|Successful operation Example value:| { "name": "string", "code": "string", @@ -474,7 +473,7 @@ version string response { description: Action invocation response -}| +} ### PUT /runtime/namespaces/{orgId}/{intId}/actions/{name} @@ -493,9 +492,10 @@ Updates an action. | "code": "string", | | | "namespace": "string", | | | "version": "string", | | -| "params": [ | | - - { +|Authorization (string: header)|Authorization token in format: Bearer {token}| +|X-Api-Key (string: header)|Api key| +"params": [ +{ "key": "string", "value": {} } @@ -572,9 +572,8 @@ exec ExecDTO { } url string Action url -}]| -|Authorization (string: header)|Authorization token in format: Bearer {token}| -|X-Api-Key (string: header)|Api key| +}] + #### _Responses:_ @@ -620,7 +619,7 @@ Returns a list of built-in actions. Response content type: `application/json` |Code|Description| |--- |--- | -|200|Successful operationExample value: +|200|Successful operationExample value:| [ { "name": "string", @@ -705,7 +704,7 @@ exec ExecDTO { } url string Action url -}]| +}] ### POST /runtime/namespaces/{orgId}/{intId}/handleEventRegistration @@ -781,7 +780,7 @@ registration_id string Response content type: `application/json` |Code|Description| |--- |--- | -|200|Successful operation Example value: +|200|Successful operation Example value:| { "id": "string", "name": "string", @@ -832,7 +831,7 @@ runtime_action string Action to handle event registration_id string Event registration id -}| +} ### DELETE /runtime/namespaces/{orgId}/{intId}/handleEventDeletion/{clientId}/{registrationId} @@ -882,8 +881,9 @@ Updates an event registration. | "integration_status": "string", | | | "delivery_type": "string", | | | "webhook_url": "string", | | -| "events_of_interest": [ | | - +|Authorization (string: header)|Authorization token in format: Bearer {token}| +|X-Api-Key (string: header)|Api key| +"events_of_interest": [ { "event_code": "string", "provider": "string" @@ -925,16 +925,15 @@ runtime_action string Action to handle event registration_id string Event registration id -}| -|Authorization (string: header)|Authorization token in format: Bearer {token}| -|X-Api-Key (string: header)|Api key| +} + #### _Responses:_ Response content type: `application/json` |Code|Description| |--- |--- | -|200|Successful operation Example value: +|200|Successful operation Example value:| { "id": "string", "name": "string", @@ -985,7 +984,7 @@ runtime_action string Action to handle event registration_id string Event registration id -}| +} ### POST /runtime/namespaces/{orgId}/{intId}/handleEventStatus/{clientId}/{registrationId}/{status} @@ -1010,7 +1009,7 @@ Updates the status of an event registration. Response content type: `application/json` |Code|Description| |--- |--- | -|200|Successful operation Example value: +|200|Successful operation Example value:| { "id": "string", "name": "string", @@ -1061,7 +1060,7 @@ runtime_action string Action to handle event registration_id string Event registration id -}| +} ## Next steps From d9a6c32e1f69cde2d8206b56ab9626cccb0d8021 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 12:52:01 -0700 Subject: [PATCH 024/116] update --- .../runtime_guides/reference_docs/api-ref.md | 1019 ----------------- 1 file changed, 1019 deletions(-) diff --git a/src/pages/guides/runtime_guides/reference_docs/api-ref.md b/src/pages/guides/runtime_guides/reference_docs/api-ref.md index 8efb03c7d..b2827cead 100644 --- a/src/pages/guides/runtime_guides/reference_docs/api-ref.md +++ b/src/pages/guides/runtime_guides/reference_docs/api-ref.md @@ -48,1022 +48,3 @@ description: Namespace Details ### POST /runtime/admin/namespaces/{orgId}/{intId} Creates a new namespace and returns the details of the newly created namespace. If namespace already exists it returns the details of the namespace. - -#### _Parameters:_ - -| Name | Description | -| ------------------------------------ | ----------------------------------------------- | -| `orgId` (`string`: _path_) | Organization ID | -| `intId` (`string`: _path_) | Integration ID | -| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | -| `X-Api-Key` (`string`: _header_) | Api key | - -#### _Responses:_ - -Response content type: `application/json` -|Code|Description| -|--- |--- | -|200|Successful operation Example value:| -{ -"name": "string", -"auth": "string" -} -Model: -NamespaceDTO { -description: Namespace Details - name string - Namespace name - auth string - Auth associated with Namespace -} - -### DELETE /runtime/admin/namespaces/{orgId}/{intId} - -Deletes the namespace associated with the specified organization and integration. - -#### _Parameters:_ - -| Name | Description | -| ------------------------------------ | ----------------------------------------------- | -| `orgId` (`string`: _path_) | Organization ID | -| `intId` (`string`: _path_) | Integration ID | -| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | -| `X-Api-Key` (`string`: _header_) | Api key | - -#### _Responses:_ - -Response content type: `application/json` -| Code | Description | -|---|---| -| _default_ | Successful operation | - -### GET /runtime/namespaces/{orgId}/{intId}/actions - -Returns the list of actions associated with the specified organization and integration. - -#### _Parameters:_ - -| Name | Description | -| ------------------------------------ | ----------------------------------------------- | -| `orgId` (`string`: _path_) | Organization ID | -| `intId` (`string`: _path_) | Integration ID | -| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | -| `X-Api-Key` (`string`: _header_) | Api key | - -#### _Responses:_ - -Response content type: `application/json` -|Code|Description| -|--- |--- | -|200|Successful operation Example value:| -[ - { - "name": "string", - "code": "string", - "namespace": "string", - "version": "string", - "params": [ - { - "key": "string", - "value": {} - } - ], - "annotations": [ - { - "key": "string", - "value": {} - } - ], - "limits": { - "timeout": "string", - "memory": "string", - "logs": "string" - }, - "exec": { - "kind": "string", - "binary": false, - "components": [ - "string" - ] - }, - "url": "string" - } -] -Model: -[ActionDTO { -description: OpenWhisk Action -name string - Action name -code string - Action code -namespace string - Action namespace -version string - Action version -params [Action params - KeyValuePairDTO { - description: OpenWhisk Action param - key string - Param Name - value { - description: Param value - } - }] -annotations [Action annotations - KeyValuePairDTO { - description: OpenWhisk Action param - key string - Param Name - value { - description: Param value - } - }] -limits LimitsDTO { - description: OpenWhisk Action Limits - timeout string - Action timeout - memory string - Action memory limit - logs string - Action logs - } -exec ExecDTO { - description: OpenWhisk Action exec details - kind string - Action kind - binary boolean - default: false - Is action binary - components [ - Action components in case of sequence - string] - } -url string - Action url -}] - -### POST /runtime/namespaces/{orgId}/{intId}/actions - -Creates a new action. - -#### _Parameters:_ - -| Name | Description | -| ---------------------- | ---------------------------- | -| orgId (string: path) | Organization ID | -| intId (string: path) | Integration ID | -| body (body) | Action form. Example value: | -| { | | -| "name": "string", | | -| "code": "string", | | -| "namespace": "string", | | -| "version": "string", | | -|Authorization (string: header)|Authorization token in format: Bearer {token}| -|X-Api-Key (string: header)|Api key| - "params": [ - { - "key": "string", - "value": {} - } - - ], - "annotations": [ - { - "key": "string", - "value": {} - } - ], - "limits": { - "timeout": "string", - "memory": "string", - "logs": "string" - }, - "exec": { - "kind": "string", - "binary": false, - "components": [ - "string" - ] - }, - "url": "string" -}Parameter content type: application/json -Model: -[ActionDTO { -description: OpenWhisk Action - -name string - Action name -code string - Action code -namespace string - Action namespace -version string - Action version -params [Action params - KeyValuePairDTO { - description: OpenWhisk Action param - key string - Param Name - value { - description: Param value - } - }] -annotations [Action annotations - KeyValuePairDTO { - description: OpenWhisk Action param - key string - Param Name - value { - description: Param value - } - }] -limits LimitsDTO { - description: OpenWhisk Action Limits - timeout string - Action timeout - memory string - Action memory limit - logs string - Action logs - } -exec ExecDTO { - description: OpenWhisk Action exec details - kind string - Action kind - binary boolean - default: false - Is action binary - components [ - Action components in case of sequence - string] - } -url string - Action url -}] - -#### _Responses:_ - -Response content type: `application/json` -| Code | Description | -|---|---| -| _default_ | Successful operation | - -### GET /runtime/namespaces/{orgId}/{intId}/actions/{name} - -Returns the details of an action. - -#### _Parameters:_ - -| Name | Description | -| ------------------------------------ | ----------------------------------------------- | -| `orgId` (`string`: _path_) | Organization ID | -| `intId` (`string`: _path_) | Integration ID | -| `name` (`string`: _path_) | Action name | -| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | -| `X-Api-Key` (`string`: _header_) | Api key | - -#### _Responses:_ - -Response content type: `application/json` -|Code|Description| -|--- |--- | -|200|Successful operation Example value:| -{ - "name": "string", - "namespace": "string", - "activationId": "string", - "annotations": [ - { - "key": "string", - "value": {} - } - ], - "duration": 0, - "version": "string", - "response": {} -} -Model: -[ActionDTO { -description: OpenWhisk Action -name string - Action name -code string - Action code -namespace string - Action namespace -version string - Action version -params [Action params - KeyValuePairDTO { - description: OpenWhisk Action param - key string - Param Name - value { - description: Param value - } - }] -annotations [Action annotations - KeyValuePairDTO { - description: OpenWhisk Action param - key string - Param Name - value { - description: Param value - } - }] -limits LimitsDTO { - description: OpenWhisk Action Limits - timeout string - Action timeout - memory string - Action memory limit - logs string - Action logs - } -exec ExecDTO { - description: OpenWhisk Action exec details - kind string - Action kind - binary boolean - default: false - Is action binary - components [ - Action components in case of sequence - string] - } -url string - Action url -}] - -### POST /runtime/namespaces/{orgId}/{intId}/actions/{name} - -Executes an action. - -#### _Parameters:_ - -| Name | Description | -| ------------------------------------ | ----------------------------------------------- | -| `orgId` (`string`: _path_) | Organization ID | -| `intId` (`string`: _path_) | Integration ID | -| `name` (`string`: _path_) | Action name | -| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | -| `X-Api-Key` (`string`: _header_) | Api key | - -#### _Responses:_ - -Response content type: `application/json` -|Code|Description| -|--- |--- | -|200|Successful operation Example value:| -{ - "name": "string", - "code": "string", - "namespace": "string", - "version": "string", - "params": [ - { - "key": "string", - "value": {} - } - ], - "annotations": [ - { - "key": "string", - "value": {} - } - ], - "limits": { - "timeout": "string", - "memory": "string", - "logs": "string" - }, - "exec": { - "kind": "string", - "binary": false, - "components": [ - "string" - ] - }, - "url": "string" -} -Model: -[ActionResultDTO { -description: OpenWhisk Action invocation result -name string - Action name -code string - Action code -namespace string - Action namespace -version string - Action version -annotations [Action annotations - KeyValuePairDTO { - description: OpenWhisk Action param - key string - Param Name - value { - description: Param value - } - }] -duration integer($int32) - Duration -version string - Action Version -response { - description: - Action invocation response -} - -### PUT /runtime/namespaces/{orgId}/{intId}/actions/{name} - -Updates an action. - -#### _Parameters:_ - -| Name | Description | -| ---------------------- | ---------------------------- | -| orgId (string: path) | Organization ID | -| intId (string: path) | Integration ID | -| name (string: path) | Action name | -| body (body) | Action form. Example value: | -| { | | -| "name": "string", | | -| "code": "string", | | -| "namespace": "string", | | -| "version": "string", | | -|Authorization (string: header)|Authorization token in format: Bearer {token}| -|X-Api-Key (string: header)|Api key| -"params": [ -{ - "key": "string", - "value": {} - } - - ], - "annotations": [ - { - "key": "string", - "value": {} - } - ], - "limits": { - "timeout": "string", - "memory": "string", - "logs": "string" - }, - "exec": { - "kind": "string", - "binary": false, - "components": [ - "string" - ] - }, - "url": "string" -}Parameter content type: application/json -Model: -[ActionDTO { -description: OpenWhisk Action -name string - Action name -code string - Action code -namespace string - Action namespace -version string - Action version -params [Action params - KeyValuePairDTO { - description: OpenWhisk Action param - key string - Param Name - value { - description: Param value - } - }] -annotations [Action annotations - KeyValuePairDTO { - description: OpenWhisk Action param - key string - Param Name - value { - description: Param value - } - }] -limits LimitsDTO { - description: OpenWhisk Action Limits - timeout string - Action timeout - memory string - Action memory limit - logs string - Action logs - } -exec ExecDTO { - description: OpenWhisk Action exec details - kind string - Action kind - binary boolean - default: false - Is action binary - components [ - Action components in case of sequence - string] - } -url string - Action url -}] - - -#### _Responses:_ - -Response content type: `application/json` -| Code | Description | -|---|---| -| _default_ | Successful operation | - -### DELETE /runtime/namespaces/{orgId}/{intId}/actions/{name} - -Deletes an action. - -#### _Parameters:_ - -| Name | Description | -| ------------------------------------ | ----------------------------------------------- | -| `orgId` (`string`: _path_) | Organization ID | -| `intId` (`string`: _path_) | Integration ID | -| `name` (`string`: _path_) | Action name | -| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | -| `X-Api-Key` (`string`: _header_) | Api key | - -#### _Responses:_ - -Response content type: `application/json` -| Code | Description | -|---|---| -| _default_ | Successful operation | - -### GET /runtime/system/actions - -Returns a list of built-in actions. - -#### _Parameters:_ - -| Name | Description | -| ------------------------------------ | ----------------------------------------------- | -| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | -| `X-Api-Key` (`string`: _header_) | Api key | - -#### _Responses:_ - -Response content type: `application/json` -|Code|Description| -|--- |--- | -|200|Successful operationExample value:| -[ - { - "name": "string", - "code": "string", - "namespace": "string", - "version": "string", - "params": [ - { - "key": "string", - "value": {} - } - ], - "annotations": [ - { - "key": "string", - "value": {} - } - ], - "limits": { - "timeout": "string", - "memory": "string", - "logs": "string" - }, - "exec": { - "kind": "string", - "binary": false, - "components": [ - "string" - ] - }, - "url": "string" - } -] -Model: -[ActionDTO { -description: OpenWhisk Action -name string - Action name -code string - Action code -namespace string - Action namespace -version string - Action version -params [Action params - KeyValuePairDTO { - description: OpenWhisk Action param - key string - Param Name - value { - description: Param value - } - }] -annotations [Action annotations - KeyValuePairDTO { - description: OpenWhisk Action param - key string - Param Name - value { - description: Param value - } - }] -limits LimitsDTO { - description: OpenWhisk Action Limits - timeout string - Action timeout - memory string - Action memory limit - logs string - Action logs - } -exec ExecDTO { - description: OpenWhisk Action exec details - kind string - Action kind - binary boolean - default: false - Is action binary - components [ - Action components in case of sequence - string] - } -url string - Action url -}] - -### POST /runtime/namespaces/{orgId}/{intId}/handleEventRegistration - -Registers an event registration and assigns a given action to the event. - -#### _Parameters:_ - -| Name | Description | -| ------------------------------- | --------------- | -| orgId (string: path) | Organization ID | -| intId (string: path) | Integration ID | -| body (body) | Example value: | -| { | | -| "id": "string", | | -| "name": "string", | | -| "description": "string", | | -| "client_id": "string", | | -| "type": "string", | | -| "integration_status": "string", | | -| "delivery_type": "string", | | -| "webhook_url": "string", | | -| "events_of_interest": [ | | - - { - "event_code": "string", - "provider": "string" - } - - ], - "runtime_action": "string", - "registration_id": "string" -}Parameter content type: application/json -Model: -EventDTO { -description: Adobe I/O Event Details -id string - Event id -name string - Event name -description string - Event code -Client id string - Event namespace -type string - Event type -integration_status string - Event integration status -delivery_type string - Event delivery type -webhook_url string - Webhook url -events_of_interest [ - Events of interest to listen to - EventsOfInterestDTO{ - description: Events of interest - event_code string - Event code - provider string - Event provider - }] -runtime_action string - Action to handle event -registration_id string - Event registration id -}| -|Authorization (string: header)|Authorization token in format: Bearer {token}| -|X-Ams-Consumer-Id (string: header)|AMS consumer ID| -|X-Ams-Application-Id (string: header)|AMS application ID| -|X-Api-Key (string: header)|Api key| - -#### _Responses:_ - -Response content type: `application/json` -|Code|Description| -|--- |--- | -|200|Successful operation Example value:| -{ - "id": "string", - "name": "string", - "description": "string", - "client_id": "string", - "type": "string", - "integration_status": "string", - "delivery_type": "string", - "webhook_url": "string", - "events_of_interest": [ - { - "event_code": "string", - "provider": "string" - } - ], - "runtime_action": "string", - "registration_id": "string" -} -Model: -EventDTO { -description: Adobe I/O Event Details -id string - Event id -name string - Event name -description string - Event code -Client id string - Event namespace -type string - Event type -integration_status string - Event integration status -delivery_type string - Event delivery type -webhook_url string - Webhook url -events_of_interest [ - Events of interest to listen to - EventsOfInterestDTO{ - description: Events of interest - event_code string - Event code - provider string - Event provider - }] -runtime_action string - Action to handle event -registration_id string - Event registration id -} - -### DELETE /runtime/namespaces/{orgId}/{intId}/handleEventDeletion/{clientId}/{registrationId} - -Deletes an event registration. - -#### _Parameters:_ - -| Name | Description | -| ----------------------------------------- | ----------------------------------------------- | -| `orgId` (`string`: _path_) | Organization ID | -| `intId` (`string`: _path_) | Integration ID | -| `clientId ` (`string`: _path_) | IMS client ID | -| `registrationId` (`string`: _path_) | ID of registration | -| `X-Ams-Consumer-Id` (`string`: _path_) | AMS consumer ID | -| `X-Ams-Application-Id` (`string`: _path_) | AMS application ID | -| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | -| `X-Api-Key` (`string`: _header_) | Api key | - -#### _Responses:_ - -Response content type: `application/json` -| Code | Description | -|---|---| -| _default_ | Successful operation | - -### PUT /runtime/namespaces/{orgId}/{intId}/handleEventUpdate/{clientId}/{registrationId} - -Updates an event registration. - -#### _Parameters:_ - -| Name | Description | -| ------------------------------------- | ------------------ | -| orgId (string: path) | Organization ID | -| intId (string: path) | Integration ID | -| clientId (string: path) | IMS client ID | -| registrationId (string: path) | Registration ID | -| X-Ams-Consumer-Id (string: header) | AMS consumer ID | -| X-Ams-Application-Id (string: header) | AMS application ID | -| body (body) | Example value: | -| { | | -| "id": "string", | | -| "name": "string", | | -| "description": "string", | | -| "client_id": "string", | | -| "type": "string", | | -| "integration_status": "string", | | -| "delivery_type": "string", | | -| "webhook_url": "string", | | -|Authorization (string: header)|Authorization token in format: Bearer {token}| -|X-Api-Key (string: header)|Api key| -"events_of_interest": [ - { - "event_code": "string", - "provider": "string" - } - - ], - "runtime_action": "string", - "registration_id": "string" -}Parameter content type: application/json -Model: -EventDTO { -description: Adobe I/O Event Details -id string - Event id -name string - Event name -description string - Event code -Client id string - Event namespace -type string - Event type -integration_status string - Event integration status -delivery_type string - Event delivery type -webhook_url string - Webhook url -events_of_interest [ - Events of interest to listen to - EventsOfInterestDTO{ - description: Events of interest - event_code string - Event code - provider string - Event provider - }] -runtime_action string - Action to handle event -registration_id string - Event registration id -} - - -#### _Responses:_ - -Response content type: `application/json` -|Code|Description| -|--- |--- | -|200|Successful operation Example value:| -{ - "id": "string", - "name": "string", - "description": "string", - "client_id": "string", - "type": "string", - "integration_status": "string", - "delivery_type": "string", - "webhook_url": "string", - "events_of_interest": [ - { - "event_code": "string", - "provider": "string" - } - ], - "runtime_action": "string", - "registration_id": "string" -} -Model: -EventDTO { -description: Adobe I/O Event Details -id string - Event id -name string - Event name -description string - Event code -Client id string - Event namespace -type string - Event type -integration_status string - Event integration status -delivery_type string - Event delivery type -webhook_url string - Webhook url -events_of_interest [ - Events of interest to listen to - EventsOfInterestDTO{ - description: Events of interest - event_code string - Event code - provider string - Event provider - }] -runtime_action string - Action to handle event -registration_id string - Event registration id -} - -### POST /runtime/namespaces/{orgId}/{intId}/handleEventStatus/{clientId}/{registrationId}/{status} - -Updates the status of an event registration. - -#### _Parameters:_ - -| Name | Description | -| ----------------------------------------- | ----------------------------------------------- | -| `orgId` (`string`: _path_) | Organization ID | -| `intId` (`string`: _path_) | Integration ID | -| `clientId ` (`string`: _path_) | IMS client ID | -| `registrationId` (`string`: _path_) | ID of registration | -| `status` (`string`: _path_) | Status of the registration | -| `X-Ams-Consumer-Id` (`string`: _path_) | AMS consumer ID | -| `X-Ams-Application-Id` (`string`: _path_) | AMS application ID | -| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | -| `X-Api-Key` (`string`: _header_) | Api key | - -#### _Responses:_ - -Response content type: `application/json` -|Code|Description| -|--- |--- | -|200|Successful operation Example value:| -{ - "id": "string", - "name": "string", - "description": "string", - "client_id": "string", - "type": "string", - "integration_status": "string", - "delivery_type": "string", - "webhook_url": "string", - "events_of_interest": [ - { - "event_code": "string", - "provider": "string" - } - ], - "runtime_action": "string", - "registration_id": "string" -} -Model: -EventDTO { -description: Adobe I/O Event Details -id string - Event id -name string - Event name -description string - Event code -Client id string - Event namespace -type string - Event type -integration_status string - Event integration status -delivery_type string - Event delivery type -webhook_url string - Webhook url -events_of_interest [ - Events of interest to listen to - EventsOfInterestDTO{ - description: Events of interest - event_code string - Event code - provider string - Event provider - }] -runtime_action string - Action to handle event -registration_id string - Event registration id -} - -## Next steps - -Return to the [Runtime Reference Documentation Index](index.md). - -Return to the [Guides Index](../../index.md). From 2dc0184e351ec7bc3307522ab1b41d5f244dfcff Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 12:52:35 -0700 Subject: [PATCH 025/116] update --- .../runtime_guides/reference_docs/api-ref.md | 22 ------------------- 1 file changed, 22 deletions(-) diff --git a/src/pages/guides/runtime_guides/reference_docs/api-ref.md b/src/pages/guides/runtime_guides/reference_docs/api-ref.md index b2827cead..88ba8fb37 100644 --- a/src/pages/guides/runtime_guides/reference_docs/api-ref.md +++ b/src/pages/guides/runtime_guides/reference_docs/api-ref.md @@ -26,25 +26,3 @@ Returns the details of the namespace associated with the specified organization #### _Responses:_ Response content type: `application/json` - -| Code | Description | -| --- | ---------------------------------- | -| 200 | Successful operationExample value: | - -{ - "name": "string", - "auth": "string" - -} -Model: -NamespaceDTO { -description: Namespace Details - name string - Namespace name - auth string - Auth associated with Namespace -} - -### POST /runtime/admin/namespaces/{orgId}/{intId} - -Creates a new namespace and returns the details of the newly created namespace. If namespace already exists it returns the details of the namespace. From 6081d6468c024148b0643604408525140a834d21 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 12:53:15 -0700 Subject: [PATCH 026/116] update --- .../guides/runtime_guides/reference_docs/api-ref.md | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/pages/guides/runtime_guides/reference_docs/api-ref.md b/src/pages/guides/runtime_guides/reference_docs/api-ref.md index 88ba8fb37..ddc1f4cc4 100644 --- a/src/pages/guides/runtime_guides/reference_docs/api-ref.md +++ b/src/pages/guides/runtime_guides/reference_docs/api-ref.md @@ -13,16 +13,3 @@ Adobe I/O Runtime supports the following API endpoints for interacting programma ### GET /runtime/admin/namespaces/{orgId}/{intId} Returns the details of the namespace associated with the specified organization and integration. - -#### _Parameters:_ - -| Name | Description | -| ------------------------------------ | ----------------------------------------------- | -| `orgId` (`string`: _path_) | Organization ID | -| `intId` (`string`: _path_) | Integration ID | -| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | -| `X-Api-Key` (`string`: _header_) | Api key | - -#### _Responses:_ - -Response content type: `application/json` From b928f4257c8914e16b55945631a697d26d81527c Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 12:55:22 -0700 Subject: [PATCH 027/116] update --- .../runtime_guides/reference_docs/api-ref.md | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/pages/guides/runtime_guides/reference_docs/api-ref.md b/src/pages/guides/runtime_guides/reference_docs/api-ref.md index ddc1f4cc4..e827058a6 100644 --- a/src/pages/guides/runtime_guides/reference_docs/api-ref.md +++ b/src/pages/guides/runtime_guides/reference_docs/api-ref.md @@ -1,15 +1 @@ # Adobe I/O Runtime API Reference - -## API endpoints - -Adobe I/O Runtime supports the following API endpoints for interacting programmatically with the service. - -**Notes:** - -1. Unless otherwise noted, all parameters are required. -2. For all the API calls on this page, the base URL is: - `https://api.adobe.io/` - -### GET /runtime/admin/namespaces/{orgId}/{intId} - -Returns the details of the namespace associated with the specified organization and integration. From dbcee7b8bd9aef933fc97a7bcd79f88fab30fd1b Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 12:56:33 -0700 Subject: [PATCH 028/116] update --- .../runtime_guides/reference_docs/api-ref.md | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/pages/guides/runtime_guides/reference_docs/api-ref.md b/src/pages/guides/runtime_guides/reference_docs/api-ref.md index e827058a6..b2827cead 100644 --- a/src/pages/guides/runtime_guides/reference_docs/api-ref.md +++ b/src/pages/guides/runtime_guides/reference_docs/api-ref.md @@ -1 +1,50 @@ # Adobe I/O Runtime API Reference + +## API endpoints + +Adobe I/O Runtime supports the following API endpoints for interacting programmatically with the service. + +**Notes:** + +1. Unless otherwise noted, all parameters are required. +2. For all the API calls on this page, the base URL is: + `https://api.adobe.io/` + +### GET /runtime/admin/namespaces/{orgId}/{intId} + +Returns the details of the namespace associated with the specified organization and integration. + +#### _Parameters:_ + +| Name | Description | +| ------------------------------------ | ----------------------------------------------- | +| `orgId` (`string`: _path_) | Organization ID | +| `intId` (`string`: _path_) | Integration ID | +| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | +| `X-Api-Key` (`string`: _header_) | Api key | + +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +| 200 | Successful operationExample value: | + +{ + "name": "string", + "auth": "string" + +} +Model: +NamespaceDTO { +description: Namespace Details + name string + Namespace name + auth string + Auth associated with Namespace +} + +### POST /runtime/admin/namespaces/{orgId}/{intId} + +Creates a new namespace and returns the details of the newly created namespace. If namespace already exists it returns the details of the namespace. From ac3ced432d713294b38645022b98fd022ddb4c04 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 12:58:03 -0700 Subject: [PATCH 029/116] update --- .../runtime_guides/reference_docs/api-ref.md | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/src/pages/guides/runtime_guides/reference_docs/api-ref.md b/src/pages/guides/runtime_guides/reference_docs/api-ref.md index b2827cead..199751fa2 100644 --- a/src/pages/guides/runtime_guides/reference_docs/api-ref.md +++ b/src/pages/guides/runtime_guides/reference_docs/api-ref.md @@ -22,29 +22,3 @@ Returns the details of the namespace associated with the specified organization | `intId` (`string`: _path_) | Integration ID | | `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | | `X-Api-Key` (`string`: _header_) | Api key | - -#### _Responses:_ - -Response content type: `application/json` - -| Code | Description | -| --- | ---------------------------------- | -| 200 | Successful operationExample value: | - -{ - "name": "string", - "auth": "string" - -} -Model: -NamespaceDTO { -description: Namespace Details - name string - Namespace name - auth string - Auth associated with Namespace -} - -### POST /runtime/admin/namespaces/{orgId}/{intId} - -Creates a new namespace and returns the details of the newly created namespace. If namespace already exists it returns the details of the namespace. From 6614198832632f4767cb3d2c1d0adcf5b3d5ffd8 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 12:58:40 -0700 Subject: [PATCH 030/116] update --- .../guides/runtime_guides/reference_docs/api-ref.md | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/pages/guides/runtime_guides/reference_docs/api-ref.md b/src/pages/guides/runtime_guides/reference_docs/api-ref.md index 199751fa2..88dbd51b3 100644 --- a/src/pages/guides/runtime_guides/reference_docs/api-ref.md +++ b/src/pages/guides/runtime_guides/reference_docs/api-ref.md @@ -9,16 +9,3 @@ Adobe I/O Runtime supports the following API endpoints for interacting programma 1. Unless otherwise noted, all parameters are required. 2. For all the API calls on this page, the base URL is: `https://api.adobe.io/` - -### GET /runtime/admin/namespaces/{orgId}/{intId} - -Returns the details of the namespace associated with the specified organization and integration. - -#### _Parameters:_ - -| Name | Description | -| ------------------------------------ | ----------------------------------------------- | -| `orgId` (`string`: _path_) | Organization ID | -| `intId` (`string`: _path_) | Integration ID | -| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | -| `X-Api-Key` (`string`: _header_) | Api key | From 618f42d646da23e9a69d0ff0c6132ebe66061da3 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 12:59:03 -0700 Subject: [PATCH 031/116] update --- .../guides/runtime_guides/reference_docs/api-ref.md | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/pages/guides/runtime_guides/reference_docs/api-ref.md b/src/pages/guides/runtime_guides/reference_docs/api-ref.md index 88dbd51b3..e827058a6 100644 --- a/src/pages/guides/runtime_guides/reference_docs/api-ref.md +++ b/src/pages/guides/runtime_guides/reference_docs/api-ref.md @@ -1,11 +1 @@ # Adobe I/O Runtime API Reference - -## API endpoints - -Adobe I/O Runtime supports the following API endpoints for interacting programmatically with the service. - -**Notes:** - -1. Unless otherwise noted, all parameters are required. -2. For all the API calls on this page, the base URL is: - `https://api.adobe.io/` From 83ba0ed994df016e3bc8bc03c5e74717a4ecdece Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 12:59:42 -0700 Subject: [PATCH 032/116] update --- .../runtime_guides/reference_docs/api-ref.md | 43 ++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/src/pages/guides/runtime_guides/reference_docs/api-ref.md b/src/pages/guides/runtime_guides/reference_docs/api-ref.md index e827058a6..74106bbf3 100644 --- a/src/pages/guides/runtime_guides/reference_docs/api-ref.md +++ b/src/pages/guides/runtime_guides/reference_docs/api-ref.md @@ -1 +1,42 @@ -# Adobe I/O Runtime API Reference +# Using Feeds + +Feeds are streams of events. The difference between [triggers](triggersrules.md 'Using Triggers and Rules') and feeds is: + +* **Triggers** are a way to classify events: each defines a type of event and is fired when that event is received by Runtime. Triggers are linked to actions by rules; each rule links a trigger to a single action. +* **Feeds** are streams of events that are all handled by the same trigger. Each feed is controlled by a _feed action_ that manages the stream: creating, deleting, pausing or resuming it as needed. In this way, a feed controls the flow of input to a trigger. Feed actions use a REST API to interact with external services that produce the events to which triggers are set to respond. + +## Creating feeds: feed actions + +To create a feed, you first need a feed action. A feed action is an action like any other, but to qualify as a feed action it needs to accept these parameters: + +* **lifecycleEvent:** passes in commands to control the feed: `CREATE`, `READ`, `DELETE`, `PAUSE`, OR `UNPAUSE` +* **triggerName:** provides the fully qualified name of the trigger to associate with this feed +* **authKey:** the Basic auth credentials of the user who owns the trigger given in `triggerName` + +The feed action can take any other parameters you choose; thesy should include any parameters needed to connect to the event source and manage the feed. + +Once you have a feed action, create the feed when you create the trigger itself by using the `--feed` parameter. For example, assume you want to set up a feed for receiving updates to the user's location coming from your mobile app, and have created a feed action named `userLocChange` in a package in your namespace called `userLoc`. To create the feed for managing location updates, you could issue the following command in the CLI: + +`aio rt:trigger:create trigLocUpdate --feed userLoc/userLocChange ` + +This command creates a trigger named `trigLocUpdate`. Then do something like this: + +`aio rt:action:invoke userLoc/userLocChange --param lifecycleEvent CREATE --param triggerName trigLocUpdate --param authKey --param ` + +This invokes the feed action `userLocChange`, which sets up the stream of events from your mobile app aimed at the trigger `trigLocUpdate`. + +You can use the `--feed` parameter to execute similar functions on feed actions within the `aio rt:trigger:delete`, `aio rt:trigger:update`, and `aio rt:trigger:get` commands. + +## Feed implementation patterns + +You can create a feed according to several different architectural patterns. Three good choices are: + +* **Hooks:** This is the easiest option, if your event source offers a webhook facility. Simply set up the webhook to send an HTML POST directly to a URL to fire the trigger. This works best for low-frequency events. +* **Polling:** This is good for managing a regularly scheduled event, so long as it's not too frequent. Set up the feed action to poll an endpoint periodically to fetch new data. +* **Connections:** Sometimes, the volume and frequency of events makes it most efficient to set up a persistent connection. But since Runtime is architected as a REST service, a invocations of an action are destroyed as soon as they're executed; in other words, Runtime is by nature not persistent. One option is to set up an external service that maintains a persistent connection with your event source, and arrange for that service to fire events at your feed in Runtime. + +## Next steps + +Return to the [Runtime Reference Documentation Index](index.md). + +Return to the [Guides Index](../../index.md). From 752798028b33399cc9a1061c5c96cb4996538caa Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 13:12:19 -0700 Subject: [PATCH 033/116] update --- .../runtime_guides/reference_docs/api-ref.md | 50 ++++++------------- 1 file changed, 16 insertions(+), 34 deletions(-) diff --git a/src/pages/guides/runtime_guides/reference_docs/api-ref.md b/src/pages/guides/runtime_guides/reference_docs/api-ref.md index 74106bbf3..199751fa2 100644 --- a/src/pages/guides/runtime_guides/reference_docs/api-ref.md +++ b/src/pages/guides/runtime_guides/reference_docs/api-ref.md @@ -1,42 +1,24 @@ -# Using Feeds +# Adobe I/O Runtime API Reference -Feeds are streams of events. The difference between [triggers](triggersrules.md 'Using Triggers and Rules') and feeds is: +## API endpoints -* **Triggers** are a way to classify events: each defines a type of event and is fired when that event is received by Runtime. Triggers are linked to actions by rules; each rule links a trigger to a single action. -* **Feeds** are streams of events that are all handled by the same trigger. Each feed is controlled by a _feed action_ that manages the stream: creating, deleting, pausing or resuming it as needed. In this way, a feed controls the flow of input to a trigger. Feed actions use a REST API to interact with external services that produce the events to which triggers are set to respond. +Adobe I/O Runtime supports the following API endpoints for interacting programmatically with the service. -## Creating feeds: feed actions +**Notes:** -To create a feed, you first need a feed action. A feed action is an action like any other, but to qualify as a feed action it needs to accept these parameters: +1. Unless otherwise noted, all parameters are required. +2. For all the API calls on this page, the base URL is: + `https://api.adobe.io/` -* **lifecycleEvent:** passes in commands to control the feed: `CREATE`, `READ`, `DELETE`, `PAUSE`, OR `UNPAUSE` -* **triggerName:** provides the fully qualified name of the trigger to associate with this feed -* **authKey:** the Basic auth credentials of the user who owns the trigger given in `triggerName` +### GET /runtime/admin/namespaces/{orgId}/{intId} -The feed action can take any other parameters you choose; thesy should include any parameters needed to connect to the event source and manage the feed. +Returns the details of the namespace associated with the specified organization and integration. -Once you have a feed action, create the feed when you create the trigger itself by using the `--feed` parameter. For example, assume you want to set up a feed for receiving updates to the user's location coming from your mobile app, and have created a feed action named `userLocChange` in a package in your namespace called `userLoc`. To create the feed for managing location updates, you could issue the following command in the CLI: +#### _Parameters:_ -`aio rt:trigger:create trigLocUpdate --feed userLoc/userLocChange ` - -This command creates a trigger named `trigLocUpdate`. Then do something like this: - -`aio rt:action:invoke userLoc/userLocChange --param lifecycleEvent CREATE --param triggerName trigLocUpdate --param authKey --param ` - -This invokes the feed action `userLocChange`, which sets up the stream of events from your mobile app aimed at the trigger `trigLocUpdate`. - -You can use the `--feed` parameter to execute similar functions on feed actions within the `aio rt:trigger:delete`, `aio rt:trigger:update`, and `aio rt:trigger:get` commands. - -## Feed implementation patterns - -You can create a feed according to several different architectural patterns. Three good choices are: - -* **Hooks:** This is the easiest option, if your event source offers a webhook facility. Simply set up the webhook to send an HTML POST directly to a URL to fire the trigger. This works best for low-frequency events. -* **Polling:** This is good for managing a regularly scheduled event, so long as it's not too frequent. Set up the feed action to poll an endpoint periodically to fetch new data. -* **Connections:** Sometimes, the volume and frequency of events makes it most efficient to set up a persistent connection. But since Runtime is architected as a REST service, a invocations of an action are destroyed as soon as they're executed; in other words, Runtime is by nature not persistent. One option is to set up an external service that maintains a persistent connection with your event source, and arrange for that service to fire events at your feed in Runtime. - -## Next steps - -Return to the [Runtime Reference Documentation Index](index.md). - -Return to the [Guides Index](../../index.md). +| Name | Description | +| ------------------------------------ | ----------------------------------------------- | +| `orgId` (`string`: _path_) | Organization ID | +| `intId` (`string`: _path_) | Integration ID | +| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | +| `X-Api-Key` (`string`: _header_) | Api key | From 7a2123b1b732e5d44dd611c224ab0913ad4ebc7d Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 13:20:52 -0700 Subject: [PATCH 034/116] update --- .../runtime_guides/reference_docs/api-ref.md | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/pages/guides/runtime_guides/reference_docs/api-ref.md b/src/pages/guides/runtime_guides/reference_docs/api-ref.md index 199751fa2..b2827cead 100644 --- a/src/pages/guides/runtime_guides/reference_docs/api-ref.md +++ b/src/pages/guides/runtime_guides/reference_docs/api-ref.md @@ -22,3 +22,29 @@ Returns the details of the namespace associated with the specified organization | `intId` (`string`: _path_) | Integration ID | | `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | | `X-Api-Key` (`string`: _header_) | Api key | + +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +| 200 | Successful operationExample value: | + +{ + "name": "string", + "auth": "string" + +} +Model: +NamespaceDTO { +description: Namespace Details + name string + Namespace name + auth string + Auth associated with Namespace +} + +### POST /runtime/admin/namespaces/{orgId}/{intId} + +Creates a new namespace and returns the details of the newly created namespace. If namespace already exists it returns the details of the namespace. From 180b55991796701dee298945bfc75b0af4238b6e Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 13:40:02 -0700 Subject: [PATCH 035/116] update --- .../runtime_guides/reference_docs/api-ref.md | 22 ------------------- 1 file changed, 22 deletions(-) diff --git a/src/pages/guides/runtime_guides/reference_docs/api-ref.md b/src/pages/guides/runtime_guides/reference_docs/api-ref.md index b2827cead..88ba8fb37 100644 --- a/src/pages/guides/runtime_guides/reference_docs/api-ref.md +++ b/src/pages/guides/runtime_guides/reference_docs/api-ref.md @@ -26,25 +26,3 @@ Returns the details of the namespace associated with the specified organization #### _Responses:_ Response content type: `application/json` - -| Code | Description | -| --- | ---------------------------------- | -| 200 | Successful operationExample value: | - -{ - "name": "string", - "auth": "string" - -} -Model: -NamespaceDTO { -description: Namespace Details - name string - Namespace name - auth string - Auth associated with Namespace -} - -### POST /runtime/admin/namespaces/{orgId}/{intId} - -Creates a new namespace and returns the details of the newly created namespace. If namespace already exists it returns the details of the namespace. From 088fe8741cf46a4574c983c53835f532755e109f Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 14:01:17 -0700 Subject: [PATCH 036/116] update --- .../app_builder_guides/application-state.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/pages/guides/app_builder_guides/application-state.md b/src/pages/guides/app_builder_guides/application-state.md index 076d4c993..79b76c9fa 100644 --- a/src/pages/guides/app_builder_guides/application-state.md +++ b/src/pages/guides/app_builder_guides/application-state.md @@ -122,3 +122,22 @@ Explore the [full API](https://github.com/adobe/aio-lib-state/blob/main/doc/api. Available for `aio --version` >= `10.2`. The CLI must be run from within a valid App Builder application folder and uses the Runtime credentials to authenticate your requests to State. Each namespace has its own State container, so please ensure that your are accessing the expected instance by looking in your `.env` file for the `AIO_RUNTIME_NAMESPACE` variable. + +```bash +> aio app state +Manage your App Builder State storage + +USAGE + $ aio app state COMMAND + +COMMANDS + app state delete Delete key-values + app state get Get a key-value + app state list List key-values + app state put Put a key-value + app state stats Display stats +``` + +The default region is `amer`, to access another region, you can use the `--region` flag or add the `AIO_STATE_REGION=emea` variable to your `.env`. + +Navigate the CLI usage documentation from the repo's [README](https://github.com/adobe/aio-cli-plugin-app-storage?tab=readme-ov-file#usage) or by using the `--help` flag on the desired command. From 3f82bf0e31400fd6b88239261c272d809801dd97 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 14:07:46 -0700 Subject: [PATCH 037/116] update --- .../runtime_guides/reference_docs/api-ref.md | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/pages/guides/runtime_guides/reference_docs/api-ref.md b/src/pages/guides/runtime_guides/reference_docs/api-ref.md index 88ba8fb37..00534ef88 100644 --- a/src/pages/guides/runtime_guides/reference_docs/api-ref.md +++ b/src/pages/guides/runtime_guides/reference_docs/api-ref.md @@ -26,3 +26,27 @@ Returns the details of the namespace associated with the specified organization #### _Responses:_ Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +| 200 | Successful operationExample value: | + +``` +{ + "name": "string", + "auth": "string" + +} +Model: +NamespaceDTO { +description: Namespace Details + name string + Namespace name + auth string + Auth associated with Namespace +} +``` + +### POST /runtime/admin/namespaces/{orgId}/{intId} + +Creates a new namespace and returns the details of the newly created namespace. If namespace already exists it returns the details of the namespace. From 4d6665580f4739d3f28a5b1f8148a7c52623a57f Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 14:15:10 -0700 Subject: [PATCH 038/116] update --- .../runtime_guides/reference_docs/api-ref.md | 65 ++++++++++++++++++- 1 file changed, 63 insertions(+), 2 deletions(-) diff --git a/src/pages/guides/runtime_guides/reference_docs/api-ref.md b/src/pages/guides/runtime_guides/reference_docs/api-ref.md index 00534ef88..57ba3b4b7 100644 --- a/src/pages/guides/runtime_guides/reference_docs/api-ref.md +++ b/src/pages/guides/runtime_guides/reference_docs/api-ref.md @@ -30,7 +30,6 @@ Response content type: `application/json` | Code | Description | | --- | ---------------------------------- | | 200 | Successful operationExample value: | - ``` { "name": "string", @@ -46,7 +45,69 @@ description: Namespace Details Auth associated with Namespace } ``` - ### POST /runtime/admin/namespaces/{orgId}/{intId} Creates a new namespace and returns the details of the newly created namespace. If namespace already exists it returns the details of the namespace. + +#### _Parameters:_ + +| Name | Description | +| ------------------------------------ | ----------------------------------------------- | +| `orgId` (`string`: _path_) | Organization ID | +| `intId` (`string`: _path_) | Integration ID | +| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | +| `X-Api-Key` (`string`: _header_) | Api key | + +#### _Responses:_ + +Response content type: `application/json` +|Code|Description| +|--- |--- | +|200|Successful operation Example value:| +``` +{ +"name": "string", +"auth": "string" +} +Model: +NamespaceDTO { +description: Namespace Details + name string + Namespace name + auth string + Auth associated with Namespace +} +``` +### DELETE /runtime/admin/namespaces/{orgId}/{intId} + +Deletes the namespace associated with the specified organization and integration. + +#### _Parameters:_ + +| Name | Description | +| ------------------------------------ | ----------------------------------------------- | +| `orgId` (`string`: _path_) | Organization ID | +| `intId` (`string`: _path_) | Integration ID | +| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | +| `X-Api-Key` (`string`: _header_) | Api key | + +#### _Responses:_ + +| Response content type: | `application/json` | +| ------------------------------------ | ----------------------------------------------- | +| Code | Description | +| ------------------------------------ | ----------------------------------------------- | +| _default_ | Successful operation | + +### GET /runtime/namespaces/{orgId}/{intId}/actions + +Returns the list of actions associated with the specified organization and integration. + +#### _Parameters:_ + +| Name | Description | +| ------------------------------------ | ----------------------------------------------- | +| `orgId` (`string`: _path_) | Organization ID | +| `intId` (`string`: _path_) | Integration ID | +| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | +| `X-Api-Key` (`string`: _header_) | Api key | From 589349fc1ccb382549d6820be1f45528f1d2e79a Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 14:27:23 -0700 Subject: [PATCH 039/116] update --- .../runtime_guides/reference_docs/api-ref.md | 992 +++++++++++++++++- 1 file changed, 987 insertions(+), 5 deletions(-) diff --git a/src/pages/guides/runtime_guides/reference_docs/api-ref.md b/src/pages/guides/runtime_guides/reference_docs/api-ref.md index 57ba3b4b7..184a6614f 100644 --- a/src/pages/guides/runtime_guides/reference_docs/api-ref.md +++ b/src/pages/guides/runtime_guides/reference_docs/api-ref.md @@ -61,8 +61,9 @@ Creates a new namespace and returns the details of the newly created namespace. #### _Responses:_ Response content type: `application/json` -|Code|Description| -|--- |--- | + +| Code | Description | +| --- | ---------------------------------- | |200|Successful operation Example value:| ``` { @@ -93,9 +94,9 @@ Deletes the namespace associated with the specified organization and integration #### _Responses:_ -| Response content type: | `application/json` | -| ------------------------------------ | ----------------------------------------------- | -| Code | Description | +Response content type: `application/json` + +| Code | Description | | ------------------------------------ | ----------------------------------------------- | | _default_ | Successful operation | @@ -111,3 +112,984 @@ Returns the list of actions associated with the specified organization and integ | `intId` (`string`: _path_) | Integration ID | | `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | | `X-Api-Key` (`string`: _header_) | Api key | + +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +|200|Successful operation Example value:| +``` +[ + { + "name": "string", + "code": "string", + "namespace": "string", + "version": "string", + "params": [ + { + "key": "string", + "value": {} + } + ], + "annotations": [ + { + "key": "string", + "value": {} + } + ], + "limits": { + "timeout": "string", + "memory": "string", + "logs": "string" + }, + "exec": { + "kind": "string", + "binary": false, + "components": [ + "string" + ] + }, + "url": "string" + } +] +Model: +[ActionDTO { +description: OpenWhisk Action +name string + Action name +code string + Action code +namespace string + Action namespace +version string + Action version +params [Action params + KeyValuePairDTO { + description: OpenWhisk Action param + key string + Param Name + value { + description: Param value + } + }] +annotations [Action annotations + KeyValuePairDTO { + description: OpenWhisk Action param + key string + Param Name + value { + description: Param value + } + }] +limits LimitsDTO { + description: OpenWhisk Action Limits + timeout string + Action timeout + memory string + Action memory limit + logs string + Action logs + } +exec ExecDTO { + description: OpenWhisk Action exec details + kind string + Action kind + binary boolean + default: false + Is action binary + components [ + Action components in case of sequence + string] + } +url string + Action url +}] +``` +### POST /runtime/namespaces/{orgId}/{intId}/actions + +Creates a new action. + +#### _Parameters:_ + +| Name | Description | +| ---------------------- | ---------------------------- | +| orgId (string: path) | Organization ID | +| intId (string: path) | Integration ID | +| body (body) | Action form. Example value: | +| { | | +| "name": "string", | | +| "code": "string", | | +| "namespace": "string", | | +| "version": "string", | | +|Authorization (string: header)|Authorization token in format: Bearer {token}| +|X-Api-Key (string: header)|Api key| +``` + "params": [ + { + "key": "string", + "value": {} + } + + ], + "annotations": [ + { + "key": "string", + "value": {} + } + ], + "limits": { + "timeout": "string", + "memory": "string", + "logs": "string" + }, + "exec": { + "kind": "string", + "binary": false, + "components": [ + "string" + ] + }, + "url": "string" +}Parameter content type: application/json +Model: +[ActionDTO { +description: OpenWhisk Action + +name string + Action name +code string + Action code +namespace string + Action namespace +version string + Action version +params [Action params + KeyValuePairDTO { + description: OpenWhisk Action param + key string + Param Name + value { + description: Param value + } + }] +annotations [Action annotations + KeyValuePairDTO { + description: OpenWhisk Action param + key string + Param Name + value { + description: Param value + } + }] +limits LimitsDTO { + description: OpenWhisk Action Limits + timeout string + Action timeout + memory string + Action memory limit + logs string + Action logs + } +exec ExecDTO { + description: OpenWhisk Action exec details + kind string + Action kind + binary boolean + default: false + Is action binary + components [ + Action components in case of sequence + string] + } +url string + Action url +}] +``` +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +| _default_ | Successful operation | + +### GET /runtime/namespaces/{orgId}/{intId}/actions/{name} + +Returns the details of an action. + +#### _Parameters:_ + +| Name | Description | +| ------------------------------------ | ----------------------------------------------- | +| `orgId` (`string`: _path_) | Organization ID | +| `intId` (`string`: _path_) | Integration ID | +| `name` (`string`: _path_) | Action name | +| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | +| `X-Api-Key` (`string`: _header_) | Api key | + +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +|200|Successful operation Example value:| +``` +{ + "name": "string", + "namespace": "string", + "activationId": "string", + "annotations": [ + { + "key": "string", + "value": {} + } + ], + "duration": 0, + "version": "string", + "response": {} +} +Model: +[ActionDTO { +description: OpenWhisk Action +name string + Action name +code string + Action code +namespace string + Action namespace +version string + Action version +params [Action params + KeyValuePairDTO { + description: OpenWhisk Action param + key string + Param Name + value { + description: Param value + } + }] +annotations [Action annotations + KeyValuePairDTO { + description: OpenWhisk Action param + key string + Param Name + value { + description: Param value + } + }] +limits LimitsDTO { + description: OpenWhisk Action Limits + timeout string + Action timeout + memory string + Action memory limit + logs string + Action logs + } +exec ExecDTO { + description: OpenWhisk Action exec details + kind string + Action kind + binary boolean + default: false + Is action binary + components [ + Action components in case of sequence + string] + } +url string + Action url +}] +``` +### POST /runtime/namespaces/{orgId}/{intId}/actions/{name} + +Executes an action. + +#### _Parameters:_ + +| Name | Description | +| ------------------------------------ | ----------------------------------------------- | +| `orgId` (`string`: _path_) | Organization ID | +| `intId` (`string`: _path_) | Integration ID | +| `name` (`string`: _path_) | Action name | +| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | +| `X-Api-Key` (`string`: _header_) | Api key | + +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +|200|Successful operation Example value:| +``` +{ + "name": "string", + "code": "string", + "namespace": "string", + "version": "string", + "params": [ + { + "key": "string", + "value": {} + } + ], + "annotations": [ + { + "key": "string", + "value": {} + } + ], + "limits": { + "timeout": "string", + "memory": "string", + "logs": "string" + }, + "exec": { + "kind": "string", + "binary": false, + "components": [ + "string" + ] + }, + "url": "string" +} +Model: +[ActionResultDTO { +description: OpenWhisk Action invocation result +name string + Action name +code string + Action code +namespace string + Action namespace +version string + Action version +annotations [Action annotations + KeyValuePairDTO { + description: OpenWhisk Action param + key string + Param Name + value { + description: Param value + } + }] +duration integer($int32) + Duration +version string + Action Version +response { + description: + Action invocation response +} +``` +### PUT /runtime/namespaces/{orgId}/{intId}/actions/{name} + +Updates an action. + +#### _Parameters:_ + +| Name | Description | +| ---------------------- | ---------------------------- | +| orgId (string: path) | Organization ID | +| intId (string: path) | Integration ID | +| name (string: path) | Action name | +| body (body) | Action form. Example value: | +| { | | +| "name": "string", | | +| "code": "string", | | +| "namespace": "string", | | +| "version": "string", | | +|Authorization (string: header)|Authorization token in format: Bearer {token}| +|X-Api-Key (string: header)|Api key| +``` +"params": [ +{ + "key": "string", + "value": {} + } + + ], + "annotations": [ + { + "key": "string", + "value": {} + } + ], + "limits": { + "timeout": "string", + "memory": "string", + "logs": "string" + }, + "exec": { + "kind": "string", + "binary": false, + "components": [ + "string" + ] + }, + "url": "string" +}Parameter content type: application/json +Model: +[ActionDTO { +description: OpenWhisk Action +name string + Action name +code string + Action code +namespace string + Action namespace +version string + Action version +params [Action params + KeyValuePairDTO { + description: OpenWhisk Action param + key string + Param Name + value { + description: Param value + } + }] +annotations [Action annotations + KeyValuePairDTO { + description: OpenWhisk Action param + key string + Param Name + value { + description: Param value + } + }] +limits LimitsDTO { + description: OpenWhisk Action Limits + timeout string + Action timeout + memory string + Action memory limit + logs string + Action logs + } +exec ExecDTO { + description: OpenWhisk Action exec details + kind string + Action kind + binary boolean + default: false + Is action binary + components [ + Action components in case of sequence + string] + } +url string + Action url +}] +``` + +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +| _default_ | Successful operation | + +### DELETE /runtime/namespaces/{orgId}/{intId}/actions/{name} + +Deletes an action. + +#### _Parameters:_ + +| Name | Description | +| ------------------------------------ | ----------------------------------------------- | +| `orgId` (`string`: _path_) | Organization ID | +| `intId` (`string`: _path_) | Integration ID | +| `name` (`string`: _path_) | Action name | +| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | +| `X-Api-Key` (`string`: _header_) | Api key | + +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +| _default_ | Successful operation | + +### GET /runtime/system/actions + +Returns a list of built-in actions. + +#### _Parameters:_ + +| Name | Description | +| ------------------------------------ | ----------------------------------------------- | +| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | +| `X-Api-Key` (`string`: _header_) | Api key | + +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +|200|Successful operationExample value:| +``` +[ + { + "name": "string", + "code": "string", + "namespace": "string", + "version": "string", + "params": [ + { + "key": "string", + "value": {} + } + ], + "annotations": [ + { + "key": "string", + "value": {} + } + ], + "limits": { + "timeout": "string", + "memory": "string", + "logs": "string" + }, + "exec": { + "kind": "string", + "binary": false, + "components": [ + "string" + ] + }, + "url": "string" + } +] +Model: +[ActionDTO { +description: OpenWhisk Action +name string + Action name +code string + Action code +namespace string + Action namespace +version string + Action version +params [Action params + KeyValuePairDTO { + description: OpenWhisk Action param + key string + Param Name + value { + description: Param value + } + }] +annotations [Action annotations + KeyValuePairDTO { + description: OpenWhisk Action param + key string + Param Name + value { + description: Param value + } + }] +limits LimitsDTO { + description: OpenWhisk Action Limits + timeout string + Action timeout + memory string + Action memory limit + logs string + Action logs + } +exec ExecDTO { + description: OpenWhisk Action exec details + kind string + Action kind + binary boolean + default: false + Is action binary + components [ + Action components in case of sequence + string] + } +url string + Action url +}] +``` +### POST /runtime/namespaces/{orgId}/{intId}/handleEventRegistration + +Registers an event registration and assigns a given action to the event. + +#### _Parameters:_ + +| Name | Description | +| ------------------------------- | --------------- | +| orgId (string: path) | Organization ID | +| intId (string: path) | Integration ID | +| body (body) | Example value: | +| { | | +| "id": "string", | | +| "name": "string", | | +| "description": "string", | | +| "client_id": "string", | | +| "type": "string", | | +| "integration_status": "string", | | +| "delivery_type": "string", | | +| "webhook_url": "string", | | +|Authorization (string: header)|Authorization token in format: Bearer {token}| +|X-Ams-Consumer-Id (string: header)|AMS consumer ID| +|X-Ams-Application-Id (string: header)|AMS application ID| +|X-Api-Key (string: header)|Api key| +| "events_of_interest": [ | | +``` + { + "event_code": "string", + "provider": "string" + } + + ], + "runtime_action": "string", + "registration_id": "string" +}Parameter content type: application/json +Model: +EventDTO { +description: Adobe I/O Event Details +id string + Event id +name string + Event name +description string + Event code +Client id string + Event namespace +type string + Event type +integration_status string + Event integration status +delivery_type string + Event delivery type +webhook_url string + Webhook url +events_of_interest [ + Events of interest to listen to + EventsOfInterestDTO{ + description: Events of interest + event_code string + Event code + provider string + Event provider + }] +runtime_action string + Action to handle event +registration_id string + Event registration id +} +``` + +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +|200|Successful operation Example value:| +``` +{ + "id": "string", + "name": "string", + "description": "string", + "client_id": "string", + "type": "string", + "integration_status": "string", + "delivery_type": "string", + "webhook_url": "string", + "events_of_interest": [ + { + "event_code": "string", + "provider": "string" + } + ], + "runtime_action": "string", + "registration_id": "string" +} +Model: +EventDTO { +description: Adobe I/O Event Details +id string + Event id +name string + Event name +description string + Event code +Client id string + Event namespace +type string + Event type +integration_status string + Event integration status +delivery_type string + Event delivery type +webhook_url string + Webhook url +events_of_interest [ + Events of interest to listen to + EventsOfInterestDTO{ + description: Events of interest + event_code string + Event code + provider string + Event provider + }] +runtime_action string + Action to handle event +registration_id string + Event registration id +} +``` + +### DELETE /runtime/namespaces/{orgId}/{intId}/handleEventDeletion/{clientId}/{registrationId} + +Deletes an event registration. + +#### _Parameters:_ + +| Name | Description | +| ----------------------------------------- | ----------------------------------------------- | +| `orgId` (`string`: _path_) | Organization ID | +| `intId` (`string`: _path_) | Integration ID | +| `clientId ` (`string`: _path_) | IMS client ID | +| `registrationId` (`string`: _path_) | ID of registration | +| `X-Ams-Consumer-Id` (`string`: _path_) | AMS consumer ID | +| `X-Ams-Application-Id` (`string`: _path_) | AMS application ID | +| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | +| `X-Api-Key` (`string`: _header_) | Api key | + +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +| _default_ | Successful operation | + +### PUT /runtime/namespaces/{orgId}/{intId}/handleEventUpdate/{clientId}/{registrationId} + +Updates an event registration. + +#### _Parameters:_ + +| Name | Description | +| ------------------------------------- | ------------------ | +| orgId (string: path) | Organization ID | +| intId (string: path) | Integration ID | +| clientId (string: path) | IMS client ID | +| registrationId (string: path) | Registration ID | +| X-Ams-Consumer-Id (string: header) | AMS consumer ID | +| X-Ams-Application-Id (string: header) | AMS application ID | +| body (body) | Example value: | +| { | | +| "id": "string", | | +| "name": "string", | | +| "description": "string", | | +| "client_id": "string", | | +| "type": "string", | | +| "integration_status": "string", | | +| "delivery_type": "string", | | +| "webhook_url": "string", | | +|Authorization (string: header)|Authorization token in format: Bearer {token}| +|X-Api-Key (string: header)|Api key| +``` +"events_of_interest": [ + { + "event_code": "string", + "provider": "string" + } + + ], + "runtime_action": "string", + "registration_id": "string" +}Parameter content type: application/json +Model: +EventDTO { +description: Adobe I/O Event Details +id string + Event id +name string + Event name +description string + Event code +Client id string + Event namespace +type string + Event type +integration_status string + Event integration status +delivery_type string + Event delivery type +webhook_url string + Webhook url +events_of_interest [ + Events of interest to listen to + EventsOfInterestDTO{ + description: Events of interest + event_code string + Event code + provider string + Event provider + }] +runtime_action string + Action to handle event +registration_id string + Event registration id +} +``` + +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +|200|Successful operation Example value:| +``` +{ + "id": "string", + "name": "string", + "description": "string", + "client_id": "string", + "type": "string", + "integration_status": "string", + "delivery_type": "string", + "webhook_url": "string", + "events_of_interest": [ + { + "event_code": "string", + "provider": "string" + } + ], + "runtime_action": "string", + "registration_id": "string" +} +Model: +EventDTO { +description: Adobe I/O Event Details +id string + Event id +name string + Event name +description string + Event code +Client id string + Event namespace +type string + Event type +integration_status string + Event integration status +delivery_type string + Event delivery type +webhook_url string + Webhook url +events_of_interest [ + Events of interest to listen to + EventsOfInterestDTO{ + description: Events of interest + event_code string + Event code + provider string + Event provider + }] +runtime_action string + Action to handle event +registration_id string + Event registration id +} +``` +### POST /runtime/namespaces/{orgId}/{intId}/handleEventStatus/{clientId}/{registrationId}/{status} + +Updates the status of an event registration. + +#### _Parameters:_ + +| Name | Description | +| ----------------------------------------- | ----------------------------------------------- | +| `orgId` (`string`: _path_) | Organization ID | +| `intId` (`string`: _path_) | Integration ID | +| `clientId ` (`string`: _path_) | IMS client ID | +| `registrationId` (`string`: _path_) | ID of registration | +| `status` (`string`: _path_) | Status of the registration | +| `X-Ams-Consumer-Id` (`string`: _path_) | AMS consumer ID | +| `X-Ams-Application-Id` (`string`: _path_) | AMS application ID | +| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | +| `X-Api-Key` (`string`: _header_) | Api key | + +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +|200|Successful operation Example value:| +``` +{ + "id": "string", + "name": "string", + "description": "string", + "client_id": "string", + "type": "string", + "integration_status": "string", + "delivery_type": "string", + "webhook_url": "string", + "events_of_interest": [ + { + "event_code": "string", + "provider": "string" + } + ], + "runtime_action": "string", + "registration_id": "string" +} +Model: +EventDTO { +description: Adobe I/O Event Details +id string + Event id +name string + Event name +description string + Event code +Client id string + Event namespace +type string + Event type +integration_status string + Event integration status +delivery_type string + Event delivery type +webhook_url string + Webhook url +events_of_interest [ + Events of interest to listen to + EventsOfInterestDTO{ + description: Events of interest + event_code string + Event code + provider string + Event provider + }] +runtime_action string + Action to handle event +registration_id string + Event registration id +} +``` +## Next steps + +Return to the [Runtime Reference Documentation Index](index.md). + +Return to the [Guides Index](../../index.md). From f03310c5da89603e65bef8e8de066f47f0dd1ee9 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 14:29:43 -0700 Subject: [PATCH 040/116] update --- .../runtime_guides/reference_docs/api-ref.md | 980 ------------------ 1 file changed, 980 deletions(-) diff --git a/src/pages/guides/runtime_guides/reference_docs/api-ref.md b/src/pages/guides/runtime_guides/reference_docs/api-ref.md index 184a6614f..1773b3fc8 100644 --- a/src/pages/guides/runtime_guides/reference_docs/api-ref.md +++ b/src/pages/guides/runtime_guides/reference_docs/api-ref.md @@ -113,983 +113,3 @@ Returns the list of actions associated with the specified organization and integ | `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | | `X-Api-Key` (`string`: _header_) | Api key | -#### _Responses:_ - -Response content type: `application/json` - -| Code | Description | -| --- | ---------------------------------- | -|200|Successful operation Example value:| -``` -[ - { - "name": "string", - "code": "string", - "namespace": "string", - "version": "string", - "params": [ - { - "key": "string", - "value": {} - } - ], - "annotations": [ - { - "key": "string", - "value": {} - } - ], - "limits": { - "timeout": "string", - "memory": "string", - "logs": "string" - }, - "exec": { - "kind": "string", - "binary": false, - "components": [ - "string" - ] - }, - "url": "string" - } -] -Model: -[ActionDTO { -description: OpenWhisk Action -name string - Action name -code string - Action code -namespace string - Action namespace -version string - Action version -params [Action params - KeyValuePairDTO { - description: OpenWhisk Action param - key string - Param Name - value { - description: Param value - } - }] -annotations [Action annotations - KeyValuePairDTO { - description: OpenWhisk Action param - key string - Param Name - value { - description: Param value - } - }] -limits LimitsDTO { - description: OpenWhisk Action Limits - timeout string - Action timeout - memory string - Action memory limit - logs string - Action logs - } -exec ExecDTO { - description: OpenWhisk Action exec details - kind string - Action kind - binary boolean - default: false - Is action binary - components [ - Action components in case of sequence - string] - } -url string - Action url -}] -``` -### POST /runtime/namespaces/{orgId}/{intId}/actions - -Creates a new action. - -#### _Parameters:_ - -| Name | Description | -| ---------------------- | ---------------------------- | -| orgId (string: path) | Organization ID | -| intId (string: path) | Integration ID | -| body (body) | Action form. Example value: | -| { | | -| "name": "string", | | -| "code": "string", | | -| "namespace": "string", | | -| "version": "string", | | -|Authorization (string: header)|Authorization token in format: Bearer {token}| -|X-Api-Key (string: header)|Api key| -``` - "params": [ - { - "key": "string", - "value": {} - } - - ], - "annotations": [ - { - "key": "string", - "value": {} - } - ], - "limits": { - "timeout": "string", - "memory": "string", - "logs": "string" - }, - "exec": { - "kind": "string", - "binary": false, - "components": [ - "string" - ] - }, - "url": "string" -}Parameter content type: application/json -Model: -[ActionDTO { -description: OpenWhisk Action - -name string - Action name -code string - Action code -namespace string - Action namespace -version string - Action version -params [Action params - KeyValuePairDTO { - description: OpenWhisk Action param - key string - Param Name - value { - description: Param value - } - }] -annotations [Action annotations - KeyValuePairDTO { - description: OpenWhisk Action param - key string - Param Name - value { - description: Param value - } - }] -limits LimitsDTO { - description: OpenWhisk Action Limits - timeout string - Action timeout - memory string - Action memory limit - logs string - Action logs - } -exec ExecDTO { - description: OpenWhisk Action exec details - kind string - Action kind - binary boolean - default: false - Is action binary - components [ - Action components in case of sequence - string] - } -url string - Action url -}] -``` -#### _Responses:_ - -Response content type: `application/json` - -| Code | Description | -| --- | ---------------------------------- | -| _default_ | Successful operation | - -### GET /runtime/namespaces/{orgId}/{intId}/actions/{name} - -Returns the details of an action. - -#### _Parameters:_ - -| Name | Description | -| ------------------------------------ | ----------------------------------------------- | -| `orgId` (`string`: _path_) | Organization ID | -| `intId` (`string`: _path_) | Integration ID | -| `name` (`string`: _path_) | Action name | -| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | -| `X-Api-Key` (`string`: _header_) | Api key | - -#### _Responses:_ - -Response content type: `application/json` - -| Code | Description | -| --- | ---------------------------------- | -|200|Successful operation Example value:| -``` -{ - "name": "string", - "namespace": "string", - "activationId": "string", - "annotations": [ - { - "key": "string", - "value": {} - } - ], - "duration": 0, - "version": "string", - "response": {} -} -Model: -[ActionDTO { -description: OpenWhisk Action -name string - Action name -code string - Action code -namespace string - Action namespace -version string - Action version -params [Action params - KeyValuePairDTO { - description: OpenWhisk Action param - key string - Param Name - value { - description: Param value - } - }] -annotations [Action annotations - KeyValuePairDTO { - description: OpenWhisk Action param - key string - Param Name - value { - description: Param value - } - }] -limits LimitsDTO { - description: OpenWhisk Action Limits - timeout string - Action timeout - memory string - Action memory limit - logs string - Action logs - } -exec ExecDTO { - description: OpenWhisk Action exec details - kind string - Action kind - binary boolean - default: false - Is action binary - components [ - Action components in case of sequence - string] - } -url string - Action url -}] -``` -### POST /runtime/namespaces/{orgId}/{intId}/actions/{name} - -Executes an action. - -#### _Parameters:_ - -| Name | Description | -| ------------------------------------ | ----------------------------------------------- | -| `orgId` (`string`: _path_) | Organization ID | -| `intId` (`string`: _path_) | Integration ID | -| `name` (`string`: _path_) | Action name | -| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | -| `X-Api-Key` (`string`: _header_) | Api key | - -#### _Responses:_ - -Response content type: `application/json` - -| Code | Description | -| --- | ---------------------------------- | -|200|Successful operation Example value:| -``` -{ - "name": "string", - "code": "string", - "namespace": "string", - "version": "string", - "params": [ - { - "key": "string", - "value": {} - } - ], - "annotations": [ - { - "key": "string", - "value": {} - } - ], - "limits": { - "timeout": "string", - "memory": "string", - "logs": "string" - }, - "exec": { - "kind": "string", - "binary": false, - "components": [ - "string" - ] - }, - "url": "string" -} -Model: -[ActionResultDTO { -description: OpenWhisk Action invocation result -name string - Action name -code string - Action code -namespace string - Action namespace -version string - Action version -annotations [Action annotations - KeyValuePairDTO { - description: OpenWhisk Action param - key string - Param Name - value { - description: Param value - } - }] -duration integer($int32) - Duration -version string - Action Version -response { - description: - Action invocation response -} -``` -### PUT /runtime/namespaces/{orgId}/{intId}/actions/{name} - -Updates an action. - -#### _Parameters:_ - -| Name | Description | -| ---------------------- | ---------------------------- | -| orgId (string: path) | Organization ID | -| intId (string: path) | Integration ID | -| name (string: path) | Action name | -| body (body) | Action form. Example value: | -| { | | -| "name": "string", | | -| "code": "string", | | -| "namespace": "string", | | -| "version": "string", | | -|Authorization (string: header)|Authorization token in format: Bearer {token}| -|X-Api-Key (string: header)|Api key| -``` -"params": [ -{ - "key": "string", - "value": {} - } - - ], - "annotations": [ - { - "key": "string", - "value": {} - } - ], - "limits": { - "timeout": "string", - "memory": "string", - "logs": "string" - }, - "exec": { - "kind": "string", - "binary": false, - "components": [ - "string" - ] - }, - "url": "string" -}Parameter content type: application/json -Model: -[ActionDTO { -description: OpenWhisk Action -name string - Action name -code string - Action code -namespace string - Action namespace -version string - Action version -params [Action params - KeyValuePairDTO { - description: OpenWhisk Action param - key string - Param Name - value { - description: Param value - } - }] -annotations [Action annotations - KeyValuePairDTO { - description: OpenWhisk Action param - key string - Param Name - value { - description: Param value - } - }] -limits LimitsDTO { - description: OpenWhisk Action Limits - timeout string - Action timeout - memory string - Action memory limit - logs string - Action logs - } -exec ExecDTO { - description: OpenWhisk Action exec details - kind string - Action kind - binary boolean - default: false - Is action binary - components [ - Action components in case of sequence - string] - } -url string - Action url -}] -``` - -#### _Responses:_ - -Response content type: `application/json` - -| Code | Description | -| --- | ---------------------------------- | -| _default_ | Successful operation | - -### DELETE /runtime/namespaces/{orgId}/{intId}/actions/{name} - -Deletes an action. - -#### _Parameters:_ - -| Name | Description | -| ------------------------------------ | ----------------------------------------------- | -| `orgId` (`string`: _path_) | Organization ID | -| `intId` (`string`: _path_) | Integration ID | -| `name` (`string`: _path_) | Action name | -| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | -| `X-Api-Key` (`string`: _header_) | Api key | - -#### _Responses:_ - -Response content type: `application/json` - -| Code | Description | -| --- | ---------------------------------- | -| _default_ | Successful operation | - -### GET /runtime/system/actions - -Returns a list of built-in actions. - -#### _Parameters:_ - -| Name | Description | -| ------------------------------------ | ----------------------------------------------- | -| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | -| `X-Api-Key` (`string`: _header_) | Api key | - -#### _Responses:_ - -Response content type: `application/json` - -| Code | Description | -| --- | ---------------------------------- | -|200|Successful operationExample value:| -``` -[ - { - "name": "string", - "code": "string", - "namespace": "string", - "version": "string", - "params": [ - { - "key": "string", - "value": {} - } - ], - "annotations": [ - { - "key": "string", - "value": {} - } - ], - "limits": { - "timeout": "string", - "memory": "string", - "logs": "string" - }, - "exec": { - "kind": "string", - "binary": false, - "components": [ - "string" - ] - }, - "url": "string" - } -] -Model: -[ActionDTO { -description: OpenWhisk Action -name string - Action name -code string - Action code -namespace string - Action namespace -version string - Action version -params [Action params - KeyValuePairDTO { - description: OpenWhisk Action param - key string - Param Name - value { - description: Param value - } - }] -annotations [Action annotations - KeyValuePairDTO { - description: OpenWhisk Action param - key string - Param Name - value { - description: Param value - } - }] -limits LimitsDTO { - description: OpenWhisk Action Limits - timeout string - Action timeout - memory string - Action memory limit - logs string - Action logs - } -exec ExecDTO { - description: OpenWhisk Action exec details - kind string - Action kind - binary boolean - default: false - Is action binary - components [ - Action components in case of sequence - string] - } -url string - Action url -}] -``` -### POST /runtime/namespaces/{orgId}/{intId}/handleEventRegistration - -Registers an event registration and assigns a given action to the event. - -#### _Parameters:_ - -| Name | Description | -| ------------------------------- | --------------- | -| orgId (string: path) | Organization ID | -| intId (string: path) | Integration ID | -| body (body) | Example value: | -| { | | -| "id": "string", | | -| "name": "string", | | -| "description": "string", | | -| "client_id": "string", | | -| "type": "string", | | -| "integration_status": "string", | | -| "delivery_type": "string", | | -| "webhook_url": "string", | | -|Authorization (string: header)|Authorization token in format: Bearer {token}| -|X-Ams-Consumer-Id (string: header)|AMS consumer ID| -|X-Ams-Application-Id (string: header)|AMS application ID| -|X-Api-Key (string: header)|Api key| -| "events_of_interest": [ | | -``` - { - "event_code": "string", - "provider": "string" - } - - ], - "runtime_action": "string", - "registration_id": "string" -}Parameter content type: application/json -Model: -EventDTO { -description: Adobe I/O Event Details -id string - Event id -name string - Event name -description string - Event code -Client id string - Event namespace -type string - Event type -integration_status string - Event integration status -delivery_type string - Event delivery type -webhook_url string - Webhook url -events_of_interest [ - Events of interest to listen to - EventsOfInterestDTO{ - description: Events of interest - event_code string - Event code - provider string - Event provider - }] -runtime_action string - Action to handle event -registration_id string - Event registration id -} -``` - -#### _Responses:_ - -Response content type: `application/json` - -| Code | Description | -| --- | ---------------------------------- | -|200|Successful operation Example value:| -``` -{ - "id": "string", - "name": "string", - "description": "string", - "client_id": "string", - "type": "string", - "integration_status": "string", - "delivery_type": "string", - "webhook_url": "string", - "events_of_interest": [ - { - "event_code": "string", - "provider": "string" - } - ], - "runtime_action": "string", - "registration_id": "string" -} -Model: -EventDTO { -description: Adobe I/O Event Details -id string - Event id -name string - Event name -description string - Event code -Client id string - Event namespace -type string - Event type -integration_status string - Event integration status -delivery_type string - Event delivery type -webhook_url string - Webhook url -events_of_interest [ - Events of interest to listen to - EventsOfInterestDTO{ - description: Events of interest - event_code string - Event code - provider string - Event provider - }] -runtime_action string - Action to handle event -registration_id string - Event registration id -} -``` - -### DELETE /runtime/namespaces/{orgId}/{intId}/handleEventDeletion/{clientId}/{registrationId} - -Deletes an event registration. - -#### _Parameters:_ - -| Name | Description | -| ----------------------------------------- | ----------------------------------------------- | -| `orgId` (`string`: _path_) | Organization ID | -| `intId` (`string`: _path_) | Integration ID | -| `clientId ` (`string`: _path_) | IMS client ID | -| `registrationId` (`string`: _path_) | ID of registration | -| `X-Ams-Consumer-Id` (`string`: _path_) | AMS consumer ID | -| `X-Ams-Application-Id` (`string`: _path_) | AMS application ID | -| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | -| `X-Api-Key` (`string`: _header_) | Api key | - -#### _Responses:_ - -Response content type: `application/json` - -| Code | Description | -| --- | ---------------------------------- | -| _default_ | Successful operation | - -### PUT /runtime/namespaces/{orgId}/{intId}/handleEventUpdate/{clientId}/{registrationId} - -Updates an event registration. - -#### _Parameters:_ - -| Name | Description | -| ------------------------------------- | ------------------ | -| orgId (string: path) | Organization ID | -| intId (string: path) | Integration ID | -| clientId (string: path) | IMS client ID | -| registrationId (string: path) | Registration ID | -| X-Ams-Consumer-Id (string: header) | AMS consumer ID | -| X-Ams-Application-Id (string: header) | AMS application ID | -| body (body) | Example value: | -| { | | -| "id": "string", | | -| "name": "string", | | -| "description": "string", | | -| "client_id": "string", | | -| "type": "string", | | -| "integration_status": "string", | | -| "delivery_type": "string", | | -| "webhook_url": "string", | | -|Authorization (string: header)|Authorization token in format: Bearer {token}| -|X-Api-Key (string: header)|Api key| -``` -"events_of_interest": [ - { - "event_code": "string", - "provider": "string" - } - - ], - "runtime_action": "string", - "registration_id": "string" -}Parameter content type: application/json -Model: -EventDTO { -description: Adobe I/O Event Details -id string - Event id -name string - Event name -description string - Event code -Client id string - Event namespace -type string - Event type -integration_status string - Event integration status -delivery_type string - Event delivery type -webhook_url string - Webhook url -events_of_interest [ - Events of interest to listen to - EventsOfInterestDTO{ - description: Events of interest - event_code string - Event code - provider string - Event provider - }] -runtime_action string - Action to handle event -registration_id string - Event registration id -} -``` - -#### _Responses:_ - -Response content type: `application/json` - -| Code | Description | -| --- | ---------------------------------- | -|200|Successful operation Example value:| -``` -{ - "id": "string", - "name": "string", - "description": "string", - "client_id": "string", - "type": "string", - "integration_status": "string", - "delivery_type": "string", - "webhook_url": "string", - "events_of_interest": [ - { - "event_code": "string", - "provider": "string" - } - ], - "runtime_action": "string", - "registration_id": "string" -} -Model: -EventDTO { -description: Adobe I/O Event Details -id string - Event id -name string - Event name -description string - Event code -Client id string - Event namespace -type string - Event type -integration_status string - Event integration status -delivery_type string - Event delivery type -webhook_url string - Webhook url -events_of_interest [ - Events of interest to listen to - EventsOfInterestDTO{ - description: Events of interest - event_code string - Event code - provider string - Event provider - }] -runtime_action string - Action to handle event -registration_id string - Event registration id -} -``` -### POST /runtime/namespaces/{orgId}/{intId}/handleEventStatus/{clientId}/{registrationId}/{status} - -Updates the status of an event registration. - -#### _Parameters:_ - -| Name | Description | -| ----------------------------------------- | ----------------------------------------------- | -| `orgId` (`string`: _path_) | Organization ID | -| `intId` (`string`: _path_) | Integration ID | -| `clientId ` (`string`: _path_) | IMS client ID | -| `registrationId` (`string`: _path_) | ID of registration | -| `status` (`string`: _path_) | Status of the registration | -| `X-Ams-Consumer-Id` (`string`: _path_) | AMS consumer ID | -| `X-Ams-Application-Id` (`string`: _path_) | AMS application ID | -| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | -| `X-Api-Key` (`string`: _header_) | Api key | - -#### _Responses:_ - -Response content type: `application/json` - -| Code | Description | -| --- | ---------------------------------- | -|200|Successful operation Example value:| -``` -{ - "id": "string", - "name": "string", - "description": "string", - "client_id": "string", - "type": "string", - "integration_status": "string", - "delivery_type": "string", - "webhook_url": "string", - "events_of_interest": [ - { - "event_code": "string", - "provider": "string" - } - ], - "runtime_action": "string", - "registration_id": "string" -} -Model: -EventDTO { -description: Adobe I/O Event Details -id string - Event id -name string - Event name -description string - Event code -Client id string - Event namespace -type string - Event type -integration_status string - Event integration status -delivery_type string - Event delivery type -webhook_url string - Webhook url -events_of_interest [ - Events of interest to listen to - EventsOfInterestDTO{ - description: Events of interest - event_code string - Event code - provider string - Event provider - }] -runtime_action string - Action to handle event -registration_id string - Event registration id -} -``` -## Next steps - -Return to the [Runtime Reference Documentation Index](index.md). - -Return to the [Guides Index](../../index.md). From ba4d5fdc2d621ce411df8feed51dbcef6886d63f Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 14:45:39 -0700 Subject: [PATCH 041/116] update --- .../runtime_guides/reference_docs/api-ref.md | 291 ++++++++++++++++++ 1 file changed, 291 insertions(+) diff --git a/src/pages/guides/runtime_guides/reference_docs/api-ref.md b/src/pages/guides/runtime_guides/reference_docs/api-ref.md index 1773b3fc8..eb8bc5a97 100644 --- a/src/pages/guides/runtime_guides/reference_docs/api-ref.md +++ b/src/pages/guides/runtime_guides/reference_docs/api-ref.md @@ -113,3 +113,294 @@ Returns the list of actions associated with the specified organization and integ | `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | | `X-Api-Key` (`string`: _header_) | Api key | +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +|200|Successful operation Example value:| +``` +[ + { + "name": "string", + "code": "string", + "namespace": "string", + "version": "string", + "params": [ + { + "key": "string", + "value": {} + } + ], + "annotations": [ + { + "key": "string", + "value": {} + } + ], + "limits": { + "timeout": "string", + "memory": "string", + "logs": "string" + }, + "exec": { + "kind": "string", + "binary": false, + "components": [ + "string" + ] + }, + "url": "string" + } +] +Model: +[ActionDTO { +description: OpenWhisk Action +name string + Action name +code string + Action code +namespace string + Action namespace +version string + Action version +params [Action params + KeyValuePairDTO { + description: OpenWhisk Action param + key string + Param Name + value { + description: Param value + } + }] +annotations [Action annotations + KeyValuePairDTO { + description: OpenWhisk Action param + key string + Param Name + value { + description: Param value + } + }] +limits LimitsDTO { + description: OpenWhisk Action Limits + timeout string + Action timeout + memory string + Action memory limit + logs string + Action logs + } +exec ExecDTO { + description: OpenWhisk Action exec details + kind string + Action kind + binary boolean + default: false + Is action binary + components [ + Action components in case of sequence + string] + } +url string + Action url +}] +``` +### POST /runtime/namespaces/{orgId}/{intId}/actions + +Creates a new action. + +#### _Parameters:_ + +| Name | Description | +| ---------------------- | ---------------------------- | +| orgId (string: path) | Organization ID | +| intId (string: path) | Integration ID | +| body (body) | Action form. Example value: | +| { | | +| "name": "string", | | +| "code": "string", | | +| "namespace": "string", | | +| "version": "string", | | +|Authorization (string: header)|Authorization token in format: Bearer {token}| +|X-Api-Key (string: header)|Api key| +``` + "params": [ + { + "key": "string", + "value": {} + } + + ], + "annotations": [ + { + "key": "string", + "value": {} + } + ], + "limits": { + "timeout": "string", + "memory": "string", + "logs": "string" + }, + "exec": { + "kind": "string", + "binary": false, + "components": [ + "string" + ] + }, + "url": "string" +}Parameter content type: application/json +Model: +[ActionDTO { +description: OpenWhisk Action + +name string + Action name +code string + Action code +namespace string + Action namespace +version string + Action version +params [Action params + KeyValuePairDTO { + description: OpenWhisk Action param + key string + Param Name + value { + description: Param value + } + }] +annotations [Action annotations + KeyValuePairDTO { + description: OpenWhisk Action param + key string + Param Name + value { + description: Param value + } + }] +limits LimitsDTO { + description: OpenWhisk Action Limits + timeout string + Action timeout + memory string + Action memory limit + logs string + Action logs + } +exec ExecDTO { + description: OpenWhisk Action exec details + kind string + Action kind + binary boolean + default: false + Is action binary + components [ + Action components in case of sequence + string] + } +url string + Action url +}] +``` +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +| _default_ | Successful operation | + +### GET /runtime/namespaces/{orgId}/{intId}/actions/{name} + +Returns the details of an action. + +#### _Parameters:_ + +| Name | Description | +| ------------------------------------ | ----------------------------------------------- | +| `orgId` (`string`: _path_) | Organization ID | +| `intId` (`string`: _path_) | Integration ID | +| `name` (`string`: _path_) | Action name | +| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | +| `X-Api-Key` (`string`: _header_) | Api key | + +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +|200|Successful operation Example value:| +``` +{ + "name": "string", + "namespace": "string", + "activationId": "string", + "annotations": [ + { + "key": "string", + "value": {} + } + ], + "duration": 0, + "version": "string", + "response": {} +} +Model: +[ActionDTO { +description: OpenWhisk Action +name string + Action name +code string + Action code +namespace string + Action namespace +version string + Action version +params [Action params + KeyValuePairDTO { + description: OpenWhisk Action param + key string + Param Name + value { + description: Param value + } + }] +annotations [Action annotations + KeyValuePairDTO { + description: OpenWhisk Action param + key string + Param Name + value { + description: Param value + } + }] +limits LimitsDTO { + description: OpenWhisk Action Limits + timeout string + Action timeout + memory string + Action memory limit + logs string + Action logs + } +exec ExecDTO { + description: OpenWhisk Action exec details + kind string + Action kind + binary boolean + default: false + Is action binary + components [ + Action components in case of sequence + string] + } +url string + Action url +}] +``` From 6ffee1760284173f75932a6cc72ae0fc0cbb37e4 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 14:46:47 -0700 Subject: [PATCH 042/116] update --- .../runtime_guides/reference_docs/api-ref.md | 182 ++++++++++++++++++ 1 file changed, 182 insertions(+) diff --git a/src/pages/guides/runtime_guides/reference_docs/api-ref.md b/src/pages/guides/runtime_guides/reference_docs/api-ref.md index eb8bc5a97..5f31068f9 100644 --- a/src/pages/guides/runtime_guides/reference_docs/api-ref.md +++ b/src/pages/guides/runtime_guides/reference_docs/api-ref.md @@ -404,3 +404,185 @@ url string Action url }] ``` +### POST /runtime/namespaces/{orgId}/{intId}/actions/{name} + +Executes an action. + +#### _Parameters:_ + +| Name | Description | +| ------------------------------------ | ----------------------------------------------- | +| `orgId` (`string`: _path_) | Organization ID | +| `intId` (`string`: _path_) | Integration ID | +| `name` (`string`: _path_) | Action name | +| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | +| `X-Api-Key` (`string`: _header_) | Api key | + +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +|200|Successful operation Example value:| +``` +{ + "name": "string", + "code": "string", + "namespace": "string", + "version": "string", + "params": [ + { + "key": "string", + "value": {} + } + ], + "annotations": [ + { + "key": "string", + "value": {} + } + ], + "limits": { + "timeout": "string", + "memory": "string", + "logs": "string" + }, + "exec": { + "kind": "string", + "binary": false, + "components": [ + "string" + ] + }, + "url": "string" +} +Model: +[ActionResultDTO { +description: OpenWhisk Action invocation result +name string + Action name +code string + Action code +namespace string + Action namespace +version string + Action version +annotations [Action annotations + KeyValuePairDTO { + description: OpenWhisk Action param + key string + Param Name + value { + description: Param value + } + }] +duration integer($int32) + Duration +version string + Action Version +response { + description: + Action invocation response +} +``` +### PUT /runtime/namespaces/{orgId}/{intId}/actions/{name} + +Updates an action. + +#### _Parameters:_ + +| Name | Description | +| ---------------------- | ---------------------------- | +| orgId (string: path) | Organization ID | +| intId (string: path) | Integration ID | +| name (string: path) | Action name | +| body (body) | Action form. Example value: | +| { | | +| "name": "string", | | +| "code": "string", | | +| "namespace": "string", | | +| "version": "string", | | +|Authorization (string: header)|Authorization token in format: Bearer {token}| +|X-Api-Key (string: header)|Api key| +``` +"params": [ +{ + "key": "string", + "value": {} + } + + ], + "annotations": [ + { + "key": "string", + "value": {} + } + ], + "limits": { + "timeout": "string", + "memory": "string", + "logs": "string" + }, + "exec": { + "kind": "string", + "binary": false, + "components": [ + "string" + ] + }, + "url": "string" +}Parameter content type: application/json +Model: +[ActionDTO { +description: OpenWhisk Action +name string + Action name +code string + Action code +namespace string + Action namespace +version string + Action version +params [Action params + KeyValuePairDTO { + description: OpenWhisk Action param + key string + Param Name + value { + description: Param value + } + }] +annotations [Action annotations + KeyValuePairDTO { + description: OpenWhisk Action param + key string + Param Name + value { + description: Param value + } + }] +limits LimitsDTO { + description: OpenWhisk Action Limits + timeout string + Action timeout + memory string + Action memory limit + logs string + Action logs + } +exec ExecDTO { + description: OpenWhisk Action exec details + kind string + Action kind + binary boolean + default: false + Is action binary + components [ + Action components in case of sequence + string] + } +url string + Action url +}] +``` From a8d52182190dc75c664603495df17b3ac2495c56 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 14:47:56 -0700 Subject: [PATCH 043/116] update --- .../runtime_guides/reference_docs/api-ref.md | 206 ++++++++++++++++++ 1 file changed, 206 insertions(+) diff --git a/src/pages/guides/runtime_guides/reference_docs/api-ref.md b/src/pages/guides/runtime_guides/reference_docs/api-ref.md index 5f31068f9..a62ca59d1 100644 --- a/src/pages/guides/runtime_guides/reference_docs/api-ref.md +++ b/src/pages/guides/runtime_guides/reference_docs/api-ref.md @@ -586,3 +586,209 @@ url string Action url }] ``` + +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +| _default_ | Successful operation | + +### DELETE /runtime/namespaces/{orgId}/{intId}/actions/{name} + +Deletes an action. + +#### _Parameters:_ + +| Name | Description | +| ------------------------------------ | ----------------------------------------------- | +| `orgId` (`string`: _path_) | Organization ID | +| `intId` (`string`: _path_) | Integration ID | +| `name` (`string`: _path_) | Action name | +| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | +| `X-Api-Key` (`string`: _header_) | Api key | + +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +| _default_ | Successful operation | + +### GET /runtime/system/actions + +Returns a list of built-in actions. + +#### _Parameters:_ + +| Name | Description | +| ------------------------------------ | ----------------------------------------------- | +| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | +| `X-Api-Key` (`string`: _header_) | Api key | + +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +|200|Successful operationExample value:| +``` +[ + { + "name": "string", + "code": "string", + "namespace": "string", + "version": "string", + "params": [ + { + "key": "string", + "value": {} + } + ], + "annotations": [ + { + "key": "string", + "value": {} + } + ], + "limits": { + "timeout": "string", + "memory": "string", + "logs": "string" + }, + "exec": { + "kind": "string", + "binary": false, + "components": [ + "string" + ] + }, + "url": "string" + } +] +Model: +[ActionDTO { +description: OpenWhisk Action +name string + Action name +code string + Action code +namespace string + Action namespace +version string + Action version +params [Action params + KeyValuePairDTO { + description: OpenWhisk Action param + key string + Param Name + value { + description: Param value + } + }] +annotations [Action annotations + KeyValuePairDTO { + description: OpenWhisk Action param + key string + Param Name + value { + description: Param value + } + }] +limits LimitsDTO { + description: OpenWhisk Action Limits + timeout string + Action timeout + memory string + Action memory limit + logs string + Action logs + } +exec ExecDTO { + description: OpenWhisk Action exec details + kind string + Action kind + binary boolean + default: false + Is action binary + components [ + Action components in case of sequence + string] + } +url string + Action url +}] +``` +### POST /runtime/namespaces/{orgId}/{intId}/handleEventRegistration + +Registers an event registration and assigns a given action to the event. + +#### _Parameters:_ + +| Name | Description | +| ------------------------------- | --------------- | +| orgId (string: path) | Organization ID | +| intId (string: path) | Integration ID | +| body (body) | Example value: | +| { | | +| "id": "string", | | +| "name": "string", | | +| "description": "string", | | +| "client_id": "string", | | +| "type": "string", | | +| "integration_status": "string", | | +| "delivery_type": "string", | | +| "webhook_url": "string", | | +|Authorization (string: header)|Authorization token in format: Bearer {token}| +|X-Ams-Consumer-Id (string: header)|AMS consumer ID| +|X-Ams-Application-Id (string: header)|AMS application ID| +|X-Api-Key (string: header)|Api key| +| "events_of_interest": [ | | +``` + { + "event_code": "string", + "provider": "string" + } + + ], + "runtime_action": "string", + "registration_id": "string" +}Parameter content type: application/json +Model: +EventDTO { +description: Adobe I/O Event Details +id string + Event id +name string + Event name +description string + Event code +Client id string + Event namespace +type string + Event type +integration_status string + Event integration status +delivery_type string + Event delivery type +webhook_url string + Webhook url +events_of_interest [ + Events of interest to listen to + EventsOfInterestDTO{ + description: Events of interest + event_code string + Event code + provider string + Event provider + }] +runtime_action string + Action to handle event +registration_id string + Event registration id +} +``` + From 164cb68e6fb920c6c1a346ddac29cc03c3eb96cf Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 14:48:50 -0700 Subject: [PATCH 044/116] update --- .../runtime_guides/reference_docs/api-ref.md | 301 ++++++++++++++++++ 1 file changed, 301 insertions(+) diff --git a/src/pages/guides/runtime_guides/reference_docs/api-ref.md b/src/pages/guides/runtime_guides/reference_docs/api-ref.md index a62ca59d1..184a6614f 100644 --- a/src/pages/guides/runtime_guides/reference_docs/api-ref.md +++ b/src/pages/guides/runtime_guides/reference_docs/api-ref.md @@ -792,3 +792,304 @@ registration_id string } ``` +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +|200|Successful operation Example value:| +``` +{ + "id": "string", + "name": "string", + "description": "string", + "client_id": "string", + "type": "string", + "integration_status": "string", + "delivery_type": "string", + "webhook_url": "string", + "events_of_interest": [ + { + "event_code": "string", + "provider": "string" + } + ], + "runtime_action": "string", + "registration_id": "string" +} +Model: +EventDTO { +description: Adobe I/O Event Details +id string + Event id +name string + Event name +description string + Event code +Client id string + Event namespace +type string + Event type +integration_status string + Event integration status +delivery_type string + Event delivery type +webhook_url string + Webhook url +events_of_interest [ + Events of interest to listen to + EventsOfInterestDTO{ + description: Events of interest + event_code string + Event code + provider string + Event provider + }] +runtime_action string + Action to handle event +registration_id string + Event registration id +} +``` + +### DELETE /runtime/namespaces/{orgId}/{intId}/handleEventDeletion/{clientId}/{registrationId} + +Deletes an event registration. + +#### _Parameters:_ + +| Name | Description | +| ----------------------------------------- | ----------------------------------------------- | +| `orgId` (`string`: _path_) | Organization ID | +| `intId` (`string`: _path_) | Integration ID | +| `clientId ` (`string`: _path_) | IMS client ID | +| `registrationId` (`string`: _path_) | ID of registration | +| `X-Ams-Consumer-Id` (`string`: _path_) | AMS consumer ID | +| `X-Ams-Application-Id` (`string`: _path_) | AMS application ID | +| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | +| `X-Api-Key` (`string`: _header_) | Api key | + +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +| _default_ | Successful operation | + +### PUT /runtime/namespaces/{orgId}/{intId}/handleEventUpdate/{clientId}/{registrationId} + +Updates an event registration. + +#### _Parameters:_ + +| Name | Description | +| ------------------------------------- | ------------------ | +| orgId (string: path) | Organization ID | +| intId (string: path) | Integration ID | +| clientId (string: path) | IMS client ID | +| registrationId (string: path) | Registration ID | +| X-Ams-Consumer-Id (string: header) | AMS consumer ID | +| X-Ams-Application-Id (string: header) | AMS application ID | +| body (body) | Example value: | +| { | | +| "id": "string", | | +| "name": "string", | | +| "description": "string", | | +| "client_id": "string", | | +| "type": "string", | | +| "integration_status": "string", | | +| "delivery_type": "string", | | +| "webhook_url": "string", | | +|Authorization (string: header)|Authorization token in format: Bearer {token}| +|X-Api-Key (string: header)|Api key| +``` +"events_of_interest": [ + { + "event_code": "string", + "provider": "string" + } + + ], + "runtime_action": "string", + "registration_id": "string" +}Parameter content type: application/json +Model: +EventDTO { +description: Adobe I/O Event Details +id string + Event id +name string + Event name +description string + Event code +Client id string + Event namespace +type string + Event type +integration_status string + Event integration status +delivery_type string + Event delivery type +webhook_url string + Webhook url +events_of_interest [ + Events of interest to listen to + EventsOfInterestDTO{ + description: Events of interest + event_code string + Event code + provider string + Event provider + }] +runtime_action string + Action to handle event +registration_id string + Event registration id +} +``` + +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +|200|Successful operation Example value:| +``` +{ + "id": "string", + "name": "string", + "description": "string", + "client_id": "string", + "type": "string", + "integration_status": "string", + "delivery_type": "string", + "webhook_url": "string", + "events_of_interest": [ + { + "event_code": "string", + "provider": "string" + } + ], + "runtime_action": "string", + "registration_id": "string" +} +Model: +EventDTO { +description: Adobe I/O Event Details +id string + Event id +name string + Event name +description string + Event code +Client id string + Event namespace +type string + Event type +integration_status string + Event integration status +delivery_type string + Event delivery type +webhook_url string + Webhook url +events_of_interest [ + Events of interest to listen to + EventsOfInterestDTO{ + description: Events of interest + event_code string + Event code + provider string + Event provider + }] +runtime_action string + Action to handle event +registration_id string + Event registration id +} +``` +### POST /runtime/namespaces/{orgId}/{intId}/handleEventStatus/{clientId}/{registrationId}/{status} + +Updates the status of an event registration. + +#### _Parameters:_ + +| Name | Description | +| ----------------------------------------- | ----------------------------------------------- | +| `orgId` (`string`: _path_) | Organization ID | +| `intId` (`string`: _path_) | Integration ID | +| `clientId ` (`string`: _path_) | IMS client ID | +| `registrationId` (`string`: _path_) | ID of registration | +| `status` (`string`: _path_) | Status of the registration | +| `X-Ams-Consumer-Id` (`string`: _path_) | AMS consumer ID | +| `X-Ams-Application-Id` (`string`: _path_) | AMS application ID | +| `Authorization` (`string`: _header_) | Authorization token in format: `Bearer {token}` | +| `X-Api-Key` (`string`: _header_) | Api key | + +#### _Responses:_ + +Response content type: `application/json` + +| Code | Description | +| --- | ---------------------------------- | +|200|Successful operation Example value:| +``` +{ + "id": "string", + "name": "string", + "description": "string", + "client_id": "string", + "type": "string", + "integration_status": "string", + "delivery_type": "string", + "webhook_url": "string", + "events_of_interest": [ + { + "event_code": "string", + "provider": "string" + } + ], + "runtime_action": "string", + "registration_id": "string" +} +Model: +EventDTO { +description: Adobe I/O Event Details +id string + Event id +name string + Event name +description string + Event code +Client id string + Event namespace +type string + Event type +integration_status string + Event integration status +delivery_type string + Event delivery type +webhook_url string + Webhook url +events_of_interest [ + Events of interest to listen to + EventsOfInterestDTO{ + description: Events of interest + event_code string + Event code + provider string + Event provider + }] +runtime_action string + Action to handle event +registration_id string + Event registration id +} +``` +## Next steps + +Return to the [Runtime Reference Documentation Index](index.md). + +Return to the [Guides Index](../../index.md). From 15de06ed2cbf0448a43274ddc2db5d63f8d58e65 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 14:54:00 -0700 Subject: [PATCH 045/116] update throughput-tuning --- .../runtime_guides/throughput-tuning.md | 34 ------------------- 1 file changed, 34 deletions(-) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index 4599d4597..51b54e527 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -54,37 +54,3 @@ One way to verify whether a response is returned from the cache or not is to che ``` X-GW-Cache: HIT ``` - - - -Encoded responses can't be cached, so the `Content-Encoding` response header must be empty to cache responses. - -### Vary header - -The caching layer supports the use of [Vary header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Vary) to cache based on header fields as well as on URL and query parameters. - -This action responds to certain header fields while doing a complex calculation: - -``` -curl -H "storeId: 1234" https://runtime-namespace-1. -adobeioruntime.net/api/v1/web/store?query={products -(pageSize: 10,filter:{ id:{ eq:"abcedefg"}}){items{name}}}` -``` - -It could produce this response: - -``` -HTTP/1.1 200 OK -Content-Type: application/json -Vary: storeId -Cache-Control: max-age=120 -X-GW-Cache: MISS - -{"someBigData" : ["array"]} -``` - -This response would add the `storeId` to the cache key, so that subsequent requests with the same `storeId` in their headers would create a `HIT`, up to the limits imposed by the cache control header settings. Any time the value varied, it would be a `MISS`, and would be stored under a new key with new cache control directives. - -## Next step - -Return to [Guides Index](../index.md). From b4c7a7ee0d5468a333d91f308cab04f716a0ac2a Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 14:57:34 -0700 Subject: [PATCH 046/116] update throughput --- .../runtime_guides/throughput-tuning.md | 51 ------------------- 1 file changed, 51 deletions(-) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index 51b54e527..20953fedd 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -3,54 +3,3 @@ ## Containers ### Setting concurrency - -The main instrument for tuning how rapidly actions can be executed is the value you set for `action/container concurrency`. This is not related to the concurrent value per namespace or minuteRate value, although these two enforce an upper limit on actions executed per minute in your namespace. - -The default `action/container concurrency` value is `200` invocations of an action in the same container. If, for example, you plan to execute a `HelloWorld` action 100 times, either simultaneously or within minutes, the default value (`200`) means that the system will use one container rather than as many as 100. - -This helps avoid cold-start issues. When the system has no containers left, it creates new ones - "cold starts" that add a lot of latency to your application. - -You can set `action/container concurrency` to any value between `1` and `500`. Here, the limit is set to `100`: - -``` -aio rt:action:create actionName fileName.js -c 100 -``` - -### Concurrency considerations - -1. Containers are kept warm after for 5 minutes after an invocation finishes. For those 5 minutes, it is highly unlikely (p<.01) that invoking the same action will require a cold start. -2. Experiment with the value you set for concurrency limits. The default, `200`, is a good place to start, but a smaller or a larger value may be better depending on how much memory and other resources your action consumes. -3. Be sure your code is designed to work when executed in parallel. For example, avoid using global variables to store values that may differ between invocations. -4. If an action works on a large data set that is not different from one invocation to another, a global variable can maximize the chances that the next execution can use it. But your code should handle the condition in which the variable is not initialized. -5. It is not guaranteed that all invocations will use the same container. In case of errors, for example, the existing container is destroyed and a new one created. -6. If your action code consumes a large amount of memory, you may need to set concurrency to a lower value to avoid exceeding the container's memory limit. - -### Using pre-warmed containers - -A second way avoid cold-starts and minimize latency is to create actions that use the default Node version, and a memory settings of `256MB`, `512MB`, or `1024MB`. - -The system has a pool of "pre-warmed" containers it will use for any incoming call that can't be sent to a running container - so long as the action matches the pre-warmed container's Node version and memory setting. If it does, time will still be spent for injecting your action code, but not for creating a container first. If it doesn't, your action will wait while the system creates a new container. - -## Caching responses - -In addition to optimizing the use of containers, caching action responses helps improve throughput. For the time a cache is valid, invocations of the action will not increase the `minuteRate` counter or concurrent action invocations per namespace. This is because the action is not actually executed: the system serves the result from the cache. - -Use the Cache-Control directive to configure the cache. Here is an example of an action that sets the cache with a Time to Live of `30 minutes`. In the response object you'll find an entry with `X-Cache: HIT` or `X-Cache: MISS`, depending on whether the answer was returned from the cache or not. - -``` -function main(args) { - return { - body: "OK", - statusCode: 200, - headers: { - "Cache-Control": "max-age=1800" - } - } -} -``` - -One way to verify whether a response is returned from the cache or not is to check for this header: - -``` -X-GW-Cache: HIT -``` From 8679af8ced769fe76e8e7d8a112ba32b7b612d3e Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 16:53:10 -0700 Subject: [PATCH 047/116] update throughput --- .../guides/runtime_guides/throughput-tuning.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index 20953fedd..e4c8f4a6e 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -3,3 +3,16 @@ ## Containers ### Setting concurrency + +The main instrument for tuning how rapidly actions can be executed is the value you set for `action/container concurrency`. This is not related to the concurrent value per namespace or minuteRate value, although these two enforce an upper limit on actions executed per minute in your namespace. + +The default `action/container concurrency` value is `200` invocations of an action in the same container. If, for example, you plan to execute a `HelloWorld` action 100 times, either simultaneously or within minutes, the default value (`200`) means that the system will use one container rather than as many as 100. + +This helps avoid cold-start issues. When the system has no containers left, it creates new ones - "cold starts" that add a lot of latency to your application. + +You can set `action/container concurrency` to any value between `1` and `500`. Here, the limit is set to `100`: + +``` +aio rt:action:create actionName fileName.js -c 100 +``` + From 59263abca744c6c0f3acdfe274aa783702ffb9f4 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 16:54:57 -0700 Subject: [PATCH 048/116] update config.md --- src/pages/config.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/config.md b/src/pages/config.md index 2d8fada4d..adfbe171f 100644 --- a/src/pages/config.md +++ b/src/pages/config.md @@ -53,8 +53,8 @@ - [Setting Response Headers](guides/app_builder_guides/deployment/setting-response-headers.md) - [Development](guides/app_builder_guides/development.md) - [Distribution](guides/app_builder_guides/distribution.md) - - [Events](https://www.adobe.io/apis/experienceplatform/events/docs.html#!adobedocs/adobeio-events/master/using/custom_events.md) - - [Webhooks](https://www.adobe.io/apis/experienceplatform/events/docs.html#!adobedocs/adobeio-events/master/intro/webhooks_intro.md) + - [Events](https://developer.adobe.com/events/docs/guides/using/custom_events/) + - [Webhooks](https://developer.adobe.com/events/docs/guides/) - [Exc App](guides/app_builder_guides/exc_app/aec-integration.md) - [Interfaces](guides/app_builder_guides/exc_app/interfaces/) - [Modules](guides/app_builder_guides/exc_app/interfaces/modules.md) From c4dc5bca668f9f6cd3b9980451096783b010a48d Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 17:01:57 -0700 Subject: [PATCH 049/116] update --- .../runtime_guides/throughput-tuning.md | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index e4c8f4a6e..51b54e527 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -16,3 +16,41 @@ You can set `action/container concurrency` to any value between `1` and `500`. H aio rt:action:create actionName fileName.js -c 100 ``` +### Concurrency considerations + +1. Containers are kept warm after for 5 minutes after an invocation finishes. For those 5 minutes, it is highly unlikely (p<.01) that invoking the same action will require a cold start. +2. Experiment with the value you set for concurrency limits. The default, `200`, is a good place to start, but a smaller or a larger value may be better depending on how much memory and other resources your action consumes. +3. Be sure your code is designed to work when executed in parallel. For example, avoid using global variables to store values that may differ between invocations. +4. If an action works on a large data set that is not different from one invocation to another, a global variable can maximize the chances that the next execution can use it. But your code should handle the condition in which the variable is not initialized. +5. It is not guaranteed that all invocations will use the same container. In case of errors, for example, the existing container is destroyed and a new one created. +6. If your action code consumes a large amount of memory, you may need to set concurrency to a lower value to avoid exceeding the container's memory limit. + +### Using pre-warmed containers + +A second way avoid cold-starts and minimize latency is to create actions that use the default Node version, and a memory settings of `256MB`, `512MB`, or `1024MB`. + +The system has a pool of "pre-warmed" containers it will use for any incoming call that can't be sent to a running container - so long as the action matches the pre-warmed container's Node version and memory setting. If it does, time will still be spent for injecting your action code, but not for creating a container first. If it doesn't, your action will wait while the system creates a new container. + +## Caching responses + +In addition to optimizing the use of containers, caching action responses helps improve throughput. For the time a cache is valid, invocations of the action will not increase the `minuteRate` counter or concurrent action invocations per namespace. This is because the action is not actually executed: the system serves the result from the cache. + +Use the Cache-Control directive to configure the cache. Here is an example of an action that sets the cache with a Time to Live of `30 minutes`. In the response object you'll find an entry with `X-Cache: HIT` or `X-Cache: MISS`, depending on whether the answer was returned from the cache or not. + +``` +function main(args) { + return { + body: "OK", + statusCode: 200, + headers: { + "Cache-Control": "max-age=1800" + } + } +} +``` + +One way to verify whether a response is returned from the cache or not is to check for this header: + +``` +X-GW-Cache: HIT +``` From a850b07542f04ae4bc46edf2871843c8797604c6 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 17:09:18 -0700 Subject: [PATCH 050/116] update --- .../runtime_guides/throughput-tuning.md | 29 ------------------- 1 file changed, 29 deletions(-) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index 51b54e527..1e79b8d1e 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -25,32 +25,3 @@ aio rt:action:create actionName fileName.js -c 100 5. It is not guaranteed that all invocations will use the same container. In case of errors, for example, the existing container is destroyed and a new one created. 6. If your action code consumes a large amount of memory, you may need to set concurrency to a lower value to avoid exceeding the container's memory limit. -### Using pre-warmed containers - -A second way avoid cold-starts and minimize latency is to create actions that use the default Node version, and a memory settings of `256MB`, `512MB`, or `1024MB`. - -The system has a pool of "pre-warmed" containers it will use for any incoming call that can't be sent to a running container - so long as the action matches the pre-warmed container's Node version and memory setting. If it does, time will still be spent for injecting your action code, but not for creating a container first. If it doesn't, your action will wait while the system creates a new container. - -## Caching responses - -In addition to optimizing the use of containers, caching action responses helps improve throughput. For the time a cache is valid, invocations of the action will not increase the `minuteRate` counter or concurrent action invocations per namespace. This is because the action is not actually executed: the system serves the result from the cache. - -Use the Cache-Control directive to configure the cache. Here is an example of an action that sets the cache with a Time to Live of `30 minutes`. In the response object you'll find an entry with `X-Cache: HIT` or `X-Cache: MISS`, depending on whether the answer was returned from the cache or not. - -``` -function main(args) { - return { - body: "OK", - statusCode: 200, - headers: { - "Cache-Control": "max-age=1800" - } - } -} -``` - -One way to verify whether a response is returned from the cache or not is to check for this header: - -``` -X-GW-Cache: HIT -``` From d453cd19ae671bb0d1161a2511331170815a657f Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 17:10:20 -0700 Subject: [PATCH 051/116] update --- src/pages/guides/runtime_guides/throughput-tuning.md | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index 1e79b8d1e..a852aa430 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -15,13 +15,3 @@ You can set `action/container concurrency` to any value between `1` and `500`. H ``` aio rt:action:create actionName fileName.js -c 100 ``` - -### Concurrency considerations - -1. Containers are kept warm after for 5 minutes after an invocation finishes. For those 5 minutes, it is highly unlikely (p<.01) that invoking the same action will require a cold start. -2. Experiment with the value you set for concurrency limits. The default, `200`, is a good place to start, but a smaller or a larger value may be better depending on how much memory and other resources your action consumes. -3. Be sure your code is designed to work when executed in parallel. For example, avoid using global variables to store values that may differ between invocations. -4. If an action works on a large data set that is not different from one invocation to another, a global variable can maximize the chances that the next execution can use it. But your code should handle the condition in which the variable is not initialized. -5. It is not guaranteed that all invocations will use the same container. In case of errors, for example, the existing container is destroyed and a new one created. -6. If your action code consumes a large amount of memory, you may need to set concurrency to a lower value to avoid exceeding the container's memory limit. - From 64a978b1bcdfb8822f974d1e465a8efd57c2276a Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 17:10:50 -0700 Subject: [PATCH 052/116] update --- .../runtime_guides/throughput-tuning.md | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index a852aa430..51b54e527 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -15,3 +15,42 @@ You can set `action/container concurrency` to any value between `1` and `500`. H ``` aio rt:action:create actionName fileName.js -c 100 ``` + +### Concurrency considerations + +1. Containers are kept warm after for 5 minutes after an invocation finishes. For those 5 minutes, it is highly unlikely (p<.01) that invoking the same action will require a cold start. +2. Experiment with the value you set for concurrency limits. The default, `200`, is a good place to start, but a smaller or a larger value may be better depending on how much memory and other resources your action consumes. +3. Be sure your code is designed to work when executed in parallel. For example, avoid using global variables to store values that may differ between invocations. +4. If an action works on a large data set that is not different from one invocation to another, a global variable can maximize the chances that the next execution can use it. But your code should handle the condition in which the variable is not initialized. +5. It is not guaranteed that all invocations will use the same container. In case of errors, for example, the existing container is destroyed and a new one created. +6. If your action code consumes a large amount of memory, you may need to set concurrency to a lower value to avoid exceeding the container's memory limit. + +### Using pre-warmed containers + +A second way avoid cold-starts and minimize latency is to create actions that use the default Node version, and a memory settings of `256MB`, `512MB`, or `1024MB`. + +The system has a pool of "pre-warmed" containers it will use for any incoming call that can't be sent to a running container - so long as the action matches the pre-warmed container's Node version and memory setting. If it does, time will still be spent for injecting your action code, but not for creating a container first. If it doesn't, your action will wait while the system creates a new container. + +## Caching responses + +In addition to optimizing the use of containers, caching action responses helps improve throughput. For the time a cache is valid, invocations of the action will not increase the `minuteRate` counter or concurrent action invocations per namespace. This is because the action is not actually executed: the system serves the result from the cache. + +Use the Cache-Control directive to configure the cache. Here is an example of an action that sets the cache with a Time to Live of `30 minutes`. In the response object you'll find an entry with `X-Cache: HIT` or `X-Cache: MISS`, depending on whether the answer was returned from the cache or not. + +``` +function main(args) { + return { + body: "OK", + statusCode: 200, + headers: { + "Cache-Control": "max-age=1800" + } + } +} +``` + +One way to verify whether a response is returned from the cache or not is to check for this header: + +``` +X-GW-Cache: HIT +``` From e464b3e8bb853c8ac255231f24f608e4d86d7951 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 17:21:51 -0700 Subject: [PATCH 053/116] update api-ref.md --- .../runtime_guides/reference_docs/api-ref.md | 149 ++++++++++-------- 1 file changed, 79 insertions(+), 70 deletions(-) diff --git a/src/pages/guides/runtime_guides/reference_docs/api-ref.md b/src/pages/guides/runtime_guides/reference_docs/api-ref.md index 184a6614f..d10a60513 100644 --- a/src/pages/guides/runtime_guides/reference_docs/api-ref.md +++ b/src/pages/guides/runtime_guides/reference_docs/api-ref.md @@ -120,6 +120,7 @@ Response content type: `application/json` | Code | Description | | --- | ---------------------------------- | |200|Successful operation Example value:| + ``` [ { @@ -213,20 +214,21 @@ Creates a new action. #### _Parameters:_ -| Name | Description | -| ---------------------- | ---------------------------- | -| orgId (string: path) | Organization ID | -| intId (string: path) | Integration ID | -| body (body) | Action form. Example value: | -| { | | -| "name": "string", | | -| "code": "string", | | -| "namespace": "string", | | -| "version": "string", | | -|Authorization (string: header)|Authorization token in format: Bearer {token}| -|X-Api-Key (string: header)|Api key| +| Name | Description | +|--------------------------------|-----------------------------------------------| +| orgId (string: path) | Organization ID | +| intId (string: path) | Integration ID | +| Authorization (string: header) | Authorization token in format: Bearer {token} | +| X-Api-Key (string: header) | Api key | +| body (body) | Action form. Example value: | + ``` - "params": [ +{ + "name": "string", + "code": "string", + "namespace": "string", + "version": "string", + "params": [ { "key": "string", "value": {} @@ -336,6 +338,7 @@ Response content type: `application/json` | Code | Description | | --- | ---------------------------------- | |200|Successful operation Example value:| + ``` { "name": "string", @@ -492,22 +495,24 @@ Updates an action. #### _Parameters:_ -| Name | Description | -| ---------------------- | ---------------------------- | -| orgId (string: path) | Organization ID | -| intId (string: path) | Integration ID | -| name (string: path) | Action name | -| body (body) | Action form. Example value: | -| { | | -| "name": "string", | | -| "code": "string", | | -| "namespace": "string", | | -| "version": "string", | | -|Authorization (string: header)|Authorization token in format: Bearer {token}| -|X-Api-Key (string: header)|Api key| +| Name | Description | +|-------------------------------|-----------------------------------------------| +| orgId (string: path) | Organization ID | +| intId (string: path) | Integration ID | +| name (string: path) | Action name | +| Authorization (string: header) | Authorization token in format: Bearer {token} | +| X-Api-Key (string: header) | Api key | +| body (body) | Action form. Example value: | + + ``` -"params": [ { + "name": "string", + "code": "string", + "namespace": "string", + "version": "string", + "params": [ + { "key": "string", "value": {} } @@ -632,9 +637,10 @@ Returns a list of built-in actions. Response content type: `application/json` -| Code | Description | -| --- | ---------------------------------- | -|200|Successful operationExample value:| +| Code | Description | +| --- |-------------------------------------| +|200| Successful operationExample value: | + ``` [ { @@ -728,26 +734,27 @@ Registers an event registration and assigns a given action to the event. #### _Parameters:_ -| Name | Description | -| ------------------------------- | --------------- | -| orgId (string: path) | Organization ID | -| intId (string: path) | Integration ID | -| body (body) | Example value: | -| { | | -| "id": "string", | | -| "name": "string", | | -| "description": "string", | | -| "client_id": "string", | | -| "type": "string", | | -| "integration_status": "string", | | -| "delivery_type": "string", | | -| "webhook_url": "string", | | -|Authorization (string: header)|Authorization token in format: Bearer {token}| -|X-Ams-Consumer-Id (string: header)|AMS consumer ID| -|X-Ams-Application-Id (string: header)|AMS application ID| -|X-Api-Key (string: header)|Api key| -| "events_of_interest": [ | | +| Name | Description | +|---------------------------------------|-----------------------------------------------| +| orgId (string: path) | Organization ID | +| intId (string: path) | Integration ID | +| Authorization (string: header) | Authorization token in format: Bearer {token} | +| X-Ams-Consumer-Id (string: header) | AMS consumer ID | +| X-Ams-Application-Id (string: header) | AMS application ID | +| X-Api-Key (string: header) | Api key | +| body (body) | Example value: | + ``` +{ + "id": "string", + "name": "string", + "description": "string", + "client_id": "string", + "type": "string", + "integration_status": "string", + "delivery_type": "string", + "webhook_url": "string", + "events_of_interest": [ { "event_code": "string", "provider": "string" @@ -799,6 +806,7 @@ Response content type: `application/json` | Code | Description | | --- | ---------------------------------- | |200|Successful operation Example value:| + ``` { "id": "string", @@ -884,28 +892,29 @@ Updates an event registration. #### _Parameters:_ -| Name | Description | -| ------------------------------------- | ------------------ | -| orgId (string: path) | Organization ID | -| intId (string: path) | Integration ID | -| clientId (string: path) | IMS client ID | -| registrationId (string: path) | Registration ID | -| X-Ams-Consumer-Id (string: header) | AMS consumer ID | -| X-Ams-Application-Id (string: header) | AMS application ID | -| body (body) | Example value: | -| { | | -| "id": "string", | | -| "name": "string", | | -| "description": "string", | | -| "client_id": "string", | | -| "type": "string", | | -| "integration_status": "string", | | -| "delivery_type": "string", | | -| "webhook_url": "string", | | -|Authorization (string: header)|Authorization token in format: Bearer {token}| -|X-Api-Key (string: header)|Api key| +| Name | Description | +|---------------------------------------|-----------------------------------------------| +| orgId (string: path) | Organization ID | +| intId (string: path) | Integration ID | +| clientId (string: path) | IMS client ID | +| registrationId (string: path) | Registration ID | +| X-Ams-Consumer-Id (string: header) | AMS consumer ID | +| X-Ams-Application-Id (string: header) | AMS application ID | +| Authorization (string: header) | Authorization token in format: Bearer {token} | +| X-Api-Key (string: header) | Api key | +| body (body) | Example value: | + ``` -"events_of_interest": [ +{ + "id": "string", + "name": "string", + "description": "string", + "client_id": "string", + "type": "string", + "integration_status": "string", + "delivery_type": "string", + "webhook_url": "string", + "events_of_interest": [ { "event_code": "string", "provider": "string" From fc273a6488ee01c4679cd1a5f66f8d03faffd454 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 17:24:58 -0700 Subject: [PATCH 054/116] update --- .../runtime_guides/throughput-tuning.md | 50 ------------------- 1 file changed, 50 deletions(-) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index 51b54e527..460f29de7 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -4,53 +4,3 @@ ### Setting concurrency -The main instrument for tuning how rapidly actions can be executed is the value you set for `action/container concurrency`. This is not related to the concurrent value per namespace or minuteRate value, although these two enforce an upper limit on actions executed per minute in your namespace. - -The default `action/container concurrency` value is `200` invocations of an action in the same container. If, for example, you plan to execute a `HelloWorld` action 100 times, either simultaneously or within minutes, the default value (`200`) means that the system will use one container rather than as many as 100. - -This helps avoid cold-start issues. When the system has no containers left, it creates new ones - "cold starts" that add a lot of latency to your application. - -You can set `action/container concurrency` to any value between `1` and `500`. Here, the limit is set to `100`: - -``` -aio rt:action:create actionName fileName.js -c 100 -``` - -### Concurrency considerations - -1. Containers are kept warm after for 5 minutes after an invocation finishes. For those 5 minutes, it is highly unlikely (p<.01) that invoking the same action will require a cold start. -2. Experiment with the value you set for concurrency limits. The default, `200`, is a good place to start, but a smaller or a larger value may be better depending on how much memory and other resources your action consumes. -3. Be sure your code is designed to work when executed in parallel. For example, avoid using global variables to store values that may differ between invocations. -4. If an action works on a large data set that is not different from one invocation to another, a global variable can maximize the chances that the next execution can use it. But your code should handle the condition in which the variable is not initialized. -5. It is not guaranteed that all invocations will use the same container. In case of errors, for example, the existing container is destroyed and a new one created. -6. If your action code consumes a large amount of memory, you may need to set concurrency to a lower value to avoid exceeding the container's memory limit. - -### Using pre-warmed containers - -A second way avoid cold-starts and minimize latency is to create actions that use the default Node version, and a memory settings of `256MB`, `512MB`, or `1024MB`. - -The system has a pool of "pre-warmed" containers it will use for any incoming call that can't be sent to a running container - so long as the action matches the pre-warmed container's Node version and memory setting. If it does, time will still be spent for injecting your action code, but not for creating a container first. If it doesn't, your action will wait while the system creates a new container. - -## Caching responses - -In addition to optimizing the use of containers, caching action responses helps improve throughput. For the time a cache is valid, invocations of the action will not increase the `minuteRate` counter or concurrent action invocations per namespace. This is because the action is not actually executed: the system serves the result from the cache. - -Use the Cache-Control directive to configure the cache. Here is an example of an action that sets the cache with a Time to Live of `30 minutes`. In the response object you'll find an entry with `X-Cache: HIT` or `X-Cache: MISS`, depending on whether the answer was returned from the cache or not. - -``` -function main(args) { - return { - body: "OK", - statusCode: 200, - headers: { - "Cache-Control": "max-age=1800" - } - } -} -``` - -One way to verify whether a response is returned from the cache or not is to check for this header: - -``` -X-GW-Cache: HIT -``` From ea91d809c78857b6c96903541463e16e4040ec4c Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 13 May 2025 17:29:46 -0700 Subject: [PATCH 055/116] update --- .../runtime_guides/throughput-tuning.md | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index 460f29de7..51b54e527 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -4,3 +4,53 @@ ### Setting concurrency +The main instrument for tuning how rapidly actions can be executed is the value you set for `action/container concurrency`. This is not related to the concurrent value per namespace or minuteRate value, although these two enforce an upper limit on actions executed per minute in your namespace. + +The default `action/container concurrency` value is `200` invocations of an action in the same container. If, for example, you plan to execute a `HelloWorld` action 100 times, either simultaneously or within minutes, the default value (`200`) means that the system will use one container rather than as many as 100. + +This helps avoid cold-start issues. When the system has no containers left, it creates new ones - "cold starts" that add a lot of latency to your application. + +You can set `action/container concurrency` to any value between `1` and `500`. Here, the limit is set to `100`: + +``` +aio rt:action:create actionName fileName.js -c 100 +``` + +### Concurrency considerations + +1. Containers are kept warm after for 5 minutes after an invocation finishes. For those 5 minutes, it is highly unlikely (p<.01) that invoking the same action will require a cold start. +2. Experiment with the value you set for concurrency limits. The default, `200`, is a good place to start, but a smaller or a larger value may be better depending on how much memory and other resources your action consumes. +3. Be sure your code is designed to work when executed in parallel. For example, avoid using global variables to store values that may differ between invocations. +4. If an action works on a large data set that is not different from one invocation to another, a global variable can maximize the chances that the next execution can use it. But your code should handle the condition in which the variable is not initialized. +5. It is not guaranteed that all invocations will use the same container. In case of errors, for example, the existing container is destroyed and a new one created. +6. If your action code consumes a large amount of memory, you may need to set concurrency to a lower value to avoid exceeding the container's memory limit. + +### Using pre-warmed containers + +A second way avoid cold-starts and minimize latency is to create actions that use the default Node version, and a memory settings of `256MB`, `512MB`, or `1024MB`. + +The system has a pool of "pre-warmed" containers it will use for any incoming call that can't be sent to a running container - so long as the action matches the pre-warmed container's Node version and memory setting. If it does, time will still be spent for injecting your action code, but not for creating a container first. If it doesn't, your action will wait while the system creates a new container. + +## Caching responses + +In addition to optimizing the use of containers, caching action responses helps improve throughput. For the time a cache is valid, invocations of the action will not increase the `minuteRate` counter or concurrent action invocations per namespace. This is because the action is not actually executed: the system serves the result from the cache. + +Use the Cache-Control directive to configure the cache. Here is an example of an action that sets the cache with a Time to Live of `30 minutes`. In the response object you'll find an entry with `X-Cache: HIT` or `X-Cache: MISS`, depending on whether the answer was returned from the cache or not. + +``` +function main(args) { + return { + body: "OK", + statusCode: 200, + headers: { + "Cache-Control": "max-age=1800" + } + } +} +``` + +One way to verify whether a response is returned from the cache or not is to check for this header: + +``` +X-GW-Cache: HIT +``` From d6bfcde98e613be9ece319335a273a7361bec824 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 14 May 2025 10:28:27 -0700 Subject: [PATCH 056/116] update throughput-tuning --- .../runtime_guides/throughput-tuning.md | 30 ------------------- 1 file changed, 30 deletions(-) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index 51b54e527..7da733990 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -24,33 +24,3 @@ aio rt:action:create actionName fileName.js -c 100 4. If an action works on a large data set that is not different from one invocation to another, a global variable can maximize the chances that the next execution can use it. But your code should handle the condition in which the variable is not initialized. 5. It is not guaranteed that all invocations will use the same container. In case of errors, for example, the existing container is destroyed and a new one created. 6. If your action code consumes a large amount of memory, you may need to set concurrency to a lower value to avoid exceeding the container's memory limit. - -### Using pre-warmed containers - -A second way avoid cold-starts and minimize latency is to create actions that use the default Node version, and a memory settings of `256MB`, `512MB`, or `1024MB`. - -The system has a pool of "pre-warmed" containers it will use for any incoming call that can't be sent to a running container - so long as the action matches the pre-warmed container's Node version and memory setting. If it does, time will still be spent for injecting your action code, but not for creating a container first. If it doesn't, your action will wait while the system creates a new container. - -## Caching responses - -In addition to optimizing the use of containers, caching action responses helps improve throughput. For the time a cache is valid, invocations of the action will not increase the `minuteRate` counter or concurrent action invocations per namespace. This is because the action is not actually executed: the system serves the result from the cache. - -Use the Cache-Control directive to configure the cache. Here is an example of an action that sets the cache with a Time to Live of `30 minutes`. In the response object you'll find an entry with `X-Cache: HIT` or `X-Cache: MISS`, depending on whether the answer was returned from the cache or not. - -``` -function main(args) { - return { - body: "OK", - statusCode: 200, - headers: { - "Cache-Control": "max-age=1800" - } - } -} -``` - -One way to verify whether a response is returned from the cache or not is to check for this header: - -``` -X-GW-Cache: HIT -``` From 97f0bf2085475d19e2111c3f3994bbd29acb4799 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 14 May 2025 10:28:53 -0700 Subject: [PATCH 057/116] update throughput --- src/pages/guides/runtime_guides/throughput-tuning.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index 7da733990..a852aa430 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -15,12 +15,3 @@ You can set `action/container concurrency` to any value between `1` and `500`. H ``` aio rt:action:create actionName fileName.js -c 100 ``` - -### Concurrency considerations - -1. Containers are kept warm after for 5 minutes after an invocation finishes. For those 5 minutes, it is highly unlikely (p<.01) that invoking the same action will require a cold start. -2. Experiment with the value you set for concurrency limits. The default, `200`, is a good place to start, but a smaller or a larger value may be better depending on how much memory and other resources your action consumes. -3. Be sure your code is designed to work when executed in parallel. For example, avoid using global variables to store values that may differ between invocations. -4. If an action works on a large data set that is not different from one invocation to another, a global variable can maximize the chances that the next execution can use it. But your code should handle the condition in which the variable is not initialized. -5. It is not guaranteed that all invocations will use the same container. In case of errors, for example, the existing container is destroyed and a new one created. -6. If your action code consumes a large amount of memory, you may need to set concurrency to a lower value to avoid exceeding the container's memory limit. From 92b792154d6b2a22665d6100794900397244efe6 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 14 May 2025 10:30:25 -0700 Subject: [PATCH 058/116] update --- src/pages/guides/runtime_guides/throughput-tuning.md | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index a852aa430..460f29de7 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -4,14 +4,3 @@ ### Setting concurrency -The main instrument for tuning how rapidly actions can be executed is the value you set for `action/container concurrency`. This is not related to the concurrent value per namespace or minuteRate value, although these two enforce an upper limit on actions executed per minute in your namespace. - -The default `action/container concurrency` value is `200` invocations of an action in the same container. If, for example, you plan to execute a `HelloWorld` action 100 times, either simultaneously or within minutes, the default value (`200`) means that the system will use one container rather than as many as 100. - -This helps avoid cold-start issues. When the system has no containers left, it creates new ones - "cold starts" that add a lot of latency to your application. - -You can set `action/container concurrency` to any value between `1` and `500`. Here, the limit is set to `100`: - -``` -aio rt:action:create actionName fileName.js -c 100 -``` From 4ac422e62bd9104eaf43d61e41227992ad28f87e Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 14 May 2025 10:32:07 -0700 Subject: [PATCH 059/116] update --- src/pages/guides/runtime_guides/throughput-tuning.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index 460f29de7..ae391724a 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -1,6 +1 @@ # Throughput Tuning - -## Containers - -### Setting concurrency - From 8194fab593ec20c5fe199db4e0eb265ed0082c89 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 14 May 2025 11:02:39 -0700 Subject: [PATCH 060/116] update throughput-tuning --- .../runtime_guides/throughput-tuning.md | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index ae391724a..7da733990 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -1 +1,26 @@ # Throughput Tuning + +## Containers + +### Setting concurrency + +The main instrument for tuning how rapidly actions can be executed is the value you set for `action/container concurrency`. This is not related to the concurrent value per namespace or minuteRate value, although these two enforce an upper limit on actions executed per minute in your namespace. + +The default `action/container concurrency` value is `200` invocations of an action in the same container. If, for example, you plan to execute a `HelloWorld` action 100 times, either simultaneously or within minutes, the default value (`200`) means that the system will use one container rather than as many as 100. + +This helps avoid cold-start issues. When the system has no containers left, it creates new ones - "cold starts" that add a lot of latency to your application. + +You can set `action/container concurrency` to any value between `1` and `500`. Here, the limit is set to `100`: + +``` +aio rt:action:create actionName fileName.js -c 100 +``` + +### Concurrency considerations + +1. Containers are kept warm after for 5 minutes after an invocation finishes. For those 5 minutes, it is highly unlikely (p<.01) that invoking the same action will require a cold start. +2. Experiment with the value you set for concurrency limits. The default, `200`, is a good place to start, but a smaller or a larger value may be better depending on how much memory and other resources your action consumes. +3. Be sure your code is designed to work when executed in parallel. For example, avoid using global variables to store values that may differ between invocations. +4. If an action works on a large data set that is not different from one invocation to another, a global variable can maximize the chances that the next execution can use it. But your code should handle the condition in which the variable is not initialized. +5. It is not guaranteed that all invocations will use the same container. In case of errors, for example, the existing container is destroyed and a new one created. +6. If your action code consumes a large amount of memory, you may need to set concurrency to a lower value to avoid exceeding the container's memory limit. From 993f17635344e256003d7483e06087fcb21ef50d Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 14 May 2025 11:03:10 -0700 Subject: [PATCH 061/116] update --- src/pages/guides/runtime_guides/throughput-tuning.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index 7da733990..a852aa430 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -15,12 +15,3 @@ You can set `action/container concurrency` to any value between `1` and `500`. H ``` aio rt:action:create actionName fileName.js -c 100 ``` - -### Concurrency considerations - -1. Containers are kept warm after for 5 minutes after an invocation finishes. For those 5 minutes, it is highly unlikely (p<.01) that invoking the same action will require a cold start. -2. Experiment with the value you set for concurrency limits. The default, `200`, is a good place to start, but a smaller or a larger value may be better depending on how much memory and other resources your action consumes. -3. Be sure your code is designed to work when executed in parallel. For example, avoid using global variables to store values that may differ between invocations. -4. If an action works on a large data set that is not different from one invocation to another, a global variable can maximize the chances that the next execution can use it. But your code should handle the condition in which the variable is not initialized. -5. It is not guaranteed that all invocations will use the same container. In case of errors, for example, the existing container is destroyed and a new one created. -6. If your action code consumes a large amount of memory, you may need to set concurrency to a lower value to avoid exceeding the container's memory limit. From 3bff4c74e0330fc60731ab371f5e809574c3605f Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 14 May 2025 11:03:50 -0700 Subject: [PATCH 062/116] update --- src/pages/guides/runtime_guides/throughput-tuning.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index a852aa430..a06459b69 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -7,11 +7,3 @@ The main instrument for tuning how rapidly actions can be executed is the value you set for `action/container concurrency`. This is not related to the concurrent value per namespace or minuteRate value, although these two enforce an upper limit on actions executed per minute in your namespace. The default `action/container concurrency` value is `200` invocations of an action in the same container. If, for example, you plan to execute a `HelloWorld` action 100 times, either simultaneously or within minutes, the default value (`200`) means that the system will use one container rather than as many as 100. - -This helps avoid cold-start issues. When the system has no containers left, it creates new ones - "cold starts" that add a lot of latency to your application. - -You can set `action/container concurrency` to any value between `1` and `500`. Here, the limit is set to `100`: - -``` -aio rt:action:create actionName fileName.js -c 100 -``` From eaec75f7357cfa49cb66d9a8d559efa224175822 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 14 May 2025 11:17:51 -0700 Subject: [PATCH 063/116] update throughput --- src/pages/guides/runtime_guides/throughput-tuning.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index a06459b69..a852aa430 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -7,3 +7,11 @@ The main instrument for tuning how rapidly actions can be executed is the value you set for `action/container concurrency`. This is not related to the concurrent value per namespace or minuteRate value, although these two enforce an upper limit on actions executed per minute in your namespace. The default `action/container concurrency` value is `200` invocations of an action in the same container. If, for example, you plan to execute a `HelloWorld` action 100 times, either simultaneously or within minutes, the default value (`200`) means that the system will use one container rather than as many as 100. + +This helps avoid cold-start issues. When the system has no containers left, it creates new ones - "cold starts" that add a lot of latency to your application. + +You can set `action/container concurrency` to any value between `1` and `500`. Here, the limit is set to `100`: + +``` +aio rt:action:create actionName fileName.js -c 100 +``` From 59271993ad771880475b75be7ee1cb91f626259f Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 14 May 2025 11:20:09 -0700 Subject: [PATCH 064/116] update --- src/pages/guides/runtime_guides/throughput-tuning.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index a852aa430..e447807d8 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -15,3 +15,12 @@ You can set `action/container concurrency` to any value between `1` and `500`. H ``` aio rt:action:create actionName fileName.js -c 100 ``` + +### Concurrency considerations + +1. Containers are kept warm after for 5 minutes after an invocation finishes. For those 5 minutes, it is highly unlikely that invoking the same action will require a cold start. +2. Experiment with the value you set for concurrency limits. The default, `200`, is a good place to start, but a smaller or a larger value may be better depending on how much memory and other resources your action consumes. +3. Be sure your code is designed to work when executed in parallel. For example, avoid using global variables to store values that may differ between invocations. +4. If an action works on a large data set that is not different from one invocation to another, a global variable can maximize the chances that the next execution can use it. But your code should handle the condition in which the variable is not initialized. +5. It is not guaranteed that all invocations will use the same container. In case of errors, for example, the existing container is destroyed and a new one created. +6. If your action code consumes a large amount of memory, you may need to set concurrency to a lower value to avoid exceeding the container's memory limit. From e709c80416b5fd614cc1e8739ac4e5a74b273818 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 14 May 2025 11:20:54 -0700 Subject: [PATCH 065/116] update --- src/pages/guides/runtime_guides/throughput-tuning.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index e447807d8..7da733990 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -18,7 +18,7 @@ aio rt:action:create actionName fileName.js -c 100 ### Concurrency considerations -1. Containers are kept warm after for 5 minutes after an invocation finishes. For those 5 minutes, it is highly unlikely that invoking the same action will require a cold start. +1. Containers are kept warm after for 5 minutes after an invocation finishes. For those 5 minutes, it is highly unlikely (p<.01) that invoking the same action will require a cold start. 2. Experiment with the value you set for concurrency limits. The default, `200`, is a good place to start, but a smaller or a larger value may be better depending on how much memory and other resources your action consumes. 3. Be sure your code is designed to work when executed in parallel. For example, avoid using global variables to store values that may differ between invocations. 4. If an action works on a large data set that is not different from one invocation to another, a global variable can maximize the chances that the next execution can use it. But your code should handle the condition in which the variable is not initialized. From 76f3f8408a80a66188d3772cba808be6052c17df Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 14 May 2025 11:21:56 -0700 Subject: [PATCH 066/116] update --- src/pages/guides/runtime_guides/throughput-tuning.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index 7da733990..e447807d8 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -18,7 +18,7 @@ aio rt:action:create actionName fileName.js -c 100 ### Concurrency considerations -1. Containers are kept warm after for 5 minutes after an invocation finishes. For those 5 minutes, it is highly unlikely (p<.01) that invoking the same action will require a cold start. +1. Containers are kept warm after for 5 minutes after an invocation finishes. For those 5 minutes, it is highly unlikely that invoking the same action will require a cold start. 2. Experiment with the value you set for concurrency limits. The default, `200`, is a good place to start, but a smaller or a larger value may be better depending on how much memory and other resources your action consumes. 3. Be sure your code is designed to work when executed in parallel. For example, avoid using global variables to store values that may differ between invocations. 4. If an action works on a large data set that is not different from one invocation to another, a global variable can maximize the chances that the next execution can use it. But your code should handle the condition in which the variable is not initialized. From 4aeb0396204478e399ff6af4fafdd0be01134fd4 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 14 May 2025 11:30:07 -0700 Subject: [PATCH 067/116] update --- src/pages/guides/runtime_guides/throughput-tuning.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index e447807d8..7da733990 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -18,7 +18,7 @@ aio rt:action:create actionName fileName.js -c 100 ### Concurrency considerations -1. Containers are kept warm after for 5 minutes after an invocation finishes. For those 5 minutes, it is highly unlikely that invoking the same action will require a cold start. +1. Containers are kept warm after for 5 minutes after an invocation finishes. For those 5 minutes, it is highly unlikely (p<.01) that invoking the same action will require a cold start. 2. Experiment with the value you set for concurrency limits. The default, `200`, is a good place to start, but a smaller or a larger value may be better depending on how much memory and other resources your action consumes. 3. Be sure your code is designed to work when executed in parallel. For example, avoid using global variables to store values that may differ between invocations. 4. If an action works on a large data set that is not different from one invocation to another, a global variable can maximize the chances that the next execution can use it. But your code should handle the condition in which the variable is not initialized. From 58361409b8790fc96c84ffe8f3c8001cf81677a6 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 14 May 2025 11:42:57 -0700 Subject: [PATCH 068/116] update --- .../runtime_guides/throughput-tuning.md | 66 ++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index 7da733990..00aefe644 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -18,9 +18,73 @@ aio rt:action:create actionName fileName.js -c 100 ### Concurrency considerations -1. Containers are kept warm after for 5 minutes after an invocation finishes. For those 5 minutes, it is highly unlikely (p<.01) that invoking the same action will require a cold start. +1. Containers are kept warm after for 5 minutes after an invocation finishes. For those 5 minutes, it is highly unlikely that invoking the same action will require a cold start. 2. Experiment with the value you set for concurrency limits. The default, `200`, is a good place to start, but a smaller or a larger value may be better depending on how much memory and other resources your action consumes. 3. Be sure your code is designed to work when executed in parallel. For example, avoid using global variables to store values that may differ between invocations. 4. If an action works on a large data set that is not different from one invocation to another, a global variable can maximize the chances that the next execution can use it. But your code should handle the condition in which the variable is not initialized. 5. It is not guaranteed that all invocations will use the same container. In case of errors, for example, the existing container is destroyed and a new one created. 6. If your action code consumes a large amount of memory, you may need to set concurrency to a lower value to avoid exceeding the container's memory limit. + +### Using pre-warmed containers + +A second way avoid cold-starts and minimize latency is to create actions that use the default Node version, and a memory settings of `256MB`, `512MB`, or `1024MB`. + +The system has a pool of "pre-warmed" containers it will use for any incoming call that can't be sent to a running container - so long as the action matches the pre-warmed container's Node version and memory setting. If it does, time will still be spent for injecting your action code, but not for creating a container first. If it doesn't, your action will wait while the system creates a new container. + +## Caching responses + +In addition to optimizing the use of containers, caching action responses helps improve throughput. For the time a cache is valid, invocations of the action will not increase the `minuteRate` counter or concurrent action invocations per namespace. This is because the action is not actually executed: the system serves the result from the cache. + +Use the Cache-Control directive to configure the cache. Here is an example of an action that sets the cache with a Time to Live of `30 minutes`. In the response object you'll find an entry with `X-Cache: HIT` or `X-Cache: MISS`, depending on whether the answer was returned from the cache or not. + +``` +function main(args) { + return { + body: "OK", + statusCode: 200, + headers: { + "Cache-Control": "max-age=1800" + } + } +} +``` + +One way to verify whether a response is returned from the cache or not is to check for this header: + +``` +X-GW-Cache: HIT +``` + + + +Encoded responses can't be cached, so the `Content-Encoding` response header must be empty to cache responses. + +### Vary header + +The caching layer supports the use of [Vary header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Vary) to cache based on header fields as well as on URL and query parameters. + +This action responds to certain header fields while doing a complex calculation: + +``` +curl -H "storeId: 1234" https://runtime-namespace-1. +adobeioruntime.net/api/v1/web/store?query={products +(pageSize: 10,filter:{ id:{ eq:"abcedefg"}}){items{name}}}` +``` + +It could produce this response: + +``` +HTTP/1.1 200 OK +Content-Type: application/json +Vary: storeId +Cache-Control: max-age=120 +X-GW-Cache: MISS + +{"someBigData" : ["array"]} +``` + +This response would add the `storeId` to the cache key, so that subsequent requests with the same `storeId` in their headers would create a `HIT`, up to the limits imposed by the cache control header settings. Any time the value varied, it would be a `MISS`, and would be stored under a new key with new cache control directives. + +## Next step + +Return to [Guides Index](../index.md). From 42d9e8955f2759c6169fcf1cc9229aeb3c975ed4 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 14 May 2025 11:43:58 -0700 Subject: [PATCH 069/116] update with escape --- src/pages/guides/runtime_guides/throughput-tuning.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index 00aefe644..ea033a7bf 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -18,7 +18,7 @@ aio rt:action:create actionName fileName.js -c 100 ### Concurrency considerations -1. Containers are kept warm after for 5 minutes after an invocation finishes. For those 5 minutes, it is highly unlikely that invoking the same action will require a cold start. +1. Containers are kept warm after for 5 minutes after an invocation finishes. For those 5 minutes, it is highly unlikely (p\<.01) that invoking the same action will require a cold start. 2. Experiment with the value you set for concurrency limits. The default, `200`, is a good place to start, but a smaller or a larger value may be better depending on how much memory and other resources your action consumes. 3. Be sure your code is designed to work when executed in parallel. For example, avoid using global variables to store values that may differ between invocations. 4. If an action works on a large data set that is not different from one invocation to another, a global variable can maximize the chances that the next execution can use it. But your code should handle the condition in which the variable is not initialized. From 843ed33556fd7c8cb6e55159e34bf0605529ce67 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 14 May 2025 13:48:12 -0700 Subject: [PATCH 070/116] update < syntax --- src/pages/guides/runtime_guides/throughput-tuning.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/guides/runtime_guides/throughput-tuning.md b/src/pages/guides/runtime_guides/throughput-tuning.md index ea033a7bf..116007a53 100644 --- a/src/pages/guides/runtime_guides/throughput-tuning.md +++ b/src/pages/guides/runtime_guides/throughput-tuning.md @@ -18,7 +18,7 @@ aio rt:action:create actionName fileName.js -c 100 ### Concurrency considerations -1. Containers are kept warm after for 5 minutes after an invocation finishes. For those 5 minutes, it is highly unlikely (p\<.01) that invoking the same action will require a cold start. +1. Containers are kept warm after for 5 minutes after an invocation finishes. For those 5 minutes, it is highly unlikely (p<.01) that invoking the same action will require a cold start. 2. Experiment with the value you set for concurrency limits. The default, `200`, is a good place to start, but a smaller or a larger value may be better depending on how much memory and other resources your action consumes. 3. Be sure your code is designed to work when executed in parallel. For example, avoid using global variables to store values that may differ between invocations. 4. If an action works on a large data set that is not different from one invocation to another, a global variable can maximize the chances that the next execution can use it. But your code should handle the condition in which the variable is not initialized. From 71692b0e7137d984372c447a92be8be7478a6a5e Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 14 May 2025 14:00:36 -0700 Subject: [PATCH 071/116] update missing links --- src/pages/config.md | 2 +- .../app-builder-intro.md | 2 +- .../app_builder_get_started/troubleshoot.md | 2 +- .../exc_app/interfaces/index.md | 32 +++++++++++++++++++ src/pages/intro_and_overview/index.md | 2 +- 5 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 src/pages/guides/app_builder_guides/exc_app/interfaces/index.md diff --git a/src/pages/config.md b/src/pages/config.md index adfbe171f..db62bbc96 100644 --- a/src/pages/config.md +++ b/src/pages/config.md @@ -56,7 +56,7 @@ - [Events](https://developer.adobe.com/events/docs/guides/using/custom_events/) - [Webhooks](https://developer.adobe.com/events/docs/guides/) - [Exc App](guides/app_builder_guides/exc_app/aec-integration.md) - - [Interfaces](guides/app_builder_guides/exc_app/interfaces/) + - [Interfaces](guides/app_builder_guides/exc_app/interfaces/index.md) - [Modules](guides/app_builder_guides/exc_app/interfaces/modules.md) - [Page ObjectWithHref](guides/app_builder_guides/exc_app/interfaces/page-objectwithhref.md) - [Page ObjectWithPath](guides/app_builder_guides/exc_app/interfaces/page-objectwithpath.md) diff --git a/src/pages/get_started/app_builder_get_started/app-builder-intro.md b/src/pages/get_started/app_builder_get_started/app-builder-intro.md index fbdd89442..1e4291058 100644 --- a/src/pages/get_started/app_builder_get_started/app-builder-intro.md +++ b/src/pages/get_started/app_builder_get_started/app-builder-intro.md @@ -19,7 +19,7 @@ This series of tutorials will show you how to: * Troubleshoot your app and correct common error conditions -Customers with currently deployed Adobe I/O Runtime actions they wish to convert into App Builder applications should consider [this shortcut](app_builder_and_runtime.md). +Customers with currently deployed Adobe I/O Runtime actions they wish to convert into App Builder applications should consider [this shortcut](../../intro_and_overview/index.md). ## Overview diff --git a/src/pages/get_started/app_builder_get_started/troubleshoot.md b/src/pages/get_started/app_builder_get_started/troubleshoot.md index f37428c1c..ea03395e5 100644 --- a/src/pages/get_started/app_builder_get_started/troubleshoot.md +++ b/src/pages/get_started/app_builder_get_started/troubleshoot.md @@ -81,6 +81,6 @@ We recommend using [Node Version Manager (nvm)](https://github.com/nvm-sh/nvm) o This completes the "Getting Started" tutorial series for App Builder. -To learn how to extend App Builder capabilities using the Adobe I/O Runtime platform, proceed to the [Get Started with Adobe I/O Runtime](../runtime_getting_started/runtime_intro.md) tutorial. +To learn how to extend App Builder capabilities using the Adobe I/O Runtime platform, proceed to the [Get Started with Adobe I/O Runtime](../runtime_getting_started/index.md) tutorial. For in-depth review of App Builder architecture, development, deployment, integration, and security, visit the [Guides Index](../../guides/index.md) and select your topic of interest. diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/index.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/index.md new file mode 100644 index 000000000..1b7d1f2f9 --- /dev/null +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/index.md @@ -0,0 +1,32 @@ +--- +title: 'Adobe Experience Cloud App Builder: Interfaces Index' +--- + +# Interfaces Index + +This section provides an overview and quick navigation for all interfaces available in the Adobe Experience Cloud App Builder extensibility APIs. Each interface is documented in detail in its own file. Use this index to explore the available APIs and their capabilities. + +## Table of Contents + +| Interface | Description | +|-----------|-------------| +| [Modules](modules.md) | Entry point for accessing all major APIs: runtime, page, topbar, and user. | +| [Runtime](runtime.md) | Provides unified-shell APIs and event handling for solution authors. | +| [PageApi](page.pageapi.md) | Page-level APIs for controlling shell/page behavior and properties. | +| [PageApiProperties](page.pageapiproperties.md) | Settable attributes for page-level APIs (e.g., title, favicon, modal). | +| [ObjectWithHref](page.objectwithhref.md) | Represents a solution page by its URL (href). | +| [ObjectWithPath](page.objectwithpath.md) | Represents a solution page by its relative path. | +| [TopbarAPI](topbar.topbarapi.md) | APIs for customizing the Experience Cloud top bar. | +| [TopbarAPIProperties](topbar.topbarapiproperties.md) | Settable attributes for the top bar (e.g., workspaces, solution info). | +| [Solution](topbar.solution.md) | Attributes for the solution area in the top bar (icon, title, shortTitle). | +| [Callback](topbar.callback.md) | Function signature for callback handlers (e.g., hero click, feedback). | +| [CustomFeedbackConfig](topbar.customfeedbackconfig.md) | Configures a custom feedback button in the top bar. | +| [CustomSearchConfig](topbar.customsearchconfig.md) | Configures a custom search button in the top bar. | +| [ExternalFeedbackConfig](topbar.externalfeedbackconfig.md) | Configures an external feedback button in the top bar. | +| [HelpCenterFeedbackConfig](topbar.helpcenterfeedbackconfig.md) | Configures a help center feedback button in the top bar. | +| [UserAPI](user.userapi.md) | APIs for user information, authentication, and events. | +| [UserInfo](user.userinfo.md) | Structure for user identity, org, and locale information. | + +--- + +Return to the [Guides Index](../../../index.md). diff --git a/src/pages/intro_and_overview/index.md b/src/pages/intro_and_overview/index.md index 9e57b5397..b81355480 100644 --- a/src/pages/intro_and_overview/index.md +++ b/src/pages/intro_and_overview/index.md @@ -28,7 +28,7 @@ Please refer to the [FAQ](faq.md) for information about licensing or trial of Ap - [Get Started with App Builder](../get_started/app_builder_get_started/app-builder-intro.md) covering access, setup, creation, publication, and troubleshooting of your first App Builder app - - [Get Started with Adobe I/O Runtime](../get_started/runtime_getting_started/runtime_intro.md) covering access, setup, deployment, and invocation of your first Adobe Runtime action, recovery and interpretation of results, and core concepts and tactics for optimizing performance + - [Get Started with Adobe I/O Runtime](../get_started/runtime_getting_started/index.md) covering access, setup, deployment, and invocation of your first Adobe Runtime action, recovery and interpretation of results, and core concepts and tactics for optimizing performance - **Resolve issues** and optimize performance with App Builder resources: From 350e4e76e1fc2f3078030df4ebe2c1176a0f43f2 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 14 May 2025 14:11:32 -0700 Subject: [PATCH 072/116] update links --- .../exc_app/interfaces/index.md | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/pages/guides/app_builder_guides/exc_app/interfaces/index.md b/src/pages/guides/app_builder_guides/exc_app/interfaces/index.md index 1b7d1f2f9..373dc5753 100644 --- a/src/pages/guides/app_builder_guides/exc_app/interfaces/index.md +++ b/src/pages/guides/app_builder_guides/exc_app/interfaces/index.md @@ -8,24 +8,24 @@ This section provides an overview and quick navigation for all interfaces availa ## Table of Contents -| Interface | Description | -|-----------|-------------| -| [Modules](modules.md) | Entry point for accessing all major APIs: runtime, page, topbar, and user. | -| [Runtime](runtime.md) | Provides unified-shell APIs and event handling for solution authors. | -| [PageApi](page.pageapi.md) | Page-level APIs for controlling shell/page behavior and properties. | -| [PageApiProperties](page.pageapiproperties.md) | Settable attributes for page-level APIs (e.g., title, favicon, modal). | -| [ObjectWithHref](page.objectwithhref.md) | Represents a solution page by its URL (href). | -| [ObjectWithPath](page.objectwithpath.md) | Represents a solution page by its relative path. | -| [TopbarAPI](topbar.topbarapi.md) | APIs for customizing the Experience Cloud top bar. | -| [TopbarAPIProperties](topbar.topbarapiproperties.md) | Settable attributes for the top bar (e.g., workspaces, solution info). | -| [Solution](topbar.solution.md) | Attributes for the solution area in the top bar (icon, title, shortTitle). | -| [Callback](topbar.callback.md) | Function signature for callback handlers (e.g., hero click, feedback). | -| [CustomFeedbackConfig](topbar.customfeedbackconfig.md) | Configures a custom feedback button in the top bar. | -| [CustomSearchConfig](topbar.customsearchconfig.md) | Configures a custom search button in the top bar. | -| [ExternalFeedbackConfig](topbar.externalfeedbackconfig.md) | Configures an external feedback button in the top bar. | -| [HelpCenterFeedbackConfig](topbar.helpcenterfeedbackconfig.md) | Configures a help center feedback button in the top bar. | -| [UserAPI](user.userapi.md) | APIs for user information, authentication, and events. | -| [UserInfo](user.userinfo.md) | Structure for user identity, org, and locale information. | +| Interface | Description | +|----------------------------------------------------------------|-------------| +| [Modules](modules.md) | Entry point for accessing all major APIs: runtime, page, topbar, and user. | +| [Runtime](runtime.md) | Provides unified-shell APIs and event handling for solution authors. | +| [PageApi](page-pageapi.md) | Page-level APIs for controlling shell/page behavior and properties. | +| [PageApiProperties](page-pageapiproperties.md) | Settable attributes for page-level APIs (e.g., title, favicon, modal). | +| [ObjectWithHref](page-objectwithhref.md) | Represents a solution page by its URL (href). | +| [ObjectWithPath](page-objectwithpath.md) | Represents a solution page by its relative path. | +| [TopbarAPI](topbar-topbarapi.md) | APIs for customizing the Experience Cloud top bar. | +| [TopbarAPIProperties](topbar-topbarapiproperties.md) | Settable attributes for the top bar (e.g., workspaces, solution info). | +| [Solution](topbar-solution.md) | Attributes for the solution area in the top bar (icon, title, shortTitle). | +| [Callback](topbar-callback.md) | Function signature for callback handlers (e.g., hero click, feedback). | +| [CustomFeedbackConfig](topbar-customfeedbackconfig.md) | Configures a custom feedback button in the top bar. | +| [CustomSearchConfig](topbar-customsearchconfig.md) | Configures a custom search button in the top bar. | +| [ExternalFeedbackConfig](topbar-externalfeedbackconfig.md) | Configures an external feedback button in the top bar. | +| [HelpCenterFeedbackConfig](topbar-helpcenterfeedbackconfig.md) | Configures a help center feedback button in the top bar. | +| [UserAPI](user-userapi.md) | APIs for user information, authentication, and events. | +| [UserInfo](user-userinfo.md) | Structure for user identity, org, and locale information. | --- From 7eda79391a51a3e73c95dd3088bac375a6f2d6cc Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 14 May 2025 15:02:43 -0700 Subject: [PATCH 073/116] update missing images --- .../app_builder_get_started/publish-app.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/pages/get_started/app_builder_get_started/publish-app.md b/src/pages/get_started/app_builder_get_started/publish-app.md index 8b5f956f3..3d7938d37 100644 --- a/src/pages/get_started/app_builder_get_started/publish-app.md +++ b/src/pages/get_started/app_builder_get_started/publish-app.md @@ -29,51 +29,51 @@ The final app is based on the Production workspace, so it is important to make s To begin the approval process, navigate to the Production workspace and select **Submit for approval** in the top-right corner of the screen or **Approval** in the left navigation. -![](E:\GitHub\app-builder\src\pages\images\approval-production-overview.png) +![](../../images/approval-production-overview.png) On the Approval screen you will be able to fill out the **App Submission Details** form. These details will be visible to people who use your app and administrators who review your application. Once the form is completed, select **Submit** to begin the approval process. -![](E:\GitHub\app-builder\src\pages\images\approval-app-submission-details.png) +![](../../images/approval-app-submission-details.png) You will be returned to the Approval screen, where the Status of your application should now be "In Review." -![](E:\GitHub\app-builder\src\pages\images\approval-in-review.png) +![](../../images/approval-in-review.png) Following a review by your organization administrators, your application will either be approved and published, or rejected. If it is rejected, your Admin will be able to include a note telling you what went wrong so you can fix the error and resubmit. -![](E:\GitHub\app-builder\src\pages\images\approval-app-rejected.png) +![](../../images/approval-app-rejected.png) ### Published app Once your application has been submitted for approval, the Admin can see it pending for review in Adobe Exchange. The next section will describe Admin approval flow from My Exchange. From Console side, once an application has been approved, its Status will be updated to Published and the application will be available for use by employees within your enterprise organization. -![](E:\GitHub\app-builder\src\pages\images\approval-published.png) +![](../../images/approval-published.png) ## Administrator review of your app (MyExchange part) Once an application has been submitted for approval, your organization's Administrators will see it in My Exchange -> Experience Cloud Apps, and you will see your submitted apps under Pending Review status. -![](E:\GitHub\app-builder\src\pages\images\approval-myexchange.png) +![](../../images/approval-myexchange.png) The reviewer can review this app and approve it or reject it. If the application is rejected, your admin will be able to include a note telling you what went wrong, so you can fix the error and resubmit. -![](E:\GitHub\app-builder\src\pages\images\approval-myexchange-review.png) +![](../../images/approval-myexchange-review.png) After the app is approved, you will see it in the Approved section. The reviewer can also unpublish the app, requiring the app owner to resubmit it for review and approval. -![](E:\GitHub\app-builder\src\pages\images\approval-myexchange-revoke.png) +![](../../images/approval-myexchange-revoke.png) ## Check your published app at Experience Cloud Once the reviewer has approved your application, you will be notified by email and your app will appear at Adobe Experience Cloud: -![](E:\GitHub\app-builder\src\pages\images\approval-myapp-home.png) +![](../../images/approval-myapp-home.png) Click on `App Builder Apps` to discover all the applications published for your organization. -![](E:\GitHub\app-builder\src\pages\images\approval-myapp-customapps.png) +![](../../images/approval-myapp-customapps.png) # Publishing your headless App Builder app From e42553975021a5236210ad8b0fc30a2c09d27bcc Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 11:26:08 -0700 Subject: [PATCH 074/116] update understanding runtime paths --- .../runtime_getting_started/understanding-runtime.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/get_started/runtime_getting_started/understanding-runtime.md b/src/pages/get_started/runtime_getting_started/understanding-runtime.md index fdff879a1..609842707 100644 --- a/src/pages/get_started/runtime_getting_started/understanding-runtime.md +++ b/src/pages/get_started/runtime_getting_started/understanding-runtime.md @@ -12,9 +12,9 @@ Actions may be invoked by HTTP calls (RESTful or HTTP) or by other actions. Acti Actions may be organized into any number of **packages** within a namespace. Packages are used to organize the code, manage different versions of the same action, or share code with other tenants or applications. Packages marked **shareable** may be bound to the namespaces of anyone who has their full name, in the manner of symbolic links. -![](E:\GitHub\app-builder\src\pages\images\quickstart-programming-model.png) +![](../../images/quickstart-programming-model.png) -![](E:\GitHub\app-builder\src\pages\images\quickstart-shared-packages.png) +![](../../images/quickstart-shared-packages.png) Actions may be invoked anonymously - with no authorization required - or with authentication. Runtime supports basic authorization Developers can implement their own auth. We will be adding support for IMS based auth. @@ -24,7 +24,7 @@ Adobe I/O Runtime is built on the Apache OpenWhisk open-source project, so many This diagram shows the high-level architecture of I/O Runtime built on OpenWhisk: -![](E:\GitHub\app-builder\src\pages\images\quickstart-components.png) +![](../../images/quickstart-components.png) This is the sequence by which Runtime components execute user code when an action is executed: From 3e64dab46beef129a78872cc8b288f3f46cc6d91 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 11:33:41 -0700 Subject: [PATCH 075/116] update application-state.md --- .../app_builder_guides/application-state.md | 113 ++++++++++++++++-- 1 file changed, 106 insertions(+), 7 deletions(-) diff --git a/src/pages/guides/app_builder_guides/application-state.md b/src/pages/guides/app_builder_guides/application-state.md index 79b76c9fa..efec96375 100644 --- a/src/pages/guides/app_builder_guides/application-state.md +++ b/src/pages/guides/app_builder_guides/application-state.md @@ -1,10 +1,10 @@ --- keywords: - - Adobe I/O - - Extensibility - - API Documentation - - Developer Tooling -title: Dealing with Application State +- Adobe I/O +- Extensibility +- API Documentation +- Developer Tooling + title: Dealing with Application State --- # Dealing with Application State @@ -39,7 +39,7 @@ hello-world: ### Considerations about security -For authentication with Adobe APIs, you should leverage [App Builder Security Guideline](./security/index.md) using our supported SDKs. +For authentication with Adobe APIs, you should leverage [App Builder Security Guideline](security/index.md) using our supported SDKs. For other 3rd party systems and APIs when provisioning actions with the secrets/passwords is a must, you can then use the default params as demonstrated above. In order to support this use case, all default params are automatically encrypted. They are decrypted just before the action code is executed. Thus, the only time you have access to the decrypted value is while executing the action code. @@ -51,7 +51,6 @@ No pre-configuration is required, just install the libraries and use them in you *When should I use Files vs State?* - - Files is good for transferring large payloads (bandwidth oriented) and State is good for fast access (latency oriented). - Files supports sharing data via presigned-url, State supports setting expirations. - As a rule of thumb if you expect your data to grow larger than 100KBs go with Files, otherwise use State. @@ -141,3 +140,103 @@ COMMANDS The default region is `amer`, to access another region, you can use the `--region` flag or add the `AIO_STATE_REGION=emea` variable to your `.env`. Navigate the CLI usage documentation from the repo's [README](https://github.com/adobe/aio-cli-plugin-app-storage?tab=readme-ov-file#usage) or by using the `--help` flag on the desired command. + +### Constraints + +- State is only available to Runtime namespaces created via the Developer Console, which follow the App Builder format: `orgId-project(-workspace)?`. Legacy namespaces are not supported. +- Max state value size: `1MB`. +- Max state key size: `1024 bytes`. +- Max-supported TTL is `365 days`. +- Values format: any `string|binary`. +- Keys format: `string` only `alphanumeric` with `-`,`_`,`.`. + +### Usage quotas and limits + +The following quotas and limits apply while dealing with Application State associated with your App Builder application. + +Quotas are shared across the organisation. Workspace limits are defined at the *workspace* level. The State service may return 429 (rate-limits) or +403 (storage limits) errors if limits are exceeded. + +| Limit | Limit Type | Default Limit | Can it be Increased? | Notes | +|-----------------------------------------------------------------------------------------|---------------------------------------|----------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------| +| How much data can you store in State? | Quota (increases with number of packs) | Up to 10 GB per App Builder pack | Yes, by purchasing more packs of App Builder | Storage is calculated as: `(2 * total size of keys) + (total size of values)`. | +| How much State bandwidth can you utilize? | Quota (increases with number of packs) | 1 TB per month per App Builder pack | Yes, by purchasing more packs of App Builder | Bandwidth is calculated as: total bytes uploaded + total bytes downloaded. | +| How much data can you store in State in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1 GB for production workspaces
200 MB for other workspaces | Yes, by raising a support ticket. You can request an increase up to 10 GB.
*Note: Increasing the limit beyond 10 GB in a single workspace can be supported depending on your case. Raise a support ticket to find out more.* | Storage is calculated as: `(2 * total size of keys) + (total size of values)`. | +| How much State burst bandwidth can you consume in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1 MB/s (bursts)

10 MB/min for production workspaces
2 MB/min for other workspaces | Yes, by raising a support ticket. You can request an increase up to 3 MB/s and 30 MB/min per App Builder packs purchased. | Bandwidth is calculated as: `total bytes uploaded + total bytes downloaded`. | +| How fast can you increase your bandwidth consumption in a single App Builder workspace? | Workspace limit (fixed per workspace) | 100 KB/s per minute | No | - | +| How many keys can you store in State in a single App Builder workspace? | Workspace limit (fixed per workspace) | 200K | Yes, by raising a support ticket. You can request an increase up to 500K keys. | This limit does not scale with the number of App Builder packs purchased. | +| How many list operations can you run per minute in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1K/min | Yes, by raising a support ticket. You can request an increase up to 10K/min. | This limit does not scale with the number of App Builder packs purchased. | + +### List considerations + +Using `state.list`, you can scan through the keys stored in your State container. `list` is a cursor-based iterator, which requires multiple calls to the State service to traverse all your keys. + +It is important to understand that `list` is scanning through your keys: + +- **the more keys you have stored**, the longer a full iteration will take to complete, regardless of whether you use the [using a glob-style pattern](#match-option). +- every call to `list` will iterate over up to 1000 keys. The former `countHint` option is now ignored. +- As an example, trying to match 1 key in a 10k key-values data-set will still require 10 calls to `list` to fetch it. + +The `list` command is not strongly consistent, and the following points need to be taken into account: + +- We are sending `list` requests to a replica, there is a ~5ms lag, after which a + full iteration returns keys that were present in the container and doesn't + return keys that were deleted prior to an iteration. +- Keys that were not constantly present in the collection during a full + iteration, may be returned or not: it is undefined. +- A given key may be returned multiple times across iterations (but not within a + same iteration). You can mitigate this by either performing operations that are + safe when applied multiple times (recommended with many keys) or by collecting all keys in an + array first and then remove any duplicates. +- In some rare cases, `list` may return expired keys. + +Please note, that `list` is subject to rate-limiting, so listing many keys may result in 429s. + +### `match` option + +`state.deleteAll` and `state.list` support a `match` option to filter keys. + +`match` supports a glob-style pattern via the `*` character, suppose you have the following keys: `key`, `base.key`, `key-1` + +- `match=key` will match `key` +- `match=k*` will match `key` +- `match=*k*` will match `key`, `base.key`, `key-1` +- `match=*-1` will match `key-1` +- `match=base.*-1` will match none + +The `match` filter is applied server-side **after** traversing elements, this means: + +- `match` does not reduce the work needed to iterate over your key-values. +- every call to `list` may return only few keys when matching a handful of key-values in a large dataset. + +### Troubleshooting + +Set `DEBUG=@adobe/aio-lib-state*` to see debug logs. + +## Files + +*Files is currently implemented as an abstraction layer over Azure Blob. Major changes and additional features are planned, stay tuned.* + +To learn more please visit the [Adobe I/O File Storage library](https://github.com/adobe/aio-lib-files?tab=readme-ov-file#adobe-io-lib-files) repository. + +## Feature Matrix + +| | Files | State | State Legacy | +|----------------------------|---------------------------------|----------------------------------------------|--------------------------------| +| read
write
delete | Y | Y | Y | +| list | Y | Y | N | +| streams | Y | N | N | +| copy | Y | N | N | +| deleteAll | N | Y | N | +| sharing | Y (pre-sign URLs) | N | N | +| Time-To-Live | N | Y | Y | +| max TTL | infinite | 365 days | infinite | +| max file/value size | 200GB | 1MB | 2MB | +| max key size | 1KB | 1KB | 1KB | +| key charset | open | `alphanumeric` with `_-.` | any but `/\?#` | +| max load | N/A | 10MB/min, 1MB/s
1k/min `list` requests | 900 RU/min (~KB/min) | +| max key values | N/A | 200K (scalable) | N/A | +| max storage | 1TB | 10GB | 10GB | +| max monthly load | N/A | 1TB (scalable) | N/A | +| regions | East US
West US read-only | Amer (US)
Emea (EU)
Apac (JPN) | East US
Europe read-only | +| consistency | strong | strong (CRUD), eventual for `list` | eventual | From 39d2a4a545ccbb900e5531e8951f4a8b701b5315 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 11:38:22 -0700 Subject: [PATCH 076/116] update application-state.md --- .../app_builder_guides/application-state.md | 84 ------------------- 1 file changed, 84 deletions(-) diff --git a/src/pages/guides/app_builder_guides/application-state.md b/src/pages/guides/app_builder_guides/application-state.md index efec96375..0823a8b29 100644 --- a/src/pages/guides/app_builder_guides/application-state.md +++ b/src/pages/guides/app_builder_guides/application-state.md @@ -156,87 +156,3 @@ The following quotas and limits apply while dealing with Application State assoc Quotas are shared across the organisation. Workspace limits are defined at the *workspace* level. The State service may return 429 (rate-limits) or 403 (storage limits) errors if limits are exceeded. - -| Limit | Limit Type | Default Limit | Can it be Increased? | Notes | -|-----------------------------------------------------------------------------------------|---------------------------------------|----------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------| -| How much data can you store in State? | Quota (increases with number of packs) | Up to 10 GB per App Builder pack | Yes, by purchasing more packs of App Builder | Storage is calculated as: `(2 * total size of keys) + (total size of values)`. | -| How much State bandwidth can you utilize? | Quota (increases with number of packs) | 1 TB per month per App Builder pack | Yes, by purchasing more packs of App Builder | Bandwidth is calculated as: total bytes uploaded + total bytes downloaded. | -| How much data can you store in State in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1 GB for production workspaces
200 MB for other workspaces | Yes, by raising a support ticket. You can request an increase up to 10 GB.
*Note: Increasing the limit beyond 10 GB in a single workspace can be supported depending on your case. Raise a support ticket to find out more.* | Storage is calculated as: `(2 * total size of keys) + (total size of values)`. | -| How much State burst bandwidth can you consume in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1 MB/s (bursts)

10 MB/min for production workspaces
2 MB/min for other workspaces | Yes, by raising a support ticket. You can request an increase up to 3 MB/s and 30 MB/min per App Builder packs purchased. | Bandwidth is calculated as: `total bytes uploaded + total bytes downloaded`. | -| How fast can you increase your bandwidth consumption in a single App Builder workspace? | Workspace limit (fixed per workspace) | 100 KB/s per minute | No | - | -| How many keys can you store in State in a single App Builder workspace? | Workspace limit (fixed per workspace) | 200K | Yes, by raising a support ticket. You can request an increase up to 500K keys. | This limit does not scale with the number of App Builder packs purchased. | -| How many list operations can you run per minute in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1K/min | Yes, by raising a support ticket. You can request an increase up to 10K/min. | This limit does not scale with the number of App Builder packs purchased. | - -### List considerations - -Using `state.list`, you can scan through the keys stored in your State container. `list` is a cursor-based iterator, which requires multiple calls to the State service to traverse all your keys. - -It is important to understand that `list` is scanning through your keys: - -- **the more keys you have stored**, the longer a full iteration will take to complete, regardless of whether you use the [using a glob-style pattern](#match-option). -- every call to `list` will iterate over up to 1000 keys. The former `countHint` option is now ignored. -- As an example, trying to match 1 key in a 10k key-values data-set will still require 10 calls to `list` to fetch it. - -The `list` command is not strongly consistent, and the following points need to be taken into account: - -- We are sending `list` requests to a replica, there is a ~5ms lag, after which a - full iteration returns keys that were present in the container and doesn't - return keys that were deleted prior to an iteration. -- Keys that were not constantly present in the collection during a full - iteration, may be returned or not: it is undefined. -- A given key may be returned multiple times across iterations (but not within a - same iteration). You can mitigate this by either performing operations that are - safe when applied multiple times (recommended with many keys) or by collecting all keys in an - array first and then remove any duplicates. -- In some rare cases, `list` may return expired keys. - -Please note, that `list` is subject to rate-limiting, so listing many keys may result in 429s. - -### `match` option - -`state.deleteAll` and `state.list` support a `match` option to filter keys. - -`match` supports a glob-style pattern via the `*` character, suppose you have the following keys: `key`, `base.key`, `key-1` - -- `match=key` will match `key` -- `match=k*` will match `key` -- `match=*k*` will match `key`, `base.key`, `key-1` -- `match=*-1` will match `key-1` -- `match=base.*-1` will match none - -The `match` filter is applied server-side **after** traversing elements, this means: - -- `match` does not reduce the work needed to iterate over your key-values. -- every call to `list` may return only few keys when matching a handful of key-values in a large dataset. - -### Troubleshooting - -Set `DEBUG=@adobe/aio-lib-state*` to see debug logs. - -## Files - -*Files is currently implemented as an abstraction layer over Azure Blob. Major changes and additional features are planned, stay tuned.* - -To learn more please visit the [Adobe I/O File Storage library](https://github.com/adobe/aio-lib-files?tab=readme-ov-file#adobe-io-lib-files) repository. - -## Feature Matrix - -| | Files | State | State Legacy | -|----------------------------|---------------------------------|----------------------------------------------|--------------------------------| -| read
write
delete | Y | Y | Y | -| list | Y | Y | N | -| streams | Y | N | N | -| copy | Y | N | N | -| deleteAll | N | Y | N | -| sharing | Y (pre-sign URLs) | N | N | -| Time-To-Live | N | Y | Y | -| max TTL | infinite | 365 days | infinite | -| max file/value size | 200GB | 1MB | 2MB | -| max key size | 1KB | 1KB | 1KB | -| key charset | open | `alphanumeric` with `_-.` | any but `/\?#` | -| max load | N/A | 10MB/min, 1MB/s
1k/min `list` requests | 900 RU/min (~KB/min) | -| max key values | N/A | 200K (scalable) | N/A | -| max storage | 1TB | 10GB | 10GB | -| max monthly load | N/A | 1TB (scalable) | N/A | -| regions | East US
West US read-only | Amer (US)
Emea (EU)
Apac (JPN) | East US
Europe read-only | -| consistency | strong | strong (CRUD), eventual for `list` | eventual | From e80a54d010925e7c71c7bab855c4596e20627046 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 11:42:11 -0700 Subject: [PATCH 077/116] update --- .../app_builder_guides/application-state.md | 40 ------------------- 1 file changed, 40 deletions(-) diff --git a/src/pages/guides/app_builder_guides/application-state.md b/src/pages/guides/app_builder_guides/application-state.md index 0823a8b29..c4bb68384 100644 --- a/src/pages/guides/app_builder_guides/application-state.md +++ b/src/pages/guides/app_builder_guides/application-state.md @@ -116,43 +116,3 @@ npm install @adobe/aio-lib-state Explore the [full API](https://github.com/adobe/aio-lib-state/blob/main/doc/api.md) -***CLI usage, from your local machine***: - -Available for `aio --version` >= `10.2`. - -The CLI must be run from within a valid App Builder application folder and uses the Runtime credentials to authenticate your requests to State. Each namespace has its own State container, so please ensure that your are accessing the expected instance by looking in your `.env` file for the `AIO_RUNTIME_NAMESPACE` variable. - -```bash -> aio app state -Manage your App Builder State storage - -USAGE - $ aio app state COMMAND - -COMMANDS - app state delete Delete key-values - app state get Get a key-value - app state list List key-values - app state put Put a key-value - app state stats Display stats -``` - -The default region is `amer`, to access another region, you can use the `--region` flag or add the `AIO_STATE_REGION=emea` variable to your `.env`. - -Navigate the CLI usage documentation from the repo's [README](https://github.com/adobe/aio-cli-plugin-app-storage?tab=readme-ov-file#usage) or by using the `--help` flag on the desired command. - -### Constraints - -- State is only available to Runtime namespaces created via the Developer Console, which follow the App Builder format: `orgId-project(-workspace)?`. Legacy namespaces are not supported. -- Max state value size: `1MB`. -- Max state key size: `1024 bytes`. -- Max-supported TTL is `365 days`. -- Values format: any `string|binary`. -- Keys format: `string` only `alphanumeric` with `-`,`_`,`.`. - -### Usage quotas and limits - -The following quotas and limits apply while dealing with Application State associated with your App Builder application. - -Quotas are shared across the organisation. Workspace limits are defined at the *workspace* level. The State service may return 429 (rate-limits) or -403 (storage limits) errors if limits are exceeded. From 26ef13ac9e2ce45941189f8ef5361870fe8d4186 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 11:43:19 -0700 Subject: [PATCH 078/116] update --- .../app_builder_guides/application-state.md | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/pages/guides/app_builder_guides/application-state.md b/src/pages/guides/app_builder_guides/application-state.md index c4bb68384..932918ac3 100644 --- a/src/pages/guides/app_builder_guides/application-state.md +++ b/src/pages/guides/app_builder_guides/application-state.md @@ -116,3 +116,28 @@ npm install @adobe/aio-lib-state Explore the [full API](https://github.com/adobe/aio-lib-state/blob/main/doc/api.md) +***CLI usage, from your local machine***: + +Available for `aio --version` >= `10.2`. + +The CLI must be run from within a valid App Builder application folder and uses the Runtime credentials to authenticate your requests to State. Each namespace has its own State container, so please ensure that your are accessing the expected instance by looking in your `.env` file for the `AIO_RUNTIME_NAMESPACE` variable. + +```bash +> aio app state +Manage your App Builder State storage + +USAGE + $ aio app state COMMAND + +COMMANDS + app state delete Delete key-values + app state get Get a key-value + app state list List key-values + app state put Put a key-value + app state stats Display stats +``` + +The default region is `amer`, to access another region, you can use the `--region` flag or add the `AIO_STATE_REGION=emea` variable to your `.env`. + +Navigate the CLI usage documentation from the repo's [README](https://github.com/adobe/aio-cli-plugin-app-storage?tab=readme-ov-file#usage) or by using the `--help` flag on the desired command. + From b11e87ba1a64d9d2279bd7d30a14404227829bbf Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 11:52:53 -0700 Subject: [PATCH 079/116] update configuringproxy.md --- .../guides/runtime_guides/reference_docs/configuringproxy.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/guides/runtime_guides/reference_docs/configuringproxy.md b/src/pages/guides/runtime_guides/reference_docs/configuringproxy.md index 28428a02b..5714396a2 100644 --- a/src/pages/guides/runtime_guides/reference_docs/configuringproxy.md +++ b/src/pages/guides/runtime_guides/reference_docs/configuringproxy.md @@ -4,7 +4,7 @@ For security reasons, Runtime does not expose egress IPs. Customers who need a w This can be done by adding a proxy component (in this example, an AWS EC2 instance running nginx). The proxy component will have a fixed IP address, so using an IP allowlist can secure the backend service. Communication between I/O Runtime and the proxy component will be secured via mutual TLS (mTLS) communication. -![](E:\GitHub\app-builder\src\pages\images\configure-proxy.png) +![](../../images/configure-proxy.png) The following steps outline how to: @@ -130,4 +130,4 @@ An EC2 instance with NGINX installed is a prerequisite for configuring this prox Return to the [Runtime Reference Documentation Index](index.md). -Return to the [Guides Index](../../index.md). \ No newline at end of file +Return to the [Guides Index](../../index.md). From df5441efc2144334e4f14cf1e912948e88c327a2 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 12:09:00 -0700 Subject: [PATCH 080/116] update requirements.md --- .../resources/barcode-reader/requirements.md | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/pages/resources/barcode-reader/requirements.md b/src/pages/resources/barcode-reader/requirements.md index 1f237758a..da0ca3922 100644 --- a/src/pages/resources/barcode-reader/requirements.md +++ b/src/pages/resources/barcode-reader/requirements.md @@ -1,12 +1,20 @@ --- -keywords: - - Adobe I/O - - Extensibility - - API Documentation - - Developer Tooling -title: 'Requirements' +title: Requirements --- -import Requirements from '../transclusions/_requirements.md' +# Requirements - +This Code Lab is useful for anyone getting started with developing App Builder apps. + +## Required skills + +* **Required:** programming skills in any language +* *Optional:* basic knowledge with Javascript and Node.js + +## Prerequisites + +If you haven't already, please follow these links to have your environment set up before starting the Code Lab: + +* [How to Get Access to App Builder](../../get_started/app_builder_get_started/set-up.md#access-and-credentials) +* [Setting up Your Environment](../../get_started/app_builder_get_started/set-up.md#local-environment-setup) +* [Creating your First App Builder App](../../get_started/app_builder_get_started/first-app.md) From ab9224b6ab47f2adddd3b4763269c816dd188a7f Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 12:33:28 -0700 Subject: [PATCH 081/116] update fragment --- .../resources/asset-compute-worker-ps-api/requirements.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/pages/resources/asset-compute-worker-ps-api/requirements.md b/src/pages/resources/asset-compute-worker-ps-api/requirements.md index 48150da3f..d6ab890b9 100644 --- a/src/pages/resources/asset-compute-worker-ps-api/requirements.md +++ b/src/pages/resources/asset-compute-worker-ps-api/requirements.md @@ -9,9 +9,7 @@ contributors: title: Codelab Environment Requirements --- -import Requirements from '../transclusions/_requirements.md' - - + ## Code Lab environment From d12f71c97b7ee950019ff023e67305b48e0221c4 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 12:36:58 -0700 Subject: [PATCH 082/116] update --- src/pages/resources/asset-compute-worker-ps-api/requirements.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/resources/asset-compute-worker-ps-api/requirements.md b/src/pages/resources/asset-compute-worker-ps-api/requirements.md index d6ab890b9..f5832965c 100644 --- a/src/pages/resources/asset-compute-worker-ps-api/requirements.md +++ b/src/pages/resources/asset-compute-worker-ps-api/requirements.md @@ -9,7 +9,7 @@ contributors: title: Codelab Environment Requirements --- - + ## Code Lab environment From b09316ce10dab2c66e3d85560f22820cbcdac71b Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 12:40:34 -0700 Subject: [PATCH 083/116] update requirements fragment --- .../resources/barcode-reader/requirements.md | 24 ++++++------------- src/pages/resources/ci-cd/requirements.md | 4 +--- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/src/pages/resources/barcode-reader/requirements.md b/src/pages/resources/barcode-reader/requirements.md index da0ca3922..b9597f86b 100644 --- a/src/pages/resources/barcode-reader/requirements.md +++ b/src/pages/resources/barcode-reader/requirements.md @@ -1,20 +1,10 @@ --- -title: Requirements +keywords: + - Adobe I/O + - Extensibility + - API Documentation + - Developer Tooling +title: 'Requirements' --- -# Requirements - -This Code Lab is useful for anyone getting started with developing App Builder apps. - -## Required skills - -* **Required:** programming skills in any language -* *Optional:* basic knowledge with Javascript and Node.js - -## Prerequisites - -If you haven't already, please follow these links to have your environment set up before starting the Code Lab: - -* [How to Get Access to App Builder](../../get_started/app_builder_get_started/set-up.md#access-and-credentials) -* [Setting up Your Environment](../../get_started/app_builder_get_started/set-up.md#local-environment-setup) -* [Creating your First App Builder App](../../get_started/app_builder_get_started/first-app.md) + diff --git a/src/pages/resources/ci-cd/requirements.md b/src/pages/resources/ci-cd/requirements.md index 2d7ee7022..a2c6e29cb 100644 --- a/src/pages/resources/ci-cd/requirements.md +++ b/src/pages/resources/ci-cd/requirements.md @@ -7,9 +7,7 @@ keywords: title: Codelab Environment Requirements --- -import Requirements from '../transclusions/_requirements.md' - - + ## Code Lab Environment From ca9d1cbed8be8873f129fccb065e28b1783b3a61 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 12:56:57 -0700 Subject: [PATCH 084/116] update requirements --- src/pages/resources/ci-cd/requirements.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pages/resources/ci-cd/requirements.md b/src/pages/resources/ci-cd/requirements.md index a2c6e29cb..4cfc87425 100644 --- a/src/pages/resources/ci-cd/requirements.md +++ b/src/pages/resources/ci-cd/requirements.md @@ -7,7 +7,9 @@ keywords: title: Codelab Environment Requirements --- - +import Requirements from '../transclusions/requirements.md' + + ## Code Lab Environment From e7cb6f3f4512e58043af43c3edadae769b7afa2b Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 13:16:51 -0700 Subject: [PATCH 085/116] update requirement component link --- .../resources/asset-compute-worker-ps-api/requirements.md | 4 +++- src/pages/resources/barcode-reader/requirements.md | 5 ++++- src/pages/resources/cron-jobs/requirements.md | 2 +- .../resources/custom-asset-compute-worker/requirements.md | 2 +- src/pages/resources/customer-dashboard/requirements.md | 2 +- src/pages/resources/debugging/requirements.md | 2 +- src/pages/resources/event-driven/requirements.md | 2 +- src/pages/resources/events-runtime/requirements.md | 2 +- src/pages/resources/journaling-events/requirements.md | 2 +- src/pages/resources/spectrum-intro/requirements.md | 2 +- src/pages/resources/todo-app/requirements.md | 2 +- 11 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/pages/resources/asset-compute-worker-ps-api/requirements.md b/src/pages/resources/asset-compute-worker-ps-api/requirements.md index f5832965c..356f71698 100644 --- a/src/pages/resources/asset-compute-worker-ps-api/requirements.md +++ b/src/pages/resources/asset-compute-worker-ps-api/requirements.md @@ -9,7 +9,9 @@ contributors: title: Codelab Environment Requirements --- - +import Requirements from '../transclusions/requirements.md' + + ## Code Lab environment diff --git a/src/pages/resources/barcode-reader/requirements.md b/src/pages/resources/barcode-reader/requirements.md index b9597f86b..35af9d9b3 100644 --- a/src/pages/resources/barcode-reader/requirements.md +++ b/src/pages/resources/barcode-reader/requirements.md @@ -7,4 +7,7 @@ keywords: title: 'Requirements' --- - +import Requirements from '../transclusions/requirements.md' + + + diff --git a/src/pages/resources/cron-jobs/requirements.md b/src/pages/resources/cron-jobs/requirements.md index 01928681c..4017e1681 100644 --- a/src/pages/resources/cron-jobs/requirements.md +++ b/src/pages/resources/cron-jobs/requirements.md @@ -9,7 +9,7 @@ contributors: title: Codelab Environment Requirements --- -import Requirements from '../transclusions/_requirements.md' +import Requirements from '../transclusions/requirements.md' diff --git a/src/pages/resources/custom-asset-compute-worker/requirements.md b/src/pages/resources/custom-asset-compute-worker/requirements.md index ef45d30fd..5a0962d1b 100644 --- a/src/pages/resources/custom-asset-compute-worker/requirements.md +++ b/src/pages/resources/custom-asset-compute-worker/requirements.md @@ -9,7 +9,7 @@ contributors: title: Codelab Environment Requirements --- -import Requirements from '../transclusions/_requirements.md' +import Requirements from '../transclusions/requirements.md' diff --git a/src/pages/resources/customer-dashboard/requirements.md b/src/pages/resources/customer-dashboard/requirements.md index 4bb87b0c4..5d69f26b9 100644 --- a/src/pages/resources/customer-dashboard/requirements.md +++ b/src/pages/resources/customer-dashboard/requirements.md @@ -9,7 +9,7 @@ contributors: title: Codelab Environment Requirements --- -import Requirements from '../transclusions/_requirements.md' +import Requirements from '../transclusions/requirements.md' diff --git a/src/pages/resources/debugging/requirements.md b/src/pages/resources/debugging/requirements.md index 73511f6ea..1b9585e7a 100644 --- a/src/pages/resources/debugging/requirements.md +++ b/src/pages/resources/debugging/requirements.md @@ -9,7 +9,7 @@ contributors: title: Codelab Environment Requirements --- -import Requirements from '../transclusions/_requirements.md' +import Requirements from '../transclusions/requirements.md' diff --git a/src/pages/resources/event-driven/requirements.md b/src/pages/resources/event-driven/requirements.md index 20b4986b9..45e8107d5 100644 --- a/src/pages/resources/event-driven/requirements.md +++ b/src/pages/resources/event-driven/requirements.md @@ -9,7 +9,7 @@ contributors: title: Codelab Environment Requirements --- -import Requirements from '../transclusions/_requirements.md' +import Requirements from '../transclusions/requirements.md' diff --git a/src/pages/resources/events-runtime/requirements.md b/src/pages/resources/events-runtime/requirements.md index 306dd34e0..da461bf55 100644 --- a/src/pages/resources/events-runtime/requirements.md +++ b/src/pages/resources/events-runtime/requirements.md @@ -9,7 +9,7 @@ contributors: title: Codelab Environment Requirements --- -import Requirements from '../transclusions/_requirements.md' +import Requirements from '../transclusions/requirements.md' diff --git a/src/pages/resources/journaling-events/requirements.md b/src/pages/resources/journaling-events/requirements.md index d352627b6..7bcb0b1a3 100644 --- a/src/pages/resources/journaling-events/requirements.md +++ b/src/pages/resources/journaling-events/requirements.md @@ -9,7 +9,7 @@ contributors: title: Codelab Environment Requirements --- -import Requirements from '../transclusions/_requirements.md' +import Requirements from '../transclusions/requirements.md' diff --git a/src/pages/resources/spectrum-intro/requirements.md b/src/pages/resources/spectrum-intro/requirements.md index f8f4839da..f1a68cda9 100644 --- a/src/pages/resources/spectrum-intro/requirements.md +++ b/src/pages/resources/spectrum-intro/requirements.md @@ -7,6 +7,6 @@ keywords: title: Requirements --- -import Requirements from '../transclusions/_requirements.md' +import Requirements from '../transclusions/requirements.md' diff --git a/src/pages/resources/todo-app/requirements.md b/src/pages/resources/todo-app/requirements.md index f8f4839da..f1a68cda9 100644 --- a/src/pages/resources/todo-app/requirements.md +++ b/src/pages/resources/todo-app/requirements.md @@ -7,6 +7,6 @@ keywords: title: Requirements --- -import Requirements from '../transclusions/_requirements.md' +import Requirements from '../transclusions/requirements.md' From 77b7baae2ebe4a46f736fcfe848e9f04bf33db90 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 13:30:26 -0700 Subject: [PATCH 086/116] update --- src/pages/resources/custom-asset-compute-worker/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/resources/custom-asset-compute-worker/index.md b/src/pages/resources/custom-asset-compute-worker/index.md index edad16208..8e0e852c5 100644 --- a/src/pages/resources/custom-asset-compute-worker/index.md +++ b/src/pages/resources/custom-asset-compute-worker/index.md @@ -13,7 +13,8 @@ contributors: # Build Custom Asset Compute Worker ![front-banner](assets/hero-banner.jpg) -Hero banner created by starline - www.freepik.com + +[Hero banner created by starline - www.freepik.com](https://www.freepik.com/vectors/banner) > Note: This Code Lab is based on the [How to generate intelligent renditions with AEM as a Cloud](https://experienceleaguecommunities.adobe.com/t5/adobe-experience-manager/how-to-generate-intelligent-renditions-with-aem-as-a-cloud/m-p/379588) blog post. From 8ea1f09226f12dc50ac4fc5f29dd411d3e3446e0 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 13:35:57 -0700 Subject: [PATCH 087/116] update link --- src/pages/resources/sample_apps/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/resources/sample_apps/index.md b/src/pages/resources/sample_apps/index.md index 3fd5cd5f5..8268420d3 100644 --- a/src/pages/resources/sample_apps/index.md +++ b/src/pages/resources/sample_apps/index.md @@ -9,7 +9,7 @@ title: App Builder Sample Apps # Sample Apps -These are complete sample applications built using App Builder. See below for a [collection of code snippets](#code-snippets) for common operations. +These are complete sample applications built using App Builder. See below for a [collection of code snippets](index.md#code-snippets) for common operations. ## Overview From b052c470a91418af44d15bfc4fda8910da4a5311 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 13:37:25 -0700 Subject: [PATCH 088/116] update sampleApp --- src/pages/resources/sample_apps/index.md | 61 ------------------------ 1 file changed, 61 deletions(-) diff --git a/src/pages/resources/sample_apps/index.md b/src/pages/resources/sample_apps/index.md index 8268420d3..13add711e 100644 --- a/src/pages/resources/sample_apps/index.md +++ b/src/pages/resources/sample_apps/index.md @@ -9,64 +9,3 @@ title: App Builder Sample Apps # Sample Apps -These are complete sample applications built using App Builder. See below for a [collection of code snippets](index.md#code-snippets) for common operations. - -## Overview - - - -### Demo: Adobe Stock image search - -[Demo](demo.md) is an App Builder demo app that enables searching Adobe Stock images. - - - -### Customer profiles dashboard - -[Customer profiles dashboard](https://github.com/AdobeDocs/adobeio-samples-customers-dashboard) is a complete solution of the Code Lab [Build a Customer Profiles Dashboard with App Builder](../customer-dashboard/index.md) using Adobe Campaign Standard API. It lists customer profiles from Adobe Campaign Standard and allows sending marketing campaign emails with personalized promo codes. - - - -### Barcode generator - -[Barcode generator](https://github.com/AdobeDocs/adobeio-samples-barcode-generator) is a complete solution of the Code Lab App Builder [Barcode](../barcode-reader/index.md) headless app. The app will generate a code128 barcode based on the user-provided value. It’s a simple app that can be used and adapted for different use cases. - - - -### Throttled queue processing - -[Throttled queue processing](https://github.com/AdobeDocs/adobeio-samples-throttled-processing) is a headless application that manages processing of a queue of tasks that require communication with a throttled external system. It retrieves short URLs from bit.ly for which the request threshold depends on the pricing plan. - - - -### Custom Assets compute worker for AEM using Photoshop API - -[Custom Assets compute worker for AEM](https://github.com/AdobeDocs/adobeio-samples-assets-compute-photoshop) is a sample app that implements a custom Assets compute worker for AEM to generate cutout and automatically toned renditions by leveraging Photoshop APIs. - - - -### To-Do app with React Spectrum - -This is a complete solution of the Code Lab [Building an App Builder To-Do App with aio-lib-state and React Spectrum](https://github.com/AdobeDocs/adobeio-samples-todoapp), which shows you how to use aio-lib-state as part of Runtime actions and how to bind React Spectrum components to Runtime actions. - - - -### Journal browser using I/O Events library - -[Journal browser using I/O Events library](https://github.com/AdobeDocs/adobeio-samples-events-journal-browser) is an App Builder App that lets users browse through events from Journaling using a simple interface. - -### Adobe I/O Events - Azure Service Bus connector - -[Azure Service Bus connector](https://github.com/AdobeDocs/adobeio-samples-events-azureservicebus-connector) is a sample I/O Events consumer, built using App Builder, that forwards all incoming events to Azure Service Bus. This sample consumer application can be used as a reference to connect Adobe I/O Events with an enterprise's Azure Service Bus. - - - -## Code snippets - -Here is a collection of basic code snippets to get you started: - -* [Caching HTTP responses](code_snippets/index.md) -* [App Builder Files SDK](code_snippets/files.md) -* [App Builder State SDK](code_snippets/state.md) -* [I/O Events handler](code_snippets/events.md) -* [Real-time data from Adobe Analytics API 1.4](code_snippets/analytics.md) From 427f613b6034b5d7d980ed12ff176089d208fa47 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 13:39:04 -0700 Subject: [PATCH 089/116] update --- src/pages/resources/sample_apps/index.md | 61 ++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/src/pages/resources/sample_apps/index.md b/src/pages/resources/sample_apps/index.md index 13add711e..8268420d3 100644 --- a/src/pages/resources/sample_apps/index.md +++ b/src/pages/resources/sample_apps/index.md @@ -9,3 +9,64 @@ title: App Builder Sample Apps # Sample Apps +These are complete sample applications built using App Builder. See below for a [collection of code snippets](index.md#code-snippets) for common operations. + +## Overview + + + +### Demo: Adobe Stock image search + +[Demo](demo.md) is an App Builder demo app that enables searching Adobe Stock images. + + + +### Customer profiles dashboard + +[Customer profiles dashboard](https://github.com/AdobeDocs/adobeio-samples-customers-dashboard) is a complete solution of the Code Lab [Build a Customer Profiles Dashboard with App Builder](../customer-dashboard/index.md) using Adobe Campaign Standard API. It lists customer profiles from Adobe Campaign Standard and allows sending marketing campaign emails with personalized promo codes. + + + +### Barcode generator + +[Barcode generator](https://github.com/AdobeDocs/adobeio-samples-barcode-generator) is a complete solution of the Code Lab App Builder [Barcode](../barcode-reader/index.md) headless app. The app will generate a code128 barcode based on the user-provided value. It’s a simple app that can be used and adapted for different use cases. + + + +### Throttled queue processing + +[Throttled queue processing](https://github.com/AdobeDocs/adobeio-samples-throttled-processing) is a headless application that manages processing of a queue of tasks that require communication with a throttled external system. It retrieves short URLs from bit.ly for which the request threshold depends on the pricing plan. + + + +### Custom Assets compute worker for AEM using Photoshop API + +[Custom Assets compute worker for AEM](https://github.com/AdobeDocs/adobeio-samples-assets-compute-photoshop) is a sample app that implements a custom Assets compute worker for AEM to generate cutout and automatically toned renditions by leveraging Photoshop APIs. + + + +### To-Do app with React Spectrum + +This is a complete solution of the Code Lab [Building an App Builder To-Do App with aio-lib-state and React Spectrum](https://github.com/AdobeDocs/adobeio-samples-todoapp), which shows you how to use aio-lib-state as part of Runtime actions and how to bind React Spectrum components to Runtime actions. + + + +### Journal browser using I/O Events library + +[Journal browser using I/O Events library](https://github.com/AdobeDocs/adobeio-samples-events-journal-browser) is an App Builder App that lets users browse through events from Journaling using a simple interface. + +### Adobe I/O Events - Azure Service Bus connector + +[Azure Service Bus connector](https://github.com/AdobeDocs/adobeio-samples-events-azureservicebus-connector) is a sample I/O Events consumer, built using App Builder, that forwards all incoming events to Azure Service Bus. This sample consumer application can be used as a reference to connect Adobe I/O Events with an enterprise's Azure Service Bus. + + + +## Code snippets + +Here is a collection of basic code snippets to get you started: + +* [Caching HTTP responses](code_snippets/index.md) +* [App Builder Files SDK](code_snippets/files.md) +* [App Builder State SDK](code_snippets/state.md) +* [I/O Events handler](code_snippets/events.md) +* [Real-time data from Adobe Analytics API 1.4](code_snippets/analytics.md) From 4811dcc11c17ab90ee8f19a16f4bb35b6fd52b85 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 13:42:23 -0700 Subject: [PATCH 090/116] update --- src/pages/resources/sample_apps/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/resources/sample_apps/index.md b/src/pages/resources/sample_apps/index.md index 8268420d3..3fd5cd5f5 100644 --- a/src/pages/resources/sample_apps/index.md +++ b/src/pages/resources/sample_apps/index.md @@ -9,7 +9,7 @@ title: App Builder Sample Apps # Sample Apps -These are complete sample applications built using App Builder. See below for a [collection of code snippets](index.md#code-snippets) for common operations. +These are complete sample applications built using App Builder. See below for a [collection of code snippets](#code-snippets) for common operations. ## Overview From 0543750d42bc1f93ca2cf63e3d75d6a3a3406a76 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 13:49:37 -0700 Subject: [PATCH 091/116] update application-state --- .../app_builder_guides/application-state.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/pages/guides/app_builder_guides/application-state.md b/src/pages/guides/app_builder_guides/application-state.md index 932918ac3..88b645ce3 100644 --- a/src/pages/guides/app_builder_guides/application-state.md +++ b/src/pages/guides/app_builder_guides/application-state.md @@ -141,3 +141,19 @@ The default region is `amer`, to access another region, you can use the `--regio Navigate the CLI usage documentation from the repo's [README](https://github.com/adobe/aio-cli-plugin-app-storage?tab=readme-ov-file#usage) or by using the `--help` flag on the desired command. +### Usage quotas and limits + +The following quotas and limits apply while dealing with Application State associated with your App Builder application. + +Quotas are shared across the organisation. Workspace limits are defined at the *workspace* level. The State service may return 429 (rate-limits) or +403 (storage limits) errors if limits are exceeded. + +| Limit | Limit Type | Default Limit | Can it be Increased? | Notes | +|-----------------------------------------------------------------------------------------|---------------------------------------|----------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------| +| How much data can you store in State? | Quota (increases with number of packs) | Up to 10 GB per App Builder pack | Yes, by purchasing more packs of App Builder | Storage is calculated as: `(2 * total size of keys) + (total size of values)`. | +| How much State bandwidth can you utilize? | Quota (increases with number of packs) | 1 TB per month per App Builder pack | Yes, by purchasing more packs of App Builder | Bandwidth is calculated as: total bytes uploaded + total bytes downloaded. | +| How much data can you store in State in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1 GB for production workspaces
200 MB for other workspaces | Yes, by raising a support ticket. You can request an increase up to 10 GB.
*Note: Increasing the limit beyond 10 GB in a single workspace can be supported depending on your case. Raise a support ticket to find out more.* | Storage is calculated as: `(2 * total size of keys) + (total size of values)`. | +| How much State burst bandwidth can you consume in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1 MB/s (bursts)

10 MB/min for production workspaces
2 MB/min for other workspaces | Yes, by raising a support ticket. You can request an increase up to 3 MB/s and 30 MB/min per App Builder packs purchased. | Bandwidth is calculated as: `total bytes uploaded + total bytes downloaded`. | +| How fast can you increase your bandwidth consumption in a single App Builder workspace? | Workspace limit (fixed per workspace) | 100 KB/s per minute | No | - | +| How many keys can you store in State in a single App Builder workspace? | Workspace limit (fixed per workspace) | 200K | Yes, by raising a support ticket. You can request an increase up to 500K keys. | This limit does not scale with the number of App Builder packs purchased. | +| How many list operations can you run per minute in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1K/min | Yes, by raising a support ticket. You can request an increase up to 10K/min. | This limit does not scale with the number of App Builder packs purchased. | From 803356113316d531be2944d719e1a0347807d31e Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 13:53:17 -0700 Subject: [PATCH 092/116] update --- .../app_builder_guides/application-state.md | 101 ++++++++++++++++-- 1 file changed, 92 insertions(+), 9 deletions(-) diff --git a/src/pages/guides/app_builder_guides/application-state.md b/src/pages/guides/app_builder_guides/application-state.md index 88b645ce3..59b2ea05b 100644 --- a/src/pages/guides/app_builder_guides/application-state.md +++ b/src/pages/guides/app_builder_guides/application-state.md @@ -141,6 +141,15 @@ The default region is `amer`, to access another region, you can use the `--regio Navigate the CLI usage documentation from the repo's [README](https://github.com/adobe/aio-cli-plugin-app-storage?tab=readme-ov-file#usage) or by using the `--help` flag on the desired command. +### Constraints + +- State is only available to Runtime namespaces created via the Developer Console, which follow the App Builder format: `orgId-project(-workspace)?`. Legacy namespaces are not supported. +- Max state value size: `1MB`. +- Max state key size: `1024 bytes`. +- Max-supported TTL is `365 days`. +- Values format: any `string|binary`. +- Keys format: `string` only `alphanumeric` with `-`,`_`,`.`. + ### Usage quotas and limits The following quotas and limits apply while dealing with Application State associated with your App Builder application. @@ -148,12 +157,86 @@ The following quotas and limits apply while dealing with Application State assoc Quotas are shared across the organisation. Workspace limits are defined at the *workspace* level. The State service may return 429 (rate-limits) or 403 (storage limits) errors if limits are exceeded. -| Limit | Limit Type | Default Limit | Can it be Increased? | Notes | -|-----------------------------------------------------------------------------------------|---------------------------------------|----------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------| -| How much data can you store in State? | Quota (increases with number of packs) | Up to 10 GB per App Builder pack | Yes, by purchasing more packs of App Builder | Storage is calculated as: `(2 * total size of keys) + (total size of values)`. | -| How much State bandwidth can you utilize? | Quota (increases with number of packs) | 1 TB per month per App Builder pack | Yes, by purchasing more packs of App Builder | Bandwidth is calculated as: total bytes uploaded + total bytes downloaded. | -| How much data can you store in State in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1 GB for production workspaces
200 MB for other workspaces | Yes, by raising a support ticket. You can request an increase up to 10 GB.
*Note: Increasing the limit beyond 10 GB in a single workspace can be supported depending on your case. Raise a support ticket to find out more.* | Storage is calculated as: `(2 * total size of keys) + (total size of values)`. | -| How much State burst bandwidth can you consume in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1 MB/s (bursts)

10 MB/min for production workspaces
2 MB/min for other workspaces | Yes, by raising a support ticket. You can request an increase up to 3 MB/s and 30 MB/min per App Builder packs purchased. | Bandwidth is calculated as: `total bytes uploaded + total bytes downloaded`. | -| How fast can you increase your bandwidth consumption in a single App Builder workspace? | Workspace limit (fixed per workspace) | 100 KB/s per minute | No | - | -| How many keys can you store in State in a single App Builder workspace? | Workspace limit (fixed per workspace) | 200K | Yes, by raising a support ticket. You can request an increase up to 500K keys. | This limit does not scale with the number of App Builder packs purchased. | -| How many list operations can you run per minute in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1K/min | Yes, by raising a support ticket. You can request an increase up to 10K/min. | This limit does not scale with the number of App Builder packs purchased. | +| Limit | Limit Type | Default Limit | Can it be Increased? | Notes | +|-----------------------------------------------------------------------------------------|---------------------------------------|-----------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------| +| How much data can you store in State? | Quota (increases with number of packs) | Up to 10 GB per App Builder pack | Yes, by purchasing more packs of App Builder | Storage is calculated as: `(2 * total size of keys) + (total size of values)`. | +| How much State bandwidth can you utilize? | Quota (increases with number of packs) | 1 TB per month per App Builder pack | Yes, by purchasing more packs of App Builder | Bandwidth is calculated as: total bytes uploaded + total bytes downloaded. | +| How much data can you store in State in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1 GB for production workspaces 200 MB for other workspaces | Yes, by raising a support ticket. You can request an increase up to 10 GB. *Note: Increasing the limit beyond 10 GB in a single workspace can be supported depending on your case. Raise a support ticket to find out more.* | Storage is calculated as: `(2 * total size of keys) + (total size of values)`. | +| How much State burst bandwidth can you consume in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1 MB/s (bursts) 10 MB/min for production workspaces 2 MB/min for other workspaces | Yes, by raising a support ticket. You can request an increase up to 3 MB/s and 30 MB/min per App Builder packs purchased. | Bandwidth is calculated as: `total bytes uploaded + total bytes downloaded`. | +| How fast can you increase your bandwidth consumption in a single App Builder workspace? | Workspace limit (fixed per workspace) | 100 KB/s per minute | No | - | +| How many keys can you store in State in a single App Builder workspace? | Workspace limit (fixed per workspace) | 200K | Yes, by raising a support ticket. You can request an increase up to 500K keys. | This limit does not scale with the number of App Builder packs purchased. | +| How many list operations can you run per minute in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1K/min | Yes, by raising a support ticket. You can request an increase up to 10K/min. | This limit does not scale with the number of App Builder packs purchased. | + +### List considerations + +Using `state.list`, you can scan through the keys stored in your State container. `list` is a cursor-based iterator, which requires multiple calls to the State service to traverse all your keys. + +It is important to understand that `list` is scanning through your keys: + +- **the more keys you have stored**, the longer a full iteration will take to complete, regardless of whether you use the [using a glob-style pattern](#match-option). +- every call to `list` will iterate over up to 1000 keys. The former `countHint` option is now ignored. +- As an example, trying to match 1 key in a 10k key-values data-set will still require 10 calls to `list` to fetch it. + +The `list` command is not strongly consistent, and the following points need to be taken into account: + +- We are sending `list` requests to a replica, there is a ~5ms lag, after which a + full iteration returns keys that were present in the container and doesn't + return keys that were deleted prior to an iteration. +- Keys that were not constantly present in the collection during a full + iteration, may be returned or not: it is undefined. +- A given key may be returned multiple times across iterations (but not within a + same iteration). You can mitigate this by either performing operations that are + safe when applied multiple times (recommended with many keys) or by collecting all keys in an + array first and then remove any duplicates. +- In some rare cases, `list` may return expired keys. + +Please note, that `list` is subject to rate-limiting, so listing many keys may result in 429s. + +### `match` option + +`state.deleteAll` and `state.list` support a `match` option to filter keys. + +`match` supports a glob-style pattern via the `*` character, suppose you have the following keys: `key`, `base.key`, `key-1` + +- `match=key` will match `key` +- `match=k*` will match `key` +- `match=*k*` will match `key`, `base.key`, `key-1` +- `match=*-1` will match `key-1` +- `match=base.*-1` will match none + +The `match` filter is applied server-side **after** traversing elements, this means: + +- `match` does not reduce the work needed to iterate over your key-values. +- every call to `list` may return only few keys when matching a handful of key-values in a large dataset. + +### Troubleshooting + +Set `DEBUG=@adobe/aio-lib-state*` to see debug logs. + +## Files + +*Files is currently implemented as an abstraction layer over Azure Blob. Major changes and additional features are planned, stay tuned.* + +To learn more please visit the [Adobe I/O File Storage library](https://github.com/adobe/aio-lib-files?tab=readme-ov-file#adobe-io-lib-files) repository. + +## Feature Matrix + +| | Files | State | State Legacy | +|---------------------|-----------------------------|----------------------------------------|--------------------------------| +| read write delete | Y | Y | Y | +| list | Y | Y | N | +| streams | Y | N | N | +| copy | Y | N | N | +| deleteAll | N | Y | N | +| sharing | Y (pre-sign URLs) | N | N | +| Time-To-Live | N | Y | Y | +| max TTL | infinite | 365 days | infinite | +| max file/value size | 200GB | 1MB | 2MB | +| max key size | 1KB | 1KB | 1KB | +| key charset | open | `alphanumeric` with `_-.` | any but `/\?#` | +| max load | N/A | 10MB/min, 1MB/s 1k/min `list` requests | 900 RU/min (~KB/min) | +| max key values | N/A | 200K (scalable) | N/A | +| max storage | 1TB | 10GB | 10GB | +| max monthly load | N/A | 1TB (scalable) | N/A | +| regions | East US West US read-only | Amer (US) Emea (EU) Apac (JPN) | East US Europe read-only | +| consistency | strong | strong (CRUD), eventual for `list` | eventual | From 2c404509cde97340f2407436d7aebfc207f667b2 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 16:14:40 -0700 Subject: [PATCH 093/116] with no table --- .../app_builder_guides/application-state.md | 30 ------------------- 1 file changed, 30 deletions(-) diff --git a/src/pages/guides/app_builder_guides/application-state.md b/src/pages/guides/app_builder_guides/application-state.md index 59b2ea05b..1c167d302 100644 --- a/src/pages/guides/app_builder_guides/application-state.md +++ b/src/pages/guides/app_builder_guides/application-state.md @@ -157,16 +157,6 @@ The following quotas and limits apply while dealing with Application State assoc Quotas are shared across the organisation. Workspace limits are defined at the *workspace* level. The State service may return 429 (rate-limits) or 403 (storage limits) errors if limits are exceeded. -| Limit | Limit Type | Default Limit | Can it be Increased? | Notes | -|-----------------------------------------------------------------------------------------|---------------------------------------|-----------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------| -| How much data can you store in State? | Quota (increases with number of packs) | Up to 10 GB per App Builder pack | Yes, by purchasing more packs of App Builder | Storage is calculated as: `(2 * total size of keys) + (total size of values)`. | -| How much State bandwidth can you utilize? | Quota (increases with number of packs) | 1 TB per month per App Builder pack | Yes, by purchasing more packs of App Builder | Bandwidth is calculated as: total bytes uploaded + total bytes downloaded. | -| How much data can you store in State in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1 GB for production workspaces 200 MB for other workspaces | Yes, by raising a support ticket. You can request an increase up to 10 GB. *Note: Increasing the limit beyond 10 GB in a single workspace can be supported depending on your case. Raise a support ticket to find out more.* | Storage is calculated as: `(2 * total size of keys) + (total size of values)`. | -| How much State burst bandwidth can you consume in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1 MB/s (bursts) 10 MB/min for production workspaces 2 MB/min for other workspaces | Yes, by raising a support ticket. You can request an increase up to 3 MB/s and 30 MB/min per App Builder packs purchased. | Bandwidth is calculated as: `total bytes uploaded + total bytes downloaded`. | -| How fast can you increase your bandwidth consumption in a single App Builder workspace? | Workspace limit (fixed per workspace) | 100 KB/s per minute | No | - | -| How many keys can you store in State in a single App Builder workspace? | Workspace limit (fixed per workspace) | 200K | Yes, by raising a support ticket. You can request an increase up to 500K keys. | This limit does not scale with the number of App Builder packs purchased. | -| How many list operations can you run per minute in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1K/min | Yes, by raising a support ticket. You can request an increase up to 10K/min. | This limit does not scale with the number of App Builder packs purchased. | - ### List considerations Using `state.list`, you can scan through the keys stored in your State container. `list` is a cursor-based iterator, which requires multiple calls to the State service to traverse all your keys. @@ -220,23 +210,3 @@ Set `DEBUG=@adobe/aio-lib-state*` to see debug logs. To learn more please visit the [Adobe I/O File Storage library](https://github.com/adobe/aio-lib-files?tab=readme-ov-file#adobe-io-lib-files) repository. ## Feature Matrix - -| | Files | State | State Legacy | -|---------------------|-----------------------------|----------------------------------------|--------------------------------| -| read write delete | Y | Y | Y | -| list | Y | Y | N | -| streams | Y | N | N | -| copy | Y | N | N | -| deleteAll | N | Y | N | -| sharing | Y (pre-sign URLs) | N | N | -| Time-To-Live | N | Y | Y | -| max TTL | infinite | 365 days | infinite | -| max file/value size | 200GB | 1MB | 2MB | -| max key size | 1KB | 1KB | 1KB | -| key charset | open | `alphanumeric` with `_-.` | any but `/\?#` | -| max load | N/A | 10MB/min, 1MB/s 1k/min `list` requests | 900 RU/min (~KB/min) | -| max key values | N/A | 200K (scalable) | N/A | -| max storage | 1TB | 10GB | 10GB | -| max monthly load | N/A | 1TB (scalable) | N/A | -| regions | East US West US read-only | Amer (US) Emea (EU) Apac (JPN) | East US Europe read-only | -| consistency | strong | strong (CRUD), eventual for `list` | eventual | From c6e741b26ccc4ea193beeb9033ee7571701ad10c Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 16:15:16 -0700 Subject: [PATCH 094/116] update --- .../app_builder_guides/application-state.md | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/pages/guides/app_builder_guides/application-state.md b/src/pages/guides/app_builder_guides/application-state.md index 1c167d302..55374098f 100644 --- a/src/pages/guides/app_builder_guides/application-state.md +++ b/src/pages/guides/app_builder_guides/application-state.md @@ -157,6 +157,16 @@ The following quotas and limits apply while dealing with Application State assoc Quotas are shared across the organisation. Workspace limits are defined at the *workspace* level. The State service may return 429 (rate-limits) or 403 (storage limits) errors if limits are exceeded. +| Limit | Limit Type | Default Limit | Can it be Increased? | Notes | +|-----------------------------------------------------------------------------------------|---------------------------------------|-----------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------| +| How much data can you store in State? | Quota (increases with number of packs) | Up to 10 GB per App Builder pack | Yes, by purchasing more packs of App Builder | Storage is calculated as: `(2 * total size of keys) + (total size of values)`. | +| How much State bandwidth can you utilize? | Quota (increases with number of packs) | 1 TB per month per App Builder pack | Yes, by purchasing more packs of App Builder | Bandwidth is calculated as: total bytes uploaded + total bytes downloaded. | +| How much data can you store in State in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1 GB for production workspaces 200 MB for other workspaces | Yes, by raising a support ticket. You can request an increase up to 10 GB. *Note: Increasing the limit beyond 10 GB in a single workspace can be supported depending on your case. Raise a support ticket to find out more.* | Storage is calculated as: `(2 * total size of keys) + (total size of values)`. | +| How much State burst bandwidth can you consume in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1 MB/s (bursts) 10 MB/min for production workspaces 2 MB/min for other workspaces | Yes, by raising a support ticket. You can request an increase up to 3 MB/s and 30 MB/min per App Builder packs purchased. | Bandwidth is calculated as: `total bytes uploaded + total bytes downloaded`. | +| How fast can you increase your bandwidth consumption in a single App Builder workspace? | Workspace limit (fixed per workspace) | 100 KB/s per minute | No | - | +| How many keys can you store in State in a single App Builder workspace? | Workspace limit (fixed per workspace) | 200K | Yes, by raising a support ticket. You can request an increase up to 500K keys. | This limit does not scale with the number of App Builder packs purchased. | +| How many list operations can you run per minute in a single App Builder workspace? | Workspace limit (fixed per workspace) | 1K/min | Yes, by raising a support ticket. You can request an increase up to 10K/min. | This limit does not scale with the number of App Builder packs purchased. | + ### List considerations Using `state.list`, you can scan through the keys stored in your State container. `list` is a cursor-based iterator, which requires multiple calls to the State service to traverse all your keys. @@ -210,3 +220,23 @@ Set `DEBUG=@adobe/aio-lib-state*` to see debug logs. To learn more please visit the [Adobe I/O File Storage library](https://github.com/adobe/aio-lib-files?tab=readme-ov-file#adobe-io-lib-files) repository. ## Feature Matrix + +| | Files | State | State Legacy | +|---------------------|-----------------------------|----------------------------------------|----------------------------| +| read write delete | Y | Y | Y | +| list | Y | Y | N | +| streams | Y | N | N | +| copy | Y | N | N | +| deleteAll | N | Y | N | +| sharing | Y (pre-sign URLs) | N | N | +| Time-To-Live | N | Y | Y | +| max TTL | infinite | 365 days | infinite | +| max file/value size | 200GB | 1MB | 2MB | +| max key size | 1KB | 1KB | 1KB | +| key charset | open | `alphanumeric` with `_-.` | any but `/\?#` | +| max load | N/A | 10MB/min, 1MB/s 1k/min `list` requests | 900 RU/min (~KB/min) | +| max key values | N/A | 200K (scalable) | N/A | +| max storage | 1TB | 10GB | 10GB | +| max monthly load | N/A | 1TB (scalable) | N/A | +| regions | East US West US read-only | Amer (US) Emea (EU) Apac (JPN) | East US Europe read-only | +| consistency | strong | strong (CRUD), eventual for `list` | eventual | From 463f8b323eb9a47a4472c2095264903f515ed329 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 20:44:53 -0700 Subject: [PATCH 095/116] update --- .../guides/runtime_guides/reference_docs/configuringproxy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/guides/runtime_guides/reference_docs/configuringproxy.md b/src/pages/guides/runtime_guides/reference_docs/configuringproxy.md index 5714396a2..d205f7cc6 100644 --- a/src/pages/guides/runtime_guides/reference_docs/configuringproxy.md +++ b/src/pages/guides/runtime_guides/reference_docs/configuringproxy.md @@ -4,7 +4,7 @@ For security reasons, Runtime does not expose egress IPs. Customers who need a w This can be done by adding a proxy component (in this example, an AWS EC2 instance running nginx). The proxy component will have a fixed IP address, so using an IP allowlist can secure the backend service. Communication between I/O Runtime and the proxy component will be secured via mutual TLS (mTLS) communication. -![](../../images/configure-proxy.png) +![](../../../images/configure-proxy.png) The following steps outline how to: From 8bf9c3fab1759265ab5bb1125f9ad28bddc85830 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 20:59:40 -0700 Subject: [PATCH 096/116] update --- src/pages/get_started/app_builder_get_started/set-up.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/pages/get_started/app_builder_get_started/set-up.md b/src/pages/get_started/app_builder_get_started/set-up.md index c327b0f51..d3ba1ad83 100644 --- a/src/pages/get_started/app_builder_get_started/set-up.md +++ b/src/pages/get_started/app_builder_get_started/set-up.md @@ -8,8 +8,6 @@ title: Set Up Access, Environment, and Tools description: App Builder is a complete framework that enables enterprise developers to build and deploy custom web applications that extend Adobe Experience Cloud solutions and run on Adobe infrastructure. --- -import NPMBadge from '../../../components/NPMBadge.js' - # Set Up Access, Environment, and Tools Here you'll learn what systems you need to access, how to access them, and how to configure your local environment. @@ -41,7 +39,7 @@ Here you'll learn what systems you need to access, how to access them, and how t [**Adobe I/O Command Line Interface (CLI)**](https://github.com/adobe/aio-cli) - `npm install -g @adobe/aio-cli` -- If Adobe I/O CLI is already installed, please make sure you have the latest version: +- If Adobe I/O CLI is already installed, please make sure you have the latest version: NPM version - Check your CLI version using `aio -v` and compare it to`npm show @adobe/aio-cli version`. If your CLI is outdated, update it by running `npm install -g @adobe/aio-cli`. - Even if your Adobe I/O CLI is up to date, run `aio update` to make sure all core plugins are updated. - For seven days after release of a new version of Adobe I/O CLI, you'll see a message like this before the command output: From 14c832b6a8f469e05c7bcc850f60e50e0d5379dd Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 21:02:32 -0700 Subject: [PATCH 097/116] without badge --- src/pages/get_started/app_builder_get_started/set-up.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/get_started/app_builder_get_started/set-up.md b/src/pages/get_started/app_builder_get_started/set-up.md index d3ba1ad83..2b4ab2831 100644 --- a/src/pages/get_started/app_builder_get_started/set-up.md +++ b/src/pages/get_started/app_builder_get_started/set-up.md @@ -39,7 +39,7 @@ Here you'll learn what systems you need to access, how to access them, and how t [**Adobe I/O Command Line Interface (CLI)**](https://github.com/adobe/aio-cli) - `npm install -g @adobe/aio-cli` -- If Adobe I/O CLI is already installed, please make sure you have the latest version: NPM version +- If Adobe I/O CLI is already installed, please make sure you have the latest version: - Check your CLI version using `aio -v` and compare it to`npm show @adobe/aio-cli version`. If your CLI is outdated, update it by running `npm install -g @adobe/aio-cli`. - Even if your Adobe I/O CLI is up to date, run `aio update` to make sure all core plugins are updated. - For seven days after release of a new version of Adobe I/O CLI, you'll see a message like this before the command output: From e8dd06593283b4b1b12fea1ac48f27fdcb09c223 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Thu, 15 May 2025 21:03:41 -0700 Subject: [PATCH 098/116] update --- src/pages/get_started/app_builder_get_started/set-up.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/get_started/app_builder_get_started/set-up.md b/src/pages/get_started/app_builder_get_started/set-up.md index 2b4ab2831..d3ba1ad83 100644 --- a/src/pages/get_started/app_builder_get_started/set-up.md +++ b/src/pages/get_started/app_builder_get_started/set-up.md @@ -39,7 +39,7 @@ Here you'll learn what systems you need to access, how to access them, and how t [**Adobe I/O Command Line Interface (CLI)**](https://github.com/adobe/aio-cli) - `npm install -g @adobe/aio-cli` -- If Adobe I/O CLI is already installed, please make sure you have the latest version: +- If Adobe I/O CLI is already installed, please make sure you have the latest version: NPM version - Check your CLI version using `aio -v` and compare it to`npm show @adobe/aio-cli version`. If your CLI is outdated, update it by running `npm install -g @adobe/aio-cli`. - Even if your Adobe I/O CLI is up to date, run `aio update` to make sure all core plugins are updated. - For seven days after release of a new version of Adobe I/O CLI, you'll see a message like this before the command output: From 2041ce237da3bea1a8cab432972dd26963e94eb0 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Tue, 20 May 2025 16:54:08 -0700 Subject: [PATCH 099/116] update badge icon --- src/pages/get_started/app_builder_get_started/set-up.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/get_started/app_builder_get_started/set-up.md b/src/pages/get_started/app_builder_get_started/set-up.md index d3ba1ad83..1840716cb 100644 --- a/src/pages/get_started/app_builder_get_started/set-up.md +++ b/src/pages/get_started/app_builder_get_started/set-up.md @@ -39,7 +39,7 @@ Here you'll learn what systems you need to access, how to access them, and how t [**Adobe I/O Command Line Interface (CLI)**](https://github.com/adobe/aio-cli) - `npm install -g @adobe/aio-cli` -- If Adobe I/O CLI is already installed, please make sure you have the latest version: NPM version +- If Adobe I/O CLI is already installed, please make sure you have the latest version: ![badge](https://img.shields.io/npm/v/@adobe/aio-cli.svg) - Check your CLI version using `aio -v` and compare it to`npm show @adobe/aio-cli version`. If your CLI is outdated, update it by running `npm install -g @adobe/aio-cli`. - Even if your Adobe I/O CLI is up to date, run `aio update` to make sure all core plugins are updated. - For seven days after release of a new version of Adobe I/O CLI, you'll see a message like this before the command output: From 28a2f1b9cde566ee0389f76fbc2fcf69fd0560f5 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 21 May 2025 10:37:21 -0700 Subject: [PATCH 100/116] update sample app --- src/pages/config.md | 4 +- src/pages/resources/sample_apps/index.md | 51 +----------------------- 2 files changed, 3 insertions(+), 52 deletions(-) diff --git a/src/pages/config.md b/src/pages/config.md index db62bbc96..010fd47ff 100644 --- a/src/pages/config.md +++ b/src/pages/config.md @@ -187,7 +187,7 @@ - [Well done](resources/journaling-events/welldone.md) - [Sample Apps](resources/sample_apps/index.md) - [Code Snippets](resources/sample_apps/code_snippets/index.md) - - [Caching HTTP responses](resources/sample_apps/code_snippets/caching) + - [Caching HTTP responses](resources/sample_apps/code_snippets/caching.md) - [App Builder Files SDK](resources/sample_apps/code_snippets/files.md) - [App Builder State SDK](resources/sample_apps/code_snippets/state.md) - [I/O Events handler](resources/sample_apps/code_snippets/events.md) @@ -208,7 +208,7 @@ - [Lesson 6: Bringing the pieces together to build the App](resources/todo-app/lesson6.md) - [Well done](resources/todo-app/welldone.md) - [Videos](resources/videos/index.md) - - [Overview](resources/videos/overview) + - [Overview](resources/videos/overview.md) - [Introducing App Builder](resources/videos/overview/introduction.md) - [Getting Started](resources/videos/overview/getting-started.md) - [Architecture](resources/videos/overview/architecture.md) diff --git a/src/pages/resources/sample_apps/index.md b/src/pages/resources/sample_apps/index.md index 3fd5cd5f5..d30d56937 100644 --- a/src/pages/resources/sample_apps/index.md +++ b/src/pages/resources/sample_apps/index.md @@ -7,7 +7,7 @@ keywords: title: App Builder Sample Apps --- -# Sample Apps +# Sample Apps These are complete sample applications built using App Builder. See below for a [collection of code snippets](#code-snippets) for common operations. @@ -21,52 +21,3 @@ These are complete sample applications built using App Builder. See below for a -### Customer profiles dashboard - -[Customer profiles dashboard](https://github.com/AdobeDocs/adobeio-samples-customers-dashboard) is a complete solution of the Code Lab [Build a Customer Profiles Dashboard with App Builder](../customer-dashboard/index.md) using Adobe Campaign Standard API. It lists customer profiles from Adobe Campaign Standard and allows sending marketing campaign emails with personalized promo codes. - - - -### Barcode generator - -[Barcode generator](https://github.com/AdobeDocs/adobeio-samples-barcode-generator) is a complete solution of the Code Lab App Builder [Barcode](../barcode-reader/index.md) headless app. The app will generate a code128 barcode based on the user-provided value. It’s a simple app that can be used and adapted for different use cases. - - - -### Throttled queue processing - -[Throttled queue processing](https://github.com/AdobeDocs/adobeio-samples-throttled-processing) is a headless application that manages processing of a queue of tasks that require communication with a throttled external system. It retrieves short URLs from bit.ly for which the request threshold depends on the pricing plan. - - - -### Custom Assets compute worker for AEM using Photoshop API - -[Custom Assets compute worker for AEM](https://github.com/AdobeDocs/adobeio-samples-assets-compute-photoshop) is a sample app that implements a custom Assets compute worker for AEM to generate cutout and automatically toned renditions by leveraging Photoshop APIs. - - - -### To-Do app with React Spectrum - -This is a complete solution of the Code Lab [Building an App Builder To-Do App with aio-lib-state and React Spectrum](https://github.com/AdobeDocs/adobeio-samples-todoapp), which shows you how to use aio-lib-state as part of Runtime actions and how to bind React Spectrum components to Runtime actions. - - - -### Journal browser using I/O Events library - -[Journal browser using I/O Events library](https://github.com/AdobeDocs/adobeio-samples-events-journal-browser) is an App Builder App that lets users browse through events from Journaling using a simple interface. - -### Adobe I/O Events - Azure Service Bus connector - -[Azure Service Bus connector](https://github.com/AdobeDocs/adobeio-samples-events-azureservicebus-connector) is a sample I/O Events consumer, built using App Builder, that forwards all incoming events to Azure Service Bus. This sample consumer application can be used as a reference to connect Adobe I/O Events with an enterprise's Azure Service Bus. - - - -## Code snippets - -Here is a collection of basic code snippets to get you started: - -* [Caching HTTP responses](code_snippets/index.md) -* [App Builder Files SDK](code_snippets/files.md) -* [App Builder State SDK](code_snippets/state.md) -* [I/O Events handler](code_snippets/events.md) -* [Real-time data from Adobe Analytics API 1.4](code_snippets/analytics.md) From 9b1ab52b4abc5a2f63a2719e977aa38125d6bd3b Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 21 May 2025 11:08:25 -0700 Subject: [PATCH 101/116] test --- src/pages/resources/sample_apps/index.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/pages/resources/sample_apps/index.md b/src/pages/resources/sample_apps/index.md index d30d56937..dc94dd1fe 100644 --- a/src/pages/resources/sample_apps/index.md +++ b/src/pages/resources/sample_apps/index.md @@ -19,5 +19,3 @@ These are complete sample applications built using App Builder. See below for a [Demo](demo.md) is an App Builder demo app that enables searching Adobe Stock images. - - From e08ea901688fc64fccc75a71c472f960aa4180c0 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 21 May 2025 11:13:10 -0700 Subject: [PATCH 102/116] update --- src/pages/resources/sample_apps/index.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/pages/resources/sample_apps/index.md b/src/pages/resources/sample_apps/index.md index dc94dd1fe..f4d476eca 100644 --- a/src/pages/resources/sample_apps/index.md +++ b/src/pages/resources/sample_apps/index.md @@ -10,12 +10,3 @@ title: App Builder Sample Apps # Sample Apps These are complete sample applications built using App Builder. See below for a [collection of code snippets](#code-snippets) for common operations. - -## Overview - - - -### Demo: Adobe Stock image search - -[Demo](demo.md) is an App Builder demo app that enables searching Adobe Stock images. - From b0c79ec3d3bc1629fc8d1f68e94d2f94e782212a Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 21 May 2025 11:16:32 -0700 Subject: [PATCH 103/116] update --- src/pages/resources/sample_apps/index.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/pages/resources/sample_apps/index.md b/src/pages/resources/sample_apps/index.md index f4d476eca..25e42cfb2 100644 --- a/src/pages/resources/sample_apps/index.md +++ b/src/pages/resources/sample_apps/index.md @@ -10,3 +10,15 @@ title: App Builder Sample Apps # Sample Apps These are complete sample applications built using App Builder. See below for a [collection of code snippets](#code-snippets) for common operations. + +## Overview + + + +### Demo: Adobe Stock image search + +[Demo](demo.md) + +is an App Builder demo app that enables searching Adobe Stock images. + + From 718b7f1f540f714d20610bf0e17839bd64f408a6 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 21 May 2025 11:18:23 -0700 Subject: [PATCH 104/116] update --- src/pages/resources/sample_apps/index.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/pages/resources/sample_apps/index.md b/src/pages/resources/sample_apps/index.md index 25e42cfb2..9e94eb6fd 100644 --- a/src/pages/resources/sample_apps/index.md +++ b/src/pages/resources/sample_apps/index.md @@ -15,10 +15,9 @@ These are complete sample applications built using App Builder. See below for a -### Demo: Adobe Stock image search +### Spectrum introduction -[Demo](demo.md) - -is an App Builder demo app that enables searching Adobe Stock images. +[Start (20 min)](spectrum-intro/index.md) +Introduction to Spectrum to build an App Builder App UI. From 9fc81c1f34f031af6a0286afbc45fb6f5e7ea3bb Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 21 May 2025 11:30:36 -0700 Subject: [PATCH 105/116] update --- src/pages/resources/sample_apps/index.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/pages/resources/sample_apps/index.md b/src/pages/resources/sample_apps/index.md index 9e94eb6fd..25e42cfb2 100644 --- a/src/pages/resources/sample_apps/index.md +++ b/src/pages/resources/sample_apps/index.md @@ -15,9 +15,10 @@ These are complete sample applications built using App Builder. See below for a -### Spectrum introduction +### Demo: Adobe Stock image search -[Start (20 min)](spectrum-intro/index.md) +[Demo](demo.md) + +is an App Builder demo app that enables searching Adobe Stock images. -Introduction to Spectrum to build an App Builder App UI. From 997a293358a457491fe72a7c66d84be04a498dbc Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 21 May 2025 11:37:15 -0700 Subject: [PATCH 106/116] update demo --- src/pages/resources/sample_apps/demo.md | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/pages/resources/sample_apps/demo.md b/src/pages/resources/sample_apps/demo.md index e1566f9e5..fef7c9072 100644 --- a/src/pages/resources/sample_apps/demo.md +++ b/src/pages/resources/sample_apps/demo.md @@ -1,13 +1,11 @@ --- - keywords: - - Adobe I/O -- Extensibility -- API Documentation -- Developer Tooling + - Extensibility + - API Documentation + - Developer Tooling title: App Builder Demo App -frameSrc: https://53444-stocksearch-stage.adobeio-static.net/index.html -frameHeight: 500px +--- + + ---- \ No newline at end of file From 49c0ea34554a52037d7bb9c043a7ea12674544a4 Mon Sep 17 00:00:00 2001 From: Louisa Chu Date: Wed, 21 May 2025 11:45:04 -0700 Subject: [PATCH 107/116] update --- src/pages/resources/sample_apps/demo.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/resources/sample_apps/demo.md b/src/pages/resources/sample_apps/demo.md index fef7c9072..419ad7851 100644 --- a/src/pages/resources/sample_apps/demo.md +++ b/src/pages/resources/sample_apps/demo.md @@ -7,5 +7,6 @@ keywords: title: App Builder Demo App --- - +