@terreno/mcp 0.30.0 → 0.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/bootstrap.js +7 -7
- package/dist/bootstrap.js.map +1 -1
- package/dist/docs/templates/bootstrap/backend/types/models/userTypes.template.md +5 -4
- package/dist/docs/templates/tools/model.template.md +4 -2
- package/dist/docs/upgrades/0.31.0.md +60 -0
- package/dist/docs/versioned/0.30.0/explanation/explicit-any-policy.md +88 -0
- package/dist/docs/versioned/0.30.0/implementationPlans/PLAN_INDEX.md +75 -0
- package/dist/docs/versioned/0.30.0/implementationPlans/agentic-sdlc-plugin.md +177 -0
- package/dist/docs/versioned/0.30.0/implementationPlans/ai-dev-loop-boost.md +174 -0
- package/dist/docs/versioned/0.30.0/implementationPlans/apierror-standard-error-redesign.md +332 -0
- package/dist/docs/versioned/0.30.0/implementationPlans/build-terreno-app-validation.md +153 -0
- package/dist/docs/versioned/0.30.0/implementationPlans/deploy-to-gcp.md +166 -0
- package/dist/docs/versioned/0.30.0/implementationPlans/deploy-to-vercel.md +167 -0
- package/dist/docs/versioned/0.30.0/implementationPlans/deployment-foundation.md +132 -0
- package/dist/docs/versioned/0.30.0/implementationPlans/docs-reference-coverage.md +141 -0
- package/dist/docs/versioned/0.30.0/implementationPlans/docs-tutorials-ai-first.md +145 -0
- package/dist/docs/versioned/0.30.0/implementationPlans/examples-demo-coverage.md +162 -0
- package/dist/docs/versioned/0.30.0/implementationPlans/oss-governance-baseline.md +148 -0
- package/dist/docs/versioned/0.30.0/implementationPlans/oss-launch-program.md +195 -0
- package/dist/docs/versioned/0.30.0/implementationPlans/positioning-django-rails-universal.md +146 -0
- package/dist/docs/versioned/0.30.0/implementationPlans/public-roadmap-github.md +204 -0
- package/dist/docs/versioned/0.30.0/implementationPlans/rbac-permissions.md +982 -0
- package/dist/docs/versioned/0.30.0/implementationPlans/rtk-to-syncdb-migration-docs.md +169 -0
- package/dist/docs/versioned/0.30.0/implementationPlans/upgrade-guides-and-skill.md +166 -0
- package/dist/docs/versioned/0.30.0/implementationPlans/web-ssr-and-admin-spa.md +153 -0
- package/dist/docs/versioned/0.30.0/reference/components/README.mdx +68 -0
- package/dist/docs/versioned/0.30.0/reference/components/custom-select-field.mdx +37 -0
- package/dist/docs/versioned/0.30.0/reference/components/signature-capture-field.mdx +41 -0
- package/dist/docs/versioned/0.30.0/reference/components/thumbsupdownfeedback.mdx +32 -0
- package/dist/docs/versioned/0.30.0/reference/components/typed-signature-field.mdx +37 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/README.md +305 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/classes/APIError.md +144 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/classes/BadRequestError.md +165 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/classes/ConflictError.md +165 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/classes/ForbiddenError.md +165 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/classes/InternalServerError.md +165 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/classes/NotFoundError.md +165 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/classes/UnauthorizedError.md +165 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/classes/ValidationError.md +165 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/functions/apiUnauthorizedMiddleware.md +30 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/functions/envConfigurationPlugin.md +11 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/functions/errorDetail.md +15 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/functions/findOneOrNoneFor.md +37 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/functions/getAPIErrorBody.md +17 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/functions/withApiErrorHandling.md +30 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/interfaces/APIErrorBody.md +77 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/interfaces/APIErrorOptions.md +103 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/interfaces/ConsentFormModel.md +79 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/interfaces/ConsentFormStatics.md +55 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/interfaces/ConsentResponseModel.md +79 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/interfaces/ConsentResponseStatics.md +55 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/interfaces/FindExactlyOnePlugin.md +30 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/interfaces/FindOneOrNonePlugin.md +30 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/interfaces/RealtimeEvent.md +57 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/interfaces/RealtimeRegistryEntry.md +42 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/interfaces/VersionConfigModel.md +51 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/type-aliases/APIErrorConstructor.md +5 -0
- package/dist/docs/versioned/0.30.0/reference/generated/api/type-aliases/APIErrorSubclassOptions.md +3 -0
- package/dist/docs/versioned/0.30.0/reference/generated/rtk/functions/shouldDeferOfflineMutation.md +18 -0
- package/dist/docs/versioned/0.30.0/tasks/agentic-sdlc-plugin.md +163 -0
- package/dist/docs/versioned/0.30.0/tasks/ai-dev-loop-boost.md +120 -0
- package/dist/docs/versioned/0.30.0/tasks/build-terreno-app-validation.md +121 -0
- package/dist/docs/versioned/0.30.0/tasks/deploy-to-gcp.md +99 -0
- package/dist/docs/versioned/0.30.0/tasks/deploy-to-vercel.md +110 -0
- package/dist/docs/versioned/0.30.0/tasks/deployment-foundation.md +92 -0
- package/dist/docs/versioned/0.30.0/tasks/docs-reference-coverage.md +93 -0
- package/dist/docs/versioned/0.30.0/tasks/docs-tutorials-ai-first.md +98 -0
- package/dist/docs/versioned/0.30.0/tasks/examples-demo-coverage.md +113 -0
- package/dist/docs/versioned/0.30.0/tasks/oss-governance-baseline.md +129 -0
- package/dist/docs/versioned/0.30.0/tasks/positioning-django-rails-universal.md +100 -0
- package/dist/docs/versioned/0.30.0/tasks/public-roadmap-github.md +112 -0
- package/dist/docs/versioned/0.30.0/tasks/rtk-to-syncdb-migration-docs.md +163 -0
- package/dist/docs/versioned/0.30.0/tasks/upgrade-guides-and-skill.md +118 -0
- package/dist/docs/versioned/0.30.0/tasks/web-ssr-and-admin-spa.md +155 -0
- package/dist/docs/versioned/next/explanation/README.md +7 -1
- package/dist/docs/versioned/next/explanation/deployment-architecture-gcp.md +65 -0
- package/dist/docs/versioned/next/explanation/deployment-baseline.md +78 -0
- package/dist/docs/versioned/next/explanation/positioning.md +164 -0
- package/dist/docs/versioned/next/explanation/repository-settings.md +44 -0
- package/dist/docs/versioned/next/explanation/roadmap-process.md +330 -0
- package/dist/docs/versioned/next/explanation/roadmap-seed-issues.md +866 -0
- package/dist/docs/versioned/next/how-to/README.md +8 -1
- package/dist/docs/versioned/next/how-to/build-for-web.md +69 -0
- package/dist/docs/versioned/next/how-to/deploy-backend-to-cloud-run.md +115 -0
- package/dist/docs/versioned/next/how-to/deploy-to-gcp.md +20 -228
- package/dist/docs/versioned/next/how-to/deploy-web-to-gcs-cdn.md +183 -0
- package/dist/docs/versioned/next/implementationPlans/PLAN_INDEX.md +20 -0
- package/dist/docs/versioned/next/implementationPlans/README.md +56 -30
- package/dist/docs/versioned/next/implementationPlans/agentic-sdlc-plugin.md +2 -1
- package/dist/docs/versioned/next/implementationPlans/ai-dev-loop-boost.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/b2b-platform-program.md +114 -0
- package/dist/docs/versioned/next/implementationPlans/billing-stripe.md +158 -0
- package/dist/docs/versioned/next/implementationPlans/build-terreno-app-validation.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/comms-abstraction.md +240 -0
- package/dist/docs/versioned/next/implementationPlans/comms-adapter-expo-push.md +107 -0
- package/dist/docs/versioned/next/implementationPlans/comms-adapter-sendgrid.md +107 -0
- package/dist/docs/versioned/next/implementationPlans/comms-adapter-twilio-sms.md +102 -0
- package/dist/docs/versioned/next/implementationPlans/comms-adapter-twilio-verify.md +93 -0
- package/dist/docs/versioned/next/implementationPlans/deploy-to-gcp.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/deploy-to-vercel.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/deployment-foundation.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/docs-reference-coverage.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/docs-tutorials-ai-first.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/examples-demo-coverage.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/infra-mcp-research.md +188 -0
- package/dist/docs/versioned/next/implementationPlans/infra-mcp.md +269 -0
- package/dist/docs/versioned/next/implementationPlans/native-module-baseline.md +105 -0
- package/dist/docs/versioned/next/implementationPlans/orgs-and-teams.md +158 -0
- package/dist/docs/versioned/next/implementationPlans/oss-governance-baseline.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/password-reset-and-email-verification.md +147 -0
- package/dist/docs/versioned/next/implementationPlans/positioning-django-rails-universal.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/public-roadmap-github.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/rtk-to-syncdb-migration-docs.md +49 -4
- package/dist/docs/versioned/next/implementationPlans/upgrade-guides-and-skill.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/web-ssr-and-admin-spa.md +1 -0
- package/dist/docs/versioned/next/reference/README.md +4 -0
- package/dist/docs/versioned/next/reference/admin-spa.md +130 -0
- package/dist/docs/versioned/next/reference/ai.md +519 -0
- package/dist/docs/versioned/next/reference/environment-variables.md +220 -382
- package/dist/docs/versioned/next/reference/test.md +108 -0
- package/dist/docs/versioned/next/roadmap.md +9 -0
- package/dist/docs/versioned/next/tasks/README.md +42 -0
- package/dist/docs/versioned/next/tasks/agentic-sdlc-plugin.md +5 -5
- package/dist/docs/versioned/next/tasks/billing-stripe.md +75 -0
- package/dist/docs/versioned/next/tasks/comms-abstraction.md +77 -0
- package/dist/docs/versioned/next/tasks/comms-adapter-expo-push.md +29 -0
- package/dist/docs/versioned/next/tasks/comms-adapter-sendgrid.md +29 -0
- package/dist/docs/versioned/next/tasks/comms-adapter-twilio-sms.md +29 -0
- package/dist/docs/versioned/next/tasks/comms-adapter-twilio-verify.md +19 -0
- package/dist/docs/versioned/next/tasks/deploy-to-gcp.md +11 -11
- package/dist/docs/versioned/next/tasks/deployment-foundation.md +12 -12
- package/dist/docs/versioned/next/tasks/docs-reference-coverage.md +4 -4
- package/dist/docs/versioned/next/tasks/infra-mcp.md +43 -0
- package/dist/docs/versioned/next/tasks/native-module-baseline.md +42 -0
- package/dist/docs/versioned/next/tasks/orgs-and-teams.md +70 -0
- package/dist/docs/versioned/next/tasks/oss-governance-baseline.md +18 -18
- package/dist/docs/versioned/next/tasks/password-reset-and-email-verification.md +60 -0
- package/dist/docs/versioned/next/tasks/positioning-django-rails-universal.md +4 -4
- package/dist/docs/versioned/next/tasks/public-roadmap-github.md +15 -15
- package/dist/docs/versioned/next/tasks/rtk-to-syncdb-migration-docs.md +3 -1
- package/package.json +4 -3
- package/src/docs/templates/bootstrap/backend/types/models/userTypes.template.md +5 -4
- package/src/docs/templates/tools/model.template.md +4 -2
- package/src/docs/upgrades/0.31.0.md +60 -0
- package/src/docs/versioned/0.30.0/explanation/explicit-any-policy.md +88 -0
- package/src/docs/versioned/0.30.0/implementationPlans/PLAN_INDEX.md +75 -0
- package/src/docs/versioned/0.30.0/implementationPlans/agentic-sdlc-plugin.md +177 -0
- package/src/docs/versioned/0.30.0/implementationPlans/ai-dev-loop-boost.md +174 -0
- package/src/docs/versioned/0.30.0/implementationPlans/apierror-standard-error-redesign.md +332 -0
- package/src/docs/versioned/0.30.0/implementationPlans/build-terreno-app-validation.md +153 -0
- package/src/docs/versioned/0.30.0/implementationPlans/deploy-to-gcp.md +166 -0
- package/src/docs/versioned/0.30.0/implementationPlans/deploy-to-vercel.md +167 -0
- package/src/docs/versioned/0.30.0/implementationPlans/deployment-foundation.md +132 -0
- package/src/docs/versioned/0.30.0/implementationPlans/docs-reference-coverage.md +141 -0
- package/src/docs/versioned/0.30.0/implementationPlans/docs-tutorials-ai-first.md +145 -0
- package/src/docs/versioned/0.30.0/implementationPlans/examples-demo-coverage.md +162 -0
- package/src/docs/versioned/0.30.0/implementationPlans/oss-governance-baseline.md +148 -0
- package/src/docs/versioned/0.30.0/implementationPlans/oss-launch-program.md +195 -0
- package/src/docs/versioned/0.30.0/implementationPlans/positioning-django-rails-universal.md +146 -0
- package/src/docs/versioned/0.30.0/implementationPlans/public-roadmap-github.md +204 -0
- package/src/docs/versioned/0.30.0/implementationPlans/rbac-permissions.md +982 -0
- package/src/docs/versioned/0.30.0/implementationPlans/rtk-to-syncdb-migration-docs.md +169 -0
- package/src/docs/versioned/0.30.0/implementationPlans/upgrade-guides-and-skill.md +166 -0
- package/src/docs/versioned/0.30.0/implementationPlans/web-ssr-and-admin-spa.md +153 -0
- package/src/docs/versioned/0.30.0/reference/components/README.mdx +68 -0
- package/src/docs/versioned/0.30.0/reference/components/custom-select-field.mdx +37 -0
- package/src/docs/versioned/0.30.0/reference/components/signature-capture-field.mdx +41 -0
- package/src/docs/versioned/0.30.0/reference/components/thumbsupdownfeedback.mdx +32 -0
- package/src/docs/versioned/0.30.0/reference/components/typed-signature-field.mdx +37 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/README.md +305 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/classes/APIError.md +144 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/classes/BadRequestError.md +165 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/classes/ConflictError.md +165 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/classes/ForbiddenError.md +165 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/classes/InternalServerError.md +165 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/classes/NotFoundError.md +165 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/classes/UnauthorizedError.md +165 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/classes/ValidationError.md +165 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/functions/apiUnauthorizedMiddleware.md +30 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/functions/envConfigurationPlugin.md +11 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/functions/errorDetail.md +15 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/functions/findOneOrNoneFor.md +37 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/functions/getAPIErrorBody.md +17 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/functions/withApiErrorHandling.md +30 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/interfaces/APIErrorBody.md +77 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/interfaces/APIErrorOptions.md +103 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/interfaces/ConsentFormModel.md +79 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/interfaces/ConsentFormStatics.md +55 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/interfaces/ConsentResponseModel.md +79 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/interfaces/ConsentResponseStatics.md +55 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/interfaces/FindExactlyOnePlugin.md +30 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/interfaces/FindOneOrNonePlugin.md +30 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/interfaces/RealtimeEvent.md +57 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/interfaces/RealtimeRegistryEntry.md +42 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/interfaces/VersionConfigModel.md +51 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/type-aliases/APIErrorConstructor.md +5 -0
- package/src/docs/versioned/0.30.0/reference/generated/api/type-aliases/APIErrorSubclassOptions.md +3 -0
- package/src/docs/versioned/0.30.0/reference/generated/rtk/functions/shouldDeferOfflineMutation.md +18 -0
- package/src/docs/versioned/0.30.0/tasks/agentic-sdlc-plugin.md +163 -0
- package/src/docs/versioned/0.30.0/tasks/ai-dev-loop-boost.md +120 -0
- package/src/docs/versioned/0.30.0/tasks/build-terreno-app-validation.md +121 -0
- package/src/docs/versioned/0.30.0/tasks/deploy-to-gcp.md +99 -0
- package/src/docs/versioned/0.30.0/tasks/deploy-to-vercel.md +110 -0
- package/src/docs/versioned/0.30.0/tasks/deployment-foundation.md +92 -0
- package/src/docs/versioned/0.30.0/tasks/docs-reference-coverage.md +93 -0
- package/src/docs/versioned/0.30.0/tasks/docs-tutorials-ai-first.md +98 -0
- package/src/docs/versioned/0.30.0/tasks/examples-demo-coverage.md +113 -0
- package/src/docs/versioned/0.30.0/tasks/oss-governance-baseline.md +129 -0
- package/src/docs/versioned/0.30.0/tasks/positioning-django-rails-universal.md +100 -0
- package/src/docs/versioned/0.30.0/tasks/public-roadmap-github.md +112 -0
- package/src/docs/versioned/0.30.0/tasks/rtk-to-syncdb-migration-docs.md +163 -0
- package/src/docs/versioned/0.30.0/tasks/upgrade-guides-and-skill.md +118 -0
- package/src/docs/versioned/0.30.0/tasks/web-ssr-and-admin-spa.md +155 -0
- package/src/docs/versioned/next/explanation/README.md +7 -1
- package/src/docs/versioned/next/explanation/deployment-architecture-gcp.md +65 -0
- package/src/docs/versioned/next/explanation/deployment-baseline.md +78 -0
- package/src/docs/versioned/next/explanation/positioning.md +164 -0
- package/src/docs/versioned/next/explanation/repository-settings.md +44 -0
- package/src/docs/versioned/next/explanation/roadmap-process.md +330 -0
- package/src/docs/versioned/next/explanation/roadmap-seed-issues.md +866 -0
- package/src/docs/versioned/next/how-to/README.md +8 -1
- package/src/docs/versioned/next/how-to/build-for-web.md +69 -0
- package/src/docs/versioned/next/how-to/deploy-backend-to-cloud-run.md +115 -0
- package/src/docs/versioned/next/how-to/deploy-to-gcp.md +20 -228
- package/src/docs/versioned/next/how-to/deploy-web-to-gcs-cdn.md +183 -0
- package/src/docs/versioned/next/implementationPlans/PLAN_INDEX.md +20 -0
- package/src/docs/versioned/next/implementationPlans/README.md +56 -30
- package/src/docs/versioned/next/implementationPlans/agentic-sdlc-plugin.md +2 -1
- package/src/docs/versioned/next/implementationPlans/ai-dev-loop-boost.md +1 -0
- package/src/docs/versioned/next/implementationPlans/b2b-platform-program.md +114 -0
- package/src/docs/versioned/next/implementationPlans/billing-stripe.md +158 -0
- package/src/docs/versioned/next/implementationPlans/build-terreno-app-validation.md +1 -0
- package/src/docs/versioned/next/implementationPlans/comms-abstraction.md +240 -0
- package/src/docs/versioned/next/implementationPlans/comms-adapter-expo-push.md +107 -0
- package/src/docs/versioned/next/implementationPlans/comms-adapter-sendgrid.md +107 -0
- package/src/docs/versioned/next/implementationPlans/comms-adapter-twilio-sms.md +102 -0
- package/src/docs/versioned/next/implementationPlans/comms-adapter-twilio-verify.md +93 -0
- package/src/docs/versioned/next/implementationPlans/deploy-to-gcp.md +1 -0
- package/src/docs/versioned/next/implementationPlans/deploy-to-vercel.md +1 -0
- package/src/docs/versioned/next/implementationPlans/deployment-foundation.md +1 -0
- package/src/docs/versioned/next/implementationPlans/docs-reference-coverage.md +1 -0
- package/src/docs/versioned/next/implementationPlans/docs-tutorials-ai-first.md +1 -0
- package/src/docs/versioned/next/implementationPlans/examples-demo-coverage.md +1 -0
- package/src/docs/versioned/next/implementationPlans/infra-mcp-research.md +188 -0
- package/src/docs/versioned/next/implementationPlans/infra-mcp.md +269 -0
- package/src/docs/versioned/next/implementationPlans/native-module-baseline.md +105 -0
- package/src/docs/versioned/next/implementationPlans/orgs-and-teams.md +158 -0
- package/src/docs/versioned/next/implementationPlans/oss-governance-baseline.md +1 -0
- package/src/docs/versioned/next/implementationPlans/password-reset-and-email-verification.md +147 -0
- package/src/docs/versioned/next/implementationPlans/positioning-django-rails-universal.md +1 -0
- package/src/docs/versioned/next/implementationPlans/public-roadmap-github.md +1 -0
- package/src/docs/versioned/next/implementationPlans/rtk-to-syncdb-migration-docs.md +49 -4
- package/src/docs/versioned/next/implementationPlans/upgrade-guides-and-skill.md +1 -0
- package/src/docs/versioned/next/implementationPlans/web-ssr-and-admin-spa.md +1 -0
- package/src/docs/versioned/next/reference/README.md +4 -0
- package/src/docs/versioned/next/reference/admin-spa.md +130 -0
- package/src/docs/versioned/next/reference/ai.md +519 -0
- package/src/docs/versioned/next/reference/environment-variables.md +220 -382
- package/src/docs/versioned/next/reference/test.md +108 -0
- package/src/docs/versioned/next/roadmap.md +9 -0
- package/src/docs/versioned/next/tasks/README.md +42 -0
- package/src/docs/versioned/next/tasks/agentic-sdlc-plugin.md +5 -5
- package/src/docs/versioned/next/tasks/billing-stripe.md +75 -0
- package/src/docs/versioned/next/tasks/comms-abstraction.md +77 -0
- package/src/docs/versioned/next/tasks/comms-adapter-expo-push.md +29 -0
- package/src/docs/versioned/next/tasks/comms-adapter-sendgrid.md +29 -0
- package/src/docs/versioned/next/tasks/comms-adapter-twilio-sms.md +29 -0
- package/src/docs/versioned/next/tasks/comms-adapter-twilio-verify.md +19 -0
- package/src/docs/versioned/next/tasks/deploy-to-gcp.md +11 -11
- package/src/docs/versioned/next/tasks/deployment-foundation.md +12 -12
- package/src/docs/versioned/next/tasks/docs-reference-coverage.md +4 -4
- package/src/docs/versioned/next/tasks/infra-mcp.md +43 -0
- package/src/docs/versioned/next/tasks/native-module-baseline.md +42 -0
- package/src/docs/versioned/next/tasks/orgs-and-teams.md +70 -0
- package/src/docs/versioned/next/tasks/oss-governance-baseline.md +18 -18
- package/src/docs/versioned/next/tasks/password-reset-and-email-verification.md +60 -0
- package/src/docs/versioned/next/tasks/positioning-django-rails-universal.md +4 -4
- package/src/docs/versioned/next/tasks/public-roadmap-github.md +15 -15
- package/src/docs/versioned/next/tasks/rtk-to-syncdb-migration-docs.md +3 -1
- package/dist/docs/versioned/0.26.0/implementationPlans/PLAN_INDEX.md +0 -21
- package/dist/docs/versioned/0.26.0/reference/components/README.mdx +0 -65
- package/dist/docs/versioned/0.26.0/reference/components/custom-select-field.mdx +0 -37
- package/dist/docs/versioned/0.26.0/reference/generated/api/README.md +0 -294
- package/dist/docs/versioned/0.26.0/reference/generated/api/classes/APIError.md +0 -96
- package/dist/docs/versioned/0.26.0/reference/generated/api/functions/apiUnauthorizedMiddleware.md +0 -23
- package/dist/docs/versioned/0.26.0/reference/generated/api/functions/envConfigurationPlugin.md +0 -11
- package/dist/docs/versioned/0.26.0/reference/generated/api/functions/findOneOrNoneFor.md +0 -37
- package/dist/docs/versioned/0.26.0/reference/generated/api/functions/getAPIErrorBody.md +0 -11
- package/dist/docs/versioned/0.26.0/reference/generated/api/functions/withApiErrorHandling.md +0 -31
- package/dist/docs/versioned/0.26.0/reference/generated/api/interfaces/APIErrorConstructor.md +0 -93
- package/dist/docs/versioned/0.26.0/reference/generated/api/interfaces/ConsentFormModel.md +0 -79
- package/dist/docs/versioned/0.26.0/reference/generated/api/interfaces/ConsentFormStatics.md +0 -55
- package/dist/docs/versioned/0.26.0/reference/generated/api/interfaces/ConsentResponseModel.md +0 -79
- package/dist/docs/versioned/0.26.0/reference/generated/api/interfaces/ConsentResponseStatics.md +0 -55
- package/dist/docs/versioned/0.26.0/reference/generated/api/interfaces/FindExactlyOnePlugin.md +0 -30
- package/dist/docs/versioned/0.26.0/reference/generated/api/interfaces/FindOneOrNonePlugin.md +0 -30
- package/dist/docs/versioned/0.26.0/reference/generated/api/interfaces/RealtimeEvent.md +0 -57
- package/dist/docs/versioned/0.26.0/reference/generated/api/interfaces/RealtimeRegistryEntry.md +0 -41
- package/dist/docs/versioned/0.26.0/reference/generated/api/interfaces/VersionConfigModel.md +0 -51
- package/dist/docs/versioned/0.26.0/reference/generated/rtk/functions/shouldDeferOfflineMutation.md +0 -18
- package/src/docs/versioned/0.26.0/implementationPlans/PLAN_INDEX.md +0 -21
- package/src/docs/versioned/0.26.0/reference/components/README.mdx +0 -65
- package/src/docs/versioned/0.26.0/reference/components/custom-select-field.mdx +0 -37
- package/src/docs/versioned/0.26.0/reference/generated/api/README.md +0 -294
- package/src/docs/versioned/0.26.0/reference/generated/api/classes/APIError.md +0 -96
- package/src/docs/versioned/0.26.0/reference/generated/api/functions/apiUnauthorizedMiddleware.md +0 -23
- package/src/docs/versioned/0.26.0/reference/generated/api/functions/envConfigurationPlugin.md +0 -11
- package/src/docs/versioned/0.26.0/reference/generated/api/functions/findOneOrNoneFor.md +0 -37
- package/src/docs/versioned/0.26.0/reference/generated/api/functions/getAPIErrorBody.md +0 -11
- package/src/docs/versioned/0.26.0/reference/generated/api/functions/withApiErrorHandling.md +0 -31
- package/src/docs/versioned/0.26.0/reference/generated/api/interfaces/APIErrorConstructor.md +0 -93
- package/src/docs/versioned/0.26.0/reference/generated/api/interfaces/ConsentFormModel.md +0 -79
- package/src/docs/versioned/0.26.0/reference/generated/api/interfaces/ConsentFormStatics.md +0 -55
- package/src/docs/versioned/0.26.0/reference/generated/api/interfaces/ConsentResponseModel.md +0 -79
- package/src/docs/versioned/0.26.0/reference/generated/api/interfaces/ConsentResponseStatics.md +0 -55
- package/src/docs/versioned/0.26.0/reference/generated/api/interfaces/FindExactlyOnePlugin.md +0 -30
- package/src/docs/versioned/0.26.0/reference/generated/api/interfaces/FindOneOrNonePlugin.md +0 -30
- package/src/docs/versioned/0.26.0/reference/generated/api/interfaces/RealtimeEvent.md +0 -57
- package/src/docs/versioned/0.26.0/reference/generated/api/interfaces/RealtimeRegistryEntry.md +0 -41
- package/src/docs/versioned/0.26.0/reference/generated/api/interfaces/VersionConfigModel.md +0 -51
- package/src/docs/versioned/0.26.0/reference/generated/rtk/functions/shouldDeferOfflineMutation.md +0 -18
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/README.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/explanation/README.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/explanation/ai-workflows.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/explanation/authentication.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/explanation/configuration-system.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/explanation/dependency-management.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/explanation/gcp-hosting-architecture.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/explanation/model-router-actions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/explanation/modular-api-design.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/explanation/no-barrel-imports.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/how-to/README.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/how-to/add-feature-flags.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/how-to/add-github-oauth.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/how-to/call-external-apis.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/how-to/configure-better-auth.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/how-to/create-a-model.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/how-to/deploy-to-gcp.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/how-to/upgrade-banner.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/how-to/websocket-integration.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/IP_TEMPLATE.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/ModularAPI.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/README.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/admin-improvements.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/admin-only-research.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/admin-only.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/admin-script-runner.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/admin-ui-v2-django-parity.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/consent-forms.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/design-blend-skill.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/docs-site-and-versioning.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/feature-flags-openfeature.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/feature-flags.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/mcp-boost-parity.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/model-router-actions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/model-router-mcp.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/offline-mode.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/syncdb-local-first.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/terreno-langfuse-integration.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/upgrade-banner.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/README.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/admin-backend.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/admin-frontend.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/api-health.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/api.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/accordion.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/addressfield.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/ai-suggestion-box.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/avatar.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/badge.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/banner.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/boolean-field.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/box.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/button.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/card.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/checkbox.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/consentformscreen.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/datatable.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/date-time-field.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/email-field.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/emoji-selector.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/field.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/height-field.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/icon.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/iconbutton.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/inner-modal-content.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/markdown-editor-field.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/markdownview.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/multiselect-field.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/number-field.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/page.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/pagination.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/password-field.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/phone-number-field.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/radio-field.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/sectiondivider.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/segmented-control.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/select-field.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/selectbadge.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/side-drawer.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/sidebar-navigation-non-expo.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/signature-field.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/slider.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/spinner.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/table-badge.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/table-boolean.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/table-date.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/table-icon-button.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/table-number.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/table-text.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/table-title.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/table.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/tap-to-edit.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/text-area.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/text-field.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/theme.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/toast.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/tooltip.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/components/userinactivity.mdx +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/environment-variables.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/feature-flags.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/README.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/BetterAuthApp.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/CachingSecretProvider.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/CompositeSecretProvider.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/ConfigurationApp.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/ConsentApp.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/DateOnly.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/EnvSecretProvider.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/GcpSecretProvider.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/OpenApiMiddlewareBuilder.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/RealtimeApp.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/TaskCancelledError.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/TerrenoApp.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/VersionCheckPlugin.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/AdminOwnerTransformer.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/OwnerQueryFilter.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/addAuthRoutes.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/addGitHubAuthRoutes.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/addMeRoutes.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/addPopulateToQuery.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/addQuerySubscription.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/apiErrorMiddleware.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/apiFallthroughErrorMiddleware.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/applyRequestContextToSentry.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/assertNoActionCollisions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/asyncHandler.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/authenticateMiddleware.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/baseUserPlugin.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/buildQuerySchemaFromFields.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/checkModelsStrict.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/checkPermissions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/clearQueryStore.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/clearRealtimeRegistry.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/computeQueryId.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/configurationPlugin.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/configureOpenApiValidator.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createActionOpenApiMiddleware.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createAuthenticatedClient.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createBetterAuth.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createBetterAuthSessionMiddleware.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createFeatureFlaggedLogger.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createModelValidators.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createOpenApiBuilder.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createRouter.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createRouterWithAuth.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createScopedLogger.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createScriptArgs.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createValidator.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createdUpdatedPlugin.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/cronjob.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/defaultResponseHandler.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/defineCollectionAction.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/defineInstanceAction.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/errorMessage.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/errorStack.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/errorsPlugin.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/findExactlyOne.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/findOneOrNone.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/findRegistryEntryByCollection.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/findRegistryEntryByRoutePath.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/firebaseJWTPlugin.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/fixMixedFields.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/flattenToDotPaths.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/formatLogContextSuffix.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/generateTokens.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getBetterAuthSession.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getCurrentLogContext.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getCurrentRequestContext.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getCurrentRequestContextAttributes.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getDisableExternalErrorTracking.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getMongoClientFromMongoose.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getOpenApiSpecForModel.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getOpenApiValidatorConfig.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getQuerySubscriptionsForCollection.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getRealtimeRegistry.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getRequestContextFromAttributes.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getSchemaFromModel.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getSessionIdFromJwtPayload.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/githubUserPlugin.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/hasBetterAuthSession.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/installRealtimeSocketHandlers.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/isAPIError.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/isDeletedPlugin.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/isDisabledPlugin.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/isOpenApiValidatorConfigured.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/isValidObjectId.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/jsonResponseRequestIdMiddleware.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/logRequests.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/markRetryUnsafe.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/matchesQuery.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/modelRouter.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/mongooseErrorToAPIError.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/mountBetterAuthRoutes.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/normalizeApiError.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/openApiCompatMiddleware.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/openApiEtagMiddleware.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/parseScriptArgs.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/patchAppUse.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/permissionMiddleware.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/registerActionRoutes.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/registerRealtime.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/removeAllSocketQueries.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/removeQuerySubscription.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/requestContextMiddleware.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/resetOpenApiValidatorConfig.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/runActionPermissions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/runWithRequestContext.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/runWithRequestContextAttributes.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/sendToGoogleChat.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/sendToSlack.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/sendToZoom.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/sentryAppVersionMiddleware.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/serialize.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/setRequestContext.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/setupAuth.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/setupBetterAuthUserSync.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/setupEnvironment.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/setupGitHubAuth.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/setupLogging.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/signupUser.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/startChangeStreamWatcher.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/stopChangeStreamWatcher.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/syncBetterAuthUser.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/syncConsents.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/timeout.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/transform.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/unpopulate.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/updateRequestContextFromRequest.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/upsertPlugin.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/validateActionRequest.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/validateModelRequestBody.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/validateQueryParams.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/validateRequestBody.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/validateResponseData.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/wrapActionResponse.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/wrapScript.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ActionContext.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/AsyncHandlerOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/AuthOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/AuthenticatedClient.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/BackgroundTaskDocument.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/BackgroundTaskMethods.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/BackgroundTaskModel.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/BackgroundTaskStatics.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/BaseUser.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/BetterAuthAppOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/BetterAuthConfig.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/BetterAuthOAuthProvider.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/BetterAuthSession.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/BetterAuthSessionData.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/BetterAuthUser.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/CachingSecretProviderOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ChangeStreamConfig.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/CollectionActionConfig.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConfigRegistration.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConfigurationAppOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConfigurationMetaResponse.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConfigurationModel.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConfigurationPermissions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConfigurationPluginOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConfigurationStatics.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConsentAppOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConsentFormCheckbox.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConsentFormDefinition.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConsentFormDocument.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConsentResponseDocument.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConsentResponseMethods.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/CreateAuthenticatedClientOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/CreateBetterAuthOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/CreateFeatureFlaggedLoggerOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/CreateScopedLoggerOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/CreateValidatorOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/CreatedDeleted.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/DocumentSubscription.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/GcpSecretProviderOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/GenerateTokensOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/GitHubAuthOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/GitHubUserFields.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/HasUpsert.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/HttpClientLogger.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/InstanceActionConfig.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/IsDeleted.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/JSONArray.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/JSONObject.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/JwtSessionPayload.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/LogContextFields.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/LoggingOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ModelRouterOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ModelRouterRegistration.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ModelRouterValidationOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/MongoClientLike.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/NormalizedApiError.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/OpenApiBuildResult.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/OpenApiMiddleware.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/OpenApiParameter.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/OpenApiResponse.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/OpenApiSchema.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/OpenApiSchemaProperty.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/OpenApiValidatorConfig.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/PopulatePath.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/QuerySubscription.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/QueryValidatorOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/RESTPermissions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/RealtimeAppOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/RealtimeConfig.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/RealtimeSocketLike.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/RequestBodyValidatorOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/RequestContext.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/RetryPolicy.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ScopedLogger.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ScriptArgDef.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ScriptArgs.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ScriptContext.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ScriptResult.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/SecretFieldMeta.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/SecretProvider.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/SyncConsentsOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/SyncConsentsResult.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/TerrenoAppOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/TerrenoPlugin.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/TerrenoRequestLogEntry.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/TerrenoTransformer.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/User.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/UserModel.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/VersionCheckResponse.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/VersionConfigDocument.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/WithApiErrorHandlingOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/WrapScriptOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/AddRoutes.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/ApiErrorClassification.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/AuthProvider.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/AuthStrategy.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/BetterAuthInstance.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/ConfigType.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/ConfigurationPostUpdateHook.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/ConfigurationPreUpdateHook.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/ConsentFormMethods.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/ConsentFormType.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/DeepPartial.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/GooseRESTOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/JSONPrimitive.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/JSONValue.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/PathValue.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/Paths.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/PermissionMethod.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/RESTMethod.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/RequestContextAttributes.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/ScriptArgValue.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/ScriptRunner.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/VersionCheckStatus.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/ACTION_NAME_PATTERN.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/BackgroundTask.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/Config.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/ConsentForm.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/ConsentResponse.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/MAX_DOCUMENT_SUBSCRIPTIONS.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/MAX_MODEL_SUBSCRIPTIONS.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/MAX_QUERY_SUBSCRIPTIONS.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/Permissions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/REQUEST_CONTEXT_ATTRIBUTE_NAMES.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/VersionConfig.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/consentResponsePopulatePaths.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/gooseRestRouter.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/logger.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/winstonLogger.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/README.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/buildOptimisticCreateItem.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/configureOfflineMutationEndpoints.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/createBetterAuthClient.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/createOfflineMiddleware.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/createSessionApi.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/createStorageAdapter.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/generateAuthSlice.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/generateBetterAuthSlice.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/generateProfileEndpoints.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/generateTags.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/getAuthToken.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/getBaseQuery.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/getFriendlyExpirationInfo.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/getRealtimeSocket.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/getTokenExpirationTimes.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/isNetworkFetchError.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/isWebsocketsDebugEnabled.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/logAuth.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/logSocket.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/populateId.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/realtimeDocument.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/realtimeList.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/refreshAuthToken.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/registerTerrenoDevStore.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/resolveBaseUrls.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/resolveDevApiPort.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/resolveFeatureFlagsOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectBetterAuthError.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectBetterAuthIsAuthenticated.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectBetterAuthIsLoading.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectBetterAuthState.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectBetterAuthUser.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectBetterAuthUserId.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectConflicts.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectCurrentUserId.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectIsAuthenticating.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectIsOnline.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectIsOnlineSafe.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectIsSyncing.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectLastTokenRefreshTimestamp.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectOfflineQueue.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectQueueLength.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/setRealtimeDebug.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/setRealtimeSocket.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/shouldReplayQueuedMutation.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/shouldShowStillThereModal.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/useFeatureFlags.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/useOfflineStatus.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/useRealtimeDebug.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/useSelectCurrentUserId.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/useSelectIsAuthenticating.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/useServerStatus.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/useSocketConnection.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/useSyncConnection.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/useTerrenoFeatureFlags.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/useUpgradeCheck.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/BaseUrls.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/BetterAuthClientConfig.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/BetterAuthClientInterface.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/BetterAuthSession.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/BetterAuthSessionData.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/BetterAuthState.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/BetterAuthUser.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/ConflictRecord.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/EmailSignupRequest.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/ExpoConstantsShape.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/GenerateBetterAuthSliceConfig.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/GoogleLoginRequest.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/ListResponse.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/OfflineMiddlewareConfig.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/OfflineState.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/OfflineStatus.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/QueuedMutation.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/RealtimeEvent.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/ResetPasswordRequest.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/RootState.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/ServerStatusOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/SocketConnection.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/StorageAdapter.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/TerrenoFlagDefinition.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/UseFeatureFlagsOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/UseSocketConnectionOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/UseTerrenoFeatureFlagsOptions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/UseTerrenoFeatureFlagsResult.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/UserResponse.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/VersionCheckResponse.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/type-aliases/BetterAuthClient.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/type-aliases/BetterAuthOAuthProvider.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/type-aliases/BetterAuthSlice.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/type-aliases/EmailLoginRequest.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/type-aliases/ServerStatus.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/type-aliases/TerrenoFlagConfiguration.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/AUTH_DEBUG.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/DEFAULT_DEV_API_PORT.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/IsWeb.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/LOGOUT_ACTION_TYPE.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/SAME_ORIGIN_SENTINEL.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/TOKEN_REFRESHED_SUCCESS.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/addConflict.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/baseTasksUrl.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/baseUrl.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/baseWebsocketsUrl.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/clearConflicts.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/clearQueue.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/dequeue.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/dismissConflict.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/emptySplitApi.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/enqueue.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/offlineReducer.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/offlineSlice.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/selectUndismissedConflicts.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/setOnlineStatus.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/setSyncing.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/staggeredBaseQuery.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/useGetVersionCheckQuery.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/useLazyGetVersionCheckQuery.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/mcp-server.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/rtk.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/reference/ui.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/tasks/admin-improvements.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/tasks/admin-only.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/tasks/admin-script-runner.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/tasks/admin-ui-v2-django-parity.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/tasks/consent-forms.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/tasks/design-blend-skill.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/tasks/feature-flags-openfeature.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/tasks/feature-flags.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/tasks/model-router-actions.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/tasks/model-router-mcp.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/tasks/offline-mode.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/tasks/syncdb-local-first.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/tasks/upgrade-banner.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/tutorials/README.md +0 -0
- /package/dist/docs/versioned/{0.26.0 → 0.30.0}/tutorials/getting-started.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/README.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/explanation/README.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/explanation/ai-workflows.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/explanation/authentication.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/explanation/configuration-system.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/explanation/dependency-management.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/explanation/gcp-hosting-architecture.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/explanation/model-router-actions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/explanation/modular-api-design.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/explanation/no-barrel-imports.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/how-to/README.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/how-to/add-feature-flags.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/how-to/add-github-oauth.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/how-to/call-external-apis.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/how-to/configure-better-auth.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/how-to/create-a-model.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/how-to/deploy-to-gcp.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/how-to/upgrade-banner.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/how-to/websocket-integration.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/IP_TEMPLATE.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/ModularAPI.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/README.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/admin-improvements.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/admin-only-research.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/admin-only.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/admin-script-runner.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/admin-ui-v2-django-parity.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/consent-forms.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/design-blend-skill.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/docs-site-and-versioning.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/feature-flags-openfeature.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/feature-flags.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/mcp-boost-parity.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/model-router-actions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/model-router-mcp.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/offline-mode.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/syncdb-local-first.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/terreno-langfuse-integration.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/implementationPlans/upgrade-banner.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/README.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/admin-backend.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/admin-frontend.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/api-health.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/api.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/accordion.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/addressfield.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/ai-suggestion-box.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/avatar.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/badge.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/banner.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/boolean-field.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/box.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/button.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/card.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/checkbox.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/consentformscreen.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/datatable.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/date-time-field.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/email-field.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/emoji-selector.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/field.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/height-field.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/icon.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/iconbutton.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/inner-modal-content.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/markdown-editor-field.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/markdownview.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/multiselect-field.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/number-field.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/page.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/pagination.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/password-field.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/phone-number-field.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/radio-field.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/sectiondivider.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/segmented-control.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/select-field.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/selectbadge.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/side-drawer.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/sidebar-navigation-non-expo.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/signature-field.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/slider.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/spinner.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/table-badge.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/table-boolean.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/table-date.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/table-icon-button.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/table-number.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/table-text.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/table-title.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/table.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/tap-to-edit.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/text-area.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/text-field.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/theme.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/toast.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/tooltip.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/components/userinactivity.mdx +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/environment-variables.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/feature-flags.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/README.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/BetterAuthApp.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/CachingSecretProvider.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/CompositeSecretProvider.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/ConfigurationApp.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/ConsentApp.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/DateOnly.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/EnvSecretProvider.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/GcpSecretProvider.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/OpenApiMiddlewareBuilder.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/RealtimeApp.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/TaskCancelledError.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/TerrenoApp.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/classes/VersionCheckPlugin.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/AdminOwnerTransformer.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/OwnerQueryFilter.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/addAuthRoutes.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/addGitHubAuthRoutes.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/addMeRoutes.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/addPopulateToQuery.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/addQuerySubscription.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/apiErrorMiddleware.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/apiFallthroughErrorMiddleware.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/applyRequestContextToSentry.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/assertNoActionCollisions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/asyncHandler.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/authenticateMiddleware.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/baseUserPlugin.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/buildQuerySchemaFromFields.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/checkModelsStrict.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/checkPermissions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/clearQueryStore.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/clearRealtimeRegistry.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/computeQueryId.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/configurationPlugin.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/configureOpenApiValidator.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createActionOpenApiMiddleware.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createAuthenticatedClient.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createBetterAuth.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createBetterAuthSessionMiddleware.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createFeatureFlaggedLogger.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createModelValidators.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createOpenApiBuilder.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createRouter.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createRouterWithAuth.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createScopedLogger.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createScriptArgs.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createValidator.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/createdUpdatedPlugin.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/cronjob.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/defaultResponseHandler.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/defineCollectionAction.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/defineInstanceAction.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/errorMessage.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/errorStack.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/errorsPlugin.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/findExactlyOne.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/findOneOrNone.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/findRegistryEntryByCollection.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/findRegistryEntryByRoutePath.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/firebaseJWTPlugin.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/fixMixedFields.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/flattenToDotPaths.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/formatLogContextSuffix.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/generateTokens.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getBetterAuthSession.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getCurrentLogContext.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getCurrentRequestContext.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getCurrentRequestContextAttributes.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getDisableExternalErrorTracking.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getMongoClientFromMongoose.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getOpenApiSpecForModel.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getOpenApiValidatorConfig.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getQuerySubscriptionsForCollection.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getRealtimeRegistry.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getRequestContextFromAttributes.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getSchemaFromModel.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/getSessionIdFromJwtPayload.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/githubUserPlugin.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/hasBetterAuthSession.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/installRealtimeSocketHandlers.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/isAPIError.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/isDeletedPlugin.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/isDisabledPlugin.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/isOpenApiValidatorConfigured.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/isValidObjectId.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/jsonResponseRequestIdMiddleware.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/logRequests.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/markRetryUnsafe.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/matchesQuery.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/modelRouter.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/mongooseErrorToAPIError.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/mountBetterAuthRoutes.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/normalizeApiError.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/openApiCompatMiddleware.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/openApiEtagMiddleware.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/parseScriptArgs.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/patchAppUse.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/permissionMiddleware.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/registerActionRoutes.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/registerRealtime.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/removeAllSocketQueries.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/removeQuerySubscription.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/requestContextMiddleware.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/resetOpenApiValidatorConfig.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/runActionPermissions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/runWithRequestContext.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/runWithRequestContextAttributes.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/sendToGoogleChat.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/sendToSlack.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/sendToZoom.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/sentryAppVersionMiddleware.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/serialize.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/setRequestContext.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/setupAuth.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/setupBetterAuthUserSync.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/setupEnvironment.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/setupGitHubAuth.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/setupLogging.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/signupUser.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/startChangeStreamWatcher.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/stopChangeStreamWatcher.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/syncBetterAuthUser.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/syncConsents.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/timeout.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/transform.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/unpopulate.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/updateRequestContextFromRequest.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/upsertPlugin.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/validateActionRequest.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/validateModelRequestBody.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/validateQueryParams.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/validateRequestBody.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/validateResponseData.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/wrapActionResponse.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/functions/wrapScript.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ActionContext.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/AsyncHandlerOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/AuthOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/AuthenticatedClient.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/BackgroundTaskDocument.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/BackgroundTaskMethods.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/BackgroundTaskModel.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/BackgroundTaskStatics.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/BaseUser.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/BetterAuthAppOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/BetterAuthConfig.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/BetterAuthOAuthProvider.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/BetterAuthSession.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/BetterAuthSessionData.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/BetterAuthUser.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/CachingSecretProviderOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ChangeStreamConfig.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/CollectionActionConfig.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConfigRegistration.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConfigurationAppOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConfigurationMetaResponse.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConfigurationModel.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConfigurationPermissions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConfigurationPluginOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConfigurationStatics.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConsentAppOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConsentFormCheckbox.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConsentFormDefinition.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConsentFormDocument.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConsentResponseDocument.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ConsentResponseMethods.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/CreateAuthenticatedClientOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/CreateBetterAuthOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/CreateFeatureFlaggedLoggerOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/CreateScopedLoggerOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/CreateValidatorOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/CreatedDeleted.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/DocumentSubscription.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/GcpSecretProviderOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/GenerateTokensOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/GitHubAuthOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/GitHubUserFields.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/HasUpsert.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/HttpClientLogger.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/InstanceActionConfig.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/IsDeleted.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/JSONArray.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/JSONObject.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/JwtSessionPayload.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/LogContextFields.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/LoggingOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ModelRouterOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ModelRouterRegistration.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ModelRouterValidationOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/MongoClientLike.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/NormalizedApiError.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/OpenApiBuildResult.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/OpenApiMiddleware.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/OpenApiParameter.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/OpenApiResponse.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/OpenApiSchema.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/OpenApiSchemaProperty.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/OpenApiValidatorConfig.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/PopulatePath.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/QuerySubscription.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/QueryValidatorOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/RESTPermissions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/RealtimeAppOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/RealtimeConfig.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/RealtimeSocketLike.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/RequestBodyValidatorOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/RequestContext.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/RetryPolicy.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ScopedLogger.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ScriptArgDef.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ScriptArgs.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ScriptContext.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/ScriptResult.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/SecretFieldMeta.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/SecretProvider.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/SyncConsentsOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/SyncConsentsResult.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/TerrenoAppOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/TerrenoPlugin.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/TerrenoRequestLogEntry.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/TerrenoTransformer.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/User.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/UserModel.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/VersionCheckResponse.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/VersionConfigDocument.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/WithApiErrorHandlingOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/interfaces/WrapScriptOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/AddRoutes.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/ApiErrorClassification.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/AuthProvider.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/AuthStrategy.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/BetterAuthInstance.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/ConfigType.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/ConfigurationPostUpdateHook.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/ConfigurationPreUpdateHook.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/ConsentFormMethods.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/ConsentFormType.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/DeepPartial.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/GooseRESTOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/JSONPrimitive.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/JSONValue.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/PathValue.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/Paths.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/PermissionMethod.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/RESTMethod.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/RequestContextAttributes.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/ScriptArgValue.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/ScriptRunner.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/type-aliases/VersionCheckStatus.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/ACTION_NAME_PATTERN.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/BackgroundTask.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/Config.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/ConsentForm.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/ConsentResponse.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/MAX_DOCUMENT_SUBSCRIPTIONS.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/MAX_MODEL_SUBSCRIPTIONS.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/MAX_QUERY_SUBSCRIPTIONS.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/Permissions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/REQUEST_CONTEXT_ATTRIBUTE_NAMES.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/VersionConfig.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/consentResponsePopulatePaths.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/gooseRestRouter.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/logger.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/api/variables/winstonLogger.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/README.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/buildOptimisticCreateItem.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/configureOfflineMutationEndpoints.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/createBetterAuthClient.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/createOfflineMiddleware.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/createSessionApi.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/createStorageAdapter.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/generateAuthSlice.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/generateBetterAuthSlice.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/generateProfileEndpoints.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/generateTags.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/getAuthToken.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/getBaseQuery.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/getFriendlyExpirationInfo.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/getRealtimeSocket.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/getTokenExpirationTimes.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/isNetworkFetchError.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/isWebsocketsDebugEnabled.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/logAuth.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/logSocket.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/populateId.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/realtimeDocument.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/realtimeList.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/refreshAuthToken.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/registerTerrenoDevStore.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/resolveBaseUrls.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/resolveDevApiPort.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/resolveFeatureFlagsOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectBetterAuthError.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectBetterAuthIsAuthenticated.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectBetterAuthIsLoading.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectBetterAuthState.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectBetterAuthUser.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectBetterAuthUserId.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectConflicts.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectCurrentUserId.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectIsAuthenticating.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectIsOnline.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectIsOnlineSafe.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectIsSyncing.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectLastTokenRefreshTimestamp.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectOfflineQueue.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/selectQueueLength.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/setRealtimeDebug.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/setRealtimeSocket.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/shouldReplayQueuedMutation.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/shouldShowStillThereModal.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/useFeatureFlags.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/useOfflineStatus.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/useRealtimeDebug.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/useSelectCurrentUserId.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/useSelectIsAuthenticating.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/useServerStatus.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/useSocketConnection.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/useSyncConnection.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/useTerrenoFeatureFlags.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/functions/useUpgradeCheck.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/BaseUrls.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/BetterAuthClientConfig.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/BetterAuthClientInterface.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/BetterAuthSession.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/BetterAuthSessionData.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/BetterAuthState.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/BetterAuthUser.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/ConflictRecord.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/EmailSignupRequest.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/ExpoConstantsShape.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/GenerateBetterAuthSliceConfig.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/GoogleLoginRequest.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/ListResponse.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/OfflineMiddlewareConfig.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/OfflineState.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/OfflineStatus.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/QueuedMutation.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/RealtimeEvent.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/ResetPasswordRequest.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/RootState.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/ServerStatusOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/SocketConnection.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/StorageAdapter.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/TerrenoFlagDefinition.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/UseFeatureFlagsOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/UseSocketConnectionOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/UseTerrenoFeatureFlagsOptions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/UseTerrenoFeatureFlagsResult.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/UserResponse.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/interfaces/VersionCheckResponse.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/type-aliases/BetterAuthClient.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/type-aliases/BetterAuthOAuthProvider.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/type-aliases/BetterAuthSlice.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/type-aliases/EmailLoginRequest.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/type-aliases/ServerStatus.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/type-aliases/TerrenoFlagConfiguration.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/AUTH_DEBUG.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/DEFAULT_DEV_API_PORT.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/IsWeb.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/LOGOUT_ACTION_TYPE.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/SAME_ORIGIN_SENTINEL.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/TOKEN_REFRESHED_SUCCESS.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/addConflict.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/baseTasksUrl.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/baseUrl.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/baseWebsocketsUrl.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/clearConflicts.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/clearQueue.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/dequeue.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/dismissConflict.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/emptySplitApi.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/enqueue.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/offlineReducer.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/offlineSlice.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/selectUndismissedConflicts.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/setOnlineStatus.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/setSyncing.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/staggeredBaseQuery.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/useGetVersionCheckQuery.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/generated/rtk/variables/useLazyGetVersionCheckQuery.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/mcp-server.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/rtk.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/reference/ui.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/tasks/admin-improvements.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/tasks/admin-only.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/tasks/admin-script-runner.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/tasks/admin-ui-v2-django-parity.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/tasks/consent-forms.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/tasks/design-blend-skill.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/tasks/feature-flags-openfeature.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/tasks/feature-flags.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/tasks/model-router-actions.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/tasks/model-router-mcp.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/tasks/offline-mode.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/tasks/syncdb-local-first.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/tasks/upgrade-banner.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/tutorials/README.md +0 -0
- /package/src/docs/versioned/{0.26.0 → 0.30.0}/tutorials/getting-started.md +0 -0
|
@@ -0,0 +1,982 @@
|
|
|
1
|
+
# RBAC Permissions for Terreno — API Design
|
|
2
|
+
|
|
3
|
+
**Status:** Draft — API design for discussion (full IP to follow)
|
|
4
|
+
**Target package:** `@terreno/api` (new `src/rbac/` module), with surfaces in `admin-backend`, `admin-frontend`, `admin-spa`, `rtk`, and the modelRouter MCP work
|
|
5
|
+
**Depends on:** `better-auth/plugins/access` (already a dependency via the Better Auth provider)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Summary
|
|
10
|
+
|
|
11
|
+
Terreno currently has a binary privilege model: `User.admin: boolean`, plus per-route
|
|
12
|
+
`PermissionMethod<T>[]` arrays (`Permissions.IsAdmin`, `IsOwner`, …) with AND semantics. This
|
|
13
|
+
plan replaces that with a first-class RBAC module in `@terreno/api`:
|
|
14
|
+
|
|
15
|
+
- **Permission vocabulary** (resources → actions) is statically defined by the consuming app,
|
|
16
|
+
merged with Terreno defaults, using Better Auth's `createAccessControl` as the engine.
|
|
17
|
+
- **Roles** are DB-backed Mongoose documents editable at runtime through the Terreno admin,
|
|
18
|
+
hydrated into Better Auth `Role` objects (`ac.newRole(permissionsFromDb)`) at check time.
|
|
19
|
+
Terreno ships standard roles; consuming apps add their own (SuperUser, PatientGuide, …).
|
|
20
|
+
- **Users hold many roles**; effective permissions are the union of all their roles plus any
|
|
21
|
+
grants from **external permission sources** (e.g. a Healthie adapter).
|
|
22
|
+
- **Document-level scopes** and **field-level views** cover the dynamic cases RBAC alone can't
|
|
23
|
+
("any PG can view any patient, but only edit patients on their panel"; "patients see fewer
|
|
24
|
+
fields than staff").
|
|
25
|
+
- **One `can()` check** is enforced across REST (modelRouter + custom routes), websockets
|
|
26
|
+
(subscribe + emit), MCP tools, and the admin panel.
|
|
27
|
+
- **Everything has a function escape hatch** so consuming apps (Flourish) can migrate
|
|
28
|
+
incrementally without a big-bang rewrite.
|
|
29
|
+
|
|
30
|
+
Nothing in this design is Flourish-specific; PatientGuide/Healthie examples below are
|
|
31
|
+
illustrations of consuming-app usage.
|
|
32
|
+
|
|
33
|
+
## 2. Concepts
|
|
34
|
+
|
|
35
|
+
| Concept | What it is | Where it lives |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| **Statement** | Map of resource → allowed actions (`{patient: ["read", "update"]}`) | Static, in code, per app (merged with Terreno defaults) |
|
|
38
|
+
| **Permission** | One resource:action pair (`patient:update`) | Derived from statements |
|
|
39
|
+
| **Role** | Named bundle of permissions (`PatientGuide`) | DB (`RbacRole` collection), editable in admin; Terreno ships defaults |
|
|
40
|
+
| **Grant** | Roles/permissions attached to a user | `user.roles: string[]` (+ external sources) |
|
|
41
|
+
| **Scope** | Per-document predicate/query narrowing an action (`patient:update` only on panel) | Code, registered by app as functions |
|
|
42
|
+
| **Field view** | Per-permission read/write field mask (Patient vs Staff vs SuperUser view) | Code, registered by app |
|
|
43
|
+
| **Permission source** | External system contributing grants (Healthie) | Code, adapter interface |
|
|
44
|
+
|
|
45
|
+
The split is deliberate: **what can be granted** (statements, scopes, views) is code — typed,
|
|
46
|
+
reviewed, versioned. **Who has what** (roles, assignments) is data — editable at runtime in the
|
|
47
|
+
admin UI. This mirrors Better Auth's own design, where dynamic roles can only recombine a
|
|
48
|
+
statically defined vocabulary, and it is what makes "permissions can be dynamically added by the
|
|
49
|
+
consuming app but not limited by Terreno" work.
|
|
50
|
+
|
|
51
|
+
## 3. Module layout
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
api/src/rbac/
|
|
55
|
+
index.ts # Public exports
|
|
56
|
+
statements.ts # terrenoStatements, mergeStatements
|
|
57
|
+
access.ts # createAccess, TerrenoAccess class (wraps better-auth ac)
|
|
58
|
+
roleModel.ts # RbacRole Mongoose model + terrenoDefaultRoles seed
|
|
59
|
+
userPlugin.ts # rbacUserPlugin (adds roles: string[] to user schema)
|
|
60
|
+
scopes.ts # ResourceScope types + evaluation
|
|
61
|
+
fieldViews.ts # Field view types + apply/pick logic
|
|
62
|
+
middleware.ts # requireAccess() express middleware, IsPermitted() adapter
|
|
63
|
+
resolve.ts # Role resolution + caching + PermissionSource merging
|
|
64
|
+
routes.ts # rbacRouter (roles CRUD, catalog, previews)
|
|
65
|
+
betterAuthBridge.ts # Mirror ac/roles into better-auth admin plugin when enabled
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Exports land in `@terreno/api` root: `createAccess`, `terrenoStatements`, `terrenoDefaultRoles`,
|
|
69
|
+
`rbacUserPlugin`, `rbacRouter`, `IsPermitted`, `requireAccess`, plus all types.
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## 4. API designs
|
|
74
|
+
|
|
75
|
+
### 4.1 Permission vocabulary (statements)
|
|
76
|
+
|
|
77
|
+
Terreno re-exports Better Auth's engine and ships default statements for everything the
|
|
78
|
+
framework itself gates today:
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
// api/src/rbac/statements.ts
|
|
82
|
+
export const terrenoStatements = {
|
|
83
|
+
// Admin panel access + admin-only surfaces
|
|
84
|
+
admin: ["access", "runScripts", "viewBackgroundTasks"],
|
|
85
|
+
// Managing the RBAC system itself
|
|
86
|
+
rbac: ["read", "manageRoles", "assignRoles"],
|
|
87
|
+
// The framework user model (auth surfaces, admin user CRUD)
|
|
88
|
+
user: ["create", "list", "read", "update", "delete", "impersonate", "setPassword"],
|
|
89
|
+
// Feature flag / configuration app
|
|
90
|
+
configuration: ["read", "update"],
|
|
91
|
+
} as const;
|
|
92
|
+
|
|
93
|
+
export type Statements = Record<string, readonly string[]>;
|
|
94
|
+
|
|
95
|
+
// Same {resource: [actions]} shape better-auth uses everywhere
|
|
96
|
+
export type PermissionSet = {[resource: string]: readonly string[]};
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
The consuming app defines its own vocabulary and merges:
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
// consuming app: src/access.ts
|
|
103
|
+
import {createAccess, terrenoStatements} from "@terreno/api";
|
|
104
|
+
|
|
105
|
+
export const statements = {
|
|
106
|
+
...terrenoStatements,
|
|
107
|
+
patient: ["create", "read", "update", "delete", "readClinical", "updateClinical"],
|
|
108
|
+
careplan: ["create", "read", "update", "approve"],
|
|
109
|
+
staff: ["create", "read", "update"],
|
|
110
|
+
} as const;
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Notes:
|
|
114
|
+
|
|
115
|
+
- `as const` is required (Better Auth's literal-type inference).
|
|
116
|
+
- Actions are arbitrary strings — apps can model verbs beyond CRUD (`approve`,
|
|
117
|
+
`readClinical`), which is how "abilities" attach to roles.
|
|
118
|
+
- Adding a resource/action is a code change + deploy. That is a feature: the vocabulary is the
|
|
119
|
+
contract that scopes, field views, routes, and the admin UI compile against.
|
|
120
|
+
|
|
121
|
+
### 4.2 `createAccess` — the central object
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
// api/src/rbac/access.ts
|
|
125
|
+
import {createAccessControl} from "better-auth/plugins/access";
|
|
126
|
+
|
|
127
|
+
export interface AccessOptions<S extends Statements> {
|
|
128
|
+
statements: S;
|
|
129
|
+
// Code-defined roles seeded into the DB on boot (upsert; admin can then edit non-locked ones)
|
|
130
|
+
defaultRoles?: RoleDefinition[];
|
|
131
|
+
// Document-level scopes per resource (see 4.5)
|
|
132
|
+
scopes?: ResourceScopes<S>;
|
|
133
|
+
// Field-level views per resource (see 4.6)
|
|
134
|
+
fieldViews?: ResourceFieldViews<S>;
|
|
135
|
+
// External grant providers, e.g. Healthie (see 4.10)
|
|
136
|
+
sources?: PermissionSource[];
|
|
137
|
+
// Actions treated as "read-ish" when expanding the auditor read-only sentinel
|
|
138
|
+
// (READ_ONLY_ROLE_PERMISSIONS — see 4.3). Defaults to READ_ACTIONS; apps add
|
|
139
|
+
// verbs like "readClinical".
|
|
140
|
+
readActions?: readonly string[];
|
|
141
|
+
// Role resolution cache TTL in ms (default 30_000). Roles are DB-backed;
|
|
142
|
+
// checks must not hit Mongo on every request. Keep this short for compliance:
|
|
143
|
+
// revoking a role or assignment must not linger on other replicas until TTL
|
|
144
|
+
// expiry (see cross-instance invalidation on `invalidateCache` in 4.2).
|
|
145
|
+
cacheTtlMs?: number;
|
|
146
|
+
// Escape hatch: full custom resolution of a user's permission set
|
|
147
|
+
resolvePermissions?: (args: {user: User}) => Promise<PermissionSet | null>;
|
|
148
|
+
// Optional human-readable labels for the admin permission matrix
|
|
149
|
+
// (resource → action → description). Returned by GET /rbac/statements.
|
|
150
|
+
statementDescriptions?: Record<string, Record<string, string>>;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export const createAccess = <S extends Statements>(options: AccessOptions<S>): TerrenoAccess<S>;
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
`TerrenoAccess` is the one object apps pass around (to `TerrenoApp`, modelRouter options,
|
|
157
|
+
realtime, MCP):
|
|
158
|
+
|
|
159
|
+
```typescript
|
|
160
|
+
export interface AccessCheckArgs<S extends Statements> {
|
|
161
|
+
user?: User;
|
|
162
|
+
// Same shape as better-auth: {resource: [actions]}, ANDed across entries
|
|
163
|
+
permissions: PermissionRequest<S>;
|
|
164
|
+
// When present, document scopes for the resource are also evaluated
|
|
165
|
+
doc?: unknown;
|
|
166
|
+
// Extra context threaded into scope functions (req, socket, etc.)
|
|
167
|
+
context?: Record<string, unknown>;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export interface AccessResult {
|
|
171
|
+
allowed: boolean;
|
|
172
|
+
// Which layer denied — drives 403 vs 405 and admin debugging UI
|
|
173
|
+
deniedBy?: "role" | "scope" | "source";
|
|
174
|
+
reason?: string;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export interface TerrenoAccess<S extends Statements> {
|
|
178
|
+
readonly statements: S;
|
|
179
|
+
// better-auth access controller, exposed for direct use / bridging
|
|
180
|
+
readonly ac: ReturnType<typeof createAccessControl>;
|
|
181
|
+
|
|
182
|
+
// The single authorization entry point (role check + optional doc scope check)
|
|
183
|
+
can(args: AccessCheckArgs<S>): Promise<AccessResult>;
|
|
184
|
+
|
|
185
|
+
// Union of a user's effective permissions (roles + sources) — powers /auth/me,
|
|
186
|
+
// client gating, and the admin "what does this user have" view. Cached.
|
|
187
|
+
getPermissions(args: {user: User}): Promise<PermissionSet>;
|
|
188
|
+
|
|
189
|
+
// Query fragment for list endpoints/subscriptions from the resource's scopes.
|
|
190
|
+
// null means "no access" (empty list), {} means unrestricted.
|
|
191
|
+
queryFilter(args: {
|
|
192
|
+
user?: User;
|
|
193
|
+
resource: keyof S & string;
|
|
194
|
+
action: string;
|
|
195
|
+
context?: Record<string, unknown>;
|
|
196
|
+
}): Promise<Record<string, unknown> | null>;
|
|
197
|
+
|
|
198
|
+
// Field mask for a doc + user (see 4.6). Used by responseHandler, realtime, MCP.
|
|
199
|
+
// Mirrors fieldViews.select: `doc` is optional and `undefined` during create
|
|
200
|
+
// (no document exists yet), and `phase` tells the resolver which enforcement
|
|
201
|
+
// point is calling so the same selector yields read/write/create masks. Create
|
|
202
|
+
// resolves the mask from user + permissions alone (see 4.6 "Create-time view
|
|
203
|
+
// resolution"). modelRouter/realtime/MCP call sites pass `phase` explicitly.
|
|
204
|
+
fieldMask(args: {
|
|
205
|
+
user?: User;
|
|
206
|
+
resource: keyof S & string;
|
|
207
|
+
doc?: unknown; // undefined during create
|
|
208
|
+
phase?: "read" | "write" | "create"; // default "read"
|
|
209
|
+
}): Promise<FieldMask>;
|
|
210
|
+
|
|
211
|
+
// Express middleware for custom routes (see 4.8)
|
|
212
|
+
middleware(permissions: PermissionRequest<S>, options?: {getDoc?: DocLoader}): RequestHandler;
|
|
213
|
+
|
|
214
|
+
// Adapter producing a legacy PermissionMethod so existing modelRouter
|
|
215
|
+
// permission arrays keep working during migration (see 4.7)
|
|
216
|
+
permission(permissions: PermissionRequest<S>): PermissionMethod<unknown>;
|
|
217
|
+
|
|
218
|
+
// Role management used by rbacRouter + admin (see 4.9)
|
|
219
|
+
roles: RoleManager;
|
|
220
|
+
|
|
221
|
+
// Drop cached role/source hydrations for one user or all users on this process.
|
|
222
|
+
// Production multi-replica deployments (e.g. Cloud Run) also need a shared
|
|
223
|
+
// invalidation channel (Redis pub/sub, version stamp on `RbacRole.updated`, …)
|
|
224
|
+
// so every instance drops stale hydrations when roles are edited — otherwise
|
|
225
|
+
// `/auth/me`, websocket permission resolution, and `getPermissions()` on
|
|
226
|
+
// other replicas serve the old set until `cacheTtlMs` expires. The IP will
|
|
227
|
+
// specify the default transport; apps can plug a custom broadcaster.
|
|
228
|
+
invalidateCache(args?: {userId?: string}): void;
|
|
229
|
+
}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
Check semantics (matches Better Auth): within one resource entry, all listed actions must be
|
|
233
|
+
allowed; across resources, entries are ANDed. A user passes a role check if **any** of their
|
|
234
|
+
roles authorizes the request (union across roles) — then scopes, which are restrictions, are
|
|
235
|
+
ANDed on top.
|
|
236
|
+
|
|
237
|
+
### 4.3 Roles: DB-backed, hydrated through Better Auth
|
|
238
|
+
|
|
239
|
+
Why not use Better Auth's role objects directly? Released Better Auth only supports **static**
|
|
240
|
+
global roles (dynamic access control exists for the org plugin; the admin-plugin port is an
|
|
241
|
+
unmerged PR). The supported escape hatch is to store role → permission JSON ourselves and build
|
|
242
|
+
role objects at check time with `ac.newRole()` — that's exactly what we do, and it works
|
|
243
|
+
identically whether the app's auth provider is JWT/Passport or Better Auth.
|
|
244
|
+
|
|
245
|
+
```typescript
|
|
246
|
+
// api/src/rbac/roleModel.ts
|
|
247
|
+
export interface RbacRoleDocument {
|
|
248
|
+
_id: ObjectId;
|
|
249
|
+
// Stable machine name stored on users ("superadmin", "patientGuide")
|
|
250
|
+
name: string;
|
|
251
|
+
displayName: string;
|
|
252
|
+
description?: string;
|
|
253
|
+
// The better-auth permission JSON: {resource: [actions]}, validated
|
|
254
|
+
// against access.statements on write
|
|
255
|
+
permissions: PermissionSet;
|
|
256
|
+
// Role exclusion rules: users cannot hold this role together with any of
|
|
257
|
+
// these (e.g. patientGuide excludes familyGuide). Enforced symmetrically
|
|
258
|
+
// on assignment.
|
|
259
|
+
excludesRoles: string[];
|
|
260
|
+
// Shipped by Terreno or the app via defaultRoles; locked roles cannot be
|
|
261
|
+
// deleted or have their name changed (permissions remain editable unless
|
|
262
|
+
// sealed — see isSealed).
|
|
263
|
+
isLocked: boolean;
|
|
264
|
+
// When true, the role is immutable through the admin API: name, description,
|
|
265
|
+
// permissions, and excludesRoles cannot be changed or deleted. Only Terreno
|
|
266
|
+
// seeds ship sealed (today: `superadmin`). Locked-but-not-sealed roles (e.g.
|
|
267
|
+
// `admin`, `auditor`) keep a stable name while their permission matrix remains
|
|
268
|
+
// editable in the admin UI.
|
|
269
|
+
isSealed: boolean;
|
|
270
|
+
created: Date;
|
|
271
|
+
updated: Date;
|
|
272
|
+
}
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
Default-role `permissions` accept a `RolePermissionSpec`: either a concrete `PermissionSet`, or
|
|
276
|
+
one of two **seed-time expansion sentinels** resolved against the *merged* statements when the
|
|
277
|
+
role is upserted, so app-defined resources are covered without the app editing Terreno's roles:
|
|
278
|
+
|
|
279
|
+
```typescript
|
|
280
|
+
// api/src/rbac/roleModel.ts
|
|
281
|
+
export type RolePermissionSpec =
|
|
282
|
+
| PermissionSet
|
|
283
|
+
| "*" // every action of every resource (superadmin)
|
|
284
|
+
| typeof READ_ONLY_ROLE_PERMISSIONS; // auditor: every read-ish action
|
|
285
|
+
|
|
286
|
+
// "read-ish" = the intersection of each resource's actions with READ_ACTIONS.
|
|
287
|
+
// Terreno's default list; apps can extend via createAccess({readActions}).
|
|
288
|
+
export const READ_ACTIONS = ["read", "list", "access", "view"] as const;
|
|
289
|
+
|
|
290
|
+
// Seed-time sentinel for auditor-style read-only expansion. Reference this
|
|
291
|
+
// constant in defaultRoles (`permissions: READ_ONLY_ROLE_PERMISSIONS`).
|
|
292
|
+
export const READ_ONLY_ROLE_PERMISSIONS = {readOnly: true} as const;
|
|
293
|
+
|
|
294
|
+
// Structural check — accepts both the exported constant and any hand-rolled
|
|
295
|
+
// `{readOnly: true}` object (TypeScript's structural typing allows the latter).
|
|
296
|
+
const isReadOnlySentinel = (
|
|
297
|
+
spec: RolePermissionSpec,
|
|
298
|
+
): spec is typeof READ_ONLY_ROLE_PERMISSIONS =>
|
|
299
|
+
typeof spec === "object" &&
|
|
300
|
+
spec !== null &&
|
|
301
|
+
!Array.isArray(spec) &&
|
|
302
|
+
Object.keys(spec).length === 1 &&
|
|
303
|
+
(spec as {readOnly?: unknown}).readOnly === true;
|
|
304
|
+
|
|
305
|
+
// Applied at seed time inside createAccess, using the merged statements as the source.
|
|
306
|
+
export const expandRolePermissions = (
|
|
307
|
+
spec: RolePermissionSpec,
|
|
308
|
+
statements: Statements,
|
|
309
|
+
readActions: readonly string[],
|
|
310
|
+
): PermissionSet => {
|
|
311
|
+
if (spec === "*") {
|
|
312
|
+
return mapValues(statements, (actions) => [...actions]);
|
|
313
|
+
}
|
|
314
|
+
if (isReadOnlySentinel(spec)) {
|
|
315
|
+
return filterMapValues(statements, (actions) =>
|
|
316
|
+
actions.filter((a) => readActions.includes(a)),
|
|
317
|
+
);
|
|
318
|
+
}
|
|
319
|
+
return spec;
|
|
320
|
+
};
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
Terreno ships default roles (generic names — app-agnostic):
|
|
324
|
+
|
|
325
|
+
```typescript
|
|
326
|
+
// api/src/rbac/roleModel.ts
|
|
327
|
+
export const terrenoDefaultRoles: RoleDefinition[] = [
|
|
328
|
+
{
|
|
329
|
+
name: "superadmin", // the "SoftwareEngineer" role, generically named
|
|
330
|
+
displayName: "Super Admin",
|
|
331
|
+
permissions: "*", // expands to every statement action at seed time
|
|
332
|
+
isLocked: true,
|
|
333
|
+
isSealed: true,
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
name: "admin",
|
|
337
|
+
displayName: "Admin",
|
|
338
|
+
permissions: {
|
|
339
|
+
admin: ["access"],
|
|
340
|
+
user: ["create", "list", "read", "update"],
|
|
341
|
+
configuration: ["read", "update"],
|
|
342
|
+
},
|
|
343
|
+
isLocked: true,
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
name: "auditor",
|
|
347
|
+
displayName: "Auditor",
|
|
348
|
+
// Read-only *everywhere*, including app resources: expands at seed time to
|
|
349
|
+
// every resource's read-ish actions from the merged statements (parallel to
|
|
350
|
+
// superadmin's "*"). Not a hand-listed subset — see expandRolePermissions.
|
|
351
|
+
permissions: READ_ONLY_ROLE_PERMISSIONS,
|
|
352
|
+
isLocked: true,
|
|
353
|
+
},
|
|
354
|
+
{name: "member", displayName: "Member", permissions: {}, isLocked: true},
|
|
355
|
+
];
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
Because expansion runs against the merged statements at seed/upsert time, the stored
|
|
359
|
+
`RbacRoleDocument.permissions` is always a concrete `PermissionSet` (the sentinel is never
|
|
360
|
+
persisted), so runtime checks, the admin matrix, and diffs all see the fully expanded set.
|
|
361
|
+
|
|
362
|
+
At check time, roles resolve through Better Auth:
|
|
363
|
+
|
|
364
|
+
```typescript
|
|
365
|
+
// api/src/rbac/resolve.ts (internal)
|
|
366
|
+
const hydrateRole = (roleDoc: RbacRoleDocument) => ac.newRole(roleDoc.permissions);
|
|
367
|
+
// role.authorize({patient: ["update"]}) -> {success: boolean; error?: string}
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
When the app uses the Better Auth provider, `betterAuthBridge.ts` also passes `ac` and the
|
|
371
|
+
seeded roles into the better-auth `admin` plugin config so `authClient.admin.checkRolePermission`
|
|
372
|
+
(sync, client-side, static roles) and `auth.api.userHasPermission` work natively; DB-edited
|
|
373
|
+
roles remain authoritative server-side via `access.can()`.
|
|
374
|
+
|
|
375
|
+
### 4.4 Assigning roles to users
|
|
376
|
+
|
|
377
|
+
```typescript
|
|
378
|
+
// api/src/rbac/userPlugin.ts
|
|
379
|
+
export interface RbacUser {
|
|
380
|
+
// Role names; effective permissions are the union
|
|
381
|
+
roles: string[];
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
export const rbacUserPlugin = (schema: Schema<any, any, any, any>): void => {
|
|
385
|
+
schema.add({
|
|
386
|
+
roles: {
|
|
387
|
+
type: [String],
|
|
388
|
+
default: [],
|
|
389
|
+
index: true,
|
|
390
|
+
description: "RBAC role names assigned to this user",
|
|
391
|
+
},
|
|
392
|
+
});
|
|
393
|
+
};
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
Assignment goes through `RoleManager` (never raw writes) so exclusion rules and audit hooks run:
|
|
397
|
+
|
|
398
|
+
```typescript
|
|
399
|
+
export interface RoleManager {
|
|
400
|
+
list(): Promise<RbacRoleDocument[]>;
|
|
401
|
+
create(args: {actor: User; role: RoleInput}): Promise<RbacRoleDocument>;
|
|
402
|
+
update(args: {actor: User; roleName: string; changes: Partial<RoleInput>}): Promise<RbacRoleDocument>;
|
|
403
|
+
remove(args: {actor: User; roleName: string}): Promise<void>;
|
|
404
|
+
|
|
405
|
+
// Throws APIError 409 with the conflicting rule if excludesRoles is violated
|
|
406
|
+
assign(args: {actor: User; userId: string; roleNames: string[]}): Promise<void>;
|
|
407
|
+
unassign(args: {actor: User; userId: string; roleNames: string[]}): Promise<void>;
|
|
408
|
+
|
|
409
|
+
// Diff previews for the admin UI (see 4.11)
|
|
410
|
+
previewRoleChange(args: {roleName: string; permissions: PermissionSet}): Promise<RoleDiff>;
|
|
411
|
+
previewAssignment(args: {userId: string; roleNames: string[]}): Promise<UserPermissionDiff>;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
export interface RoleDiff {
|
|
415
|
+
gained: PermissionSet;
|
|
416
|
+
lost: PermissionSet;
|
|
417
|
+
affectedUserCount: number;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
export interface UserPermissionDiff {
|
|
421
|
+
gained: PermissionSet; // net-new after union with their other roles
|
|
422
|
+
lost: PermissionSet;
|
|
423
|
+
resulting: PermissionSet;
|
|
424
|
+
}
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
Guardrails baked into `RoleManager` (borrowed from Better Auth's dynamic access control):
|
|
428
|
+
|
|
429
|
+
- **No escalation**: an actor can only grant (or edit a role to include, or assign) permissions
|
|
430
|
+
the actor **themselves currently holds**. Holding `rbac:manageRoles` lets an actor *manage*
|
|
431
|
+
roles but never lets them hand out actions they lack — a role editor cannot bootstrap
|
|
432
|
+
privileges they do not have. The **only** exception is `superadmin`, which (via its `"*"`
|
|
433
|
+
expansion) holds every permission and so can grant anything; this is a property of *what
|
|
434
|
+
superadmin holds*, not a special "manageRoles can escalate" rule. Concretely: the check is
|
|
435
|
+
`actorPermissions ⊇ permissionsBeingGranted`, evaluated against the actor's effective set.
|
|
436
|
+
- **Vocabulary validation**: every `resource:action` in `permissions` must exist in
|
|
437
|
+
`access.statements` — writes with unknown pairs are 400s.
|
|
438
|
+
- **Managing roles requires** `rbac:manageRoles`; assigning requires `rbac:assignRoles`. These
|
|
439
|
+
gate *access* to the operation and are additive to (not a substitute for) the no-escalation
|
|
440
|
+
subset check above.
|
|
441
|
+
- **`excludesRoles` remediation**: assignment-time 409s are not enough when an admin later
|
|
442
|
+
*adds* an exclusion to a role that conflicts with roles users already hold. `RoleManager.update`
|
|
443
|
+
rejects the role change (400) until every affected user is remediated — the error payload lists
|
|
444
|
+
conflicting `(userId, roleA, roleB)` tuples. Admins resolve via `previewRoleChange` (shows
|
|
445
|
+
affected users) and explicit `unassign` calls; Terreno never silently leaves a violated
|
|
446
|
+
invariant in place.
|
|
447
|
+
- **Audit (required)**: every successful `RoleManager` create/update/remove/assign/unassign
|
|
448
|
+
**must** emit an `RbacAudit` record (built-in collection and/or pluggable sink — see 7.4).
|
|
449
|
+
Denied escalation attempts (actor tried to grant permissions they lack) are also logged at
|
|
450
|
+
`warn` with actor, target, and the rejected permission delta for abuse detection.
|
|
451
|
+
|
|
452
|
+
### 4.5 Document-level scopes (the dynamic layer)
|
|
453
|
+
|
|
454
|
+
RBAC answers "can PatientGuides update patients?" Scopes answer "**this** patient?" They are
|
|
455
|
+
functions in code (typed against the app's models), keyed by resource and action:
|
|
456
|
+
|
|
457
|
+
```typescript
|
|
458
|
+
// api/src/rbac/scopes.ts
|
|
459
|
+
export interface ScopeArgs<TDoc> {
|
|
460
|
+
user: User;
|
|
461
|
+
action: string;
|
|
462
|
+
doc?: TDoc; // absent during pre-flight (create/list) checks
|
|
463
|
+
context?: Record<string, unknown>; // req, socket, mcp session...
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
export interface ResourceScope<TDoc = unknown> {
|
|
467
|
+
// Object-level predicate; runs after the role check passes.
|
|
468
|
+
// Return true/false, or a PermissionSet to demand extra permissions
|
|
469
|
+
// (e.g. editing a doc in "final" status requires careplan:approve).
|
|
470
|
+
check?: (args: ScopeArgs<TDoc>) => boolean | PermissionSet | Promise<boolean | PermissionSet>;
|
|
471
|
+
// Mongo query fragment for list/subscription filtering — the same
|
|
472
|
+
// constraint as `check`, expressed as a query. null = no access.
|
|
473
|
+
filter?: (args: ScopeArgs<TDoc>) => Promise<Record<string, unknown> | null>;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
// Keyed "resource.action"; "resource.*" applies to all actions of the resource
|
|
477
|
+
export type ResourceScopes<S extends Statements> = {
|
|
478
|
+
[key: string]: ResourceScope;
|
|
479
|
+
};
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
**Coupling `check` and `filter` (no drift).** A per-document `check` and a list/subscription
|
|
483
|
+
`filter` that express *different* constraints silently corrupt authorization: a list could
|
|
484
|
+
return rows a per-doc read would reject, or vice versa. The design forbids that two ways:
|
|
485
|
+
|
|
486
|
+
1. **`defineScope` factory (preferred).** A scope is derived from a single predicate expressed
|
|
487
|
+
once as a Mongo query fragment. The factory produces the `filter` (the fragment) and the
|
|
488
|
+
`check` (the same fragment evaluated against the in-memory doc via a lightweight matcher),
|
|
489
|
+
so the two can never disagree:
|
|
490
|
+
|
|
491
|
+
```typescript
|
|
492
|
+
export interface ScopeDefinition<TDoc> {
|
|
493
|
+
// The one source of truth: the constraint as a query fragment (null = no access).
|
|
494
|
+
matches: (args: ScopeArgs<TDoc>) => Promise<Record<string, unknown> | null> | Record<string, unknown> | null;
|
|
495
|
+
// Optional elevation that skips the constraint for both check and filter.
|
|
496
|
+
adminBypass?: (args: ScopeArgs<TDoc>) => boolean | Promise<boolean>;
|
|
497
|
+
// How to read a field path off a loaded doc before comparison (defaults to
|
|
498
|
+
// dot-path lookup). Used when a fragment references populated refs — unwrap
|
|
499
|
+
// and normalize (e.g. string-coerce ObjectIds) here. The generated `check`
|
|
500
|
+
// evaluates the full `matches` fragment against the in-memory doc using the
|
|
501
|
+
// same semantics as Mongo (equality, `$in`, `$eq`, …) via a lightweight
|
|
502
|
+
// matcher — not only flat String equality on a single leaf.
|
|
503
|
+
fieldOf?: (doc: TDoc, path: string) => unknown;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
// Returns {check, filter} whose logic is guaranteed identical.
|
|
507
|
+
export const defineScope = <TDoc>(def: ScopeDefinition<TDoc>): ResourceScope<TDoc>;
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
2. **Parity tests for hand-written scopes.** When an app supplies a raw `{check, filter}` pair
|
|
511
|
+
(needed for constraints not expressible as a static fragment), Terreno ships a
|
|
512
|
+
`assertScopeParity(scope, {samples})` test helper and requires each such scope key to have a
|
|
513
|
+
conformance test that feeds sample docs/users through both `check` and the `filter`-derived
|
|
514
|
+
query and asserts they agree. `createAccess` warns (dev) when a scope defines both `check`
|
|
515
|
+
and `filter` by hand without a registered parity test.
|
|
516
|
+
|
|
517
|
+
Consuming-app example (the PatientGuide panel case) — **`defineScope` so check and filter
|
|
518
|
+
cannot drift**:
|
|
519
|
+
|
|
520
|
+
```typescript
|
|
521
|
+
// One helper encodes the constraint once; both list/subscription filter and per-doc
|
|
522
|
+
// check evaluate the same predicate (supervisor-of-pod, on-panel, or active PTO coverage).
|
|
523
|
+
const patientUpdateScope = defineScope<PatientDocument>({
|
|
524
|
+
matches: async ({user, doc}) => {
|
|
525
|
+
const staff = user as unknown as StaffDocument;
|
|
526
|
+
const editableIds = await editablePatientIds(staff); // shared: panel + PTO + supervised pods
|
|
527
|
+
if (!editableIds.length) {
|
|
528
|
+
return null;
|
|
529
|
+
}
|
|
530
|
+
// List/subscription: constrain to the same id set the per-doc check uses.
|
|
531
|
+
return {_id: {$in: editableIds}};
|
|
532
|
+
},
|
|
533
|
+
// Per-doc check: fragment value vs doc._id (String equality, ObjectId-safe).
|
|
534
|
+
fieldOf: (doc, path) => (path === "_id" ? String(doc._id) : undefined),
|
|
535
|
+
});
|
|
536
|
+
|
|
537
|
+
const access = createAccess({
|
|
538
|
+
statements,
|
|
539
|
+
scopes: {
|
|
540
|
+
// Any role with patient:read can read any patient — no read scope.
|
|
541
|
+
"patient.update": patientUpdateScope,
|
|
542
|
+
"careplan.approve": defineScope<CareplanDocument>({
|
|
543
|
+
matches: ({user}) => (user ? {assignedPsychiatristId: user.id} : null),
|
|
544
|
+
fieldOf: (doc, path) =>
|
|
545
|
+
path === "assignedPsychiatristId" ? String(doc.assignedPsychiatristId) : undefined,
|
|
546
|
+
}),
|
|
547
|
+
},
|
|
548
|
+
});
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
When a scope truly cannot be expressed as one Mongo fragment (rare), supply a hand-written
|
|
552
|
+
`{check, filter}` pair **and** register `assertScopeParity(scope, {samples})` covering every
|
|
553
|
+
branch (panel vs PTO vs cross-pod supervisor, etc.). `createAccess` warns in dev if both are
|
|
554
|
+
hand-written without a parity test — the anti-pattern is divergent predicates, not hand-writing
|
|
555
|
+
per se.
|
|
556
|
+
|
|
557
|
+
Semantics:
|
|
558
|
+
|
|
559
|
+
- Scopes are **restrictions only** — they can never grant an action the user's roles don't
|
|
560
|
+
include. Role check first, scope second. (`superadmin` does not bypass scopes by default;
|
|
561
|
+
a scope can opt in by checking permissions itself.)
|
|
562
|
+
- `check` without a `doc` (create pre-flight) is only called if defined for the action; scopes
|
|
563
|
+
that need a doc are skipped pre-flight and enforced post-load — same two-phase flow the
|
|
564
|
+
current `permissionMiddleware` already implements (405 pre-object, 403 post-object).
|
|
565
|
+
- `filter` is merged (`$and`) with `queryFields`/`defaultQueryParams` in list handlers and
|
|
566
|
+
websocket query subscriptions — replacing today's ad-hoc `queryFilter`/`OwnerQueryFilter`.
|
|
567
|
+
|
|
568
|
+
Terreno ships the common scope as a helper, replacing `Permissions.IsOwner` + `OwnerQueryFilter`.
|
|
569
|
+
Its per-document behavior must preserve today's `IsOwner` semantics exactly: **admins bypass
|
|
570
|
+
ownership** — `IsOwner` returns `true` for `user.admin === true` on any document. Note the current
|
|
571
|
+
`OwnerQueryFilter` does *not* share that bypass: it always narrows list queries to
|
|
572
|
+
`{ownerId: user.id}` and never checks `user.admin`, so today an admin's per-document access and
|
|
573
|
+
their list access disagree (admins can read/update any single owned-model doc but list endpoints
|
|
574
|
+
still scope them to their own rows). `OwnerScope` deliberately unifies the two behind one
|
|
575
|
+
`adminBypass` predicate (default: the legacy `user.admin` flag) applied to **both** the per-doc
|
|
576
|
+
`check` and the list/subscription `filter` (where the bypass yields `{}` — no narrowing), so
|
|
577
|
+
admins get consistent unrestricted read/update/delete/list access and migrated flows lose no
|
|
578
|
+
privilege:
|
|
579
|
+
|
|
580
|
+
```typescript
|
|
581
|
+
export interface OwnerScopeOptions {
|
|
582
|
+
field?: string; // owner id path, default "ownerId"
|
|
583
|
+
// Elevated actors that skip the ownership constraint entirely.
|
|
584
|
+
// Default preserves legacy IsOwner behavior (user.admin === true) and also
|
|
585
|
+
// treats holders of the superadmin role as unrestricted.
|
|
586
|
+
adminBypass?: (args: {user?: User}) => boolean | Promise<boolean>;
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
export const OwnerScope = (options: string | OwnerScopeOptions = {}): ResourceScope => {
|
|
590
|
+
const {field = "ownerId", adminBypass = defaultAdminBypass} =
|
|
591
|
+
typeof options === "string" ? {field: options} : options;
|
|
592
|
+
return defineScope<unknown>({
|
|
593
|
+
// One predicate drives both check and filter (see below); adminBypass short-circuits both.
|
|
594
|
+
adminBypass,
|
|
595
|
+
// Mongo filter matches the raw stored ownerId (an ObjectId) against the user id.
|
|
596
|
+
matches: ({user}) => (user ? {[field]: user.id} : null),
|
|
597
|
+
// The in-memory check must mirror IsOwner exactly: unwrap a *populated*
|
|
598
|
+
// ownerId (`{_id}`) and normalize to a string so ObjectId, string, and
|
|
599
|
+
// populated-document shapes all compare equal. defineScope's generated
|
|
600
|
+
// `check` applies String(...) equality between the fragment value and this
|
|
601
|
+
// return (see fieldOf note in 4.5), matching Mongo's ObjectId coercion — so
|
|
602
|
+
// a populated `ownerId` is never falsely denied.
|
|
603
|
+
fieldOf: (doc) => {
|
|
604
|
+
const owner = (doc as Record<string, unknown> | undefined)?.[field];
|
|
605
|
+
const ownerId = (owner as {_id?: unknown} | null | undefined)?._id ?? owner;
|
|
606
|
+
return ownerId == null ? undefined : String(ownerId);
|
|
607
|
+
},
|
|
608
|
+
});
|
|
609
|
+
};
|
|
610
|
+
|
|
611
|
+
// defaultAdminBypass = ({user}) => Boolean((user as any)?.admin) || hasRole(user, "superadmin")
|
|
612
|
+
```
|
|
613
|
+
|
|
614
|
+
Because `OwnerScope` bypasses for admins, the "superadmin does not bypass scopes by default"
|
|
615
|
+
rule in 4.5 is a rule about *generic* scopes; ownership-style scopes opt into elevation
|
|
616
|
+
explicitly through `adminBypass` so no privilege is silently lost during migration.
|
|
617
|
+
|
|
618
|
+
### 4.6 Field-level views (attribute permissions)
|
|
619
|
+
|
|
620
|
+
Named projections per resource, chosen by a function of user + doc, applied everywhere a
|
|
621
|
+
document is serialized (REST responses, realtime emits, MCP tool output) and validated on write:
|
|
622
|
+
|
|
623
|
+
```typescript
|
|
624
|
+
// api/src/rbac/fieldViews.ts
|
|
625
|
+
export interface FieldMask {
|
|
626
|
+
read: string[] | "*"; // dot paths; "*" = all
|
|
627
|
+
write: string[] | "*";
|
|
628
|
+
omit?: string[]; // always stripped even from "*" (hash, salt, ...)
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
export interface ResourceFieldViews<S extends Statements> {
|
|
632
|
+
[resource: string]: {
|
|
633
|
+
views: Record<string, FieldMask>;
|
|
634
|
+
// Pick a view for this user + (maybe) doc. Function escape hatch: return a
|
|
635
|
+
// FieldMask directly for fully dynamic cases.
|
|
636
|
+
//
|
|
637
|
+
// `doc` is OPTIONAL because it is absent at create time (no document exists
|
|
638
|
+
// yet). `phase` tells the selector which enforcement point is calling:
|
|
639
|
+
// - "read" : serializing a loaded doc (doc always present)
|
|
640
|
+
// - "write" : validating an update body against an existing doc (doc present)
|
|
641
|
+
// - "create": validating a create body — doc is undefined; the selector
|
|
642
|
+
// must decide from user + permissions alone.
|
|
643
|
+
// Selectors that branch on `doc` fields must handle `doc === undefined` for
|
|
644
|
+
// the create phase (see create-time resolution below).
|
|
645
|
+
select: (args: {
|
|
646
|
+
user?: User;
|
|
647
|
+
doc?: unknown; // undefined during create
|
|
648
|
+
permissions: PermissionSet; // the user's effective set, pre-resolved
|
|
649
|
+
phase: "read" | "write" | "create";
|
|
650
|
+
}) => string | FieldMask | Promise<string | FieldMask>;
|
|
651
|
+
};
|
|
652
|
+
}
|
|
653
|
+
```
|
|
654
|
+
|
|
655
|
+
**Create-time view resolution.** Because no document exists yet, create validation resolves the
|
|
656
|
+
write mask from the user's permissions only:
|
|
657
|
+
|
|
658
|
+
- The selector is called with `phase: "create"` and `doc: undefined`. It should return a view
|
|
659
|
+
keyed off `user`/`permissions` (the common case — the `patient` example below already does
|
|
660
|
+
this, since its branches read only `permissions`).
|
|
661
|
+
- If a selector *needs* a doc and returns nothing usable when `doc` is undefined, `createAccess`
|
|
662
|
+
requires an explicit `createView?: string | FieldMask` (or `createView: "deny"`) per resource
|
|
663
|
+
as the fallback; omitting it while a selector dereferences `doc` is a boot-time config error,
|
|
664
|
+
not a silent full-access default.
|
|
665
|
+
- The chosen mask's `write` paths are the create allow-list; body keys outside it are rejected
|
|
666
|
+
exactly as in update. `read`/`omit` from the same mask then shape the create response.
|
|
667
|
+
|
|
668
|
+
Consuming-app example (Patient vs Staff vs SuperUser views):
|
|
669
|
+
|
|
670
|
+
```typescript
|
|
671
|
+
fieldViews: {
|
|
672
|
+
patient: {
|
|
673
|
+
views: {
|
|
674
|
+
self: {read: ["name", "email", "appointments", "careTeam"], write: ["name", "email"]},
|
|
675
|
+
staff: {read: "*", write: ["name", "email", "podId", "notes"], omit: ["ssn"]},
|
|
676
|
+
full: {read: "*", write: "*", omit: []},
|
|
677
|
+
},
|
|
678
|
+
select: ({user, doc, permissions}) => {
|
|
679
|
+
if (permissions.patient?.includes("updateClinical")) {
|
|
680
|
+
return "full";
|
|
681
|
+
}
|
|
682
|
+
if (permissions.staff?.includes("read")) {
|
|
683
|
+
return "staff";
|
|
684
|
+
}
|
|
685
|
+
return "self";
|
|
686
|
+
},
|
|
687
|
+
},
|
|
688
|
+
},
|
|
689
|
+
```
|
|
690
|
+
|
|
691
|
+
Enforcement points:
|
|
692
|
+
|
|
693
|
+
- **Read**: `defaultResponseHandler` and `realtimeResponseHandler` call
|
|
694
|
+
`access.fieldMask()` and strip; MCP handlers do the same.
|
|
695
|
+
- **Write**: create/update handlers reject (400 with field-level errors) any body key outside
|
|
696
|
+
the mask's `write` — replacing the deprecated `TerrenoTransformer.transform`. Update resolves
|
|
697
|
+
the mask with the loaded doc (`phase: "write"`); create resolves it without a doc
|
|
698
|
+
(`phase: "create"`) per the create-time rule above.
|
|
699
|
+
- The OpenAPI spec documents the superset; masks are runtime behavior (same as today's
|
|
700
|
+
responseHandler stripping).
|
|
701
|
+
|
|
702
|
+
### 4.7 modelRouter integration
|
|
703
|
+
|
|
704
|
+
New `access` option; `permissions` arrays stay supported (deprecated) for migration:
|
|
705
|
+
|
|
706
|
+
```typescript
|
|
707
|
+
export interface ModelRouterAccessOptions {
|
|
708
|
+
// Must be a key of access.statements
|
|
709
|
+
resource: string;
|
|
710
|
+
// Optional REST-method → action override. Defaults:
|
|
711
|
+
// list → "list" if the resource declares it, else "read"; read → "read";
|
|
712
|
+
// create → "create"; update → "update"; delete → "delete".
|
|
713
|
+
actions?: Partial<Record<RESTMethod, string | null>>; // null disables the method
|
|
714
|
+
// Per-route additions layered on the registry-level config
|
|
715
|
+
scope?: ResourceScope;
|
|
716
|
+
// Per-method function escape hatch, same signature as today's
|
|
717
|
+
// PermissionMethod — ANDed after the RBAC check
|
|
718
|
+
also?: Partial<Record<RESTMethod, PermissionMethod<unknown>[]>>;
|
|
719
|
+
allowAnonymous?: boolean;
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
export interface ModelRouterOptions<T> {
|
|
723
|
+
/** @deprecated use `access` */
|
|
724
|
+
permissions?: RESTPermissions<T>;
|
|
725
|
+
access?: ModelRouterAccessOptions;
|
|
726
|
+
// queryFilter still works and is $and-merged with scope filters
|
|
727
|
+
// ...
|
|
728
|
+
}
|
|
729
|
+
```
|
|
730
|
+
|
|
731
|
+
Usage:
|
|
732
|
+
|
|
733
|
+
```typescript
|
|
734
|
+
export const patientRouter = modelRouter("/patients", Patient, {
|
|
735
|
+
access: {
|
|
736
|
+
resource: "patient",
|
|
737
|
+
actions: {delete: null}, // disabled, like today's []
|
|
738
|
+
},
|
|
739
|
+
queryFields: ["_id", "podId", "status"],
|
|
740
|
+
sort: "-created",
|
|
741
|
+
});
|
|
742
|
+
```
|
|
743
|
+
|
|
744
|
+
Route behavior (unchanged status semantics): missing role permission pre-object → 405 with the
|
|
745
|
+
verb omitted from OpenAPI only when statically disabled (`actions.delete = null`); scope denial
|
|
746
|
+
post-object → 403. `instanceActions`/`collectionActions` gain the same
|
|
747
|
+
`access?: {resource, action}` option alongside their `permissions` arrays.
|
|
748
|
+
|
|
749
|
+
For apps not ready to restructure a router, the adapter keeps the old shape working:
|
|
750
|
+
|
|
751
|
+
```typescript
|
|
752
|
+
permissions: {
|
|
753
|
+
create: [IsPermitted(access, {patient: ["create"]})],
|
|
754
|
+
list: [IsPermitted(access, {patient: ["read"]})],
|
|
755
|
+
read: [IsPermitted(access, {patient: ["read"]})],
|
|
756
|
+
update: [IsPermitted(access, {patient: ["update"]}), SomeLegacyCheck],
|
|
757
|
+
delete: [],
|
|
758
|
+
},
|
|
759
|
+
```
|
|
760
|
+
|
|
761
|
+
`IsPermitted` returns a standard `PermissionMethod` — it calls `access.can()` with the doc when
|
|
762
|
+
present, so it slots into existing arrays and AND-composes with legacy checks.
|
|
763
|
+
|
|
764
|
+
### 4.8 Custom routes, websockets, MCP
|
|
765
|
+
|
|
766
|
+
**Custom routes** — one middleware replaces the ad-hoc `adminGuard`s:
|
|
767
|
+
|
|
768
|
+
```typescript
|
|
769
|
+
router.post("/patients/:id/discharge", [
|
|
770
|
+
authenticateMiddleware(),
|
|
771
|
+
access.middleware({patient: ["update"], careplan: ["approve"]}, {
|
|
772
|
+
getDoc: (req) => Patient.findOneOrThrow({_id: req.params.id}), // enables scope checks
|
|
773
|
+
}),
|
|
774
|
+
createOpenApiBuilder(options)./* ... */.build(),
|
|
775
|
+
], asyncHandler(async (req, res) => { /* ... */ }));
|
|
776
|
+
```
|
|
777
|
+
|
|
778
|
+
**Websockets** — `RealtimeApp` swaps its internals to the same object:
|
|
779
|
+
|
|
780
|
+
- `subscribe:model` / `subscribe:query` → `access.can({permissions: {[resource]: [listAction]}})`
|
|
781
|
+
plus `access.queryFilter()` merged into the subscription query.
|
|
782
|
+
- Per-event emission (`canReadDocument`) → `access.can({..., doc})`, then
|
|
783
|
+
`access.fieldMask()` before serializing — so a patient and a staff member in the same room
|
|
784
|
+
receive different payloads.
|
|
785
|
+
- **Identity**: socket users are currently rebuilt from JWT claims only. Because roles are
|
|
786
|
+
DB-editable, the socket path resolves roles through `access.getPermissions()` (cached,
|
|
787
|
+
invalidated on role edit) rather than trusting `decodedToken.admin`. `generateJWTPayload`
|
|
788
|
+
may still embed `roles` as a hint, but the DB is authoritative.
|
|
789
|
+
|
|
790
|
+
**MCP** — the planned modelRouter MCP handlers (docs/tasks/model-router-mcp.md) already route
|
|
791
|
+
through `checkPermissions()`; they call `access.can()`/`fieldMask()` instead, with
|
|
792
|
+
`context: {transport: "mcp"}` so scopes can distinguish transports if needed.
|
|
793
|
+
|
|
794
|
+
### 4.9 RBAC HTTP surface
|
|
795
|
+
|
|
796
|
+
Mounted by registering the router (a `TerrenoPlugin`), colocated with the admin basePath:
|
|
797
|
+
|
|
798
|
+
```typescript
|
|
799
|
+
new TerrenoApp({userModel: User, accessControl: access})
|
|
800
|
+
.register(rbacRouter({access, userModel: User}))
|
|
801
|
+
.register(patientRouter)
|
|
802
|
+
.start();
|
|
803
|
+
```
|
|
804
|
+
|
|
805
|
+
| Method | Path | Permission | Purpose |
|
|
806
|
+
|---|---|---|---|
|
|
807
|
+
| GET | `/rbac/statements` | `rbac:read` | Full vocabulary (+ optional `statementDescriptions`) for the admin UI |
|
|
808
|
+
| GET | `/rbac/roles` | `rbac:read` | List roles with permissions + user counts |
|
|
809
|
+
| POST | `/rbac/roles` | `rbac:manageRoles` | Create role |
|
|
810
|
+
| PATCH | `/rbac/roles/:name` | `rbac:manageRoles` | Edit role (validates vocabulary, escalation, locks) |
|
|
811
|
+
| DELETE | `/rbac/roles/:name` | `rbac:manageRoles` | Delete (blocked for locked roles / roles in use) |
|
|
812
|
+
| POST | `/rbac/roles/:name/preview` | `rbac:manageRoles` | `RoleDiff`: permissions gained/lost + affected user count |
|
|
813
|
+
| GET | `/rbac/users/:id/permissions` | `rbac:read` | Effective `PermissionSet` + which role/source grants each |
|
|
814
|
+
| PUT | `/rbac/users/:id/roles` | `rbac:assignRoles` | Replace assignments (409 on exclusion conflicts) |
|
|
815
|
+
| POST | `/rbac/users/:id/roles/preview` | `rbac:assignRoles` | `UserPermissionDiff` for the confirmation modal |
|
|
816
|
+
|
|
817
|
+
`GET /auth/me` additionally returns `roles: string[]` and `permissions: PermissionSet` so
|
|
818
|
+
clients can gate UI without extra round-trips (server remains authoritative).
|
|
819
|
+
|
|
820
|
+
### 4.10 External permission sources (Healthie)
|
|
821
|
+
|
|
822
|
+
Healthie (and future integrations) contribute grants without owning the model:
|
|
823
|
+
|
|
824
|
+
```typescript
|
|
825
|
+
// api/src/rbac/resolve.ts
|
|
826
|
+
export interface PermissionSourceGrants {
|
|
827
|
+
roles?: string[]; // must exist in RbacRole
|
|
828
|
+
permissions?: PermissionSet; // direct grants, validated against statements
|
|
829
|
+
deny?: PermissionSet; // hard denials — win over every grant
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
export type StaleOnFailurePolicy =
|
|
833
|
+
| "deny" // default — drop this source's grants on refresh failure (fail closed)
|
|
834
|
+
| "use-stale" // reuse last successful grants (never for elevation-only sources)
|
|
835
|
+
| "use-stale-bounded"; // reuse stale grants only if younger than staleMaxAgeMs
|
|
836
|
+
|
|
837
|
+
export interface PermissionSource {
|
|
838
|
+
name: string;
|
|
839
|
+
ttlMs?: number; // per-source cache (default: access cacheTtlMs)
|
|
840
|
+
// What to do when getGrants() fails after a prior successful fetch.
|
|
841
|
+
// Default "deny": external grants are omitted; local DB roles still apply.
|
|
842
|
+
// Sources that can elevate beyond local roles must use "deny" or
|
|
843
|
+
// "use-stale-bounded" with a short staleMaxAgeMs — never unbounded stale reuse.
|
|
844
|
+
staleOnFailure?: StaleOnFailurePolicy;
|
|
845
|
+
staleMaxAgeMs?: number; // required when staleOnFailure === "use-stale-bounded"
|
|
846
|
+
getGrants(args: {user: User}): Promise<PermissionSourceGrants | null>;
|
|
847
|
+
}
|
|
848
|
+
```
|
|
849
|
+
|
|
850
|
+
Consuming-app sketch:
|
|
851
|
+
|
|
852
|
+
```typescript
|
|
853
|
+
const healthieSource: PermissionSource = {
|
|
854
|
+
name: "healthie",
|
|
855
|
+
ttlMs: 5 * 60_000,
|
|
856
|
+
getGrants: async ({user}) => {
|
|
857
|
+
const staff = await Staff.findOneOrNone({userId: user.id});
|
|
858
|
+
if (!staff?.healthieId) {
|
|
859
|
+
return null;
|
|
860
|
+
}
|
|
861
|
+
const healthieRole = await healthieClient.getProviderRole(staff.healthieId);
|
|
862
|
+
return {roles: [healthieRoleMap[healthieRole] ?? "member"]};
|
|
863
|
+
},
|
|
864
|
+
};
|
|
865
|
+
```
|
|
866
|
+
|
|
867
|
+
Resolution order inside `getPermissions()` / `can()`:
|
|
868
|
+
`union(user.roles, source roles, source permissions)` minus `source denies`.
|
|
869
|
+
|
|
870
|
+
**Source refresh failures (fail closed by default).** When `getGrants()` throws or times out,
|
|
871
|
+
behavior is per-source `staleOnFailure` (default `"deny"`):
|
|
872
|
+
|
|
873
|
+
| Policy | Behavior |
|
|
874
|
+
|---|---|
|
|
875
|
+
| `"deny"` (default) | Omit this source's grants for the request. Local `user.roles` and other sources still apply. Revoked upstream access cannot linger because a dependency is down. |
|
|
876
|
+
| `"use-stale-bounded"` | Reuse the last successful grants only if younger than `staleMaxAgeMs` (hard cap). Suitable for read-only hints, not elevation. |
|
|
877
|
+
| `"use-stale"` | Reuse last successful grants until TTL expiry. **Not permitted** for sources that can grant roles/permissions beyond what local roles already provide — elevation paths must fail closed. |
|
|
878
|
+
|
|
879
|
+
`PermissionSource.deny` already fails closed; grant caching matches that posture for elevation.
|
|
880
|
+
Logged at `warn` with source name and policy applied.
|
|
881
|
+
|
|
882
|
+
### 4.11 Admin UI (first-class)
|
|
883
|
+
|
|
884
|
+
New screens in `admin-frontend` / `admin-spa`, driven entirely by the 4.9 endpoints:
|
|
885
|
+
|
|
886
|
+
- **Roles list** (`/admin/roles`): every role, its permission matrix (resources × actions
|
|
887
|
+
grid from `/rbac/statements`), user count, locked/sealed badges.
|
|
888
|
+
- **Role editor**: checkbox matrix; on save, shows the `/preview` `RoleDiff` in a confirmation
|
|
889
|
+
modal — "PatientGuide will **gain** `careplan:approve` and **lose** `user:create`; affects
|
|
890
|
+
212 users."
|
|
891
|
+
- **User role assignment** (embedded in the admin user detail): multi-select of roles with
|
|
892
|
+
exclusion conflicts surfaced inline; confirmation modal shows `UserPermissionDiff` (total
|
|
893
|
+
permissions gained/lost after union with their remaining roles).
|
|
894
|
+
- **Effective permissions inspector**: per user, each permission annotated with its source
|
|
895
|
+
("via PatientGuide", "via healthie").
|
|
896
|
+
|
|
897
|
+
The admin panel itself migrates from `IsAdmin` to `admin:access` (+ per-model resources), which
|
|
898
|
+
finally makes graded admin access possible (the `auditor` role gets `admin:access` + read-only
|
|
899
|
+
model permissions).
|
|
900
|
+
|
|
901
|
+
### 4.12 Client-side helpers
|
|
902
|
+
|
|
903
|
+
- `@terreno/rtk`: `useSelectPermissions()` / `useCan({patient: ["update"]})` selectors reading
|
|
904
|
+
the `permissions` from `/auth/me`. When the Better Auth provider is active, static roles also
|
|
905
|
+
work with `authClient.admin.checkRolePermission` via the bridge.
|
|
906
|
+
- `@terreno/ui`: nothing required; apps gate with `useCan` + existing components.
|
|
907
|
+
|
|
908
|
+
---
|
|
909
|
+
|
|
910
|
+
## 5. Migration path
|
|
911
|
+
|
|
912
|
+
1. **Ship the module inert.** `createAccess` etc. exist; nothing changes unless an app passes
|
|
913
|
+
`access` options. Legacy `Permissions.*` remain exported.
|
|
914
|
+
2. **Legacy shims.** `Permissions.IsAdmin` becomes `IsPermitted(access, {admin: ["access"]})`
|
|
915
|
+
semantics when an access registry is configured: seed maps `user.admin === true` →
|
|
916
|
+
`superadmin` role (a one-time backfill script Terreno provides:
|
|
917
|
+
`bunx terreno rbac:backfill-admins --role-map ./rbac-role-map.json`). The map file is
|
|
918
|
+
required when legacy role names do not match Terreno defaults (e.g. Flourish StaffRole →
|
|
919
|
+
RBAC role name); the script dry-runs by default and supports per-tenant overrides.
|
|
920
|
+
`IsOwner`/`OwnerQueryFilter` → `OwnerScope`.
|
|
921
|
+
3. **Router-by-router adoption** in consuming apps via `IsPermitted` in existing arrays, then
|
|
922
|
+
the full `access:` option. The `also:` escape hatch and function-based scopes mean any
|
|
923
|
+
existing bespoke check can be ported verbatim as a function first, refined later.
|
|
924
|
+
4. **Flip the admin packages** to `admin:access`, ship the roles UI.
|
|
925
|
+
5. **Realtime + MCP** switch internally to `access.can()` (no consumer API change).
|
|
926
|
+
6. Deprecate `RESTPermissions` arrays in a future major.
|
|
927
|
+
|
|
928
|
+
## 6. Staff roles — recommendation (open for discussion)
|
|
929
|
+
|
|
930
|
+
The question posed: single staff role (PG/FG/Therapist/Psychiatrist) vs. rules that disallow
|
|
931
|
+
combinations.
|
|
932
|
+
|
|
933
|
+
**Recommendation: keep StaffRole as consuming-app domain data, and use `excludesRoles` for the
|
|
934
|
+
constraint** rather than forcing single-role:
|
|
935
|
+
|
|
936
|
+
- `excludesRoles` (4.3) gives "cannot be both PG and FG" declaratively, enforced at assignment
|
|
937
|
+
time with a clear 409, and is visible in the admin UI. It generalizes (Supervisor+Auditor
|
|
938
|
+
could also be excluded) without a schema change.
|
|
939
|
+
- A hard single-role rule couples Terreno to one org design and dies the first time someone is
|
|
940
|
+
legitimately dual-hatted (Therapist who supervises). Exclusion rules express the actual
|
|
941
|
+
invariant ("these two conflict") instead of a blanket cardinality.
|
|
942
|
+
- StaffRole-as-domain-concept (what appears on schedules, care team displays, Healthie sync)
|
|
943
|
+
should *reference* an RBAC role for its permissions but remain a separate model in the
|
|
944
|
+
consuming app — permissions are what the RBAC system owns; job titles are not. The Healthie
|
|
945
|
+
source (4.10) maps Healthie provider types onto RBAC roles the same way.
|
|
946
|
+
- The pod-scoped supervisor problem ("Onyx PG Supervisor shouldn't touch Lilac PGs") is
|
|
947
|
+
deliberately **not** a role: it's a scope (4.5) keyed on the supervision relationship, so one
|
|
948
|
+
`supervisor` role works across pods without a role-per-pod explosion.
|
|
949
|
+
|
|
950
|
+
New scoped roles like "Human Resources" (`staff:create`, `user:create`, no `patient:*`) then
|
|
951
|
+
fall out of the admin UI with zero code — the exact win the RBAC move is for.
|
|
952
|
+
|
|
953
|
+
## 7. Resolved decisions (formerly open questions)
|
|
954
|
+
|
|
955
|
+
1. **Top role name**: **`superadmin`** (generic machine name; apps customize `displayName`).
|
|
956
|
+
2. **Should scopes ever grant?** **No — restrictions only.** Grant cases use extra actions
|
|
957
|
+
(`readClinical`) instead.
|
|
958
|
+
3. **Per-permission scope bypass for superadmin**: **Default off**; opt in per scope via
|
|
959
|
+
`adminBypass` (as `OwnerScope` does).
|
|
960
|
+
4. **Role assignment audit trail**: **Separate `RbacAudit` collection** from consuming-app
|
|
961
|
+
audit logs (e.g. Flourish `AuditLogEvent`), but **every** successful role/assignment write
|
|
962
|
+
must emit an audit record — built-in and/or pluggable sink; optional/minimal logging is not
|
|
963
|
+
sufficient for HIPAA consumers. Fields: actor, action, target role/user, permission delta,
|
|
964
|
+
timestamp. Denied escalation attempts are logged too (see 4.4).
|
|
965
|
+
5. **JWT `roles` claim**: **Hint only** (DB authoritative, cached). Multi-replica cache
|
|
966
|
+
invalidation is part of the IP so `/auth/me` and websockets do not lag role edits across
|
|
967
|
+
Cloud Run instances (see `invalidateCache` in 4.2).
|
|
968
|
+
6. **Deny semantics**: **Only `PermissionSource.deny`** — roles do not carry negative
|
|
969
|
+
permissions (union semantics stay simple; matches Better Auth).
|
|
970
|
+
|
|
971
|
+
## 8. Phasing sketch (full task breakdown in the IP)
|
|
972
|
+
|
|
973
|
+
1. **Core**: statements/merge, `createAccess`, resolve+cache, `RbacRole` model + seeds,
|
|
974
|
+
`rbacUserPlugin`, `IsPermitted`, `requireAccess` middleware. Tests.
|
|
975
|
+
2. **modelRouter**: `access` option, scope-aware permission middleware, filter merging,
|
|
976
|
+
field-mask response handling, actions support.
|
|
977
|
+
3. **HTTP surface**: `rbacRouter`, previews, `/auth/me` extension, backfill script.
|
|
978
|
+
4. **Admin**: roles screens, diffs, user assignment, `admin:access` migration.
|
|
979
|
+
5. **Realtime + MCP**: swap internals to `access.can()`/`fieldMask()`.
|
|
980
|
+
6. **Sources + client**: `PermissionSource`, rtk selectors, Better Auth bridge, docs +
|
|
981
|
+
example-backend/-frontend demonstration (example app gets a `manager` role and a scoped
|
|
982
|
+
todo example).
|