@cdmbase/wiki-browser 12.0.18-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/lib/components/Logo.d.ts +4 -0
- package/lib/components/Logo.d.ts.map +1 -0
- package/lib/components/Logo.js +16 -0
- package/lib/components/Logo.js.map +1 -0
- package/lib/components/help/SidebarSearch.d.ts +8 -0
- package/lib/components/help/SidebarSearch.d.ts.map +1 -0
- package/lib/components/help/SidebarSearch.js +111 -0
- package/lib/components/help/SidebarSearch.js.map +1 -0
- package/lib/components/help/index.d.ts +2 -0
- package/lib/components/help/index.d.ts.map +1 -0
- package/lib/components/landing/FeatureCard.d.ts +13 -0
- package/lib/components/landing/FeatureCard.d.ts.map +1 -0
- package/lib/components/landing/FeatureCard.js +85 -0
- package/lib/components/landing/FeatureCard.js.map +1 -0
- package/lib/components/landing/QuickLinkCard.d.ts +8 -0
- package/lib/components/landing/QuickLinkCard.d.ts.map +1 -0
- package/lib/components/landing/QuickLinkCard.js +26 -0
- package/lib/components/landing/QuickLinkCard.js.map +1 -0
- package/lib/components/landing/SearchInput.d.ts +10 -0
- package/lib/components/landing/SearchInput.d.ts.map +1 -0
- package/lib/components/landing/SearchInput.js +223 -0
- package/lib/components/landing/SearchInput.js.map +1 -0
- package/lib/components/landing/index.d.ts +4 -0
- package/lib/components/landing/index.d.ts.map +1 -0
- package/lib/components/welcome.d.ts +3 -0
- package/lib/components/welcome.d.ts.map +1 -0
- package/lib/compute.d.ts +4 -0
- package/lib/compute.d.ts.map +1 -0
- package/lib/compute.js +96 -0
- package/lib/compute.js.map +1 -0
- package/lib/config/env-config.d.ts +4 -0
- package/lib/config/env-config.d.ts.map +1 -0
- package/lib/config/env-config.js +7 -0
- package/lib/config/env-config.js.map +1 -0
- package/lib/docs.config.d.ts +48 -0
- package/lib/docs.config.d.ts.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -0
- package/lib/loaders/search.d.ts +1 -0
- package/lib/loaders/search.d.ts.map +1 -0
- package/lib/module.d.ts +4 -0
- package/lib/module.d.ts.map +1 -0
- package/lib/module.js +11 -0
- package/lib/module.js.map +1 -0
- package/lib/pages/ArticlePage/ArticlePage.d.ts +4 -0
- package/lib/pages/ArticlePage/ArticlePage.d.ts.map +1 -0
- package/lib/pages/ArticlePage/ArticlePage.js +222 -0
- package/lib/pages/ArticlePage/ArticlePage.js.map +1 -0
- package/lib/pages/ArticlePage/index.d.ts +3 -0
- package/lib/pages/ArticlePage/index.d.ts.map +1 -0
- package/lib/pages/ArticlePage/index.js +3 -0
- package/lib/pages/ArticlePage/index.js.map +1 -0
- package/lib/pages/CategoryCollection/CategoryCollection.d.ts +4 -0
- package/lib/pages/CategoryCollection/CategoryCollection.d.ts.map +1 -0
- package/lib/pages/CategoryCollection/CategoryCollection.js +103 -0
- package/lib/pages/CategoryCollection/CategoryCollection.js.map +1 -0
- package/lib/pages/CategoryCollection/index.d.ts +3 -0
- package/lib/pages/CategoryCollection/index.d.ts.map +1 -0
- package/lib/pages/CategoryCollection/index.js +3 -0
- package/lib/pages/CategoryCollection/index.js.map +1 -0
- package/lib/pages/Help/HelpIndex.d.ts +4 -0
- package/lib/pages/Help/HelpIndex.d.ts.map +1 -0
- package/lib/pages/Help/HelpIndex.js +44 -0
- package/lib/pages/Help/HelpIndex.js.map +1 -0
- package/lib/pages/Help/index.d.ts +4 -0
- package/lib/pages/Help/index.d.ts.map +1 -0
- package/lib/pages/Help/index.js +226 -0
- package/lib/pages/Help/index.js.map +1 -0
- package/lib/pages/Landing/index.d.ts +3 -0
- package/lib/pages/Landing/index.d.ts.map +1 -0
- package/lib/pages/Landing/index.js +281 -0
- package/lib/pages/Landing/index.js.map +1 -0
- package/lib/routes.json +2533 -0
- package/lib/seo.d.ts +22 -0
- package/lib/seo.d.ts.map +1 -0
- package/lib/slot-fill/FooterFill.d.ts +3 -0
- package/lib/slot-fill/FooterFill.d.ts.map +1 -0
- package/lib/slot-fill/FooterFill.js +18 -0
- package/lib/slot-fill/FooterFill.js.map +1 -0
- package/lib/slot-fill/LogoFill.d.ts +5 -0
- package/lib/slot-fill/LogoFill.d.ts.map +1 -0
- package/lib/slot-fill/LogoFill.js +74 -0
- package/lib/slot-fill/LogoFill.js.map +1 -0
- package/lib/slot-fill/consts.d.ts +5 -0
- package/lib/slot-fill/consts.d.ts.map +1 -0
- package/lib/slot-fill/consts.js +1 -0
- package/lib/slot-fill/consts.js.map +1 -0
- package/lib/slot-fill/index.d.ts +4 -0
- package/lib/slot-fill/index.d.ts.map +1 -0
- package/lib/templates/assets/images/add-link-frontend.png +0 -0
- package/lib/templates/assets/images/add-package-backend.png +0 -0
- package/lib/templates/assets/images/add-to-backend-module.png +0 -0
- package/lib/templates/assets/images/add-upload-client-frontend.png +0 -0
- package/lib/templates/assets/images/additional-parameters.png +0 -0
- package/lib/templates/assets/images/aeh-implementation.png +0 -0
- package/lib/templates/assets/images/aeh-usage.png +0 -0
- package/lib/templates/assets/images/apollo-client/recommendation_cache_mgmt.png +0 -0
- package/lib/templates/assets/images/app-deploy-new-version/jenkins1.PNG +0 -0
- package/lib/templates/assets/images/app-deploy-new-version/jenkins2.PNG +0 -0
- package/lib/templates/assets/images/auth-wrapper-code.png +0 -0
- package/lib/templates/assets/images/cdebase.png +0 -0
- package/lib/templates/assets/images/cdm-locales-directory.png +0 -0
- package/lib/templates/assets/images/client-settings.png +0 -0
- package/lib/templates/assets/images/codegen_file_update.png +0 -0
- package/lib/templates/assets/images/configuration.png +0 -0
- package/lib/templates/assets/images/copy-plugin.png +0 -0
- package/lib/templates/assets/images/docusaurus.png +0 -0
- package/lib/templates/assets/images/error-link.png +0 -0
- package/lib/templates/assets/images/error-sample.png +0 -0
- package/lib/templates/assets/images/extension copy.png +0 -0
- package/lib/templates/assets/images/extension.png +0 -0
- package/lib/templates/assets/images/graphql/graphql-folder-backend.png +0 -0
- package/lib/templates/assets/images/graphql/graphql-folder-with-gql.png +0 -0
- package/lib/templates/assets/images/i18n-config.png +0 -0
- package/lib/templates/assets/images/image.png +0 -0
- package/lib/templates/assets/images/logo.svg +10 -0
- package/lib/templates/assets/images/logo1.svg +1 -0
- package/lib/templates/assets/images/modify-upload-false-server.png +0 -0
- package/lib/templates/assets/images/navigation-auth-enabled.png +0 -0
- package/lib/templates/assets/images/org-dashboard-navigation.png +0 -0
- package/lib/templates/assets/images/org-navigation.png +0 -0
- package/lib/templates/assets/images/preferences_graphql_type.png +0 -0
- package/lib/templates/assets/images/provider.png +0 -0
- package/lib/templates/assets/images/route-config.png +0 -0
- package/lib/templates/assets/images/service-accounts.png +0 -0
- package/lib/templates/assets/images/source-code/source-code-environments.png +0 -0
- package/lib/templates/assets/images/source-code/source-code-organization.png +0 -0
- package/lib/templates/assets/images/spin-clone-develop-deployment/jenkins-changes.png +0 -0
- package/lib/templates/assets/images/spin-clone-develop-deployment/lerna-changes.png +0 -0
- package/lib/templates/assets/images/spin-clone-develop-deployment/root-package-json-changes.png +0 -0
- package/lib/templates/assets/images/spin-clone-develop-deployment/values-dev-changes.png +0 -0
- package/lib/templates/assets/images/sso-mappers.png +0 -0
- package/lib/templates/assets/images/sso-picture-mapper.png +0 -0
- package/lib/templates/assets/images/sso-settings.png +0 -0
- package/lib/templates/assets/images/timesheet_apollo_cache.png +0 -0
- package/lib/templates/assets/images/timesheet_query.png +0 -0
- package/lib/templates/assets/images/tutorial/docsVersionDropdown.png +0 -0
- package/lib/templates/assets/images/tutorial/localeDropdown.png +0 -0
- package/lib/templates/assets/images/unauthenticated.png +0 -0
- package/lib/templates/assets/images/undraw_docusaurus_mountain.svg +170 -0
- package/lib/templates/assets/images/undraw_docusaurus_react.svg +169 -0
- package/lib/templates/assets/images/undraw_docusaurus_tree.svg +1 -0
- package/lib/templates/assets/images/vite-plugin-config.png +0 -0
- package/lib/templates/content/docs/Generators/Project/generate-fullproject.md +12 -0
- package/lib/templates/content/docs/LLM/Logger.llm.md +194 -0
- package/lib/templates/content/docs/LLM/backend-proxies-services-llm.md +2687 -0
- package/lib/templates/content/docs/LLM/backend-service-llm.md +3384 -0
- package/lib/templates/content/docs/LLM/db_migration_llm.md +954 -0
- package/lib/templates/content/docs/LLM/frontend/REMIX-15.3-upgrade-llm.md +1245 -0
- package/lib/templates/content/docs/LLM/inngest/INNGEST_FUNCTION_DEVELOPMENT_GUIDE_LLM.md +1241 -0
- package/lib/templates/content/docs/LLM/inngest/INNGEST_NAMESPACE_LLM.md +384 -0
- package/lib/templates/content/docs/LLM/llm_workflow_namespace.md +384 -0
- package/lib/templates/content/docs/LLM/organization-components-form-llm.md +1395 -0
- package/lib/templates/content/docs/LLM/page-component-llm.md +173 -0
- package/lib/templates/content/docs/LLM/preferences-settings-llm.md +2781 -0
- package/lib/templates/content/docs/LLM/tailwind-css-llm.md +502 -0
- package/lib/templates/content/docs/UI/SchemaBasedUI.md +334 -0
- package/lib/templates/content/docs/UI/SlotFillComponent.md +334 -0
- package/lib/templates/content/docs/adminide-modules/account/auth0-login.md +31 -0
- package/lib/templates/content/docs/adminide-modules/account/index.md +14 -0
- package/lib/templates/content/docs/adminide-modules/account/keycloak-remix-setup.md +86 -0
- package/lib/templates/content/docs/adminide-modules/account/remix-auth-setup.md +79 -0
- package/lib/templates/content/docs/adminide-modules/account/various-auth-qatest.md +157 -0
- package/lib/templates/content/docs/adminide-modules/api-builders/graphql.md +906 -0
- package/lib/templates/content/docs/adminide-modules/billing/payments/index.md +14 -0
- package/lib/templates/content/docs/adminide-modules/billing/payments/stripe/index.md +14 -0
- package/lib/templates/content/docs/adminide-modules/billing/payments/stripe/settingup-stripe-locally.md +25 -0
- package/lib/templates/content/docs/adminide-modules/billing/tier-config.md +293 -0
- package/lib/templates/content/docs/adminide-modules/connectors/Connector.md +207 -0
- package/lib/templates/content/docs/adminide-modules/file-upload/index.md +16 -0
- package/lib/templates/content/docs/adminide-modules/file-upload/setup.md +435 -0
- package/lib/templates/content/docs/adminide-modules/file-upload/upload-file-using-signed-url.md +161 -0
- package/lib/templates/content/docs/adminide-modules/preferences/AddAdditionalPermissions.md +151 -0
- package/lib/templates/content/docs/adminide-modules/preferences/Configuration.md +241 -0
- package/lib/templates/content/docs/adminide-modules/preferences/Policy-Configuration.md +61 -0
- package/lib/templates/content/docs/adminide-modules/preferences/UI-components/ResourceSettingsLoader.md +319 -0
- package/lib/templates/content/docs/adminide-modules/preferences/contribute_scope_target.md +280 -0
- package/lib/templates/content/docs/adminide-modules/preferences/generate-urii.md +94 -0
- package/lib/templates/content/docs/adminide-modules/preferences/index.md +28 -0
- package/lib/templates/content/docs/adminide-modules/preferences/machine-configuration.md +157 -0
- package/lib/templates/content/docs/adminide-modules/preferences/pageSettings/generateCdecodeUri.md +1289 -0
- package/lib/templates/content/docs/adminide-modules/preferences/pageSettings/migratingFromUseSettings.md +215 -0
- package/lib/templates/content/docs/adminide-modules/preferences/permissions/Roles-Permissions.md +72 -0
- package/lib/templates/content/docs/adminide-modules/preferences/permissions/settingUserPermissions.md +139 -0
- package/lib/templates/content/docs/adminide-modules/preferences/preference-dependency.md +138 -0
- package/lib/templates/content/docs/adminide-modules/preferences/route-based-configuration.md +41 -0
- package/lib/templates/content/docs/adminide-modules/preferences/schema-configuration.md +71 -0
- package/lib/templates/content/docs/adminide-modules/preferences/supported.md +24 -0
- package/lib/templates/content/docs/adminide-modules/preferences/useSettingsLoader.md +248 -0
- package/lib/templates/content/docs/adminide-modules/project-tools/auth-providers.md +1317 -0
- package/lib/templates/content/docs/adminide-modules/project-tools/keycloak-guide.md +543 -0
- package/lib/templates/content/docs/adminide-modules/project-tools/tenant-management/tenant-based-authentication.md +846 -0
- package/lib/templates/content/docs/adminide-modules/project-tools/tenant-management/tenant-management.md +708 -0
- package/lib/templates/content/docs/adminide-modules/project-tools/tenant-management/tenants.md +1117 -0
- package/lib/templates/content/docs/chrome-extension/index.md +14 -0
- package/lib/templates/content/docs/chrome-extension/setup.md +30 -0
- package/lib/templates/content/docs/contributing/adding-package.md +23 -0
- package/lib/templates/content/docs/contributing/adding_new_modules.md +99 -0
- package/lib/templates/content/docs/contributing/architecture-updates.md +19 -0
- package/lib/templates/content/docs/contributing/avoid-using-promises-ui.md +116 -0
- package/lib/templates/content/docs/contributing/coding-guidelines.md +111 -0
- package/lib/templates/content/docs/contributing/do-and-dont.md +42 -0
- package/lib/templates/content/docs/contributing/faq.md +22 -0
- package/lib/templates/content/docs/contributing/folder-setup/browser.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/config.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/containers-server.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/core.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/graphql.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/index.md +30 -0
- package/lib/templates/content/docs/contributing/folder-setup/module.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/server.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/services.md +12 -0
- package/lib/templates/content/docs/contributing/folder-setup/store.md +12 -0
- package/lib/templates/content/docs/contributing/frontend-coding.md +30 -0
- package/lib/templates/content/docs/contributing/git-subtree-sharing.md +73 -0
- package/lib/templates/content/docs/contributing/graphql-subscriptions.md +69 -0
- package/lib/templates/content/docs/contributing/how-to-contribute.md +30 -0
- package/lib/templates/content/docs/contributing/how_to_check_pure_esm.md +29 -0
- package/lib/templates/content/docs/contributing/index.md +60 -0
- package/lib/templates/content/docs/contributing/installation-issues.md +23 -0
- package/lib/templates/content/docs/contributing/keyboard-shortcut.md +131 -0
- package/lib/templates/content/docs/contributing/language/locale-support.md +12 -0
- package/lib/templates/content/docs/contributing/lerna-build-tools.md +516 -0
- package/lib/templates/content/docs/contributing/lerna-yarn-workspaces.md +95 -0
- package/lib/templates/content/docs/contributing/lint-and-formatter.md +20 -0
- package/lib/templates/content/docs/contributing/mobile-setup.md +16 -0
- package/lib/templates/content/docs/contributing/project-setup.md +233 -0
- package/lib/templates/content/docs/contributing/react/index.md +14 -0
- package/lib/templates/content/docs/contributing/react/lazy-component.md +70 -0
- package/lib/templates/content/docs/contributing/run-various-options.md +124 -0
- package/lib/templates/content/docs/contributing/schema-first-graphql-types.md +37 -0
- package/lib/templates/content/docs/contributing/source-code-organization.md +57 -0
- package/lib/templates/content/docs/contributing/staging-docker.md +88 -0
- package/lib/templates/content/docs/contributing/third-party/apollo-client-v3-tutorials.md +28 -0
- package/lib/templates/content/docs/contributing/third-party/index.md +18 -0
- package/lib/templates/content/docs/contributing/typescript-contribution.md +16 -0
- package/lib/templates/content/docs/devops/app-deploy-new-version.md +30 -0
- package/lib/templates/content/docs/devops/index.md +14 -0
- package/lib/templates/content/docs/devops/mobile-jenkins-build.md +40 -0
- package/lib/templates/content/docs/devops/versioning-the-project.md +128 -0
- package/lib/templates/content/docs/error-handler/application-error-handler.md +40 -0
- package/lib/templates/content/docs/error-handler/error-handling.md +26 -0
- package/lib/templates/content/docs/error-handler/index.md +16 -0
- package/lib/templates/content/docs/error-handler/logging-errors.md +14 -0
- package/lib/templates/content/docs/feature-api/copy-operation.md +427 -0
- package/lib/templates/content/docs/feature-api/feature-browser/assets.md +46 -0
- package/lib/templates/content/docs/feature-api/feature-browser/auth-permissions.md +12 -0
- package/lib/templates/content/docs/feature-api/feature-browser/feature.md +131 -0
- package/lib/templates/content/docs/feature-api/feature-browser/index.md +22 -0
- package/lib/templates/content/docs/feature-api/feature-browser/routes-menu.md +110 -0
- package/lib/templates/content/docs/feature-api/feature-browser/routing-convention.md +124 -0
- package/lib/templates/content/docs/feature-api/feature-browser/routing.md +338 -0
- package/lib/templates/content/docs/feature-api/feature-mobile/auth-permissions.md +20 -0
- package/lib/templates/content/docs/feature-api/feature-mobile/feature.md +130 -0
- package/lib/templates/content/docs/feature-api/feature-mobile/index.md +18 -0
- package/lib/templates/content/docs/feature-api/feature-mobile/navigation.md +187 -0
- package/lib/templates/content/docs/feature-api/feature-server/Scheduling.md +44 -0
- package/lib/templates/content/docs/feature-api/feature-server/dataloader.md +320 -0
- package/lib/templates/content/docs/feature-api/feature-server/dependency-injection.md +81 -0
- package/lib/templates/content/docs/feature-api/feature-server/feature.md +65 -0
- package/lib/templates/content/docs/feature-api/feature-server/generic-dataloader.md +135 -0
- package/lib/templates/content/docs/feature-api/feature-server/index.md +40 -0
- package/lib/templates/content/docs/feature-api/feature-server/migration.md +127 -0
- package/lib/templates/content/docs/feature-api/feature-server/mongo-model.md +72 -0
- package/lib/templates/content/docs/feature-api/feature-server/permissions.md +12 -0
- package/lib/templates/content/docs/feature-api/feature-server/policies.md +57 -0
- package/lib/templates/content/docs/feature-api/feature-server/preferences.md +57 -0
- package/lib/templates/content/docs/feature-api/feature-server/repositories.md +114 -0
- package/lib/templates/content/docs/feature-api/feature-server/resolvers.md +126 -0
- package/lib/templates/content/docs/feature-api/feature-server/rules.md +132 -0
- package/lib/templates/content/docs/feature-api/feature-server/schema.md +12 -0
- package/lib/templates/content/docs/feature-api/feature-server/services.md +102 -0
- package/lib/templates/content/docs/feature-api/feature-server/setup-resource-crud.md +359 -0
- package/lib/templates/content/docs/feature-api/index.md +18 -0
- package/lib/templates/content/docs/graphql/apolloClient-mutation.md +94 -0
- package/lib/templates/content/docs/graphql/index.md +14 -0
- package/lib/templates/content/docs/graphql/scalars.md +15 -0
- package/lib/templates/content/docs/help/index.md +14 -0
- package/lib/templates/content/docs/help/intro.md +16 -0
- package/lib/templates/content/docs/intl/ant-design-menu-translation.md +74 -0
- package/lib/templates/content/docs/intl/intl-namespace.md +129 -0
- package/lib/templates/content/docs/intl/vite-plugin-intl.md +87 -0
- package/lib/templates/content/docs/intl/webpack-plugin-intl.md +12 -0
- package/lib/templates/content/docs/intro.md +18 -0
- package/lib/templates/content/docs/knowledge/basic-fullstack.md +238 -0
- package/lib/templates/content/docs/mailing/index.md +14 -0
- package/lib/templates/content/docs/mailing/mailing-template.md +148 -0
- package/lib/templates/content/docs/mobile/App-navigation-generator.md +410 -0
- package/lib/templates/content/docs/mobile/MobileTestCases.md +264 -0
- package/lib/templates/content/docs/mobile/eas-profile-build.md +107 -0
- package/lib/templates/content/docs/mobile/expo-push-notification-setup.md +216 -0
- package/lib/templates/content/docs/mobile/index.md +14 -0
- package/lib/templates/content/docs/mobile/routes.md +83 -0
- package/lib/templates/content/docs/organization/adding-account-context.md +116 -0
- package/lib/templates/content/docs/organization/adding-org-mobile-navigation.md +22 -0
- package/lib/templates/content/docs/organization/adding-org-web-navigation.md +12 -0
- package/lib/templates/content/docs/organization/index.md +20 -0
- package/lib/templates/content/docs/organization/initialization.md +20 -0
- package/lib/templates/content/docs/organization/organization-resource-vs-resource.md +112 -0
- package/lib/templates/content/docs/remix/configuration/component-structure-best-practices.md +152 -0
- package/lib/templates/content/docs/remix/configuration/configurations.md +218 -0
- package/lib/templates/content/docs/remix/configuration/css-import-and-stylesheets.md +142 -0
- package/lib/templates/content/docs/remix/configuration/dont-subcomponent-network.md +166 -0
- package/lib/templates/content/docs/remix/configuration/generated-data-loaders.md +122 -0
- package/lib/templates/content/docs/remix/configuration/generated-resource-loaders.md +257 -0
- package/lib/templates/content/docs/remix/configuration/query-params-generator.md +216 -0
- package/lib/templates/content/docs/remix/configuration/routes-extra-icons.md +103 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-advanced.md +86 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-auth.md +113 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-best-practices.md +55 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-fields.md +79 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-graphql.md +79 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-index.md +112 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-loaders.md +165 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-middleware.md +196 -0
- package/lib/templates/content/docs/remix/configuration/routes-json-overview.md +53 -0
- package/lib/templates/content/docs/remix/data-loaders.md +43 -0
- package/lib/templates/content/docs/remix/devtools/remix-devtools.md +58 -0
- package/lib/templates/content/docs/remix/examples/changes-using-servercode.md +79 -0
- package/lib/templates/content/docs/remix/extra-icons.md +62 -0
- package/lib/templates/content/docs/remix/extra-links.md +65 -0
- package/lib/templates/content/docs/remix/generated-data-loaders.md +114 -0
- package/lib/templates/content/docs/remix/queryParamsGenerator.md +89 -0
- package/lib/templates/content/docs/remix/resources.md +16 -0
- package/lib/templates/content/docs/remix/styles.md +132 -0
- package/lib/templates/content/docs/remix/wiki.md +12 -0
- package/lib/templates/content/docs/security/auth-wrapper/auth-wrapper.md +24 -0
- package/lib/templates/content/docs/security/index.md +18 -0
- package/lib/templates/content/docs/security/secure-button-mobilenative.md +88 -0
- package/lib/templates/content/docs/security/secure-button-web.md +89 -0
- package/lib/templates/content/docs/server-side/account-customization.md +82 -0
- package/lib/templates/content/docs/server-side/apollo/caching.md +164 -0
- package/lib/templates/content/docs/server-side/backend-architecture/FINAL-DECISION.md +209 -0
- package/lib/templates/content/docs/server-side/backend-architecture/TRUE-FINAL-ARCHITECTURE.md +603 -0
- package/lib/templates/content/docs/server-side/backend-architecture/index1.md +0 -0
- package/lib/templates/content/docs/server-side/backend-coding.md +839 -0
- package/lib/templates/content/docs/server-side/e2b/manageing-template.md +197 -0
- package/lib/templates/content/docs/server-side/index.md +14 -0
- package/lib/templates/content/docs/server-side/inngest-functions-module.md +309 -0
- package/lib/templates/content/docs/server-side/listen-stripe-events.md +43 -0
- package/lib/templates/content/docs/server-side/slug-service.md +323 -0
- package/lib/templates/content/docs/tests/index.md +18 -0
- package/lib/templates/content/docs/tests/jest-test-debug-vscode.md +40 -0
- package/lib/templates/content/docs/tests/known-errors.md +116 -0
- package/lib/templates/content/docs/tests/service-test-template.md +118 -0
- package/lib/templates/content/docs/tests/test-setup.md +93 -0
- package/lib/templates/content/docs/xstate.md +23 -0
- package/lib/types.d.ts +37 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/utils/docsNavigation.d.ts +9 -0
- package/lib/utils/docsNavigation.d.ts.map +1 -0
- package/lib/utils/docsNavigation.js +37 -0
- package/lib/utils/docsNavigation.js.map +1 -0
- package/lib/utils/helpCenterUtils.d.ts +26 -0
- package/lib/utils/helpCenterUtils.d.ts.map +1 -0
- package/lib/utils/index.d.ts +3 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/lib/utils/index.js +3 -0
- package/lib/utils/index.js.map +1 -0
- package/lib/utils/markdownLoader.d.ts +36 -0
- package/lib/utils/markdownLoader.d.ts.map +1 -0
- package/lib/utils/markdownLoader.js +2242 -0
- package/lib/utils/markdownLoader.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
meta:
|
|
3
|
+
title: Stripe
|
|
4
|
+
description: Stripe
|
|
5
|
+
date: '2023-06-02T00:00:00'
|
|
6
|
+
updated: '2024-06-02T00:00:00'
|
|
7
|
+
excerpt: Stripe...
|
|
8
|
+
headers:
|
|
9
|
+
Cache-Control: no-cache
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Stripe
|
|
13
|
+
|
|
14
|
+
**[Setting up stripe locally](/docs/payments/stripe/settingup-stripe-locally)**
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
meta:
|
|
3
|
+
title: Setting up stripe locally
|
|
4
|
+
description: Setting up stripe locally
|
|
5
|
+
date: '2023-06-02T00:00:00'
|
|
6
|
+
updated: '2024-06-02T00:00:00'
|
|
7
|
+
excerpt: Setting up stripe locally...
|
|
8
|
+
headers:
|
|
9
|
+
Cache-Control: no-cache
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
### Handling requests from Stripe
|
|
13
|
+
|
|
14
|
+
We use `webhooks` to listen to stripe event that required to update the flow in our backend. For this
|
|
15
|
+
we need to make sure to run the webhook locally.
|
|
16
|
+
|
|
17
|
+
In our node server, we listen to webhook events at `/webhook/stripe` so the url will be `<backend_url>/webhook/stripe`
|
|
18
|
+
|
|
19
|
+
Follow the steps in the https://stripe.com/docs/webhooks/quickstart go to the section `Test the webhook`.
|
|
20
|
+
|
|
21
|
+
1. Update the webhook in the Stripe Developer console to it. For example `http://localhost:8080/webhook/stripe`
|
|
22
|
+
|
|
23
|
+
2. Download stripe cli and login to it
|
|
24
|
+
|
|
25
|
+
3. Now perform any plan subscription in the billing to check events are used in the node environment.
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
# Billing Tier Config
|
|
2
|
+
|
|
3
|
+
The Billing Config Page allows you to configure pricing plans, features, and UI settings for your projects. This page has been updated to store billing configuration data at the project level.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Previously, billing plans and features were stored under organization settings. The system now stores new and updated plans and features under **project metadata**, allowing for project-specific billing configurations.
|
|
8
|
+
|
|
9
|
+
## Architecture Changes
|
|
10
|
+
|
|
11
|
+
### Previous Implementation
|
|
12
|
+
|
|
13
|
+
Billing plans were stored using organization-level settings:
|
|
14
|
+
|
|
15
|
+
- Plans were saved using `writeSettingsMutation` with organization resource URI
|
|
16
|
+
- Configuration was stored in organization settings with `ConfigFragmentName.SubscriptionPlan`
|
|
17
|
+
- Plans were scoped to the entire organization
|
|
18
|
+
|
|
19
|
+
### Current Implementation
|
|
20
|
+
|
|
21
|
+
Billing plans and features are now stored in **project metadata**:
|
|
22
|
+
|
|
23
|
+
- Plans are saved using `updateProjectMetadata` mutation
|
|
24
|
+
- Configuration is stored in `project.source.metadata.subscriptionPlans`
|
|
25
|
+
- Features are stored in `project.source.metadata.products`
|
|
26
|
+
- Each project can have its own billing configuration
|
|
27
|
+
|
|
28
|
+
## Data Structure
|
|
29
|
+
|
|
30
|
+
### Project Metadata Structure
|
|
31
|
+
|
|
32
|
+
Billing configuration is stored in the project's `source.metadata` field:
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"source": {
|
|
37
|
+
"metadata": {
|
|
38
|
+
"subscriptionPlans": {
|
|
39
|
+
"basic-1766780856401": {
|
|
40
|
+
"id": "basic-1766780856401",
|
|
41
|
+
"planName": "Basic",
|
|
42
|
+
"description": "Basic plan description",
|
|
43
|
+
"price": {
|
|
44
|
+
"monthly": 9.99,
|
|
45
|
+
"yearly": 99.99
|
|
46
|
+
},
|
|
47
|
+
"interval": "monthly",
|
|
48
|
+
"popular": false,
|
|
49
|
+
"features": {
|
|
50
|
+
"feature-id": {
|
|
51
|
+
"units": 10
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"products": {
|
|
57
|
+
"feature-id": {
|
|
58
|
+
"id": "feature-id",
|
|
59
|
+
"name": "Feature Name",
|
|
60
|
+
"description": "Feature description",
|
|
61
|
+
"billingInterval": "monthly",
|
|
62
|
+
"pricePerUnit": 5.0,
|
|
63
|
+
"pricePerUnitYearly": 50.0,
|
|
64
|
+
"unitLabel": "units",
|
|
65
|
+
"unitSize": 1,
|
|
66
|
+
"stripeMetadata": {}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## How It Works
|
|
75
|
+
|
|
76
|
+
### 1. Project Selection
|
|
77
|
+
|
|
78
|
+
The billing configuration page requires selecting a project before making changes:
|
|
79
|
+
|
|
80
|
+
- Users must select a project from the project selector dropdown
|
|
81
|
+
- Configuration is scoped to the selected project
|
|
82
|
+
- Each project maintains its own billing configuration
|
|
83
|
+
|
|
84
|
+
### 2. Data Merging
|
|
85
|
+
|
|
86
|
+
The system merges default plans/features from policies with project-specific overrides:
|
|
87
|
+
|
|
88
|
+
1. **Default Plans**: Fetched from subscription plan policies (Basic, Premium, Enterprise)
|
|
89
|
+
2. **Policy Plans**: Merged with subscription plan defaults
|
|
90
|
+
3. **Project Overrides**: Project-specific plans in `project.source.metadata.subscriptionPlans` override defaults
|
|
91
|
+
4. **New Plans**: Plans added at project level are included in the merged result
|
|
92
|
+
|
|
93
|
+
### 3. Saving Plans
|
|
94
|
+
|
|
95
|
+
When saving a pricing tier:
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
await updateProjectMetadata({
|
|
99
|
+
variables: {
|
|
100
|
+
where: { id: projectId },
|
|
101
|
+
metadata: {
|
|
102
|
+
subscriptionPlans: {
|
|
103
|
+
...existingPlans,
|
|
104
|
+
[planId]: {
|
|
105
|
+
id: planId,
|
|
106
|
+
planName: 'Plan Name',
|
|
107
|
+
description: 'Description',
|
|
108
|
+
price: { monthly: 9.99, yearly: 99.99 },
|
|
109
|
+
interval: 'monthly',
|
|
110
|
+
popular: false,
|
|
111
|
+
// ... other plan properties
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### 4. Saving Features
|
|
120
|
+
|
|
121
|
+
When saving a feature:
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
await updateProjectMetadata({
|
|
125
|
+
variables: {
|
|
126
|
+
where: { id: projectId },
|
|
127
|
+
metadata: {
|
|
128
|
+
products: {
|
|
129
|
+
...existingProducts,
|
|
130
|
+
[featureId]: {
|
|
131
|
+
id: featureId,
|
|
132
|
+
name: 'Feature Name',
|
|
133
|
+
description: 'Feature description',
|
|
134
|
+
billingInterval: 'monthly',
|
|
135
|
+
pricePerUnit: 5.0,
|
|
136
|
+
pricePerUnitYearly: 50.0,
|
|
137
|
+
unitLabel: 'units',
|
|
138
|
+
unitSize: 1,
|
|
139
|
+
stripeMetadata: {},
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
});
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### 5. Deleting Plans/Features
|
|
148
|
+
|
|
149
|
+
To delete a plan or feature, set its value to `null` in the metadata:
|
|
150
|
+
|
|
151
|
+
```typescript
|
|
152
|
+
// Delete a plan
|
|
153
|
+
await updateProjectMetadata({
|
|
154
|
+
variables: {
|
|
155
|
+
where: { id: projectId },
|
|
156
|
+
metadata: {
|
|
157
|
+
subscriptionPlans: {
|
|
158
|
+
...existingPlans,
|
|
159
|
+
[planId]: null,
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
// Delete a feature
|
|
166
|
+
await updateProjectMetadata({
|
|
167
|
+
variables: {
|
|
168
|
+
where: { id: projectId },
|
|
169
|
+
metadata: {
|
|
170
|
+
products: {
|
|
171
|
+
...existingProducts,
|
|
172
|
+
[featureId]: null,
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## GraphQL Mutation
|
|
180
|
+
|
|
181
|
+
The `updateProjectMetadata` mutation is used to save billing configuration:
|
|
182
|
+
|
|
183
|
+
```graphql
|
|
184
|
+
mutation UpdateProjectMetadata($where: ProjectWhereInput!, $metadata: JSON!) {
|
|
185
|
+
updateProjectMetadata(where: $where, metadata: $metadata) {
|
|
186
|
+
id
|
|
187
|
+
name
|
|
188
|
+
source {
|
|
189
|
+
metadata
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### Parameters
|
|
196
|
+
|
|
197
|
+
- `where`: Project identification (typically `{ id: "project-id" }`)
|
|
198
|
+
- `metadata`: JSON object containing `subscriptionPlans` and/or `products`
|
|
199
|
+
|
|
200
|
+
## Backend Implementation
|
|
201
|
+
|
|
202
|
+
### Project Service
|
|
203
|
+
|
|
204
|
+
The backend `ProjectService` includes a new method `updateProjectMetadata`:
|
|
205
|
+
|
|
206
|
+
```typescript
|
|
207
|
+
public async updateProjectMetadata(
|
|
208
|
+
where: IProjectWhereInput,
|
|
209
|
+
metadata: Record<string, unknown>,
|
|
210
|
+
orgId: string,
|
|
211
|
+
): Promise<AsDomainType<IProjectModel>> {
|
|
212
|
+
const project = await this.get(where);
|
|
213
|
+
if (!project) {
|
|
214
|
+
throw new Error(`Project not found: ${JSON.stringify(where)}`);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
const currMetadata = cloneDeep(project.source?.metadata || {});
|
|
218
|
+
const newMetadata = merge(currMetadata, metadata);
|
|
219
|
+
return this.projectRepository.updateProject(where, { source: { metadata: newMetadata } }, orgId);
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
This method:
|
|
224
|
+
|
|
225
|
+
- Retrieves the current project
|
|
226
|
+
- Merges new metadata with existing metadata (deep merge)
|
|
227
|
+
- Updates the project with merged metadata
|
|
228
|
+
|
|
229
|
+
### GraphQL Schema
|
|
230
|
+
|
|
231
|
+
The GraphQL schema includes the mutation:
|
|
232
|
+
|
|
233
|
+
```graphql
|
|
234
|
+
extend type Mutation {
|
|
235
|
+
"""
|
|
236
|
+
Update a project's metadata
|
|
237
|
+
"""
|
|
238
|
+
updateProjectMetadata(where: ProjectWhereInput!, metadata: JSON!): Project
|
|
239
|
+
@addAccountContext
|
|
240
|
+
@invalidateCache(queries: ["getProjects", "getFilteredProjects"])
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
## Usage Example
|
|
245
|
+
|
|
246
|
+
### Fetching Billing Configuration
|
|
247
|
+
|
|
248
|
+
```typescript
|
|
249
|
+
// Fetch project with metadata
|
|
250
|
+
const { data } = useGetProjectsMinimalQuery({
|
|
251
|
+
variables: {
|
|
252
|
+
where: { id: projectId },
|
|
253
|
+
},
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
// Access billing plans
|
|
257
|
+
const plans = data?.projects[0]?.source?.metadata?.subscriptionPlans || {};
|
|
258
|
+
|
|
259
|
+
// Access features
|
|
260
|
+
const features = data?.projects[0]?.source?.metadata?.products || {};
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### Updating Billing Configuration
|
|
264
|
+
|
|
265
|
+
```typescript
|
|
266
|
+
const [updateProjectMetadata] = useUpdateProjectMetadataMutation();
|
|
267
|
+
|
|
268
|
+
// Update a plan
|
|
269
|
+
await updateProjectMetadata({
|
|
270
|
+
variables: {
|
|
271
|
+
where: { id: projectId },
|
|
272
|
+
metadata: {
|
|
273
|
+
subscriptionPlans: {
|
|
274
|
+
...currentPlans,
|
|
275
|
+
[planId]: updatedPlanData,
|
|
276
|
+
},
|
|
277
|
+
},
|
|
278
|
+
},
|
|
279
|
+
});
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
## Benefits
|
|
283
|
+
|
|
284
|
+
1. **Project-Specific Configuration**: Each project can have its own billing plans and features
|
|
285
|
+
2. **Flexibility**: Different projects can have different pricing structures
|
|
286
|
+
3. **Isolation**: Changes to one project's billing don't affect others
|
|
287
|
+
4. **Scalability**: Supports multi-tenant scenarios where each project is a tenant
|
|
288
|
+
|
|
289
|
+
## Related Documentation
|
|
290
|
+
|
|
291
|
+
- [Configuration System](/docs/preferences/Configuration) - General configuration system overview
|
|
292
|
+
- [Machine Configuration](/docs/preferences/machine-configuration) - Entity-level configuration patterns
|
|
293
|
+
- [Project Templates](/docs/projects/templates) - Project template system
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# Application Connectors - OAuth Integration Flow
|
|
2
|
+
|
|
3
|
+
This document explains how users connect third-party services like Gmail to the platform.
|
|
4
|
+
|
|
5
|
+
## How It Works
|
|
6
|
+
|
|
7
|
+
The connector system uses OAuth 2.0 with PKCE to securely connect external services. When a user connects their Gmail account, we don't store their password. Instead, we get permission tokens directly from Google that allow us to access their account on their behalf.
|
|
8
|
+
|
|
9
|
+
Tokens are stored securely in our vault service, scoped to the user's selected project and environment.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## The Connect Flow
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
|
17
|
+
│ User │ │ Platform │ │ Google │ │ Vault │
|
|
18
|
+
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘
|
|
19
|
+
│ │ │ │
|
|
20
|
+
│ 1. Click Connect │ │ │
|
|
21
|
+
│────────────────────>│ │ │
|
|
22
|
+
│ │ │ │
|
|
23
|
+
│ │ 2. Generate secure │ │
|
|
24
|
+
│ │ state & verifier│ │
|
|
25
|
+
│ │ │ │
|
|
26
|
+
│ 3. Open Google │ │ │
|
|
27
|
+
│ sign-in popup │ │ │
|
|
28
|
+
│<────────────────────│ │ │
|
|
29
|
+
│ │ │ │
|
|
30
|
+
│ 4. Sign in and │ │ │
|
|
31
|
+
│ grant access │ │ │
|
|
32
|
+
│─────────────────────────────────────────>│ │
|
|
33
|
+
│ │ │ │
|
|
34
|
+
│ │ 5. Google sends │ │
|
|
35
|
+
│ │ auth code back │ │
|
|
36
|
+
│ │<────────────────────│ │
|
|
37
|
+
│ │ │ │
|
|
38
|
+
│ │ 6. Exchange code │ │
|
|
39
|
+
│ │ for tokens │ │
|
|
40
|
+
│ │────────────────────>│ │
|
|
41
|
+
│ │ │ │
|
|
42
|
+
│ │ 7. Receive access │ │
|
|
43
|
+
│ │ & refresh token │ │
|
|
44
|
+
│ │<────────────────────│ │
|
|
45
|
+
│ │ │ │
|
|
46
|
+
│ │ 8. Store tokens │ │
|
|
47
|
+
│ │ securely │ │
|
|
48
|
+
│ │─────────────────────────────────────────>│
|
|
49
|
+
│ │ │ │
|
|
50
|
+
│ 9. Show connected │ │ │
|
|
51
|
+
│<────────────────────│ │ │
|
|
52
|
+
│ │ │ │
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Step-by-Step: Connecting Gmail
|
|
58
|
+
|
|
59
|
+
### 1. User Opens Connectors Page
|
|
60
|
+
|
|
61
|
+
The user navigates to the Connectors page where they see a list of available integrations. Each connector shows whether it's already connected or available to connect.
|
|
62
|
+
|
|
63
|
+
### 2. User Selects Project and Environment
|
|
64
|
+
|
|
65
|
+
Before connecting any service, the user must select which project and environment the connection belongs to. This determines where the access tokens will be stored and which part of the application can use them.
|
|
66
|
+
|
|
67
|
+
### 3. User Clicks "Connect" on Gmail
|
|
68
|
+
|
|
69
|
+
A confirmation modal appears. The user clicks "Connect" to proceed.
|
|
70
|
+
|
|
71
|
+
### 4. Platform Prepares the Authorization
|
|
72
|
+
|
|
73
|
+
Behind the scenes, the platform:
|
|
74
|
+
|
|
75
|
+
- Generates a unique security code (state) to prevent attacks
|
|
76
|
+
- Creates a PKCE verifier for additional security
|
|
77
|
+
- Temporarily saves this information so we can match it when Google responds
|
|
78
|
+
- Builds the Google authorization URL with all required parameters
|
|
79
|
+
|
|
80
|
+
### 5. Google Sign-in Popup Opens
|
|
81
|
+
|
|
82
|
+
A popup window opens showing Google's sign-in page. The user enters their Google credentials and sees what permissions the app is requesting (read emails, send emails, etc.).
|
|
83
|
+
|
|
84
|
+
### 6. User Grants Permission
|
|
85
|
+
|
|
86
|
+
The user clicks "Allow" to grant the requested permissions. Google then redirects the popup back to our callback page with an authorization code.
|
|
87
|
+
|
|
88
|
+
### 7. Callback Page Receives the Code
|
|
89
|
+
|
|
90
|
+
Our callback page receives the authorization code from Google. It retrieves the security information we saved earlier and sends everything to the backend.
|
|
91
|
+
|
|
92
|
+
### 8. Platform Exchanges Code for Tokens
|
|
93
|
+
|
|
94
|
+
The backend contacts Google directly and exchanges the authorization code for actual access tokens. This happens server-to-server, keeping everything secure.
|
|
95
|
+
|
|
96
|
+
### 9. Tokens Are Stored in Vault
|
|
97
|
+
|
|
98
|
+
The access token and refresh token are stored in our secure vault, associated with the user's selected project and environment. The connector record is created in the database.
|
|
99
|
+
|
|
100
|
+
### 10. Success!
|
|
101
|
+
|
|
102
|
+
The popup closes and the Connectors page updates to show Gmail as "Connected".
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## The Disconnect Flow
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
|
110
|
+
│ User │ │ Platform │ │ Google │ │ Vault │
|
|
111
|
+
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘
|
|
112
|
+
│ │ │ │
|
|
113
|
+
│ 1. Click │ │ │
|
|
114
|
+
│ Disconnect │ │ │
|
|
115
|
+
│────────────────────>│ │ │
|
|
116
|
+
│ │ │ │
|
|
117
|
+
│ │ 2. Get tokens │ │
|
|
118
|
+
│ │ from vault │ │
|
|
119
|
+
│ │<─────────────────────────────────────────│
|
|
120
|
+
│ │ │ │
|
|
121
|
+
│ │ 3. Revoke tokens │ │
|
|
122
|
+
│ │ with Google │ │
|
|
123
|
+
│ │────────────────────>│ │
|
|
124
|
+
│ │ │ │
|
|
125
|
+
│ │ 4. Delete tokens │ │
|
|
126
|
+
│ │ from vault │ │
|
|
127
|
+
│ │─────────────────────────────────────────>│
|
|
128
|
+
│ │ │ │
|
|
129
|
+
│ │ 5. Delete │ │
|
|
130
|
+
│ │ connector record│ │
|
|
131
|
+
│ │ │ │
|
|
132
|
+
│ 6. Show │ │ │
|
|
133
|
+
│ disconnected │ │
|
|
134
|
+
│<────────────────────│ │ │
|
|
135
|
+
│ │ │ │
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Step-by-Step: Disconnecting Gmail
|
|
141
|
+
|
|
142
|
+
### 1. User Clicks "Disconnect"
|
|
143
|
+
|
|
144
|
+
On the Connectors page, the user clicks the "Disconnect" button on their connected Gmail integration. A confirmation modal appears.
|
|
145
|
+
|
|
146
|
+
### 2. User Confirms
|
|
147
|
+
|
|
148
|
+
The user confirms they want to disconnect. This action cannot be undone - they'll need to reconnect if they want to use the integration again.
|
|
149
|
+
|
|
150
|
+
### 3. Platform Retrieves Stored Tokens
|
|
151
|
+
|
|
152
|
+
The backend retrieves the access and refresh tokens from the vault for this connector.
|
|
153
|
+
|
|
154
|
+
### 4. Tokens Are Revoked with Google
|
|
155
|
+
|
|
156
|
+
The platform contacts Google to revoke the tokens. This invalidates them immediately - even if someone had copied the tokens, they would no longer work.
|
|
157
|
+
|
|
158
|
+
### 5. Tokens Are Deleted from Vault
|
|
159
|
+
|
|
160
|
+
Both the access token and refresh token are permanently deleted from our vault.
|
|
161
|
+
|
|
162
|
+
### 6. Connector Record Is Deleted
|
|
163
|
+
|
|
164
|
+
The connector record is removed from the database.
|
|
165
|
+
|
|
166
|
+
### 7. Done
|
|
167
|
+
|
|
168
|
+
The UI updates to show Gmail as available to connect again.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Security Measures
|
|
173
|
+
|
|
174
|
+
**PKCE (Proof Key for Code Exchange)**
|
|
175
|
+
Every authorization request includes a unique cryptographic challenge. This prevents attackers from intercepting the authorization code and using it themselves.
|
|
176
|
+
|
|
177
|
+
**State Parameter**
|
|
178
|
+
A random string is generated for each connection attempt. When Google redirects back, we verify this matches what we sent. This prevents cross-site request forgery attacks.
|
|
179
|
+
|
|
180
|
+
**Temporary State Storage**
|
|
181
|
+
The security information needed during authorization is stored temporarily and automatically deleted after 10 minutes. This ensures no sensitive data lingers if a connection attempt is abandoned.
|
|
182
|
+
|
|
183
|
+
**Vault Storage**
|
|
184
|
+
Tokens are never stored in plain text in the database. They're kept in our secure vault service, encrypted and access-controlled.
|
|
185
|
+
|
|
186
|
+
**Token Revocation**
|
|
187
|
+
When disconnecting, we don't just delete our copy of the tokens - we also tell Google to invalidate them. This ensures complete disconnection.
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## What Gets Stored Where
|
|
192
|
+
|
|
193
|
+
**In the Vault (Encrypted)**
|
|
194
|
+
|
|
195
|
+
- Access Token - used to make API calls to Google
|
|
196
|
+
- Refresh Token - used to get new access tokens when they expire
|
|
197
|
+
|
|
198
|
+
**In the Database**
|
|
199
|
+
|
|
200
|
+
- Connector metadata (which service, when connected, status)
|
|
201
|
+
- Reference IDs pointing to the vault secrets
|
|
202
|
+
- Token expiration information
|
|
203
|
+
- Which project and environment the connector belongs to
|
|
204
|
+
|
|
205
|
+
**Temporarily During Connect**
|
|
206
|
+
|
|
207
|
+
- OAuth state and security codes (auto-deleted after 10 minutes)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
meta:
|
|
3
|
+
title: File Upload
|
|
4
|
+
description: File Upload
|
|
5
|
+
date: '2023-06-02T00:00:00'
|
|
6
|
+
updated: '2024-06-02T00:00:00'
|
|
7
|
+
excerpt: File Upload...
|
|
8
|
+
headers:
|
|
9
|
+
Cache-Control: no-cache
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## File Upload
|
|
13
|
+
|
|
14
|
+
**[Setup](/docs/file-upload/setup)**
|
|
15
|
+
|
|
16
|
+
**[File Uploads](/docs/file-upload/upload-file-using-signed-url)**
|