├── .circleci
└── config.yml
├── .devcontainer
└── devcontainer.json
├── .dockerignore
├── .github
├── dependabot.yml
└── workflows
│ └── pull-api-definitions.yml
├── .gitignore
├── .nvmrc
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── PR_TEMPLATE.md
├── README.md
├── api-customs.json
├── api-gql.gql
├── api-swagger.json
├── architecture-diagrams
├── README.md
├── fxa-subplat.dsl
├── structurizr-1-workspace.json
└── structurizr.properties
├── babel.config.js
├── compose.yaml
├── docs
├── additional-docs.md
├── assets
│ ├── IdPAuth-key-unwrap.png
│ ├── IdPAuth-keys-client.png
│ ├── IdPAuth-keys-server.png
│ ├── admin-panel
│ │ ├── image1.png
│ │ ├── image10.png
│ │ ├── image11.png
│ │ ├── image12.png
│ │ ├── image13.png
│ │ ├── image14.png
│ │ ├── image15.png
│ │ ├── image16.png
│ │ ├── image2.png
│ │ ├── image3.png
│ │ ├── image4.png
│ │ ├── image5.png
│ │ ├── image6.png
│ │ ├── image7.png
│ │ ├── image8.png
│ │ └── image9.png
│ ├── ci
│ │ ├── ci-sequence-diagram.png
│ │ ├── failed-build.png
│ │ ├── fan-out.png
│ │ ├── scripted-test-split.png
│ │ ├── split-tests.png
│ │ ├── test-lists.png
│ │ └── test-report.png
│ ├── coupons
│ │ ├── codes.png
│ │ ├── create.png
│ │ ├── metadata.png
│ │ └── navigation.png
│ ├── fxa-client-diagram.png
│ ├── fxa-pairing-desktop.png
│ ├── fxa-pairing-mobile.png
│ ├── fxa-scoped-keys-1.png
│ ├── fxa-scoped-keys-2.png
│ ├── logs-inbox-signin.png
│ ├── maildev-inbox.png
│ ├── onepw-auth.png
│ ├── onepw-change-password.png
│ ├── onepw-create.png
│ ├── onepw-forgot-password.png
│ ├── onepw-keys.png
│ ├── onepw-reset.png
│ ├── product-configs
│ │ ├── sample-plan-config-doc.json
│ │ └── sample-product-config-doc.json
│ ├── storybook-circleci.png
│ ├── subplat-contentful-nav.png
│ ├── subplat-strapi-bundle.png
│ ├── subplat-strapi-locale-dropdown.png
│ ├── subplat-strapi-new-entry.png
│ ├── subplat-strapi-subgroup.png
│ └── tracing
│ │ ├── fxa-otel-system-diagram.png
│ │ ├── fxa-tracing-system-diagram.png
│ │ ├── tracing-gcp-filter-by-method.png
│ │ ├── tracing-gcp-filter-by-target.png
│ │ ├── tracing-gcp-log-viewer-trace-slice.png
│ │ ├── tracing-gcp-search-by-trace-id.png
│ │ ├── tracing-gcp-trace-logs-view.png
│ │ ├── tracing-jaeger-full-trace.png
│ │ ├── tracing-jaeger-graph-view.png
│ │ ├── tracing-jaeger-graph.png
│ │ ├── tracing-jaeger-select-service.png
│ │ ├── tracing-jaeger-sys-arch.png
│ │ └── tracing-jaeger-traces.png
├── explanation
│ ├── architectural-decision-records.md
│ ├── content-server-architecture.md
│ ├── metrics.md
│ ├── onepw-protocol.md
│ ├── pairing-flow-architecture.md
│ └── scoped-keys.md
├── gql-api
│ ├── api
│ │ ├── _category_.yml
│ │ ├── directives
│ │ │ ├── _category_.yml
│ │ │ ├── include.mdx
│ │ │ └── skip.mdx
│ │ ├── mutations
│ │ │ ├── _category_.yml
│ │ │ ├── account-reset.mdx
│ │ │ ├── attached-client-disconnect.mdx
│ │ │ ├── change-recovery-codes.mdx
│ │ │ ├── create-password.mdx
│ │ │ ├── create-secondary-email.mdx
│ │ │ ├── create-totp.mdx
│ │ │ ├── delete-avatar.mdx
│ │ │ ├── delete-recovery-key.mdx
│ │ │ ├── delete-secondary-email.mdx
│ │ │ ├── delete-totp.mdx
│ │ │ ├── destroy-session.mdx
│ │ │ ├── email-verify-code.mdx
│ │ │ ├── finish-setup.mdx
│ │ │ ├── metrics-opt.mdx
│ │ │ ├── password-change.mdx
│ │ │ ├── password-forgot-code-status.mdx
│ │ │ ├── password-forgot-send-code.mdx
│ │ │ ├── password-forgot-verify-code.mdx
│ │ │ ├── reauth-session.mdx
│ │ │ ├── reject-unblock-code.mdx
│ │ │ ├── resend-secondary-email-code.mdx
│ │ │ ├── resend-verify-code.mdx
│ │ │ ├── send-session-verification-code.mdx
│ │ │ ├── sign-in.mdx
│ │ │ ├── sign-up.mdx
│ │ │ ├── update-display-name.mdx
│ │ │ ├── update-primary-email.mdx
│ │ │ ├── verify-code.mdx
│ │ │ ├── verify-secondary-email.mdx
│ │ │ ├── verify-session.mdx
│ │ │ └── verify-totp.mdx
│ │ ├── queries
│ │ │ ├── _category_.yml
│ │ │ ├── account-status.mdx
│ │ │ ├── account.mdx
│ │ │ ├── get-legal-doc.mdx
│ │ │ ├── get-recovery-key-bundle.mdx
│ │ │ ├── session-status.mdx
│ │ │ └── session.mdx
│ │ └── subscriptions
│ │ │ ├── _category_.yml
│ │ │ ├── cancel-at-period-end.mdx
│ │ │ ├── created.mdx
│ │ │ ├── current-period-end.mdx
│ │ │ ├── current-period-start.mdx
│ │ │ ├── end-at.mdx
│ │ │ ├── latest-invoice.mdx
│ │ │ ├── plan-id.mdx
│ │ │ ├── product-id.mdx
│ │ │ ├── product-name.mdx
│ │ │ ├── status.mdx
│ │ │ └── subscription-id.mdx
│ ├── directives
│ │ ├── _category_.yml
│ │ ├── deprecated.mdx
│ │ ├── include.mdx
│ │ ├── skip.mdx
│ │ └── specified-by.mdx
│ ├── enums
│ │ ├── _category_.yml
│ │ └── cart-state.mdx
│ ├── generated.md
│ ├── inputs
│ │ ├── _category_.yml
│ │ ├── account-reset-input-options.mdx
│ │ ├── account-reset-input.mdx
│ │ ├── account-status-input.mdx
│ │ ├── attached-client-disconnect-input.mdx
│ │ ├── basic-mutation-input.mdx
│ │ ├── cart-id-input.mdx
│ │ ├── change-recovery-codes-input.mdx
│ │ ├── create-password.mdx
│ │ ├── create-totp-input.mdx
│ │ ├── delete-avatar-input.mdx
│ │ ├── delete-recovery-key-input.mdx
│ │ ├── delete-totp-input.mdx
│ │ ├── destroy-session-input.mdx
│ │ ├── email-input.mdx
│ │ ├── finish-setup-input.mdx
│ │ ├── legal-input.mdx
│ │ ├── metrics-context.mdx
│ │ ├── metrics-opt-input.mdx
│ │ ├── password-change-input-options.mdx
│ │ ├── password-change-input.mdx
│ │ ├── password-forgot-code-status-input.mdx
│ │ ├── password-forgot-send-code-input.mdx
│ │ ├── password-forgot-verify-code-input.mdx
│ │ ├── recovery-key-bundle-input.mdx
│ │ ├── reject-unblock-code-input.mdx
│ │ ├── send-session-verification-input.mdx
│ │ ├── session-reauth-input.mdx
│ │ ├── session-reauth-options-input.mdx
│ │ ├── session-verify-code-input.mdx
│ │ ├── session-verify-code-options-input.mdx
│ │ ├── setup-cart-input.mdx
│ │ ├── sign-in-input.mdx
│ │ ├── sign-in-options-input.mdx
│ │ ├── sign-up-input.mdx
│ │ ├── sign-up-options-input.mdx
│ │ ├── update-cart-input.mdx
│ │ ├── update-display-name-input.mdx
│ │ ├── verify-email-code-input.mdx
│ │ ├── verify-email-input.mdx
│ │ ├── verify-session-input.mdx
│ │ └── verify-totp-input.mdx
│ ├── mutations
│ │ ├── _category_.yml
│ │ ├── account-reset.mdx
│ │ ├── attached-client-disconnect.mdx
│ │ ├── change-recovery-codes.mdx
│ │ ├── checkout-cart.mdx
│ │ ├── create-password.mdx
│ │ ├── create-secondary-email.mdx
│ │ ├── create-totp.mdx
│ │ ├── delete-avatar.mdx
│ │ ├── delete-recovery-key.mdx
│ │ ├── delete-secondary-email.mdx
│ │ ├── delete-totp.mdx
│ │ ├── destroy-session.mdx
│ │ ├── email-verify-code.mdx
│ │ ├── finish-setup.mdx
│ │ ├── metrics-opt.mdx
│ │ ├── password-change.mdx
│ │ ├── password-forgot-code-status.mdx
│ │ ├── password-forgot-send-code.mdx
│ │ ├── password-forgot-verify-code.mdx
│ │ ├── reauth-session.mdx
│ │ ├── reject-unblock-code.mdx
│ │ ├── resend-secondary-email-code.mdx
│ │ ├── resend-verify-code.mdx
│ │ ├── restart-cart.mdx
│ │ ├── send-session-verification-code.mdx
│ │ ├── setup-cart.mdx
│ │ ├── sign-in.mdx
│ │ ├── sign-up.mdx
│ │ ├── update-cart.mdx
│ │ ├── update-display-name.mdx
│ │ ├── update-primary-email.mdx
│ │ ├── verify-code.mdx
│ │ ├── verify-secondary-email.mdx
│ │ ├── verify-session.mdx
│ │ └── verify-totp.mdx
│ ├── objects
│ │ ├── _category_.yml
│ │ ├── account-reset-payload.mdx
│ │ ├── account-status-payload.mdx
│ │ ├── account.mdx
│ │ ├── attached-client.mdx
│ │ ├── avatar.mdx
│ │ ├── basic-payload.mdx
│ │ ├── cart.mdx
│ │ ├── change-recovery-codes-payload.mdx
│ │ ├── create-totp-payload.mdx
│ │ ├── email.mdx
│ │ ├── finished-setup-account-payload.mdx
│ │ ├── invoice.mdx
│ │ ├── legal-doc.mdx
│ │ ├── linked-account.mdx
│ │ ├── location.mdx
│ │ ├── password-change-payload.mdx
│ │ ├── password-forgot-code-status-payload.mdx
│ │ ├── password-forgot-send-code-payload.mdx
│ │ ├── password-forgot-verify-code-payload.mdx
│ │ ├── recovery-key-bundle-payload.mdx
│ │ ├── security-event.mdx
│ │ ├── session-reauthed-account-payload.mdx
│ │ ├── session-reauthed-account-playload.mdx
│ │ ├── session-status.mdx
│ │ ├── session.mdx
│ │ ├── signed-in-account-payload.mdx
│ │ ├── signed-up-account-payload.mdx
│ │ ├── tax-address.mdx
│ │ ├── tax-amount.mdx
│ │ ├── totp.mdx
│ │ ├── update-display-name-payload.mdx
│ │ └── verify-totp-payload.mdx
│ ├── operations
│ │ ├── _category_.yml
│ │ ├── directives
│ │ │ ├── _category_.yml
│ │ │ ├── include.mdx
│ │ │ └── skip.mdx
│ │ ├── mutations
│ │ │ ├── _category_.yml
│ │ │ ├── account-reset.mdx
│ │ │ ├── attached-client-disconnect.mdx
│ │ │ ├── change-recovery-codes.mdx
│ │ │ ├── create-password.mdx
│ │ │ ├── create-secondary-email.mdx
│ │ │ ├── create-totp.mdx
│ │ │ ├── delete-avatar.mdx
│ │ │ ├── delete-recovery-key.mdx
│ │ │ ├── delete-secondary-email.mdx
│ │ │ ├── delete-totp.mdx
│ │ │ ├── destroy-session.mdx
│ │ │ ├── email-verify-code.mdx
│ │ │ ├── finish-setup.mdx
│ │ │ ├── metrics-opt.mdx
│ │ │ ├── password-change.mdx
│ │ │ ├── password-forgot-code-status.mdx
│ │ │ ├── password-forgot-send-code.mdx
│ │ │ ├── password-forgot-verify-code.mdx
│ │ │ ├── reauth-session.mdx
│ │ │ ├── reject-unblock-code.mdx
│ │ │ ├── resend-secondary-email-code.mdx
│ │ │ ├── resend-verify-code.mdx
│ │ │ ├── send-session-verification-code.mdx
│ │ │ ├── sign-in.mdx
│ │ │ ├── sign-up.mdx
│ │ │ ├── update-display-name.mdx
│ │ │ ├── update-primary-email.mdx
│ │ │ ├── verify-code.mdx
│ │ │ ├── verify-secondary-email.mdx
│ │ │ ├── verify-session.mdx
│ │ │ └── verify-totp.mdx
│ │ ├── queries
│ │ │ ├── _category_.yml
│ │ │ ├── account-status.mdx
│ │ │ ├── account.mdx
│ │ │ ├── get-legal-doc.mdx
│ │ │ ├── get-recovery-key-bundle.mdx
│ │ │ ├── session-status.mdx
│ │ │ └── session.mdx
│ │ └── subscriptions
│ │ │ ├── _category_.yml
│ │ │ ├── cancel-at-period-end.mdx
│ │ │ ├── created.mdx
│ │ │ ├── current-period-end.mdx
│ │ │ ├── current-period-start.mdx
│ │ │ ├── end-at.mdx
│ │ │ ├── latest-invoice.mdx
│ │ │ ├── plan-id.mdx
│ │ │ ├── product-id.mdx
│ │ │ ├── product-name.mdx
│ │ │ ├── status.mdx
│ │ │ └── subscription-id.mdx
│ ├── queries
│ │ ├── _category_.yml
│ │ ├── account-status.mdx
│ │ ├── account.mdx
│ │ ├── cart.mdx
│ │ ├── get-legal-doc.mdx
│ │ ├── get-recovery-key-bundle.mdx
│ │ ├── session-status.mdx
│ │ └── session.mdx
│ ├── scalars
│ │ ├── _category_.yml
│ │ ├── boolean.mdx
│ │ ├── float.mdx
│ │ ├── id.mdx
│ │ └── string.mdx
│ ├── sidebar-schema.js
│ ├── subscriptions
│ │ ├── _category_.yml
│ │ ├── cancel-at-period-end.mdx
│ │ ├── created.mdx
│ │ ├── current-period-end.mdx
│ │ ├── current-period-start.mdx
│ │ ├── end-at.mdx
│ │ ├── latest-invoice.mdx
│ │ ├── plan-id.mdx
│ │ ├── product-id.mdx
│ │ ├── product-name.mdx
│ │ ├── status.mdx
│ │ └── subscription-id.mdx
│ └── types
│ │ ├── _category_.yml
│ │ ├── directives
│ │ ├── _category_.yml
│ │ ├── deprecated.mdx
│ │ ├── one-of.mdx
│ │ └── specified-by.mdx
│ │ ├── inputs
│ │ ├── _category_.yml
│ │ ├── account-reset-input-options.mdx
│ │ ├── account-reset-input.mdx
│ │ ├── account-status-input.mdx
│ │ ├── attached-client-disconnect-input.mdx
│ │ ├── basic-mutation-input.mdx
│ │ ├── change-recovery-codes-input.mdx
│ │ ├── create-password.mdx
│ │ ├── create-totp-input.mdx
│ │ ├── delete-avatar-input.mdx
│ │ ├── delete-recovery-key-input.mdx
│ │ ├── delete-totp-input.mdx
│ │ ├── destroy-session-input.mdx
│ │ ├── email-input.mdx
│ │ ├── finish-setup-input.mdx
│ │ ├── legal-input.mdx
│ │ ├── metrics-context.mdx
│ │ ├── metrics-opt-input.mdx
│ │ ├── password-change-input-options.mdx
│ │ ├── password-change-input.mdx
│ │ ├── password-forgot-code-status-input.mdx
│ │ ├── password-forgot-send-code-input.mdx
│ │ ├── password-forgot-verify-code-input.mdx
│ │ ├── recovery-key-bundle-input.mdx
│ │ ├── reject-unblock-code-input.mdx
│ │ ├── send-session-verification-input.mdx
│ │ ├── session-reauth-input.mdx
│ │ ├── session-reauth-options-input.mdx
│ │ ├── session-verify-code-input.mdx
│ │ ├── session-verify-code-options-input.mdx
│ │ ├── sign-in-input.mdx
│ │ ├── sign-in-options-input.mdx
│ │ ├── sign-up-input.mdx
│ │ ├── sign-up-options-input.mdx
│ │ ├── update-display-name-input.mdx
│ │ ├── verify-email-code-input.mdx
│ │ ├── verify-email-input.mdx
│ │ ├── verify-session-input.mdx
│ │ └── verify-totp-input.mdx
│ │ ├── objects
│ │ ├── _category_.yml
│ │ ├── account-reset-payload.mdx
│ │ ├── account-status-payload.mdx
│ │ ├── account.mdx
│ │ ├── attached-client.mdx
│ │ ├── avatar.mdx
│ │ ├── basic-payload.mdx
│ │ ├── change-recovery-codes-payload.mdx
│ │ ├── create-totp-payload.mdx
│ │ ├── email.mdx
│ │ ├── finished-setup-account-payload.mdx
│ │ ├── legal-doc.mdx
│ │ ├── linked-account.mdx
│ │ ├── location.mdx
│ │ ├── password-change-payload.mdx
│ │ ├── password-forgot-code-status-payload.mdx
│ │ ├── password-forgot-send-code-payload.mdx
│ │ ├── password-forgot-verify-code-payload.mdx
│ │ ├── recovery-key-bundle-payload.mdx
│ │ ├── security-event.mdx
│ │ ├── session-reauthed-account-payload.mdx
│ │ ├── session-status.mdx
│ │ ├── session.mdx
│ │ ├── signed-in-account-payload.mdx
│ │ ├── signed-up-account-payload.mdx
│ │ ├── totp.mdx
│ │ ├── update-display-name-payload.mdx
│ │ └── verify-totp-payload.mdx
│ │ └── scalars
│ │ ├── _category_.yml
│ │ ├── boolean.mdx
│ │ ├── float.mdx
│ │ ├── id.mdx
│ │ └── string.mdx
├── how-tos
│ ├── ci-guidelines.md
│ ├── connecting-to-a-local-mysql-db.md
│ ├── creating-an-account-locally.md
│ ├── local-emails-with-maildev.md
│ ├── managing-yarn-dependencies.md
│ ├── node-debugging.md
│ ├── rotating-secrets.md
│ ├── using-a-custom-profile-with-firefox.md
│ ├── using-sentry-locally.md
│ ├── using-swagger-for-api-documentation.md
│ ├── using-tracing-in-gcp.md
│ ├── using-tracing-locally.md
│ ├── using-twilio-locally.md
│ ├── using-vscode-with-fxa.md
│ └── working-with-metrics.md
├── intro.md
├── reference
│ ├── admin-panel.md
│ ├── application-logging.md
│ ├── application-tracing.md
│ ├── automation-testplan.md
│ ├── browser-support.md
│ ├── canceling-subscriptions-to-plan.md
│ ├── continuous-integration-for-monorepos.md
│ ├── database-structure.md
│ ├── emails.md
│ ├── experiments-ab-testing.md
│ ├── functional-testing.md
│ ├── github-strategies.md
│ ├── localization.md
│ ├── metrics.md
│ ├── mobile-specifics.md
│ ├── npm-scripts-and-nx.md
│ ├── oauth-details.md
│ ├── rate-limiting.md
│ ├── storybook-deploys-with-circleci.md
│ ├── style-guides
│ │ ├── node-style-guide.md
│ │ └── react-style-guide.md
│ ├── system-diagrams.md
│ ├── team-processes
│ │ ├── development-process.md
│ │ ├── pull-request-review-guidelines.md
│ │ ├── release-process.md
│ │ ├── triage-process.md
│ │ └── work-breakdown-process.md
│ ├── tests-in-circleci.md
│ ├── third-party-authentication.md
│ ├── tokens.md
│ └── webchannels.md
├── relying-parties
│ ├── how-tos
│ │ ├── apple-iap.md
│ │ ├── device-registration.md
│ │ ├── end-to-end-encryption.md
│ │ ├── google-iap.md
│ │ └── product-metrics.md
│ ├── reference
│ │ ├── glossary.md
│ │ ├── integration-requirements.md
│ │ ├── metrics-for-relying-parties.md
│ │ ├── query-parameters.md
│ │ ├── sub-plat-coupons.md
│ │ ├── sub-plat-features.md
│ │ ├── sub-plat-overview.md
│ │ ├── sub-plat-strapi.md
│ │ └── using-apis.md
│ └── tutorials
│ │ ├── integrating-with-fxa.md
│ │ ├── integration-with-subscription-platform.md
│ │ └── pairing.md
└── tutorials
│ ├── development-setup.mdx
│ └── subscription-platform.md
├── docusaurus.config.js
├── package.json
├── sidebars.js
├── src
└── css
│ └── custom.css
├── static
├── .nojekyll
├── css
│ └── custom.css
├── diagrams
│ ├── data_catalog_example.png
│ ├── structurizr-1-AccountAuthenticationSystemLandscape-key.png
│ ├── structurizr-1-AccountAuthenticationSystemLandscape.png
│ ├── structurizr-1-AccountSystemLandscape-key.png
│ ├── structurizr-1-AccountSystemLandscape.png
│ ├── structurizr-1-Containers-key.png
│ ├── structurizr-1-Containers.png
│ ├── structurizr-1-ContainersPaymentSystem2_5-key.png
│ ├── structurizr-1-ContainersPaymentSystem2_5.png
│ ├── structurizr-1-ContainersPaymentSystem3-key.png
│ ├── structurizr-1-ContainersPaymentSystem3.png
│ ├── structurizr-1-EventBrokerSystem.png
│ ├── structurizr-1-PaymentSystemLandscape-key.png
│ ├── structurizr-1-PaymentSystemLandscape.png
│ ├── structurizr-1-SendTab-key.png
│ ├── structurizr-1-SendTab.png
│ ├── structurizr-1-SystemLandscape-key.png
│ └── structurizr-1-SystemLandscape.png
├── fonts
│ ├── Inter-Bold.woff
│ ├── Inter-Bold.woff2
│ ├── Inter-Regular.woff
│ ├── Inter-Regular.woff2
│ ├── Metropolis-Bold.woff
│ ├── Metropolis-Bold.woff2
│ ├── Metropolis-Regular.woff
│ └── Metropolis-Regular.woff2
└── img
│ └── firefox-logo.png
├── tsconfig.json
└── yarn.lock
/.circleci/config.yml:
--------------------------------------------------------------------------------
1 | version: 2.1
2 |
3 | jobs:
4 | Deploy to GitHub pages:
5 | resource_class: medium+
6 | docker:
7 | - image: cimg/node:18.12
8 | steps:
9 | - add_ssh_keys:
10 | fingerprints:
11 | - "cc:4c:4f:b8:68:5f:da:6c:fc:fd:58:85:78:5f:38:86"
12 | - checkout
13 | - run:
14 | name: Build and publish the docs portal
15 | command: |
16 | yarn install
17 | git config --global user.name "Application Services"
18 | git config --global user.email "application-services@mozilla.com"
19 | USE_SSH=true CUSTOM_COMMIT_MESSAGE="Deploy website [ci skip]" GIT_USER="Application Services" yarn deploy
20 |
21 | workflows:
22 | version: 2
23 | deploy-website:
24 | jobs:
25 | - Deploy to GitHub pages:
26 | filters:
27 | branches:
28 | only: master
29 |
--------------------------------------------------------------------------------
/.devcontainer/devcontainer.json:
--------------------------------------------------------------------------------
1 | // For format details, see https://aka.ms/devcontainer.json. For config options, see the
2 | // README at: https://github.com/devcontainers/templates/tree/main/src/javascript-node
3 | {
4 | "name": "Node.js",
5 | // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
6 | "image": "mcr.microsoft.com/devcontainers/base:bullseye",
7 | "features": {
8 | "ghcr.io/devcontainers/features/docker-in-docker:2": {
9 | "version": "latest",
10 | "enableNonRootDocker": "true",
11 | "moby": "true"
12 | },
13 | // 🤷The jre/libxtst6 and java features below are needed for the structurizr DSL extension
14 | "ghcr.io/rocker-org/devcontainer-features/apt-packages:1": {
15 | "packages": "libxtst6,default-jre"
16 | },
17 | "ghcr.io/devcontainers/features/java:1": {},
18 | "ghcr.io/devcontainers/features/node:1": {}
19 | },
20 |
21 | // Features to add to the dev container. More info: https://containers.dev/features.
22 | // "features": {},
23 |
24 | // Use 'forwardPorts' to make a list of ports inside the container available locally.
25 | "forwardPorts": [
26 | 8080
27 | ],
28 |
29 | // Use 'postCreateCommand' to run commands after the container is created.
30 | "postCreateCommand": "bash -i -c 'nvm install'",
31 |
32 | // Configure tool-specific properties.
33 | "customizations": {
34 | "vscode": {
35 | "extensions": [
36 | "systemticks.c4-dsl-extension"
37 | ]
38 | }
39 | }
40 |
41 | // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
42 | // "remoteUser": "root"
43 | }
44 |
--------------------------------------------------------------------------------
/.dockerignore:
--------------------------------------------------------------------------------
1 | */node_modules
2 | *.log
3 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: "npm"
4 | directory: "/"
5 | schedule:
6 | interval: "daily"
7 | groups:
8 | docusaurus:
9 | patterns:
10 | - "@docusaurus/*"
11 | open-pull-requests-limit: 6
12 | labels:
13 | - "dependencies"
14 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # dependencies
2 | /node_modules
3 |
4 | # production
5 | /build
6 |
7 | # generated files
8 | .docusaurus
9 | .cache-loader
10 |
11 | # misc
12 | .DS_Store
13 | .env.local
14 | .env.development.local
15 | .env.test.local
16 | .env.production.local
17 |
18 | npm-debug.log*
19 | yarn-debug.log*
20 | yarn-error.log*
21 |
22 | .yarn
23 |
--------------------------------------------------------------------------------
/.nvmrc:
--------------------------------------------------------------------------------
1 | 18.12
2 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Community Participation Guidelines
2 |
3 | This repository is governed by Mozilla's code of conduct and etiquette guidelines.
4 | For more details, please read the
5 | [Mozilla Community Participation Guidelines](https://www.mozilla.org/about/governance/policies/participation/).
6 |
7 | ## How to Report
8 | For more information on how to report violations of the Community Participation Guidelines, please read our '[How to Report](https://www.mozilla.org/about/governance/policies/participation/reporting/)' page.
9 |
10 | ## Project Specific Etiquette
11 |
12 | ### Our Responsibilities
13 |
14 | Project maintainers are responsible for clarifying the standards of acceptable
15 | behavior and are expected to take appropriate and fair corrective action in
16 | response to any instances of unacceptable behavior.
17 |
18 | Project maintainers have the right and responsibility to remove, edit, or
19 | reject comments, commits, code, wiki edits, issues, and other contributions
20 | that are not aligned to this Code of Conduct, or to ban temporarily or
21 | permanently any contributor for other behaviors that they deem inappropriate,
22 | threatening, offensive, or harmful.
23 |
24 | Project maintainers who do not follow or enforce Mozilla's Participation Guidelines in good
25 | faith may face temporary or permanent repercussions.
26 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | Thanks for contributing to our documentation.
2 |
3 | Our documentation is organized after the [divio system](https://documentation.divio.com/introduction/). Please familiarize yourself with the system to understand where your new documentation fits in this repository.
4 |
5 | Please name your files as slugs of the page title. For example, a page title of `Local Emails with Maildev` would be `local-emails-with-maildev.md`.
6 |
7 | Images should be named thoughtfully and stored in `/docs/assets`.
--------------------------------------------------------------------------------
/PR_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | ## Description
2 |
3 | Describe these changes.
4 |
5 | ## Testing
6 |
7 | How should reviewers test?
8 |
9 | ## Issue(s)
10 |
11 | Closes [link](link).
12 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## Firefox Ecosystem Platform Docs
2 |
3 | This repo hosts the source code and tooling for the [Firefox Ecosystem
4 | Platform](https://mozilla.github.io/ecosystem-platform/) documentation portal.
5 |
6 | ### Scope and Target Audience
7 |
8 | The docs in this repository are intended for engineers, designers or product managers working on
9 | applications in the Firefox Ecosystem.
10 |
11 | Our aim is to help them understand *how* and *why* to incorporate Account-related features into
12 | their application, in a way that makes the Firefox family of products feel like a cohesive
13 | cross-app and cross-device experience for users.
14 |
15 | ### Working on the Docs
16 |
17 | Our documentation is organized following a [Divio strategy](https://documentation.divio.com/).
18 | If you modify these docs please use that structure.
19 |
20 | The site is build using [Docusaurus](https://docusaurus.io/en/) and is automatically
21 | deployed from master to GitHub Pages using CircleCI. To build and run it locally you can:
22 |
23 | ```
24 | $> yarn install
25 | $> yarn start
26 | ```
27 |
28 | That should open a new browser window automatically, or you can manually browse
29 | to http://localhost:3333/ecosystem-platform/ to view the docs.
30 |
--------------------------------------------------------------------------------
/architecture-diagrams/README.md:
--------------------------------------------------------------------------------
1 | # Mozilla accounts & Subscription Platform C4 Model
2 |
3 | The software architecture diagrams in FxA and SubPlat use the [c4 model](https://c4model.com) to separate layers and [structurizr](https://structurizr.com/) to render them.
4 |
5 | ## Overall Process for Editing / Creating C4 Model Diagrams Overview
6 |
7 | This assumes you have a copy of the ecosystem-platform documentation checked out and are in the root.
8 |
9 | 0. `docker pull structurizr/lite`
10 | 0. `cd architecture-diagrams` (that's the directory this file is in)
11 | 0. `docker run -it --rm -p 8080:8080 -v $(pwd):/usr/local/structurizr -e STRUCTURIZR_WORKSPACE_FILENAME=fxa-subplat structurizr/lite` . This starts an interactive docker container passing through the current directory as the working directory for structurizr.
12 | 0. Load http://localhost:8080 in your browser.
13 |
--------------------------------------------------------------------------------
/architecture-diagrams/structurizr.properties:
--------------------------------------------------------------------------------
1 | structurizr.feature.ui.dslEditor=true
2 | structurizr.autoSaveInterval=5000
3 | structurizr.autoRefreshInterval=2000
4 |
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
3 | };
4 |
--------------------------------------------------------------------------------
/compose.yaml:
--------------------------------------------------------------------------------
1 | services:
2 | structurizr:
3 | image: structurizr/onpremises
4 | ports:
5 | - "8080:8080"
6 | volumes:
7 | - ~/structurizr:/usr/local/structurizr
8 |
--------------------------------------------------------------------------------
/docs/assets/IdPAuth-key-unwrap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/IdPAuth-key-unwrap.png
--------------------------------------------------------------------------------
/docs/assets/IdPAuth-keys-client.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/IdPAuth-keys-client.png
--------------------------------------------------------------------------------
/docs/assets/IdPAuth-keys-server.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/IdPAuth-keys-server.png
--------------------------------------------------------------------------------
/docs/assets/admin-panel/image1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/admin-panel/image1.png
--------------------------------------------------------------------------------
/docs/assets/admin-panel/image10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/admin-panel/image10.png
--------------------------------------------------------------------------------
/docs/assets/admin-panel/image11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/admin-panel/image11.png
--------------------------------------------------------------------------------
/docs/assets/admin-panel/image12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/admin-panel/image12.png
--------------------------------------------------------------------------------
/docs/assets/admin-panel/image13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/admin-panel/image13.png
--------------------------------------------------------------------------------
/docs/assets/admin-panel/image14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/admin-panel/image14.png
--------------------------------------------------------------------------------
/docs/assets/admin-panel/image15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/admin-panel/image15.png
--------------------------------------------------------------------------------
/docs/assets/admin-panel/image16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/admin-panel/image16.png
--------------------------------------------------------------------------------
/docs/assets/admin-panel/image2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/admin-panel/image2.png
--------------------------------------------------------------------------------
/docs/assets/admin-panel/image3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/admin-panel/image3.png
--------------------------------------------------------------------------------
/docs/assets/admin-panel/image4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/admin-panel/image4.png
--------------------------------------------------------------------------------
/docs/assets/admin-panel/image5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/admin-panel/image5.png
--------------------------------------------------------------------------------
/docs/assets/admin-panel/image6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/admin-panel/image6.png
--------------------------------------------------------------------------------
/docs/assets/admin-panel/image7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/admin-panel/image7.png
--------------------------------------------------------------------------------
/docs/assets/admin-panel/image8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/admin-panel/image8.png
--------------------------------------------------------------------------------
/docs/assets/admin-panel/image9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/admin-panel/image9.png
--------------------------------------------------------------------------------
/docs/assets/ci/ci-sequence-diagram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/ci/ci-sequence-diagram.png
--------------------------------------------------------------------------------
/docs/assets/ci/failed-build.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/ci/failed-build.png
--------------------------------------------------------------------------------
/docs/assets/ci/fan-out.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/ci/fan-out.png
--------------------------------------------------------------------------------
/docs/assets/ci/scripted-test-split.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/ci/scripted-test-split.png
--------------------------------------------------------------------------------
/docs/assets/ci/split-tests.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/ci/split-tests.png
--------------------------------------------------------------------------------
/docs/assets/ci/test-lists.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/ci/test-lists.png
--------------------------------------------------------------------------------
/docs/assets/ci/test-report.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/ci/test-report.png
--------------------------------------------------------------------------------
/docs/assets/coupons/codes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/coupons/codes.png
--------------------------------------------------------------------------------
/docs/assets/coupons/create.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/coupons/create.png
--------------------------------------------------------------------------------
/docs/assets/coupons/metadata.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/coupons/metadata.png
--------------------------------------------------------------------------------
/docs/assets/coupons/navigation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/coupons/navigation.png
--------------------------------------------------------------------------------
/docs/assets/fxa-client-diagram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/fxa-client-diagram.png
--------------------------------------------------------------------------------
/docs/assets/fxa-pairing-desktop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/fxa-pairing-desktop.png
--------------------------------------------------------------------------------
/docs/assets/fxa-pairing-mobile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/fxa-pairing-mobile.png
--------------------------------------------------------------------------------
/docs/assets/fxa-scoped-keys-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/fxa-scoped-keys-1.png
--------------------------------------------------------------------------------
/docs/assets/fxa-scoped-keys-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/fxa-scoped-keys-2.png
--------------------------------------------------------------------------------
/docs/assets/logs-inbox-signin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/logs-inbox-signin.png
--------------------------------------------------------------------------------
/docs/assets/maildev-inbox.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/maildev-inbox.png
--------------------------------------------------------------------------------
/docs/assets/onepw-auth.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/onepw-auth.png
--------------------------------------------------------------------------------
/docs/assets/onepw-change-password.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/onepw-change-password.png
--------------------------------------------------------------------------------
/docs/assets/onepw-create.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/onepw-create.png
--------------------------------------------------------------------------------
/docs/assets/onepw-forgot-password.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/onepw-forgot-password.png
--------------------------------------------------------------------------------
/docs/assets/onepw-keys.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/onepw-keys.png
--------------------------------------------------------------------------------
/docs/assets/onepw-reset.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/onepw-reset.png
--------------------------------------------------------------------------------
/docs/assets/product-configs/sample-plan-config-doc.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "aa8d0fe6-7f25-4b27-92bf-5d1bb12bdef5",
3 | "productConfigId": "34bd9547-9439-49e2-a1e9-068b2b2172b2",
4 | "stripePriceId": "price_1JFoTYKb9q6OnNsLalexa03p",
5 | "active": true,
6 | "capabilities": {
7 | "e7xyz84c2db34a09": ["mdn_plus_5m"],
8 | "b6xyz7233f7ef8ee": ["mdn_plus_5m"]
9 | },
10 | "productOrder": 1,
11 | "playSkuIds": [
12 | "org.mozilla.excellent.product.1_month_subscription",
13 | "org.mozilla.excellent.product.6_month_subscription"
14 | ],
15 | "appStoreProductIds": [
16 | "org.mozilla.excellent.product.1_month_subscription",
17 | "org.mozilla.excellent.product.6_month_subscription"
18 | ]
19 | }
20 |
--------------------------------------------------------------------------------
/docs/assets/storybook-circleci.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/storybook-circleci.png
--------------------------------------------------------------------------------
/docs/assets/subplat-contentful-nav.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/subplat-contentful-nav.png
--------------------------------------------------------------------------------
/docs/assets/subplat-strapi-bundle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/subplat-strapi-bundle.png
--------------------------------------------------------------------------------
/docs/assets/subplat-strapi-locale-dropdown.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/subplat-strapi-locale-dropdown.png
--------------------------------------------------------------------------------
/docs/assets/subplat-strapi-new-entry.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/subplat-strapi-new-entry.png
--------------------------------------------------------------------------------
/docs/assets/subplat-strapi-subgroup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/subplat-strapi-subgroup.png
--------------------------------------------------------------------------------
/docs/assets/tracing/fxa-otel-system-diagram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/tracing/fxa-otel-system-diagram.png
--------------------------------------------------------------------------------
/docs/assets/tracing/fxa-tracing-system-diagram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/tracing/fxa-tracing-system-diagram.png
--------------------------------------------------------------------------------
/docs/assets/tracing/tracing-gcp-filter-by-method.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/tracing/tracing-gcp-filter-by-method.png
--------------------------------------------------------------------------------
/docs/assets/tracing/tracing-gcp-filter-by-target.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/tracing/tracing-gcp-filter-by-target.png
--------------------------------------------------------------------------------
/docs/assets/tracing/tracing-gcp-log-viewer-trace-slice.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/tracing/tracing-gcp-log-viewer-trace-slice.png
--------------------------------------------------------------------------------
/docs/assets/tracing/tracing-gcp-search-by-trace-id.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/tracing/tracing-gcp-search-by-trace-id.png
--------------------------------------------------------------------------------
/docs/assets/tracing/tracing-gcp-trace-logs-view.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/tracing/tracing-gcp-trace-logs-view.png
--------------------------------------------------------------------------------
/docs/assets/tracing/tracing-jaeger-full-trace.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/tracing/tracing-jaeger-full-trace.png
--------------------------------------------------------------------------------
/docs/assets/tracing/tracing-jaeger-graph-view.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/tracing/tracing-jaeger-graph-view.png
--------------------------------------------------------------------------------
/docs/assets/tracing/tracing-jaeger-graph.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/tracing/tracing-jaeger-graph.png
--------------------------------------------------------------------------------
/docs/assets/tracing/tracing-jaeger-select-service.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/tracing/tracing-jaeger-select-service.png
--------------------------------------------------------------------------------
/docs/assets/tracing/tracing-jaeger-sys-arch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/tracing/tracing-jaeger-sys-arch.png
--------------------------------------------------------------------------------
/docs/assets/tracing/tracing-jaeger-traces.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/docs/assets/tracing/tracing-jaeger-traces.png
--------------------------------------------------------------------------------
/docs/explanation/architectural-decision-records.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Architectural Decision Records
3 | ---
4 |
5 | FxA records major architectural decisions in an [ADR][about] format. An ADR is needed whenever there are multiple viable options to pursue that will require a significant engineering effort. Please find FxA ADRs in the FxA repository:
6 | * https://github.com/mozilla/fxa/blob/main/docs/adr
7 |
8 | Before we used ADRs, we also archived our feature design documentation. It's still available online as well:
9 | * https://github.com/mozilla/fxa-archive/tree/master/features
10 |
11 | [about]: https://adr.github.io/
12 |
--------------------------------------------------------------------------------
/docs/gql-api/api/_category_.yml:
--------------------------------------------------------------------------------
1 | label: Api
2 | position: 1
3 | className: graphql-markdown-api-section
4 | link: null
5 | collapsible: false
6 | collapsed: false
7 |
--------------------------------------------------------------------------------
/docs/gql-api/api/directives/_category_.yml:
--------------------------------------------------------------------------------
1 | label: Directives
2 | position: 1
3 | link: null
4 | collapsible: true
5 | collapsed: true
6 |
--------------------------------------------------------------------------------
/docs/gql-api/api/directives/include.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: include
3 | title: include
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | Directs the executor to include this field or fragment only when the `if` argument is true.
43 |
44 |
45 | ```graphql
46 | directive @include(
47 | if: Boolean!
48 | ) on
49 | | FIELD
50 | | FRAGMENT_SPREAD
51 | | INLINE_FRAGMENT
52 | ```
53 |
54 |
55 |
56 |
57 | ### Arguments
58 |
59 | #### [include.if
](#)[`Boolean!`](/gql-api/types/scalars/boolean)
60 | >
61 | >
62 | > Included when true.
63 | >
64 |
65 |
66 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/docs/gql-api/api/directives/skip.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: skip
3 | title: skip
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | Directs the executor to skip this field or fragment when the `if` argument is true.
43 |
44 |
45 | ```graphql
46 | directive @skip(
47 | if: Boolean!
48 | ) on
49 | | FIELD
50 | | FRAGMENT_SPREAD
51 | | INLINE_FRAGMENT
52 | ```
53 |
54 |
55 |
56 |
57 | ### Arguments
58 |
59 | #### [skip.if
](#)[`Boolean!`](/gql-api/types/scalars/boolean)
60 | >
61 | >
62 | > Skipped when true.
63 | >
64 |
65 |
66 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/docs/gql-api/api/mutations/_category_.yml:
--------------------------------------------------------------------------------
1 | label: Mutations
2 | position: 1
3 | link: null
4 | collapsible: true
5 | collapsed: true
6 |
--------------------------------------------------------------------------------
/docs/gql-api/api/mutations/delete-avatar.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: delete-avatar
3 | title: deleteAvatar
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | Delete the avatar.
43 |
44 |
45 | ```graphql
46 | deleteAvatar(
47 | input: DeleteAvatarInput!
48 | ): BasicPayload!
49 | ```
50 |
51 |
52 |
53 |
54 | ### Arguments
55 |
56 | #### [deleteAvatar.input
](#)[`DeleteAvatarInput!`](/gql-api/types/inputs/delete-avatar-input)
57 | >
58 | >
59 | >
60 | >
61 |
62 | ### Type
63 |
64 | #### [`BasicPayload`](/gql-api/types/objects/basic-payload)
65 | >
66 | >
67 | >
68 | >
69 |
70 |
71 |
72 |
73 |
74 |
--------------------------------------------------------------------------------
/docs/gql-api/api/mutations/metrics-opt.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: metrics-opt
3 | title: metricsOpt
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | Set the metrics opt in or out state
43 |
44 |
45 | ```graphql
46 | metricsOpt(
47 | input: MetricsOptInput!
48 | ): BasicPayload!
49 | ```
50 |
51 |
52 |
53 |
54 | ### Arguments
55 |
56 | #### [metricsOpt.input
](#)[`MetricsOptInput!`](/gql-api/types/inputs/metrics-opt-input)
57 | >
58 | >
59 | >
60 | >
61 |
62 | ### Type
63 |
64 | #### [`BasicPayload`](/gql-api/types/objects/basic-payload)
65 | >
66 | >
67 | >
68 | >
69 |
70 |
71 |
72 |
73 |
74 |
--------------------------------------------------------------------------------
/docs/gql-api/api/mutations/sign-in.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: sign-in
3 | title: signIn
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | Call auth-server to sign in an account
43 |
44 |
45 | ```graphql
46 | signIn(
47 | input: SignInInput!
48 | ): SignedInAccountPayload!
49 | ```
50 |
51 |
52 |
53 |
54 | ### Arguments
55 |
56 | #### [signIn.input
](#)[`SignInInput!`](/gql-api/types/inputs/sign-in-input)
57 | >
58 | >
59 | >
60 | >
61 |
62 | ### Type
63 |
64 | #### [`SignedInAccountPayload`](/gql-api/types/objects/signed-in-account-payload)
65 | >
66 | >
67 | >
68 | >
69 |
70 |
71 |
72 |
73 |
74 |
--------------------------------------------------------------------------------
/docs/gql-api/api/mutations/sign-up.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: sign-up
3 | title: SignUp
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | Call auth-server to sign up an account
43 |
44 |
45 | ```graphql
46 | SignUp(
47 | input: SignUpInput!
48 | ): SignedUpAccountPayload!
49 | ```
50 |
51 |
52 |
53 |
54 | ### Arguments
55 |
56 | #### [SignUp.input
](#)[`SignUpInput!`](/gql-api/types/inputs/sign-up-input)
57 | >
58 | >
59 | >
60 | >
61 |
62 | ### Type
63 |
64 | #### [`SignedUpAccountPayload`](/gql-api/types/objects/signed-up-account-payload)
65 | >
66 | >
67 | >
68 | >
69 |
70 |
71 |
72 |
73 |
74 |
--------------------------------------------------------------------------------
/docs/gql-api/api/queries/_category_.yml:
--------------------------------------------------------------------------------
1 | label: Queries
2 | position: 1
3 | link: null
4 | collapsible: true
5 | collapsed: true
6 |
--------------------------------------------------------------------------------
/docs/gql-api/api/queries/account.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: account
3 | title: account
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | account: Account
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`Account`](/gql-api/types/objects/account)
55 | >
56 | >
57 | > The current authenticated user's Firefox Account record.
58 | >
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/docs/gql-api/api/queries/get-legal-doc.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: get-legal-doc
3 | title: getLegalDoc
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | getLegalDoc(
47 | input: LegalInput!
48 | ): LegalDoc!
49 | ```
50 |
51 |
52 |
53 |
54 | ### Arguments
55 |
56 | #### [getLegalDoc.input
](#)[`LegalInput!`](/gql-api/types/inputs/legal-input)
57 | >
58 | >
59 | >
60 | >
61 |
62 | ### Type
63 |
64 | #### [`LegalDoc`](/gql-api/types/objects/legal-doc)
65 | >
66 | >
67 | >
68 | >
69 |
70 |
71 |
72 |
73 |
74 |
--------------------------------------------------------------------------------
/docs/gql-api/api/queries/session-status.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: session-status
3 | title: sessionStatus
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | sessionStatus: SessionStatus!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`SessionStatus`](/gql-api/types/objects/session-status)
55 | >
56 | >
57 | > Session status
58 | >
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/docs/gql-api/api/queries/session.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: session
3 | title: session
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | session: Session!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`Session`](/gql-api/types/objects/session)
55 | >
56 | >
57 | > Session (token) info
58 | >
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/docs/gql-api/api/subscriptions/_category_.yml:
--------------------------------------------------------------------------------
1 | label: Subscriptions
2 | position: 1
3 | link: null
4 | collapsible: true
5 | collapsed: true
6 |
--------------------------------------------------------------------------------
/docs/gql-api/api/subscriptions/cancel-at-period-end.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: cancel-at-period-end
3 | title: cancelAtPeriodEnd
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | cancelAtPeriodEnd: Boolean!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`Boolean`](/gql-api/types/scalars/boolean)
55 | >
56 | >
57 | > The `Boolean` scalar type represents `true` or `false`.
58 | >
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/docs/gql-api/api/subscriptions/created.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: created
3 | title: created
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | created: Float
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`Float`](/gql-api/types/scalars/float)
55 | >
56 | >
57 | > The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).
58 | >
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/docs/gql-api/api/subscriptions/current-period-end.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: current-period-end
3 | title: currentPeriodEnd
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | currentPeriodEnd: Float!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`Float`](/gql-api/types/scalars/float)
55 | >
56 | >
57 | > The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).
58 | >
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/docs/gql-api/api/subscriptions/current-period-start.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: current-period-start
3 | title: currentPeriodStart
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | currentPeriodStart: Float!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`Float`](/gql-api/types/scalars/float)
55 | >
56 | >
57 | > The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).
58 | >
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/docs/gql-api/api/subscriptions/end-at.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: end-at
3 | title: endAt
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | endAt: Float!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`Float`](/gql-api/types/scalars/float)
55 | >
56 | >
57 | > The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).
58 | >
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/docs/gql-api/api/subscriptions/latest-invoice.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: latest-invoice
3 | title: latestInvoice
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | latestInvoice: String!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`String`](/gql-api/types/scalars/string)
55 | >
56 | >
57 | > The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
58 | >
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/docs/gql-api/api/subscriptions/plan-id.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: plan-id
3 | title: planId
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | planId: String!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`String`](/gql-api/types/scalars/string)
55 | >
56 | >
57 | > The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
58 | >
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/docs/gql-api/api/subscriptions/product-id.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: product-id
3 | title: productId
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | productId: String!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`String`](/gql-api/types/scalars/string)
55 | >
56 | >
57 | > The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
58 | >
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/docs/gql-api/api/subscriptions/product-name.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: product-name
3 | title: productName
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | productName: String!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`String`](/gql-api/types/scalars/string)
55 | >
56 | >
57 | > The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
58 | >
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/docs/gql-api/api/subscriptions/status.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: status
3 | title: status
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | status: String!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`String`](/gql-api/types/scalars/string)
55 | >
56 | >
57 | > The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
58 | >
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/docs/gql-api/api/subscriptions/subscription-id.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: subscription-id
3 | title: subscriptionId
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | subscriptionId: String!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`String`](/gql-api/types/scalars/string)
55 | >
56 | >
57 | > The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
58 | >
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/docs/gql-api/directives/_category_.yml:
--------------------------------------------------------------------------------
1 | label: Directives
2 | link: null
3 |
--------------------------------------------------------------------------------
/docs/gql-api/directives/include.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: include
3 | title: include
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | Directs the executor to include this field or fragment only when the `if` argument is true.
42 |
43 |
44 | ```graphql
45 | directive @include(
46 | if: Boolean!
47 | ) on
48 | | FIELD
49 | | FRAGMENT_SPREAD
50 | | INLINE_FRAGMENT
51 | ```
52 |
53 |
54 |
55 |
56 | ### Arguments
57 |
58 | #### [include.if
](#)[`Boolean!`](/gql-api/scalars/boolean)
59 | >
60 | >
61 | > Included when true.
62 | >
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/docs/gql-api/directives/skip.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: skip
3 | title: skip
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | Directs the executor to skip this field or fragment when the `if` argument is true.
42 |
43 |
44 | ```graphql
45 | directive @skip(
46 | if: Boolean!
47 | ) on
48 | | FIELD
49 | | FRAGMENT_SPREAD
50 | | INLINE_FRAGMENT
51 | ```
52 |
53 |
54 |
55 |
56 | ### Arguments
57 |
58 | #### [skip.if
](#)[`Boolean!`](/gql-api/scalars/boolean)
59 | >
60 | >
61 | > Skipped when true.
62 | >
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/docs/gql-api/directives/specified-by.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: specified-by
3 | title: specifiedBy
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | Exposes a URL that specifies the behavior of this scalar.
42 |
43 |
44 | ```graphql
45 | directive @specifiedBy(
46 | url: String!
47 | ) on SCALAR
48 | ```
49 |
50 |
51 |
52 |
53 | ### Arguments
54 |
55 | #### [specifiedBy.url
](#)[`String!`](/gql-api/scalars/string)
56 | >
57 | >
58 | > The URL that specifies the behavior of this scalar.
59 | >
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/docs/gql-api/enums/_category_.yml:
--------------------------------------------------------------------------------
1 | label: Enums
2 | position: 1
3 | link: null
4 |
--------------------------------------------------------------------------------
/docs/gql-api/generated.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: schema
3 | slug: /gql-api
4 | title: Schema Documentation
5 | sidebar_position: 1
6 | hide_table_of_contents: true
7 | pagination_next: null
8 | pagination_prev: null
9 | sidebar_class_name: navbar__toggle
10 | ---
11 |
12 | This documentation has been automatically generated from the GraphQL schema.
13 |
14 | Use the docs in the sidebar to find out how to use the schema:
15 |
16 | - **Allowed operations**: queries and mutations.
17 | - **Schema-defined types**: scalars, objects, enums, interfaces, unions, and input objects.
18 |
19 | Generated on 5/16/2025, 8:08:21 AM.
20 |
--------------------------------------------------------------------------------
/docs/gql-api/inputs/_category_.yml:
--------------------------------------------------------------------------------
1 | label: Inputs
2 | link: null
3 |
--------------------------------------------------------------------------------
/docs/gql-api/inputs/basic-mutation-input.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: basic-mutation-input
3 | title: BasicMutationInput
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | input BasicMutationInput {
46 | clientMutationId: String
47 | }
48 | ```
49 |
50 |
51 |
52 |
53 | ### Fields
54 |
55 | #### [BasicMutationInput.clientMutationId
](#)[`String`](/gql-api/scalars/string)
56 | >
57 | >
58 | > A unique identifier for the client performing the mutation.
59 | >
60 |
61 |
62 |
63 | ### Member of
64 |
65 | [`resendVerifyCode`](/gql-api/mutations/resend-verify-code)
66 |
67 |
--------------------------------------------------------------------------------
/docs/gql-api/inputs/cart-id-input.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: cart-id-input
3 | title: CartIdInput
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | input CartIdInput {
46 | id: String!
47 | }
48 | ```
49 |
50 |
51 |
52 |
53 | ### Fields
54 |
55 | #### [CartIdInput.id
](#)[`String!`](/gql-api/scalars/string)
56 | >
57 | >
58 | > Cart ID
59 | >
60 |
61 |
62 |
63 | ### Member of
64 |
65 | [`checkoutCart`](/gql-api/mutations/checkout-cart) [`restartCart`](/gql-api/mutations/restart-cart)
66 |
67 |
--------------------------------------------------------------------------------
/docs/gql-api/inputs/change-recovery-codes-input.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: change-recovery-codes-input
3 | title: ChangeRecoveryCodesInput
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | input ChangeRecoveryCodesInput {
46 | clientMutationId: String
47 | }
48 | ```
49 |
50 |
51 |
52 |
53 | ### Fields
54 |
55 | #### [ChangeRecoveryCodesInput.clientMutationId
](#)[`String`](/gql-api/scalars/string)
56 | >
57 | >
58 | > A unique identifier for the client performing the mutation.
59 | >
60 |
61 |
62 |
63 | ### Member of
64 |
65 | [`changeRecoveryCodes`](/gql-api/mutations/change-recovery-codes)
66 |
67 |
--------------------------------------------------------------------------------
/docs/gql-api/inputs/delete-recovery-key-input.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: delete-recovery-key-input
3 | title: DeleteRecoveryKeyInput
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | input DeleteRecoveryKeyInput {
46 | clientMutationId: String
47 | }
48 | ```
49 |
50 |
51 |
52 |
53 | ### Fields
54 |
55 | #### [DeleteRecoveryKeyInput.clientMutationId
](#)[`String`](/gql-api/scalars/string)
56 | >
57 | >
58 | > A unique identifier for the client performing the mutation.
59 | >
60 |
61 |
62 |
63 | ### Member of
64 |
65 | [`deleteRecoveryKey`](/gql-api/mutations/delete-recovery-key)
66 |
67 |
--------------------------------------------------------------------------------
/docs/gql-api/inputs/delete-totp-input.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: delete-totp-input
3 | title: DeleteTotpInput
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | input DeleteTotpInput {
46 | clientMutationId: String
47 | }
48 | ```
49 |
50 |
51 |
52 |
53 | ### Fields
54 |
55 | #### [DeleteTotpInput.clientMutationId
](#)[`String`](/gql-api/scalars/string)
56 | >
57 | >
58 | > A unique identifier for the client performing the mutation.
59 | >
60 |
61 |
62 |
63 | ### Member of
64 |
65 | [`deleteTotp`](/gql-api/mutations/delete-totp)
66 |
67 |
--------------------------------------------------------------------------------
/docs/gql-api/inputs/destroy-session-input.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: destroy-session-input
3 | title: DestroySessionInput
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | input DestroySessionInput {
46 | clientMutationId: String
47 | }
48 | ```
49 |
50 |
51 |
52 |
53 | ### Fields
54 |
55 | #### [DestroySessionInput.clientMutationId
](#)[`String`](/gql-api/scalars/string)
56 | >
57 | >
58 | > A unique identifier for the client performing the mutation.
59 | >
60 |
61 |
62 |
63 | ### Member of
64 |
65 | [`destroySession`](/gql-api/mutations/destroy-session)
66 |
67 |
--------------------------------------------------------------------------------
/docs/gql-api/mutations/_category_.yml:
--------------------------------------------------------------------------------
1 | label: Mutations
2 | link: null
3 |
--------------------------------------------------------------------------------
/docs/gql-api/mutations/delete-avatar.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: delete-avatar
3 | title: deleteAvatar
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | Delete the avatar.
42 |
43 |
44 | ```graphql
45 | deleteAvatar(
46 | input: DeleteAvatarInput!
47 | ): BasicPayload!
48 | ```
49 |
50 |
51 |
52 |
53 | ### Arguments
54 |
55 | #### [deleteAvatar.input
](#)[`DeleteAvatarInput!`](/gql-api/inputs/delete-avatar-input)
56 | >
57 | >
58 | >
59 | >
60 |
61 | ### Type
62 |
63 | #### [`BasicPayload`](/gql-api/objects/basic-payload)
64 | >
65 | >
66 | >
67 | >
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/docs/gql-api/mutations/delete-totp.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: delete-totp
3 | title: deleteTotp
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | Deletes the current TOTP token for the user.
42 |
43 |
44 | ```graphql
45 | deleteTotp(
46 | input: DeleteTotpInput!
47 | ): BasicPayload!
48 | ```
49 |
50 |
51 |
52 |
53 | ### Arguments
54 |
55 | #### [deleteTotp.input
](#)[`DeleteTotpInput!`](/gql-api/inputs/delete-totp-input)
56 | >
57 | >
58 | >
59 | >
60 |
61 | ### Type
62 |
63 | #### [`BasicPayload`](/gql-api/objects/basic-payload)
64 | >
65 | >
66 | >
67 | >
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/docs/gql-api/mutations/metrics-opt.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: metrics-opt
3 | title: metricsOpt
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | Set the metrics opt in or out state
42 |
43 |
44 | ```graphql
45 | metricsOpt(
46 | input: MetricsOptInput!
47 | ): BasicPayload!
48 | ```
49 |
50 |
51 |
52 |
53 | ### Arguments
54 |
55 | #### [metricsOpt.input
](#)[`MetricsOptInput!`](/gql-api/inputs/metrics-opt-input)
56 | >
57 | >
58 | >
59 | >
60 |
61 | ### Type
62 |
63 | #### [`BasicPayload`](/gql-api/objects/basic-payload)
64 | >
65 | >
66 | >
67 | >
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/docs/gql-api/mutations/sign-in.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: sign-in
3 | title: signIn
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | Call auth-server to sign in an account
42 |
43 |
44 | ```graphql
45 | signIn(
46 | input: SignInInput!
47 | ): SignedInAccountPayload!
48 | ```
49 |
50 |
51 |
52 |
53 | ### Arguments
54 |
55 | #### [signIn.input
](#)[`SignInInput!`](/gql-api/inputs/sign-in-input)
56 | >
57 | >
58 | >
59 | >
60 |
61 | ### Type
62 |
63 | #### [`SignedInAccountPayload`](/gql-api/objects/signed-in-account-payload)
64 | >
65 | >
66 | >
67 | >
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/docs/gql-api/mutations/sign-up.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: sign-up
3 | title: SignUp
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | Call auth-server to sign up an account
42 |
43 |
44 | ```graphql
45 | SignUp(
46 | input: SignUpInput!
47 | ): SignedUpAccountPayload!
48 | ```
49 |
50 |
51 |
52 |
53 | ### Arguments
54 |
55 | #### [SignUp.input
](#)[`SignUpInput!`](/gql-api/inputs/sign-up-input)
56 | >
57 | >
58 | >
59 | >
60 |
61 | ### Type
62 |
63 | #### [`SignedUpAccountPayload`](/gql-api/objects/signed-up-account-payload)
64 | >
65 | >
66 | >
67 | >
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/docs/gql-api/mutations/verify-code.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: verify-code
3 | title: verifyCode
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | Verify a OTP code.
42 |
43 |
44 | ```graphql
45 | verifyCode(
46 | input: SessionVerifyCodeInput!
47 | ): BasicPayload!
48 | ```
49 |
50 |
51 |
52 |
53 | ### Arguments
54 |
55 | #### [verifyCode.input
](#)[`SessionVerifyCodeInput!`](/gql-api/inputs/session-verify-code-input)
56 | >
57 | >
58 | >
59 | >
60 |
61 | ### Type
62 |
63 | #### [`BasicPayload`](/gql-api/objects/basic-payload)
64 | >
65 | >
66 | >
67 | >
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/docs/gql-api/objects/_category_.yml:
--------------------------------------------------------------------------------
1 | label: Objects
2 | link: null
3 |
--------------------------------------------------------------------------------
/docs/gql-api/objects/account-status-payload.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: account-status-payload
3 | title: AccountStatusPayload
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | type AccountStatusPayload {
46 | exists: Boolean!
47 | }
48 | ```
49 |
50 |
51 |
52 |
53 | ### Fields
54 |
55 | #### [AccountStatusPayload.exists
](#)[`Boolean!`](/gql-api/scalars/boolean)
56 | >
57 | >
58 | > Whether or not the account exists
59 | >
60 |
61 |
62 |
63 | ### Returned by
64 |
65 | [`accountStatus`](/gql-api/queries/account-status)
66 |
67 |
--------------------------------------------------------------------------------
/docs/gql-api/objects/legal-doc.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: legal-doc
3 | title: LegalDoc
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | type LegalDoc {
46 | markdown: String!
47 | }
48 | ```
49 |
50 |
51 |
52 |
53 | ### Fields
54 |
55 | #### [LegalDoc.markdown
](#)[`String!`](/gql-api/scalars/string)
56 | >
57 | >
58 | > Document in markdown format
59 | >
60 |
61 |
62 |
63 | ### Returned by
64 |
65 | [`getLegalDoc`](/gql-api/queries/get-legal-doc)
66 |
67 |
--------------------------------------------------------------------------------
/docs/gql-api/objects/recovery-key-bundle-payload.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: recovery-key-bundle-payload
3 | title: RecoveryKeyBundlePayload
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | type RecoveryKeyBundlePayload {
46 | recoveryData: String!
47 | }
48 | ```
49 |
50 |
51 |
52 |
53 | ### Fields
54 |
55 | #### [RecoveryKeyBundlePayload.recoveryData
](#)[`String!`](/gql-api/scalars/string)
56 | >
57 | >
58 | >
59 | >
60 |
61 |
62 |
63 | ### Returned by
64 |
65 | [`getRecoveryKeyBundle`](/gql-api/queries/get-recovery-key-bundle)
66 |
67 |
--------------------------------------------------------------------------------
/docs/gql-api/objects/session.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: session
3 | title: Session
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | Session (token) info
42 |
43 |
44 | ```graphql
45 | type Session {
46 | verified: Boolean!
47 | }
48 | ```
49 |
50 |
51 |
52 |
53 | ### Fields
54 |
55 | #### [Session.verified
](#)[`Boolean!`](/gql-api/scalars/boolean)
56 | >
57 | >
58 | > Whether the current session is verified
59 | >
60 |
61 |
62 |
63 | ### Returned by
64 |
65 | [`session`](/gql-api/queries/session)
66 |
67 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/_category_.yml:
--------------------------------------------------------------------------------
1 | label: Operations
2 | position: 1
3 | className: graphql-markdown-api-section
4 | link: null
5 | collapsible: false
6 | collapsed: false
7 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/directives/_category_.yml:
--------------------------------------------------------------------------------
1 | label: Directives
2 | position: 1
3 | link: null
4 | collapsible: true
5 | collapsed: true
6 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/directives/include.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: include
3 | title: include
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | Directs the executor to include this field or fragment only when the `if` argument is true.
43 |
44 |
45 | ```graphql
46 | directive @include(
47 | if: Boolean!
48 | ) on
49 | | FIELD
50 | | FRAGMENT_SPREAD
51 | | INLINE_FRAGMENT
52 | ```
53 |
54 |
55 |
56 |
57 | ### Arguments
58 |
59 | #### [include.if
](#)[`Boolean!`](/gql-api/types/scalars/boolean.mdx)
60 | Included when true.
61 |
62 |
63 |
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/directives/skip.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: skip
3 | title: skip
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | Directs the executor to skip this field or fragment when the `if` argument is true.
43 |
44 |
45 | ```graphql
46 | directive @skip(
47 | if: Boolean!
48 | ) on
49 | | FIELD
50 | | FRAGMENT_SPREAD
51 | | INLINE_FRAGMENT
52 | ```
53 |
54 |
55 |
56 |
57 | ### Arguments
58 |
59 | #### [skip.if
](#)[`Boolean!`](/gql-api/types/scalars/boolean.mdx)
60 | Skipped when true.
61 |
62 |
63 |
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/mutations/_category_.yml:
--------------------------------------------------------------------------------
1 | label: Mutations
2 | position: 1
3 | link: null
4 | collapsible: true
5 | collapsed: true
6 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/mutations/account-reset.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: account-reset
3 | title: accountReset
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | Resets an account
43 |
44 |
45 | ```graphql
46 | accountReset(
47 | input: AccountResetInput!
48 | ): AccountResetPayload!
49 | ```
50 |
51 |
52 |
53 |
54 | ### Arguments
55 |
56 | #### [accountReset.input
](#)[`AccountResetInput!`](/gql-api/types/inputs/account-reset-input.mdx)
57 |
58 |
59 |
60 | ### Type
61 |
62 | #### [`AccountResetPayload`](/gql-api/types/objects/account-reset-payload.mdx)
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/mutations/delete-avatar.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: delete-avatar
3 | title: deleteAvatar
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | Delete the avatar.
43 |
44 |
45 | ```graphql
46 | deleteAvatar(
47 | input: DeleteAvatarInput!
48 | ): BasicPayload!
49 | ```
50 |
51 |
52 |
53 |
54 | ### Arguments
55 |
56 | #### [deleteAvatar.input
](#)[`DeleteAvatarInput!`](/gql-api/types/inputs/delete-avatar-input.mdx)
57 |
58 |
59 |
60 | ### Type
61 |
62 | #### [`BasicPayload`](/gql-api/types/objects/basic-payload.mdx)
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/mutations/delete-totp.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: delete-totp
3 | title: deleteTotp
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | Deletes the current TOTP token for the user.
43 |
44 |
45 | ```graphql
46 | deleteTotp(
47 | input: DeleteTotpInput!
48 | ): BasicPayload!
49 | ```
50 |
51 |
52 |
53 |
54 | ### Arguments
55 |
56 | #### [deleteTotp.input
](#)[`DeleteTotpInput!`](/gql-api/types/inputs/delete-totp-input.mdx)
57 |
58 |
59 |
60 | ### Type
61 |
62 | #### [`BasicPayload`](/gql-api/types/objects/basic-payload.mdx)
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/mutations/destroy-session.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: destroy-session
3 | title: destroySession
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | Logs out the current session
43 |
44 |
45 | ```graphql
46 | destroySession(
47 | input: DestroySessionInput!
48 | ): BasicPayload!
49 | ```
50 |
51 |
52 |
53 |
54 | ### Arguments
55 |
56 | #### [destroySession.input
](#)[`DestroySessionInput!`](/gql-api/types/inputs/destroy-session-input.mdx)
57 |
58 |
59 |
60 | ### Type
61 |
62 | #### [`BasicPayload`](/gql-api/types/objects/basic-payload.mdx)
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/mutations/metrics-opt.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: metrics-opt
3 | title: metricsOpt
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | Set the metrics opt in or out state
43 |
44 |
45 | ```graphql
46 | metricsOpt(
47 | input: MetricsOptInput!
48 | ): BasicPayload!
49 | ```
50 |
51 |
52 |
53 |
54 | ### Arguments
55 |
56 | #### [metricsOpt.input
](#)[`MetricsOptInput!`](/gql-api/types/inputs/metrics-opt-input.mdx)
57 |
58 |
59 |
60 | ### Type
61 |
62 | #### [`BasicPayload`](/gql-api/types/objects/basic-payload.mdx)
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/mutations/sign-in.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: sign-in
3 | title: signIn
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | Call auth-server to sign in an account
43 |
44 |
45 | ```graphql
46 | signIn(
47 | input: SignInInput!
48 | ): SignedInAccountPayload!
49 | ```
50 |
51 |
52 |
53 |
54 | ### Arguments
55 |
56 | #### [signIn.input
](#)[`SignInInput!`](/gql-api/types/inputs/sign-in-input.mdx)
57 |
58 |
59 |
60 | ### Type
61 |
62 | #### [`SignedInAccountPayload`](/gql-api/types/objects/signed-in-account-payload.mdx)
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/mutations/sign-up.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: sign-up
3 | title: SignUp
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | Call auth-server to sign up an account
43 |
44 |
45 | ```graphql
46 | SignUp(
47 | input: SignUpInput!
48 | ): SignedUpAccountPayload!
49 | ```
50 |
51 |
52 |
53 |
54 | ### Arguments
55 |
56 | #### [SignUp.input
](#)[`SignUpInput!`](/gql-api/types/inputs/sign-up-input.mdx)
57 |
58 |
59 |
60 | ### Type
61 |
62 | #### [`SignedUpAccountPayload`](/gql-api/types/objects/signed-up-account-payload.mdx)
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/mutations/verify-code.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: verify-code
3 | title: verifyCode
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | Verify a OTP code.
43 |
44 |
45 | ```graphql
46 | verifyCode(
47 | input: SessionVerifyCodeInput!
48 | ): BasicPayload!
49 | ```
50 |
51 |
52 |
53 |
54 | ### Arguments
55 |
56 | #### [verifyCode.input
](#)[`SessionVerifyCodeInput!`](/gql-api/types/inputs/session-verify-code-input.mdx)
57 |
58 |
59 |
60 | ### Type
61 |
62 | #### [`BasicPayload`](/gql-api/types/objects/basic-payload.mdx)
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/queries/_category_.yml:
--------------------------------------------------------------------------------
1 | label: Queries
2 | position: 1
3 | link: null
4 | collapsible: true
5 | collapsed: true
6 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/queries/account.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: account
3 | title: account
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | account: Account
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`Account`](/gql-api/types/objects/account.mdx)
55 | The current authenticated user's Firefox Account record.
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/queries/get-legal-doc.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: get-legal-doc
3 | title: getLegalDoc
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | getLegalDoc(
47 | input: LegalInput!
48 | ): LegalDoc!
49 | ```
50 |
51 |
52 |
53 |
54 | ### Arguments
55 |
56 | #### [getLegalDoc.input
](#)[`LegalInput!`](/gql-api/types/inputs/legal-input.mdx)
57 |
58 |
59 |
60 | ### Type
61 |
62 | #### [`LegalDoc`](/gql-api/types/objects/legal-doc.mdx)
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/queries/session-status.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: session-status
3 | title: sessionStatus
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | sessionStatus: SessionStatus!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`SessionStatus`](/gql-api/types/objects/session-status.mdx)
55 | Session status
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/queries/session.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: session
3 | title: session
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | session: Session!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`Session`](/gql-api/types/objects/session.mdx)
55 | Session (token) info
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/subscriptions/_category_.yml:
--------------------------------------------------------------------------------
1 | label: Subscriptions
2 | position: 1
3 | link: null
4 | collapsible: true
5 | collapsed: true
6 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/subscriptions/cancel-at-period-end.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: cancel-at-period-end
3 | title: cancelAtPeriodEnd
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | cancelAtPeriodEnd: Boolean!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`Boolean`](/gql-api/types/scalars/boolean.mdx)
55 | The `Boolean` scalar type represents `true` or `false`.
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/subscriptions/created.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: created
3 | title: created
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | created: Float
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`Float`](/gql-api/types/scalars/float.mdx)
55 | The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/subscriptions/current-period-end.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: current-period-end
3 | title: currentPeriodEnd
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | currentPeriodEnd: Float!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`Float`](/gql-api/types/scalars/float.mdx)
55 | The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/subscriptions/current-period-start.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: current-period-start
3 | title: currentPeriodStart
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | currentPeriodStart: Float!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`Float`](/gql-api/types/scalars/float.mdx)
55 | The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/subscriptions/end-at.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: end-at
3 | title: endAt
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | endAt: Float!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`Float`](/gql-api/types/scalars/float.mdx)
55 | The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/subscriptions/latest-invoice.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: latest-invoice
3 | title: latestInvoice
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | latestInvoice: String!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`String`](/gql-api/types/scalars/string.mdx)
55 | The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/subscriptions/plan-id.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: plan-id
3 | title: planId
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | planId: String!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`String`](/gql-api/types/scalars/string.mdx)
55 | The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/subscriptions/product-id.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: product-id
3 | title: productId
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | productId: String!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`String`](/gql-api/types/scalars/string.mdx)
55 | The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/subscriptions/product-name.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: product-name
3 | title: productName
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | productName: String!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`String`](/gql-api/types/scalars/string.mdx)
55 | The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/subscriptions/status.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: status
3 | title: status
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | status: String!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`String`](/gql-api/types/scalars/string.mdx)
55 | The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/docs/gql-api/operations/subscriptions/subscription-id.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: subscription-id
3 | title: subscriptionId
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | subscriptionId: String!
47 | ```
48 |
49 |
50 |
51 |
52 | ### Type
53 |
54 | #### [`String`](/gql-api/types/scalars/string.mdx)
55 | The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/docs/gql-api/queries/_category_.yml:
--------------------------------------------------------------------------------
1 | label: Queries
2 | link: null
3 |
--------------------------------------------------------------------------------
/docs/gql-api/queries/account.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: account
3 | title: account
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | account: Account
46 | ```
47 |
48 |
49 |
50 |
51 | ### Type
52 |
53 | #### [`Account`](/gql-api/objects/account)
54 | >
55 | >
56 | > The current authenticated user's Firefox Account record.
57 | >
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/docs/gql-api/queries/cart.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: cart
3 | title: cart
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | cart: Cart
46 | ```
47 |
48 |
49 |
50 |
51 | ### Type
52 |
53 | #### [`Cart`](/gql-api/objects/cart)
54 | >
55 | >
56 | > The Cart associated with a customer Subscription Platform checkout
57 | >
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/docs/gql-api/queries/get-legal-doc.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: get-legal-doc
3 | title: getLegalDoc
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | getLegalDoc(
46 | input: LegalInput!
47 | ): LegalDoc!
48 | ```
49 |
50 |
51 |
52 |
53 | ### Arguments
54 |
55 | #### [getLegalDoc.input
](#)[`LegalInput!`](/gql-api/inputs/legal-input)
56 | >
57 | >
58 | >
59 | >
60 |
61 | ### Type
62 |
63 | #### [`LegalDoc`](/gql-api/objects/legal-doc)
64 | >
65 | >
66 | >
67 | >
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/docs/gql-api/queries/session-status.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: session-status
3 | title: sessionStatus
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | sessionStatus: SessionStatus!
46 | ```
47 |
48 |
49 |
50 |
51 | ### Type
52 |
53 | #### [`SessionStatus`](/gql-api/objects/session-status)
54 | >
55 | >
56 | > Session status
57 | >
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/docs/gql-api/queries/session.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: session
3 | title: session
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | session: Session!
46 | ```
47 |
48 |
49 |
50 |
51 | ### Type
52 |
53 | #### [`Session`](/gql-api/objects/session)
54 | >
55 | >
56 | > Session (token) info
57 | >
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/docs/gql-api/scalars/_category_.yml:
--------------------------------------------------------------------------------
1 | label: Scalars
2 | link: null
3 |
--------------------------------------------------------------------------------
/docs/gql-api/scalars/id.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: id
3 | title: ID
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `"4"`) or integer (such as `4`) input value will be accepted as an ID.
42 |
43 |
44 | ```graphql
45 | scalar ID
46 | ```
47 |
48 |
49 |
50 |
51 |
52 |
53 | ### Member of
54 |
55 | [`Account`](/gql-api/objects/account)
56 |
57 |
--------------------------------------------------------------------------------
/docs/gql-api/sidebar-schema.js:
--------------------------------------------------------------------------------
1 |
2 | /** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
3 |
4 | module.exports = {
5 | "schemaSidebar": [
6 | {
7 | "type": "autogenerated",
8 | "dirName": "gql-api"
9 | }
10 | ]
11 | };
12 |
--------------------------------------------------------------------------------
/docs/gql-api/subscriptions/_category_.yml:
--------------------------------------------------------------------------------
1 | label: Subscriptions
2 | link: null
3 |
--------------------------------------------------------------------------------
/docs/gql-api/subscriptions/cancel-at-period-end.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: cancel-at-period-end
3 | title: cancelAtPeriodEnd
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | cancelAtPeriodEnd: Boolean!
46 | ```
47 |
48 |
49 |
50 |
51 | ### Type
52 |
53 | #### [`Boolean`](/gql-api/scalars/boolean)
54 | >
55 | >
56 | > The `Boolean` scalar type represents `true` or `false`.
57 | >
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/docs/gql-api/subscriptions/created.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: created
3 | title: created
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | created: Float
46 | ```
47 |
48 |
49 |
50 |
51 | ### Type
52 |
53 | #### [`Float`](/gql-api/scalars/float)
54 | >
55 | >
56 | > The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).
57 | >
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/docs/gql-api/subscriptions/current-period-end.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: current-period-end
3 | title: currentPeriodEnd
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | currentPeriodEnd: Float!
46 | ```
47 |
48 |
49 |
50 |
51 | ### Type
52 |
53 | #### [`Float`](/gql-api/scalars/float)
54 | >
55 | >
56 | > The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).
57 | >
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/docs/gql-api/subscriptions/current-period-start.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: current-period-start
3 | title: currentPeriodStart
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | currentPeriodStart: Float!
46 | ```
47 |
48 |
49 |
50 |
51 | ### Type
52 |
53 | #### [`Float`](/gql-api/scalars/float)
54 | >
55 | >
56 | > The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).
57 | >
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/docs/gql-api/subscriptions/end-at.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: end-at
3 | title: endAt
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | endAt: Float!
46 | ```
47 |
48 |
49 |
50 |
51 | ### Type
52 |
53 | #### [`Float`](/gql-api/scalars/float)
54 | >
55 | >
56 | > The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).
57 | >
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/docs/gql-api/subscriptions/latest-invoice.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: latest-invoice
3 | title: latestInvoice
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | latestInvoice: String!
46 | ```
47 |
48 |
49 |
50 |
51 | ### Type
52 |
53 | #### [`String`](/gql-api/scalars/string)
54 | >
55 | >
56 | > The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
57 | >
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/docs/gql-api/subscriptions/plan-id.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: plan-id
3 | title: planId
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | planId: String!
46 | ```
47 |
48 |
49 |
50 |
51 | ### Type
52 |
53 | #### [`String`](/gql-api/scalars/string)
54 | >
55 | >
56 | > The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
57 | >
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/docs/gql-api/subscriptions/product-id.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: product-id
3 | title: productId
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | productId: String!
46 | ```
47 |
48 |
49 |
50 |
51 | ### Type
52 |
53 | #### [`String`](/gql-api/scalars/string)
54 | >
55 | >
56 | > The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
57 | >
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/docs/gql-api/subscriptions/product-name.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: product-name
3 | title: productName
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | productName: String!
46 | ```
47 |
48 |
49 |
50 |
51 | ### Type
52 |
53 | #### [`String`](/gql-api/scalars/string)
54 | >
55 | >
56 | > The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
57 | >
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/docs/gql-api/subscriptions/status.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: status
3 | title: status
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | status: String!
46 | ```
47 |
48 |
49 |
50 |
51 | ### Type
52 |
53 | #### [`String`](/gql-api/scalars/string)
54 | >
55 | >
56 | > The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
57 | >
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/docs/gql-api/subscriptions/subscription-id.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: subscription-id
3 | title: subscriptionId
4 | hide_table_of_contents: false
5 | ---
6 |
7 |
8 | export const Bullet = () => <> ● >
9 |
10 | export const SpecifiedBy = (props) => <>Specification⎘>
11 |
12 | export const Badge = (props) => <>{props.text}>
13 |
14 | import { useState } from 'react';
15 |
16 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
17 | const [open, setOpen] = useState(startOpen);
18 | return (
19 |
20 | {
22 | e.preventDefault();
23 | setOpen((open) => !open);
24 | }}
25 | style={{ listStyle:'none' }}
26 | >
27 | {open ? dataOpen : dataClose}
28 |
29 | {open && children}
30 |
31 | );
32 | };
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | No description
42 |
43 |
44 | ```graphql
45 | subscriptionId: String!
46 | ```
47 |
48 |
49 |
50 |
51 | ### Type
52 |
53 | #### [`String`](/gql-api/scalars/string)
54 | >
55 | >
56 | > The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
57 | >
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/docs/gql-api/types/_category_.yml:
--------------------------------------------------------------------------------
1 | label: Types
2 | position: 1
3 | className: graphql-markdown-api-section
4 | link: null
5 | collapsible: false
6 | collapsed: false
7 |
--------------------------------------------------------------------------------
/docs/gql-api/types/directives/_category_.yml:
--------------------------------------------------------------------------------
1 | label: Directives
2 | position: 1
3 | link: null
4 | collapsible: true
5 | collapsed: true
6 |
--------------------------------------------------------------------------------
/docs/gql-api/types/directives/one-of.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: one-of
3 | title: oneOf
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | Indicates exactly one field must be supplied and this field must not be `null`.
43 |
44 |
45 | ```graphql
46 | directive @oneOf on INPUT_OBJECT
47 | ```
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/docs/gql-api/types/directives/specified-by.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: specified-by
3 | title: specifiedBy
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | Exposes a URL that specifies the behavior of this scalar.
43 |
44 |
45 | ```graphql
46 | directive @specifiedBy(
47 | url: String!
48 | ) on SCALAR
49 | ```
50 |
51 |
52 |
53 |
54 | ### Arguments
55 |
56 | #### [specifiedBy.url
](#)[`String!`](/gql-api/types/scalars/string.mdx)
57 | The URL that specifies the behavior of this scalar.
58 |
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/docs/gql-api/types/inputs/_category_.yml:
--------------------------------------------------------------------------------
1 | label: Inputs
2 | position: 1
3 | link: null
4 | collapsible: true
5 | collapsed: true
6 |
--------------------------------------------------------------------------------
/docs/gql-api/types/inputs/basic-mutation-input.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: basic-mutation-input
3 | title: BasicMutationInput
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | input BasicMutationInput {
47 | clientMutationId: String
48 | }
49 | ```
50 |
51 |
52 |
53 |
54 | ### Fields
55 |
56 | #### [BasicMutationInput.clientMutationId
](#)[`String`](/gql-api/types/scalars/string.mdx)
57 | A unique identifier for the client performing the mutation.
58 |
59 |
60 |
61 |
62 |
63 |
64 | ### Member Of
65 |
66 | [`resendVerifyCode`](/gql-api/operations/mutations/resend-verify-code.mdx)
67 |
68 |
--------------------------------------------------------------------------------
/docs/gql-api/types/inputs/delete-totp-input.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: delete-totp-input
3 | title: DeleteTotpInput
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | input DeleteTotpInput {
47 | clientMutationId: String
48 | }
49 | ```
50 |
51 |
52 |
53 |
54 | ### Fields
55 |
56 | #### [DeleteTotpInput.clientMutationId
](#)[`String`](/gql-api/types/scalars/string.mdx)
57 | A unique identifier for the client performing the mutation.
58 |
59 |
60 |
61 |
62 |
63 |
64 | ### Member Of
65 |
66 | [`deleteTotp`](/gql-api/operations/mutations/delete-totp.mdx)
67 |
68 |
--------------------------------------------------------------------------------
/docs/gql-api/types/inputs/destroy-session-input.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: destroy-session-input
3 | title: DestroySessionInput
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | input DestroySessionInput {
47 | clientMutationId: String
48 | }
49 | ```
50 |
51 |
52 |
53 |
54 | ### Fields
55 |
56 | #### [DestroySessionInput.clientMutationId
](#)[`String`](/gql-api/types/scalars/string.mdx)
57 | A unique identifier for the client performing the mutation.
58 |
59 |
60 |
61 |
62 |
63 |
64 | ### Member Of
65 |
66 | [`destroySession`](/gql-api/operations/mutations/destroy-session.mdx)
67 |
68 |
--------------------------------------------------------------------------------
/docs/gql-api/types/objects/_category_.yml:
--------------------------------------------------------------------------------
1 | label: Objects
2 | position: 1
3 | link: null
4 | collapsible: true
5 | collapsed: true
6 |
--------------------------------------------------------------------------------
/docs/gql-api/types/objects/account-status-payload.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: account-status-payload
3 | title: AccountStatusPayload
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | type AccountStatusPayload {
47 | exists: Boolean!
48 | }
49 | ```
50 |
51 |
52 |
53 |
54 | ### Fields
55 |
56 | #### [AccountStatusPayload.exists
](#)[`Boolean!`](/gql-api/types/scalars/boolean.mdx)
57 | Whether or not the account exists
58 |
59 |
60 |
61 |
62 |
63 |
64 | ### Returned By
65 |
66 | [`accountStatus`](/gql-api/operations/queries/account-status.mdx)
67 |
68 |
--------------------------------------------------------------------------------
/docs/gql-api/types/objects/legal-doc.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: legal-doc
3 | title: LegalDoc
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | No description
43 |
44 |
45 | ```graphql
46 | type LegalDoc {
47 | markdown: String!
48 | }
49 | ```
50 |
51 |
52 |
53 |
54 | ### Fields
55 |
56 | #### [LegalDoc.markdown
](#)[`String!`](/gql-api/types/scalars/string.mdx)
57 | Document in markdown format
58 |
59 |
60 |
61 |
62 |
63 |
64 | ### Returned By
65 |
66 | [`getLegalDoc`](/gql-api/operations/queries/get-legal-doc.mdx)
67 |
68 |
--------------------------------------------------------------------------------
/docs/gql-api/types/objects/session.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: session
3 | title: Session
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | Session (token) info
43 |
44 |
45 | ```graphql
46 | type Session {
47 | verified: Boolean!
48 | }
49 | ```
50 |
51 |
52 |
53 |
54 | ### Fields
55 |
56 | #### [Session.verified
](#)[`Boolean!`](/gql-api/types/scalars/boolean.mdx)
57 | Whether the current session is verified
58 |
59 |
60 |
61 |
62 |
63 |
64 | ### Returned By
65 |
66 | [`session`](/gql-api/operations/queries/session.mdx)
67 |
68 |
--------------------------------------------------------------------------------
/docs/gql-api/types/scalars/_category_.yml:
--------------------------------------------------------------------------------
1 | label: Scalars
2 | position: 1
3 | link: null
4 | collapsible: true
5 | collapsed: true
6 |
--------------------------------------------------------------------------------
/docs/gql-api/types/scalars/id.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | id: id
3 | title: ID
4 | ---
5 |
6 |
7 |
8 |
9 | export const Bullet = () => <> ● >
10 |
11 | export const SpecifiedBy = (props) => <>Specification⎘>
12 |
13 | export const Badge = (props) => <>{props.text}>
14 |
15 | import { useState } from 'react';
16 |
17 | export const Details = ({ dataOpen, dataClose, children, startOpen = false }) => {
18 | const [open, setOpen] = useState(startOpen);
19 | return (
20 |
21 | {
23 | e.preventDefault();
24 | setOpen((open) => !open);
25 | }}
26 | style={{ listStyle:'none' }}
27 | >
28 | {open ? dataOpen : dataClose}
29 |
30 | {open && children}
31 |
32 | );
33 | };
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `"4"`) or integer (such as `4`) input value will be accepted as an ID.
43 |
44 |
45 | ```graphql
46 | scalar ID
47 | ```
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 | ### Member Of
57 |
58 | [`Account`](/gql-api/types/objects/account.mdx)
59 |
60 |
--------------------------------------------------------------------------------
/docs/how-tos/connecting-to-a-local-mysql-db.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Connecting to a local MySQL DB
3 | ---
4 |
5 | FxA has several databases, for example `fxa`, `fxa_profile` and `pushbox`. Sometimes changes need to be made to a database, or it is helpful to read local data for development.
6 |
7 | **Prerequisites**
8 |
9 | - FxA running locally
10 | - Docker
11 | - [mysql CLI](https://dev.mysql.com/doc/refman/en/mysql.html)
12 | - If using the `mysql-client` option below, this can be installed via Homebrew with `brew install mysql-client`.
13 |
14 | **Steps**
15 |
16 | Execute an interactive shell on the MySQL DB container and start the MySQL shell:
17 |
18 | ```shell
19 | yarn mysql
20 | ```
21 |
22 | OR
23 |
24 | Start the MySQL shell through the MySQL client:
25 |
26 | ```shell
27 | mysql -uroot --host=127.0.0.1 --port=3306
28 | ```
29 |
30 | Note: `mysql` is located in the `mysql-client` installation directory, e.g. at `/usr/local/opt/mysql-client/bin/mysql`.
31 |
--------------------------------------------------------------------------------
/docs/how-tos/creating-an-account-locally.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Creating an Account Locally
3 | ---
4 |
5 | Once you've got FxA running locally you'll probably want to create an account that you can use for development and testing purposes. This process can be done almost exactly like you would in production:
6 |
7 | 1. Visit the [root page](http://localhost:3030/), which should ask you to enter your email. Enter the email you want to use for the account.
8 |
9 | If you're taken to `/signin` you can just click "Use a different account" to return to the email field.
10 | 1. Fill out the next form with your password and age, then click "Create account".
11 | 1. You'll be taken to a page asking you to enter a verification code. From your terminal run `yarn pm2 logs inbox`, which will have the most recent verification code. Copy this code into the form field and click "Verify".
12 |
13 | 
14 |
15 | If you'd rather receive the actual verification code email instead of using the terminal, check out how to [use MailDev](local-emails-with-maildev) for local emails.
16 | 1. That's it! You'll be taken to `/settings` with the message "Account verified successfully" appearing along the top.
17 |
--------------------------------------------------------------------------------
/docs/how-tos/local-emails-with-maildev.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Local Emails with MailDev
3 | ---
4 |
5 | If you're interested in receiving emails locally you can use [MailDev](https://www.npmjs.com/package/maildev) to intercept emails and display them in a local inbox.
6 |
7 | :::important
8 | MailDev is handy to verify that emails look as expected. However, functional tests that rely on email require the inbox service and will fail if MailDev is on.
9 | :::
10 |
11 | 1. Install the MailDev CLI globally:
12 |
13 | ```shell
14 | npm i -g maildev
15 | ```
16 |
17 | 1. Assuming you have FxA running locally you'll need to stop the `inbox` service:
18 |
19 | ```shell
20 | yarn pm2 stop inbox
21 | ```
22 |
23 | 1. Start MailDev on port 9999. You may need to start it with `sudo` permissions:
24 |
25 | ```shell
26 | sudo maildev -s 9999
27 | ```
28 |
29 | 1. All emails will now be sent to the local inbox, which you can access at [http://localhost:1080](http://localhost:1080)
30 |
31 | 
32 |
--------------------------------------------------------------------------------
/docs/reference/browser-support.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Browser Support
3 | ---
4 |
5 | Mozilla accounts is required to work in at least the following environments:
6 |
7 | - Firefox Desktop ESR - 1
8 | - Firefox for Android ESR - 1
9 | - Latest versions of modern browsers: [Chrome](https://www.google.com/chrome/index.html), [Safari](https://www.apple.com/safari/), [Opera](https://www.opera.com/), [Edge](https://www.microsoft.com/en-us/edge)
10 | - Latest version of [Firefox for iOS](https://apps.apple.com/us/app/firefox-private-safe-browser/id989804926) and iOS Web View
11 | - Latest version of [Firefox for Android](https://play.google.com/store/apps/details?id=org.mozilla.firefox) and Android WebView
12 |
--------------------------------------------------------------------------------
/docs/reference/canceling-subscriptions-to-plan.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Canceling Subscriptions to Plan
3 | ---
4 |
5 | Last updated: June 2024
6 |
7 | In order to cancel a plan with active subscriptions, SubPlat engineers will need to collaborate with the SRE and Support teams.
8 |
9 | After creating test data, request SRE to run the `cancel-subscriptions-to-plan` script in `fxa-auth-server` and for the stdout, stderr, and csv outputs via Wormhole. At this time, the script cancels active subscriptions and refunds Stripe subscriptions only; the refund portion does not work for PayPal subscriptions and Support will need to manually refund them.
10 |
11 | The command to run the script is as follows:
12 |
13 | ```
14 | node -r esbuild-register scripts/cancel-subscriptions-to-plan.ts -r 10 -p --refund
15 | ```
16 |
17 | - ``: the Stripe Price ID of the plan with active subscriptions
18 | - `-r`: rate limit
19 |
20 | :::note
21 | Stripe's rate limit is 10 requests per second on Stage, and 100 requests per second on Prod (but we should use less to allow for other prod traffic)
22 | :::
23 |
24 | SRE can add the `--dry-run` flag to see what will be generated. They may also need to add `esbuild-register` in the pod before running the script. During the previous sunset process, we attempted to run the command below; however, it failed due to new decorators.
25 |
26 | ```
27 | npx tsx scripts/cancel-subscriptions-to-plan.ts -r 10 -p price_1NctsnKb9q6OnNsLRl5HMcCm --refund
28 | ```
29 |
--------------------------------------------------------------------------------
/docs/relying-parties/how-tos/end-to-end-encryption.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: end-to-end-encryption
3 | title: End-to-end encryption
4 | sidebar_label: End-to-end Encryption
5 | ---
6 |
7 | Mozilla accounts offers an end-to-end encryption support feature for OAuth reliers by deriving a strong encryption key from user's password. Keep in mind that Mozilla accounts does not provide a storage solution, it is up to you to use the generated key and encrypt the data with that key.
8 |
9 | ### WebExtensions
10 |
11 | To use this feature in WebExtensions you need to do the following:
12 |
13 | 1. [Register an OAuth client](https://developer.mozilla.org/en-US/docs/Mozilla/Tech/Firefox_Accounts/Introduction#OAuth_2.0_API) and an OAuth app scope with Mozilla accounts
14 | 2. Install the [fxa-crypto-relier](https://github.com/mozilla/fxa-crypto-relier) library into your WebExtension
15 | 3. [Follow the documentation](https://github.com/mozilla/fxa-crypto-relier/tree/master/docs) to trigger the Mozilla accounts login screen
16 | 4. Consume the derived key after the successful login
17 |
18 | ### Examples
19 |
20 | You can find an example of this feature in the [TestPilot Notes source code](https://github.com/mozilla/notes/blob/5be89e52956182e57356b7ba9102d57cdb72be6f/src/background.js#L53-L72). Here's a simplified diagram of a scoped key generated for a WebExtension:
21 |
22 | 
23 |
24 | An example of a key generated by Mozilla accounts:
25 |
26 | 
27 |
28 | The generated key can be imported using existing WebCrypto APIs:
29 |
30 | ```
31 | function shared_key(key) {
32 | return crypto.subtle.importKey(
33 | 'jwk',
34 | { kty: key.kty, k: key.k.replace(/=/, '') },
35 | 'AES-KW',
36 | true,
37 | ['wrapKey', 'unwrapKey']
38 | );
39 | }
40 | ```
--------------------------------------------------------------------------------
/static/.nojekyll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/.nojekyll
--------------------------------------------------------------------------------
/static/diagrams/data_catalog_example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/diagrams/data_catalog_example.png
--------------------------------------------------------------------------------
/static/diagrams/structurizr-1-AccountAuthenticationSystemLandscape-key.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/diagrams/structurizr-1-AccountAuthenticationSystemLandscape-key.png
--------------------------------------------------------------------------------
/static/diagrams/structurizr-1-AccountAuthenticationSystemLandscape.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/diagrams/structurizr-1-AccountAuthenticationSystemLandscape.png
--------------------------------------------------------------------------------
/static/diagrams/structurizr-1-AccountSystemLandscape-key.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/diagrams/structurizr-1-AccountSystemLandscape-key.png
--------------------------------------------------------------------------------
/static/diagrams/structurizr-1-AccountSystemLandscape.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/diagrams/structurizr-1-AccountSystemLandscape.png
--------------------------------------------------------------------------------
/static/diagrams/structurizr-1-Containers-key.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/diagrams/structurizr-1-Containers-key.png
--------------------------------------------------------------------------------
/static/diagrams/structurizr-1-Containers.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/diagrams/structurizr-1-Containers.png
--------------------------------------------------------------------------------
/static/diagrams/structurizr-1-ContainersPaymentSystem2_5-key.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/diagrams/structurizr-1-ContainersPaymentSystem2_5-key.png
--------------------------------------------------------------------------------
/static/diagrams/structurizr-1-ContainersPaymentSystem2_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/diagrams/structurizr-1-ContainersPaymentSystem2_5.png
--------------------------------------------------------------------------------
/static/diagrams/structurizr-1-ContainersPaymentSystem3-key.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/diagrams/structurizr-1-ContainersPaymentSystem3-key.png
--------------------------------------------------------------------------------
/static/diagrams/structurizr-1-ContainersPaymentSystem3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/diagrams/structurizr-1-ContainersPaymentSystem3.png
--------------------------------------------------------------------------------
/static/diagrams/structurizr-1-EventBrokerSystem.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/diagrams/structurizr-1-EventBrokerSystem.png
--------------------------------------------------------------------------------
/static/diagrams/structurizr-1-PaymentSystemLandscape-key.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/diagrams/structurizr-1-PaymentSystemLandscape-key.png
--------------------------------------------------------------------------------
/static/diagrams/structurizr-1-PaymentSystemLandscape.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/diagrams/structurizr-1-PaymentSystemLandscape.png
--------------------------------------------------------------------------------
/static/diagrams/structurizr-1-SendTab-key.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/diagrams/structurizr-1-SendTab-key.png
--------------------------------------------------------------------------------
/static/diagrams/structurizr-1-SendTab.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/diagrams/structurizr-1-SendTab.png
--------------------------------------------------------------------------------
/static/diagrams/structurizr-1-SystemLandscape-key.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/diagrams/structurizr-1-SystemLandscape-key.png
--------------------------------------------------------------------------------
/static/diagrams/structurizr-1-SystemLandscape.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/diagrams/structurizr-1-SystemLandscape.png
--------------------------------------------------------------------------------
/static/fonts/Inter-Bold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/fonts/Inter-Bold.woff
--------------------------------------------------------------------------------
/static/fonts/Inter-Bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/fonts/Inter-Bold.woff2
--------------------------------------------------------------------------------
/static/fonts/Inter-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/fonts/Inter-Regular.woff
--------------------------------------------------------------------------------
/static/fonts/Inter-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/fonts/Inter-Regular.woff2
--------------------------------------------------------------------------------
/static/fonts/Metropolis-Bold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/fonts/Metropolis-Bold.woff
--------------------------------------------------------------------------------
/static/fonts/Metropolis-Bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/fonts/Metropolis-Bold.woff2
--------------------------------------------------------------------------------
/static/fonts/Metropolis-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/fonts/Metropolis-Regular.woff
--------------------------------------------------------------------------------
/static/fonts/Metropolis-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/fonts/Metropolis-Regular.woff2
--------------------------------------------------------------------------------
/static/img/firefox-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mozilla/ecosystem-platform/9df52965a425af54b8a77ac71c3ede418dfecd15/static/img/firefox-logo.png
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | // This file is not used in compilation. It is here just for a nice editor experience.
3 | "extends": "@tsconfig/docusaurus/tsconfig.json",
4 | "compilerOptions": {
5 | "baseUrl": "."
6 | }
7 | }
8 |
--------------------------------------------------------------------------------