@sylphx/contract 0.2.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/CHANGELOG.md +44 -0
- package/LICENSE +21 -0
- package/README.md +164 -0
- package/dist/endpoint.d.ts +65 -0
- package/dist/endpoint.d.ts.map +1 -0
- package/dist/endpoint.js +22 -0
- package/dist/endpoints/admin-ai-playground.d.ts +93 -0
- package/dist/endpoints/admin-ai-playground.d.ts.map +1 -0
- package/dist/endpoints/admin-ai-playground.js +37 -0
- package/dist/endpoints/admin-anomalies.d.ts +108 -0
- package/dist/endpoints/admin-anomalies.d.ts.map +1 -0
- package/dist/endpoints/admin-anomalies.js +72 -0
- package/dist/endpoints/admin-apm.d.ts +102 -0
- package/dist/endpoints/admin-apm.d.ts.map +1 -0
- package/dist/endpoints/admin-apm.js +70 -0
- package/dist/endpoints/admin-audit.d.ts +714 -0
- package/dist/endpoints/admin-audit.d.ts.map +1 -0
- package/dist/endpoints/admin-audit.js +494 -0
- package/dist/endpoints/admin-billing.d.ts +82 -0
- package/dist/endpoints/admin-billing.d.ts.map +1 -0
- package/dist/endpoints/admin-billing.js +190 -0
- package/dist/endpoints/admin-bootstrap.d.ts +16 -0
- package/dist/endpoints/admin-bootstrap.d.ts.map +1 -0
- package/dist/endpoints/admin-bootstrap.js +28 -0
- package/dist/endpoints/admin-broadcasts.d.ts +105 -0
- package/dist/endpoints/admin-broadcasts.d.ts.map +1 -0
- package/dist/endpoints/admin-broadcasts.js +60 -0
- package/dist/endpoints/admin-builds.d.ts +33 -0
- package/dist/endpoints/admin-builds.d.ts.map +1 -0
- package/dist/endpoints/admin-builds.js +36 -0
- package/dist/endpoints/admin-config.d.ts +180 -0
- package/dist/endpoints/admin-config.d.ts.map +1 -0
- package/dist/endpoints/admin-config.js +108 -0
- package/dist/endpoints/admin-consent.d.ts +123 -0
- package/dist/endpoints/admin-consent.d.ts.map +1 -0
- package/dist/endpoints/admin-consent.js +126 -0
- package/dist/endpoints/admin-env-services.d.ts +28 -0
- package/dist/endpoints/admin-env-services.d.ts.map +1 -0
- package/dist/endpoints/admin-env-services.js +35 -0
- package/dist/endpoints/admin-impersonation.d.ts +105 -0
- package/dist/endpoints/admin-impersonation.d.ts.map +1 -0
- package/dist/endpoints/admin-impersonation.js +88 -0
- package/dist/endpoints/admin-invitations.d.ts +73 -0
- package/dist/endpoints/admin-invitations.d.ts.map +1 -0
- package/dist/endpoints/admin-invitations.js +55 -0
- package/dist/endpoints/admin-jwt-keys.d.ts +75 -0
- package/dist/endpoints/admin-jwt-keys.d.ts.map +1 -0
- package/dist/endpoints/admin-jwt-keys.js +63 -0
- package/dist/endpoints/admin-logs.d.ts +109 -0
- package/dist/endpoints/admin-logs.d.ts.map +1 -0
- package/dist/endpoints/admin-logs.js +78 -0
- package/dist/endpoints/admin-plans.d.ts +63 -0
- package/dist/endpoints/admin-plans.d.ts.map +1 -0
- package/dist/endpoints/admin-plans.js +47 -0
- package/dist/endpoints/admin-project-users.d.ts +148 -0
- package/dist/endpoints/admin-project-users.d.ts.map +1 -0
- package/dist/endpoints/admin-project-users.js +89 -0
- package/dist/endpoints/admin-projects.d.ts +124 -0
- package/dist/endpoints/admin-projects.d.ts.map +1 -0
- package/dist/endpoints/admin-projects.js +74 -0
- package/dist/endpoints/admin-quotas.d.ts +98 -0
- package/dist/endpoints/admin-quotas.d.ts.map +1 -0
- package/dist/endpoints/admin-quotas.js +67 -0
- package/dist/endpoints/admin-rate-limits.d.ts +50 -0
- package/dist/endpoints/admin-rate-limits.d.ts.map +1 -0
- package/dist/endpoints/admin-rate-limits.js +53 -0
- package/dist/endpoints/admin-reconcile.d.ts +28 -0
- package/dist/endpoints/admin-reconcile.d.ts.map +1 -0
- package/dist/endpoints/admin-reconcile.js +33 -0
- package/dist/endpoints/admin-resources.d.ts +51 -0
- package/dist/endpoints/admin-resources.d.ts.map +1 -0
- package/dist/endpoints/admin-resources.js +53 -0
- package/dist/endpoints/admin-secrets.d.ts +41 -0
- package/dist/endpoints/admin-secrets.d.ts.map +1 -0
- package/dist/endpoints/admin-secrets.js +33 -0
- package/dist/endpoints/admin-services.d.ts +29 -0
- package/dist/endpoints/admin-services.d.ts.map +1 -0
- package/dist/endpoints/admin-services.js +35 -0
- package/dist/endpoints/admin-tasks.d.ts +186 -0
- package/dist/endpoints/admin-tasks.d.ts.map +1 -0
- package/dist/endpoints/admin-tasks.js +67 -0
- package/dist/endpoints/admin-tenants.d.ts +26 -0
- package/dist/endpoints/admin-tenants.d.ts.map +1 -0
- package/dist/endpoints/admin-tenants.js +30 -0
- package/dist/endpoints/admin-traces.d.ts +124 -0
- package/dist/endpoints/admin-traces.d.ts.map +1 -0
- package/dist/endpoints/admin-traces.js +59 -0
- package/dist/endpoints/admin-users.d.ts +106 -0
- package/dist/endpoints/admin-users.d.ts.map +1 -0
- package/dist/endpoints/admin-users.js +83 -0
- package/dist/endpoints/admin-webhook-signature-versions.d.ts +59 -0
- package/dist/endpoints/admin-webhook-signature-versions.d.ts.map +1 -0
- package/dist/endpoints/admin-webhook-signature-versions.js +57 -0
- package/dist/endpoints/ai-admin.d.ts +30 -0
- package/dist/endpoints/ai-admin.d.ts.map +1 -0
- package/dist/endpoints/ai-admin.js +59 -0
- package/dist/endpoints/analytics-admin.d.ts +279 -0
- package/dist/endpoints/analytics-admin.d.ts.map +1 -0
- package/dist/endpoints/analytics-admin.js +308 -0
- package/dist/endpoints/analytics.d.ts +58 -0
- package/dist/endpoints/analytics.d.ts.map +1 -0
- package/dist/endpoints/analytics.js +43 -0
- package/dist/endpoints/audit-chain.d.ts +49 -0
- package/dist/endpoints/audit-chain.d.ts.map +1 -0
- package/dist/endpoints/audit-chain.js +29 -0
- package/dist/endpoints/audit.d.ts +50 -0
- package/dist/endpoints/audit.d.ts.map +1 -0
- package/dist/endpoints/audit.js +30 -0
- package/dist/endpoints/auth-admin.d.ts +65 -0
- package/dist/endpoints/auth-admin.d.ts.map +1 -0
- package/dist/endpoints/auth-admin.js +55 -0
- package/dist/endpoints/auth.d.ts +157 -0
- package/dist/endpoints/auth.d.ts.map +1 -0
- package/dist/endpoints/auth.js +214 -0
- package/dist/endpoints/backups.d.ts +51 -0
- package/dist/endpoints/backups.d.ts.map +1 -0
- package/dist/endpoints/backups.js +47 -0
- package/dist/endpoints/billing-console.d.ts +294 -0
- package/dist/endpoints/billing-console.d.ts.map +1 -0
- package/dist/endpoints/billing-console.js +167 -0
- package/dist/endpoints/billing-settings.d.ts +107 -0
- package/dist/endpoints/billing-settings.d.ts.map +1 -0
- package/dist/endpoints/billing-settings.js +117 -0
- package/dist/endpoints/branch-databases.d.ts +75 -0
- package/dist/endpoints/branch-databases.d.ts.map +1 -0
- package/dist/endpoints/branch-databases.js +61 -0
- package/dist/endpoints/challenge.d.ts +62 -0
- package/dist/endpoints/challenge.d.ts.map +1 -0
- package/dist/endpoints/challenge.js +52 -0
- package/dist/endpoints/ci-settings.d.ts +89 -0
- package/dist/endpoints/ci-settings.d.ts.map +1 -0
- package/dist/endpoints/ci-settings.js +78 -0
- package/dist/endpoints/consent-admin.d.ts +134 -0
- package/dist/endpoints/consent-admin.d.ts.map +1 -0
- package/dist/endpoints/consent-admin.js +83 -0
- package/dist/endpoints/databases.d.ts +251 -0
- package/dist/endpoints/databases.d.ts.map +1 -0
- package/dist/endpoints/databases.js +150 -0
- package/dist/endpoints/deployments.d.ts +280 -0
- package/dist/endpoints/deployments.d.ts.map +1 -0
- package/dist/endpoints/deployments.js +205 -0
- package/dist/endpoints/domains.d.ts +356 -0
- package/dist/endpoints/domains.d.ts.map +1 -0
- package/dist/endpoints/domains.js +149 -0
- package/dist/endpoints/edge-deployments.d.ts +92 -0
- package/dist/endpoints/edge-deployments.d.ts.map +1 -0
- package/dist/endpoints/edge-deployments.js +58 -0
- package/dist/endpoints/email-admin.d.ts +415 -0
- package/dist/endpoints/email-admin.d.ts.map +1 -0
- package/dist/endpoints/email-admin.js +253 -0
- package/dist/endpoints/email.d.ts +37 -0
- package/dist/endpoints/email.d.ts.map +1 -0
- package/dist/endpoints/email.js +42 -0
- package/dist/endpoints/engagement-admin.d.ts +98 -0
- package/dist/endpoints/engagement-admin.d.ts.map +1 -0
- package/dist/endpoints/engagement-admin.js +64 -0
- package/dist/endpoints/env-vars.d.ts +66 -0
- package/dist/endpoints/env-vars.d.ts.map +1 -0
- package/dist/endpoints/env-vars.js +47 -0
- package/dist/endpoints/environments.d.ts +456 -0
- package/dist/endpoints/environments.d.ts.map +1 -0
- package/dist/endpoints/environments.js +237 -0
- package/dist/endpoints/experiments.d.ts +500 -0
- package/dist/endpoints/experiments.d.ts.map +1 -0
- package/dist/endpoints/experiments.js +93 -0
- package/dist/endpoints/flags-admin.d.ts +74 -0
- package/dist/endpoints/flags-admin.d.ts.map +1 -0
- package/dist/endpoints/flags-admin.js +84 -0
- package/dist/endpoints/flags.d.ts +23 -0
- package/dist/endpoints/flags.d.ts.map +1 -0
- package/dist/endpoints/flags.js +17 -0
- package/dist/endpoints/github.d.ts +30 -0
- package/dist/endpoints/github.d.ts.map +1 -0
- package/dist/endpoints/github.js +37 -0
- package/dist/endpoints/image-opt.d.ts +43 -0
- package/dist/endpoints/image-opt.d.ts.map +1 -0
- package/dist/endpoints/image-opt.js +44 -0
- package/dist/endpoints/kv-admin.d.ts +58 -0
- package/dist/endpoints/kv-admin.d.ts.map +1 -0
- package/dist/endpoints/kv-admin.js +69 -0
- package/dist/endpoints/kv.d.ts +63 -0
- package/dist/endpoints/kv.d.ts.map +1 -0
- package/dist/endpoints/kv.js +82 -0
- package/dist/endpoints/monitoring-admin.d.ts +204 -0
- package/dist/endpoints/monitoring-admin.d.ts.map +1 -0
- package/dist/endpoints/monitoring-admin.js +119 -0
- package/dist/endpoints/monitoring.d.ts +63 -0
- package/dist/endpoints/monitoring.d.ts.map +1 -0
- package/dist/endpoints/monitoring.js +27 -0
- package/dist/endpoints/newsletter.d.ts +366 -0
- package/dist/endpoints/newsletter.d.ts.map +1 -0
- package/dist/endpoints/newsletter.js +232 -0
- package/dist/endpoints/notifications-admin.d.ts +268 -0
- package/dist/endpoints/notifications-admin.d.ts.map +1 -0
- package/dist/endpoints/notifications-admin.js +172 -0
- package/dist/endpoints/notifications.d.ts +225 -0
- package/dist/endpoints/notifications.d.ts.map +1 -0
- package/dist/endpoints/notifications.js +150 -0
- package/dist/endpoints/oidc.d.ts +67 -0
- package/dist/endpoints/oidc.d.ts.map +1 -0
- package/dist/endpoints/oidc.js +49 -0
- package/dist/endpoints/organizations.d.ts +702 -0
- package/dist/endpoints/organizations.d.ts.map +1 -0
- package/dist/endpoints/organizations.js +460 -0
- package/dist/endpoints/plans.d.ts +136 -0
- package/dist/endpoints/plans.d.ts.map +1 -0
- package/dist/endpoints/plans.js +83 -0
- package/dist/endpoints/privacy.d.ts +131 -0
- package/dist/endpoints/privacy.d.ts.map +1 -0
- package/dist/endpoints/privacy.js +98 -0
- package/dist/endpoints/project-manifest.d.ts +1044 -0
- package/dist/endpoints/project-manifest.d.ts.map +1 -0
- package/dist/endpoints/project-manifest.js +59 -0
- package/dist/endpoints/projects.d.ts +187 -0
- package/dist/endpoints/projects.d.ts.map +1 -0
- package/dist/endpoints/projects.js +58 -0
- package/dist/endpoints/rate-limits.d.ts +83 -0
- package/dist/endpoints/rate-limits.d.ts.map +1 -0
- package/dist/endpoints/rate-limits.js +54 -0
- package/dist/endpoints/realtime-admin.d.ts +42 -0
- package/dist/endpoints/realtime-admin.d.ts.map +1 -0
- package/dist/endpoints/realtime-admin.js +50 -0
- package/dist/endpoints/realtime.d.ts +35 -0
- package/dist/endpoints/realtime.d.ts.map +1 -0
- package/dist/endpoints/realtime.js +39 -0
- package/dist/endpoints/referrals-admin.d.ts +118 -0
- package/dist/endpoints/referrals-admin.d.ts.map +1 -0
- package/dist/endpoints/referrals-admin.js +59 -0
- package/dist/endpoints/refresh.d.ts +19 -0
- package/dist/endpoints/refresh.d.ts.map +1 -0
- package/dist/endpoints/refresh.js +25 -0
- package/dist/endpoints/regions.d.ts +41 -0
- package/dist/endpoints/regions.d.ts.map +1 -0
- package/dist/endpoints/regions.js +43 -0
- package/dist/endpoints/runners.d.ts +55 -0
- package/dist/endpoints/runners.d.ts.map +1 -0
- package/dist/endpoints/runners.js +45 -0
- package/dist/endpoints/saml.d.ts +147 -0
- package/dist/endpoints/saml.d.ts.map +1 -0
- package/dist/endpoints/saml.js +106 -0
- package/dist/endpoints/search.d.ts +62 -0
- package/dist/endpoints/search.d.ts.map +1 -0
- package/dist/endpoints/search.js +40 -0
- package/dist/endpoints/secrets.d.ts +95 -0
- package/dist/endpoints/secrets.d.ts.map +1 -0
- package/dist/endpoints/secrets.js +81 -0
- package/dist/endpoints/security.d.ts +231 -0
- package/dist/endpoints/security.d.ts.map +1 -0
- package/dist/endpoints/security.js +291 -0
- package/dist/endpoints/service-tokens.d.ts +392 -0
- package/dist/endpoints/service-tokens.d.ts.map +1 -0
- package/dist/endpoints/service-tokens.js +125 -0
- package/dist/endpoints/session-replay.d.ts +142 -0
- package/dist/endpoints/session-replay.d.ts.map +1 -0
- package/dist/endpoints/session-replay.js +53 -0
- package/dist/endpoints/storage-admin.d.ts +96 -0
- package/dist/endpoints/storage-admin.d.ts.map +1 -0
- package/dist/endpoints/storage-admin.js +113 -0
- package/dist/endpoints/storage.d.ts +167 -0
- package/dist/endpoints/storage.d.ts.map +1 -0
- package/dist/endpoints/storage.js +117 -0
- package/dist/endpoints/tasks.d.ts +141 -0
- package/dist/endpoints/tasks.d.ts.map +1 -0
- package/dist/endpoints/tasks.js +97 -0
- package/dist/endpoints/users.d.ts +103 -0
- package/dist/endpoints/users.d.ts.map +1 -0
- package/dist/endpoints/users.js +98 -0
- package/dist/endpoints/webhooks.d.ts +201 -0
- package/dist/endpoints/webhooks.d.ts.map +1 -0
- package/dist/endpoints/webhooks.js +120 -0
- package/dist/errors.d.ts +153 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +73 -0
- package/dist/index.d.ts +12303 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +390 -0
- package/dist/schemas/_primitives.d.ts +37 -0
- package/dist/schemas/_primitives.d.ts.map +1 -0
- package/dist/schemas/_primitives.js +38 -0
- package/dist/schemas/admin-ai-playground.d.ts +128 -0
- package/dist/schemas/admin-ai-playground.d.ts.map +1 -0
- package/dist/schemas/admin-ai-playground.js +84 -0
- package/dist/schemas/admin-anomalies.d.ts +131 -0
- package/dist/schemas/admin-anomalies.d.ts.map +1 -0
- package/dist/schemas/admin-anomalies.js +106 -0
- package/dist/schemas/admin-apm.d.ts +151 -0
- package/dist/schemas/admin-apm.d.ts.map +1 -0
- package/dist/schemas/admin-apm.js +96 -0
- package/dist/schemas/admin-audit.d.ts +625 -0
- package/dist/schemas/admin-audit.d.ts.map +1 -0
- package/dist/schemas/admin-audit.js +508 -0
- package/dist/schemas/admin-billing.d.ts +73 -0
- package/dist/schemas/admin-billing.d.ts.map +1 -0
- package/dist/schemas/admin-billing.js +60 -0
- package/dist/schemas/admin-bootstrap.d.ts +32 -0
- package/dist/schemas/admin-bootstrap.d.ts.map +1 -0
- package/dist/schemas/admin-bootstrap.js +37 -0
- package/dist/schemas/admin-broadcasts.d.ts +181 -0
- package/dist/schemas/admin-broadcasts.d.ts.map +1 -0
- package/dist/schemas/admin-broadcasts.js +93 -0
- package/dist/schemas/admin-builds.d.ts +108 -0
- package/dist/schemas/admin-builds.d.ts.map +1 -0
- package/dist/schemas/admin-builds.js +127 -0
- package/dist/schemas/admin-config.d.ts +248 -0
- package/dist/schemas/admin-config.d.ts.map +1 -0
- package/dist/schemas/admin-config.js +145 -0
- package/dist/schemas/admin-consent.d.ts +129 -0
- package/dist/schemas/admin-consent.d.ts.map +1 -0
- package/dist/schemas/admin-consent.js +76 -0
- package/dist/schemas/admin-env-services.d.ts +63 -0
- package/dist/schemas/admin-env-services.d.ts.map +1 -0
- package/dist/schemas/admin-env-services.js +81 -0
- package/dist/schemas/admin-impersonation.d.ts +150 -0
- package/dist/schemas/admin-impersonation.d.ts.map +1 -0
- package/dist/schemas/admin-impersonation.js +114 -0
- package/dist/schemas/admin-invitations.d.ts +119 -0
- package/dist/schemas/admin-invitations.d.ts.map +1 -0
- package/dist/schemas/admin-invitations.js +80 -0
- package/dist/schemas/admin-jwt-keys.d.ts +130 -0
- package/dist/schemas/admin-jwt-keys.d.ts.map +1 -0
- package/dist/schemas/admin-jwt-keys.js +83 -0
- package/dist/schemas/admin-logs.d.ts +170 -0
- package/dist/schemas/admin-logs.d.ts.map +1 -0
- package/dist/schemas/admin-logs.js +108 -0
- package/dist/schemas/admin-plans.d.ts +92 -0
- package/dist/schemas/admin-plans.d.ts.map +1 -0
- package/dist/schemas/admin-plans.js +62 -0
- package/dist/schemas/admin-project-users.d.ts +183 -0
- package/dist/schemas/admin-project-users.d.ts.map +1 -0
- package/dist/schemas/admin-project-users.js +108 -0
- package/dist/schemas/admin-projects.d.ts +237 -0
- package/dist/schemas/admin-projects.d.ts.map +1 -0
- package/dist/schemas/admin-projects.js +129 -0
- package/dist/schemas/admin-quotas.d.ts +161 -0
- package/dist/schemas/admin-quotas.d.ts.map +1 -0
- package/dist/schemas/admin-quotas.js +107 -0
- package/dist/schemas/admin-rate-limits.d.ts +90 -0
- package/dist/schemas/admin-rate-limits.d.ts.map +1 -0
- package/dist/schemas/admin-rate-limits.js +72 -0
- package/dist/schemas/admin-reconcile.d.ts +89 -0
- package/dist/schemas/admin-reconcile.d.ts.map +1 -0
- package/dist/schemas/admin-reconcile.js +86 -0
- package/dist/schemas/admin-resources.d.ts +129 -0
- package/dist/schemas/admin-resources.d.ts.map +1 -0
- package/dist/schemas/admin-resources.js +143 -0
- package/dist/schemas/admin-secrets.d.ts +113 -0
- package/dist/schemas/admin-secrets.d.ts.map +1 -0
- package/dist/schemas/admin-secrets.js +94 -0
- package/dist/schemas/admin-services.d.ts +71 -0
- package/dist/schemas/admin-services.d.ts.map +1 -0
- package/dist/schemas/admin-services.js +61 -0
- package/dist/schemas/admin-tasks.d.ts +239 -0
- package/dist/schemas/admin-tasks.d.ts.map +1 -0
- package/dist/schemas/admin-tasks.js +103 -0
- package/dist/schemas/admin-tenants.d.ts +45 -0
- package/dist/schemas/admin-tenants.d.ts.map +1 -0
- package/dist/schemas/admin-tenants.js +54 -0
- package/dist/schemas/admin-traces.d.ts +203 -0
- package/dist/schemas/admin-traces.d.ts.map +1 -0
- package/dist/schemas/admin-traces.js +128 -0
- package/dist/schemas/admin-users.d.ts +158 -0
- package/dist/schemas/admin-users.d.ts.map +1 -0
- package/dist/schemas/admin-users.js +110 -0
- package/dist/schemas/admin-webhook-signature-versions.d.ts +103 -0
- package/dist/schemas/admin-webhook-signature-versions.d.ts.map +1 -0
- package/dist/schemas/admin-webhook-signature-versions.js +73 -0
- package/dist/schemas/ai-admin.d.ts +39 -0
- package/dist/schemas/ai-admin.d.ts.map +1 -0
- package/dist/schemas/ai-admin.js +29 -0
- package/dist/schemas/ai.d.ts +120 -0
- package/dist/schemas/ai.d.ts.map +1 -0
- package/dist/schemas/ai.js +84 -0
- package/dist/schemas/analytics-admin.d.ts +104 -0
- package/dist/schemas/analytics-admin.d.ts.map +1 -0
- package/dist/schemas/analytics-admin.js +61 -0
- package/dist/schemas/analytics.d.ts +118 -0
- package/dist/schemas/analytics.d.ts.map +1 -0
- package/dist/schemas/analytics.js +80 -0
- package/dist/schemas/audit-chain.d.ts +81 -0
- package/dist/schemas/audit-chain.d.ts.map +1 -0
- package/dist/schemas/audit-chain.js +62 -0
- package/dist/schemas/auth-admin.d.ts +55 -0
- package/dist/schemas/auth-admin.d.ts.map +1 -0
- package/dist/schemas/auth-admin.js +48 -0
- package/dist/schemas/auth.d.ts +865 -0
- package/dist/schemas/auth.d.ts.map +1 -0
- package/dist/schemas/auth.js +815 -0
- package/dist/schemas/backups.d.ts +70 -0
- package/dist/schemas/backups.d.ts.map +1 -0
- package/dist/schemas/backups.js +38 -0
- package/dist/schemas/billing-console.d.ts +414 -0
- package/dist/schemas/billing-console.d.ts.map +1 -0
- package/dist/schemas/billing-console.js +298 -0
- package/dist/schemas/billing-settings.d.ts +156 -0
- package/dist/schemas/billing-settings.d.ts.map +1 -0
- package/dist/schemas/billing-settings.js +119 -0
- package/dist/schemas/billing.d.ts +211 -0
- package/dist/schemas/billing.d.ts.map +1 -0
- package/dist/schemas/billing.js +147 -0
- package/dist/schemas/branch-database.d.ts +98 -0
- package/dist/schemas/branch-database.d.ts.map +1 -0
- package/dist/schemas/branch-database.js +68 -0
- package/dist/schemas/challenge.d.ts +104 -0
- package/dist/schemas/challenge.d.ts.map +1 -0
- package/dist/schemas/challenge.js +74 -0
- package/dist/schemas/ci-settings.d.ts +122 -0
- package/dist/schemas/ci-settings.d.ts.map +1 -0
- package/dist/schemas/ci-settings.js +65 -0
- package/dist/schemas/consent-admin.d.ts +187 -0
- package/dist/schemas/consent-admin.d.ts.map +1 -0
- package/dist/schemas/consent-admin.js +114 -0
- package/dist/schemas/consent.d.ts +78 -0
- package/dist/schemas/consent.d.ts.map +1 -0
- package/dist/schemas/consent.js +68 -0
- package/dist/schemas/database.d.ts +104 -0
- package/dist/schemas/database.d.ts.map +1 -0
- package/dist/schemas/database.js +89 -0
- package/dist/schemas/deployment.d.ts +386 -0
- package/dist/schemas/deployment.d.ts.map +1 -0
- package/dist/schemas/deployment.js +282 -0
- package/dist/schemas/domain.d.ts +148 -0
- package/dist/schemas/domain.d.ts.map +1 -0
- package/dist/schemas/domain.js +86 -0
- package/dist/schemas/edge-deployments.d.ts +140 -0
- package/dist/schemas/edge-deployments.d.ts.map +1 -0
- package/dist/schemas/edge-deployments.js +87 -0
- package/dist/schemas/email-admin.d.ts +384 -0
- package/dist/schemas/email-admin.d.ts.map +1 -0
- package/dist/schemas/email-admin.js +313 -0
- package/dist/schemas/email.d.ts +46 -0
- package/dist/schemas/email.d.ts.map +1 -0
- package/dist/schemas/email.js +34 -0
- package/dist/schemas/engagement-admin.d.ts +148 -0
- package/dist/schemas/engagement-admin.d.ts.map +1 -0
- package/dist/schemas/engagement-admin.js +107 -0
- package/dist/schemas/env-var.d.ts +68 -0
- package/dist/schemas/env-var.d.ts.map +1 -0
- package/dist/schemas/env-var.js +52 -0
- package/dist/schemas/environment.d.ts +392 -0
- package/dist/schemas/environment.d.ts.map +1 -0
- package/dist/schemas/environment.js +211 -0
- package/dist/schemas/experiments.d.ts +540 -0
- package/dist/schemas/experiments.d.ts.map +1 -0
- package/dist/schemas/experiments.js +150 -0
- package/dist/schemas/flags-admin.d.ts +112 -0
- package/dist/schemas/flags-admin.d.ts.map +1 -0
- package/dist/schemas/flags-admin.js +84 -0
- package/dist/schemas/flags.d.ts +43 -0
- package/dist/schemas/flags.d.ts.map +1 -0
- package/dist/schemas/flags.js +27 -0
- package/dist/schemas/github.d.ts +34 -0
- package/dist/schemas/github.d.ts.map +1 -0
- package/dist/schemas/github.js +24 -0
- package/dist/schemas/ids.d.ts +39 -0
- package/dist/schemas/ids.d.ts.map +1 -0
- package/dist/schemas/ids.js +26 -0
- package/dist/schemas/image-opt.d.ts +70 -0
- package/dist/schemas/image-opt.d.ts.map +1 -0
- package/dist/schemas/image-opt.js +68 -0
- package/dist/schemas/kv-admin.d.ts +60 -0
- package/dist/schemas/kv-admin.d.ts.map +1 -0
- package/dist/schemas/kv-admin.js +43 -0
- package/dist/schemas/kv.d.ts +79 -0
- package/dist/schemas/kv.d.ts.map +1 -0
- package/dist/schemas/kv.js +54 -0
- package/dist/schemas/monitoring-admin.d.ts +314 -0
- package/dist/schemas/monitoring-admin.d.ts.map +1 -0
- package/dist/schemas/monitoring-admin.js +196 -0
- package/dist/schemas/monitoring.d.ts +143 -0
- package/dist/schemas/monitoring.d.ts.map +1 -0
- package/dist/schemas/monitoring.js +96 -0
- package/dist/schemas/newsletter.d.ts +366 -0
- package/dist/schemas/newsletter.d.ts.map +1 -0
- package/dist/schemas/newsletter.js +245 -0
- package/dist/schemas/notifications-admin.d.ts +337 -0
- package/dist/schemas/notifications-admin.d.ts.map +1 -0
- package/dist/schemas/notifications-admin.js +261 -0
- package/dist/schemas/notifications.d.ts +312 -0
- package/dist/schemas/notifications.d.ts.map +1 -0
- package/dist/schemas/notifications.js +235 -0
- package/dist/schemas/oidc.d.ts +74 -0
- package/dist/schemas/oidc.d.ts.map +1 -0
- package/dist/schemas/oidc.js +46 -0
- package/dist/schemas/organization-billing.d.ts +165 -0
- package/dist/schemas/organization-billing.d.ts.map +1 -0
- package/dist/schemas/organization-billing.js +156 -0
- package/dist/schemas/organization-project-users.d.ts +126 -0
- package/dist/schemas/organization-project-users.d.ts.map +1 -0
- package/dist/schemas/organization-project-users.js +88 -0
- package/dist/schemas/organization-projects.d.ts +129 -0
- package/dist/schemas/organization-projects.d.ts.map +1 -0
- package/dist/schemas/organization-projects.js +119 -0
- package/dist/schemas/organization-referrals.d.ts +129 -0
- package/dist/schemas/organization-referrals.d.ts.map +1 -0
- package/dist/schemas/organization-referrals.js +126 -0
- package/dist/schemas/organization-team.d.ts +123 -0
- package/dist/schemas/organization-team.d.ts.map +1 -0
- package/dist/schemas/organization-team.js +119 -0
- package/dist/schemas/organization.d.ts +210 -0
- package/dist/schemas/organization.d.ts.map +1 -0
- package/dist/schemas/organization.js +169 -0
- package/dist/schemas/plans.d.ts +211 -0
- package/dist/schemas/plans.d.ts.map +1 -0
- package/dist/schemas/plans.js +131 -0
- package/dist/schemas/privacy.d.ts +174 -0
- package/dist/schemas/privacy.d.ts.map +1 -0
- package/dist/schemas/privacy.js +132 -0
- package/dist/schemas/project-manifest.d.ts +1421 -0
- package/dist/schemas/project-manifest.d.ts.map +1 -0
- package/dist/schemas/project-manifest.js +318 -0
- package/dist/schemas/project.d.ts +132 -0
- package/dist/schemas/project.d.ts.map +1 -0
- package/dist/schemas/project.js +76 -0
- package/dist/schemas/realtime-admin.d.ts +51 -0
- package/dist/schemas/realtime-admin.d.ts.map +1 -0
- package/dist/schemas/realtime-admin.js +29 -0
- package/dist/schemas/realtime.d.ts +46 -0
- package/dist/schemas/realtime.d.ts.map +1 -0
- package/dist/schemas/realtime.js +32 -0
- package/dist/schemas/referrals-admin.d.ts +166 -0
- package/dist/schemas/referrals-admin.d.ts.map +1 -0
- package/dist/schemas/referrals-admin.js +123 -0
- package/dist/schemas/referrals.d.ts +148 -0
- package/dist/schemas/referrals.d.ts.map +1 -0
- package/dist/schemas/referrals.js +102 -0
- package/dist/schemas/refresh.d.ts +29 -0
- package/dist/schemas/refresh.d.ts.map +1 -0
- package/dist/schemas/refresh.js +18 -0
- package/dist/schemas/region.d.ts +118 -0
- package/dist/schemas/region.d.ts.map +1 -0
- package/dist/schemas/region.js +86 -0
- package/dist/schemas/resources.d.ts +345 -0
- package/dist/schemas/resources.d.ts.map +1 -0
- package/dist/schemas/resources.js +220 -0
- package/dist/schemas/runners.d.ts +93 -0
- package/dist/schemas/runners.d.ts.map +1 -0
- package/dist/schemas/runners.js +49 -0
- package/dist/schemas/saml.d.ts +254 -0
- package/dist/schemas/saml.d.ts.map +1 -0
- package/dist/schemas/saml.js +159 -0
- package/dist/schemas/search.d.ts +96 -0
- package/dist/schemas/search.d.ts.map +1 -0
- package/dist/schemas/search.js +57 -0
- package/dist/schemas/secret.d.ts +101 -0
- package/dist/schemas/secret.d.ts.map +1 -0
- package/dist/schemas/secret.js +79 -0
- package/dist/schemas/security.d.ts +345 -0
- package/dist/schemas/security.d.ts.map +1 -0
- package/dist/schemas/security.js +248 -0
- package/dist/schemas/service-tokens.d.ts +342 -0
- package/dist/schemas/service-tokens.d.ts.map +1 -0
- package/dist/schemas/service-tokens.js +101 -0
- package/dist/schemas/session-replay.d.ts +285 -0
- package/dist/schemas/session-replay.d.ts.map +1 -0
- package/dist/schemas/session-replay.js +145 -0
- package/dist/schemas/storage-admin.d.ts +351 -0
- package/dist/schemas/storage-admin.d.ts.map +1 -0
- package/dist/schemas/storage-admin.js +197 -0
- package/dist/schemas/storage.d.ts +257 -0
- package/dist/schemas/storage.d.ts.map +1 -0
- package/dist/schemas/storage.js +173 -0
- package/dist/schemas/tasks.d.ts +178 -0
- package/dist/schemas/tasks.d.ts.map +1 -0
- package/dist/schemas/tasks.js +102 -0
- package/dist/schemas/user.d.ts +103 -0
- package/dist/schemas/user.d.ts.map +1 -0
- package/dist/schemas/user.js +79 -0
- package/dist/schemas/webhooks.d.ts +259 -0
- package/dist/schemas/webhooks.d.ts.map +1 -0
- package/dist/schemas/webhooks.js +198 -0
- package/package.json +154 -0
|
@@ -0,0 +1,815 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth — BaaS plane primitives. Matches `@sylphx/sdk` `auth.ts` public
|
|
3
|
+
* surface (sign-in, sign-up, session, 2FA).
|
|
4
|
+
*
|
|
5
|
+
* Two layers coexist here (ADR-084):
|
|
6
|
+
*
|
|
7
|
+
* 1. **Lean primitives** (`SignInInput`, `SignUpInput`, `SessionResult`) —
|
|
8
|
+
* the minimal shape a generic OAuth/OIDC consumer needs. Stable;
|
|
9
|
+
* brand-safe; closed.
|
|
10
|
+
*
|
|
11
|
+
* 2. **SDK wire shapes** (`LoginRequest`, `LoginResponse`, `RegisterRequest`,
|
|
12
|
+
* `RegisterResponse`, `AuthTokensResponse`, `TwoFactorVerifyRequest`,
|
|
13
|
+
* `UserFullProfile`) — richer request/response envelopes the REST API
|
|
14
|
+
* actually returns. Mirror the OpenAPI schema previously consumed from
|
|
15
|
+
* `@sylphx/sdk/src/generated/api.d.ts`. Declared as plain `Struct`s with
|
|
16
|
+
* unbranded `Schema.String` ids so the SDK (which hands ids straight to
|
|
17
|
+
* URL builders, cookies, etc.) can accept them without casts.
|
|
18
|
+
*/
|
|
19
|
+
import { Schema } from 'effect';
|
|
20
|
+
import { UserId } from './ids.js';
|
|
21
|
+
/** Tokens issued by `/auth/login` / `/auth/token`. */
|
|
22
|
+
export const AuthTokens = Schema.Struct({
|
|
23
|
+
accessToken: Schema.String,
|
|
24
|
+
refreshToken: Schema.optional(Schema.String),
|
|
25
|
+
tokenType: Schema.optional(Schema.String),
|
|
26
|
+
expiresIn: Schema.optional(Schema.Number),
|
|
27
|
+
});
|
|
28
|
+
export const SessionUser = Schema.Struct({
|
|
29
|
+
id: UserId,
|
|
30
|
+
email: Schema.String,
|
|
31
|
+
name: Schema.NullOr(Schema.String),
|
|
32
|
+
image: Schema.NullOr(Schema.String),
|
|
33
|
+
emailVerified: Schema.Boolean,
|
|
34
|
+
});
|
|
35
|
+
export const SignInInput = Schema.Struct({
|
|
36
|
+
email: Schema.String,
|
|
37
|
+
password: Schema.String,
|
|
38
|
+
});
|
|
39
|
+
/** Success path issues tokens; 2FA path redirects via `requiresTwoFactor`. */
|
|
40
|
+
export const SignInResult = Schema.Struct({
|
|
41
|
+
requiresTwoFactor: Schema.optional(Schema.Boolean),
|
|
42
|
+
userId: Schema.optional(UserId),
|
|
43
|
+
accessToken: Schema.optional(Schema.String),
|
|
44
|
+
refreshToken: Schema.optional(Schema.String),
|
|
45
|
+
tokenType: Schema.optional(Schema.String),
|
|
46
|
+
expiresIn: Schema.optional(Schema.Number),
|
|
47
|
+
});
|
|
48
|
+
export const SignUpInput = Schema.Struct({
|
|
49
|
+
email: Schema.String,
|
|
50
|
+
password: Schema.String,
|
|
51
|
+
name: Schema.optional(Schema.String),
|
|
52
|
+
});
|
|
53
|
+
export const SignUpResult = Schema.Struct({
|
|
54
|
+
userId: UserId,
|
|
55
|
+
email: Schema.String,
|
|
56
|
+
emailVerified: Schema.Boolean,
|
|
57
|
+
});
|
|
58
|
+
export const SessionResult = Schema.Struct({
|
|
59
|
+
user: Schema.NullOr(SessionUser),
|
|
60
|
+
});
|
|
61
|
+
// ── SDK wire shapes ────────────────────────────────────────────────────────
|
|
62
|
+
//
|
|
63
|
+
// These mirror the OpenAPI component schemas the REST API emits. Ids are
|
|
64
|
+
// plain strings (not `UserId`) because SDK callers pass them through to
|
|
65
|
+
// `URL`, cookies, and storage primitives that don't understand branded
|
|
66
|
+
// types — see `@sylphx/sdk/src/auth.ts` notes on the contract/SDK id-brand
|
|
67
|
+
// divide.
|
|
68
|
+
/** Minimal user returned inside login/token/register envelopes. */
|
|
69
|
+
export const AuthUser = Schema.Struct({
|
|
70
|
+
id: Schema.String,
|
|
71
|
+
email: Schema.String,
|
|
72
|
+
name: Schema.NullOr(Schema.String),
|
|
73
|
+
image: Schema.optional(Schema.NullOr(Schema.String)),
|
|
74
|
+
emailVerified: Schema.optional(Schema.Boolean),
|
|
75
|
+
role: Schema.optional(Schema.String),
|
|
76
|
+
createdAt: Schema.optional(Schema.String),
|
|
77
|
+
});
|
|
78
|
+
/** `POST /auth/login` request body. */
|
|
79
|
+
export const LoginRequest = Schema.Struct({
|
|
80
|
+
email: Schema.String,
|
|
81
|
+
password: Schema.String,
|
|
82
|
+
});
|
|
83
|
+
/**
|
|
84
|
+
* `POST /auth/login` response — discriminated on `requiresTwoFactor`.
|
|
85
|
+
*
|
|
86
|
+
* - `true`: caller must finish the 2FA flow via `POST /auth/verify-2fa`
|
|
87
|
+
* using the returned `userId`.
|
|
88
|
+
* - `false` / absent: tokens + user profile are returned directly.
|
|
89
|
+
*/
|
|
90
|
+
export const LoginResponse = Schema.Union(Schema.Struct({
|
|
91
|
+
requiresTwoFactor: Schema.Literal(true),
|
|
92
|
+
userId: Schema.String,
|
|
93
|
+
email: Schema.optional(Schema.String),
|
|
94
|
+
}), Schema.Struct({
|
|
95
|
+
requiresTwoFactor: Schema.optional(Schema.Literal(false)),
|
|
96
|
+
accessToken: Schema.String,
|
|
97
|
+
refreshToken: Schema.optional(Schema.String),
|
|
98
|
+
expiresIn: Schema.optional(Schema.Number),
|
|
99
|
+
user: Schema.optional(AuthUser),
|
|
100
|
+
}));
|
|
101
|
+
/**
|
|
102
|
+
* `POST /auth/register` request body — a superset of `SignUpInput` that
|
|
103
|
+
* accepts caller metadata and an optional invitation token.
|
|
104
|
+
*/
|
|
105
|
+
export const RegisterRequest = Schema.Struct({
|
|
106
|
+
email: Schema.String,
|
|
107
|
+
password: Schema.String,
|
|
108
|
+
name: Schema.optional(Schema.String),
|
|
109
|
+
metadata: Schema.optional(Schema.Record({ key: Schema.String, value: Schema.Unknown })),
|
|
110
|
+
invitationToken: Schema.optional(Schema.String),
|
|
111
|
+
});
|
|
112
|
+
/** `POST /auth/register` response — email-verification envelope. */
|
|
113
|
+
export const RegisterResponse = Schema.Struct({
|
|
114
|
+
requiresVerification: Schema.optional(Schema.Boolean),
|
|
115
|
+
message: Schema.optional(Schema.String),
|
|
116
|
+
user: Schema.Struct({
|
|
117
|
+
id: Schema.String,
|
|
118
|
+
email: Schema.String,
|
|
119
|
+
name: Schema.NullOr(Schema.String),
|
|
120
|
+
}),
|
|
121
|
+
});
|
|
122
|
+
/**
|
|
123
|
+
* Token-issuing response shared by `/auth/token`, `/auth/verify-2fa`,
|
|
124
|
+
* `/auth/switch-org`. `user` is surfaced for SDK convenience (hydrating the
|
|
125
|
+
* local session immediately after issuance).
|
|
126
|
+
*/
|
|
127
|
+
export const AuthTokensResponse = Schema.Struct({
|
|
128
|
+
accessToken: Schema.String,
|
|
129
|
+
refreshToken: Schema.String,
|
|
130
|
+
expiresIn: Schema.optional(Schema.Number),
|
|
131
|
+
tokenType: Schema.optional(Schema.String),
|
|
132
|
+
user: Schema.optional(AuthUser),
|
|
133
|
+
});
|
|
134
|
+
/**
|
|
135
|
+
* `POST /auth/verify-2fa` request body.
|
|
136
|
+
*
|
|
137
|
+
* The OpenAPI spec lists `code` only (post-login flow where the server has
|
|
138
|
+
* the user bound to the challenge session). The SDK uses an extended shape
|
|
139
|
+
* including `userId` for the stateless public flow — both are accepted.
|
|
140
|
+
*/
|
|
141
|
+
export const TwoFactorVerifyRequest = Schema.Struct({
|
|
142
|
+
userId: Schema.optional(Schema.String),
|
|
143
|
+
code: Schema.String,
|
|
144
|
+
});
|
|
145
|
+
/** `GET /auth/me` response — full profile with verification + timestamps. */
|
|
146
|
+
export const UserFullProfile = Schema.Struct({
|
|
147
|
+
id: Schema.String,
|
|
148
|
+
email: Schema.String,
|
|
149
|
+
name: Schema.NullOr(Schema.String),
|
|
150
|
+
image: Schema.NullOr(Schema.String),
|
|
151
|
+
emailVerified: Schema.optional(Schema.Boolean),
|
|
152
|
+
createdAt: Schema.optional(Schema.String),
|
|
153
|
+
});
|
|
154
|
+
// ─── OAuth Device Flow (RFC 8628) ──────────────────────────────────────────
|
|
155
|
+
//
|
|
156
|
+
// The RFC-8628 device authorization grant is the *client-agnostic*
|
|
157
|
+
// bootstrap surface BaaS issues to any headless client (CLI, TV apps,
|
|
158
|
+
// IoT). ADR-089 Phase 2a hoists the CLI device flow out of the
|
|
159
|
+
// Platform-layer bypass and into the BaaS `/v1/auth/device/*` surface
|
|
160
|
+
// where every consumer — customer and Platform-as-customer alike —
|
|
161
|
+
// speaks the same RFC-shaped protocol.
|
|
162
|
+
//
|
|
163
|
+
// Phase 5.1 will layer RFC 6749 + 7662 + 8414 on top (PKCE, token,
|
|
164
|
+
// revoke, introspect, metadata); Phase 2a ships the four device-flow
|
|
165
|
+
// endpoints that the CLI requires to dogfood.
|
|
166
|
+
/**
|
|
167
|
+
* `POST /auth/device` request body — initiate a device authorization
|
|
168
|
+
* grant per RFC 8628 §3.1.
|
|
169
|
+
*/
|
|
170
|
+
export const DeviceInitRequest = Schema.Struct({
|
|
171
|
+
/**
|
|
172
|
+
* Client identifier — must match a well-known client registered on
|
|
173
|
+
* the BaaS plane. Phase 2a hard-codes `sylphx-cli` as the only
|
|
174
|
+
* allow-listed value; Phase 5.1 replaces the allow-list with the
|
|
175
|
+
* `oauth_clients` DB registry (ADR-086).
|
|
176
|
+
*/
|
|
177
|
+
client_id: Schema.String,
|
|
178
|
+
/**
|
|
179
|
+
* Space- or array-delimited OAuth scopes the client is requesting.
|
|
180
|
+
* Phase 2a accepts any scope shape; Phase 5.1 will validate against
|
|
181
|
+
* the client's registered scope set.
|
|
182
|
+
*/
|
|
183
|
+
scope: Schema.optional(Schema.Array(Schema.String)),
|
|
184
|
+
});
|
|
185
|
+
/**
|
|
186
|
+
* `POST /auth/device` response — grant issued per RFC 8628 §3.2.
|
|
187
|
+
*
|
|
188
|
+
* `device_code` is the CLI's private reference (opaque bearer);
|
|
189
|
+
* `user_code` is the short human-readable code the user enters on the
|
|
190
|
+
* verification page.
|
|
191
|
+
*/
|
|
192
|
+
export const DeviceInitResponse = Schema.Struct({
|
|
193
|
+
device_code: Schema.String,
|
|
194
|
+
user_code: Schema.String,
|
|
195
|
+
verification_uri: Schema.String,
|
|
196
|
+
verification_uri_complete: Schema.String,
|
|
197
|
+
expires_in: Schema.Number,
|
|
198
|
+
interval: Schema.Number,
|
|
199
|
+
});
|
|
200
|
+
/**
|
|
201
|
+
* `GET /auth/device/poll?device_code=…` response.
|
|
202
|
+
*
|
|
203
|
+
* Mirrors the RFC 8628 §3.5 polling token-endpoint response but in a
|
|
204
|
+
* single envelope so the SDK can discriminate on `status` without
|
|
205
|
+
* needing a second round-trip to the RFC 6749 token endpoint. Phase
|
|
206
|
+
* 5.1 will add a strict RFC 6749 `/oauth/token` endpoint that callers
|
|
207
|
+
* MAY hit instead when they prefer the canonical shape.
|
|
208
|
+
*/
|
|
209
|
+
export const DevicePollResponse = Schema.Union(Schema.Struct({ status: Schema.Literal('pending') }), Schema.Struct({
|
|
210
|
+
status: Schema.Literal('approved'),
|
|
211
|
+
access_token: Schema.String,
|
|
212
|
+
refresh_token: Schema.String,
|
|
213
|
+
token_type: Schema.Literal('Bearer'),
|
|
214
|
+
expires_in: Schema.Number,
|
|
215
|
+
refresh_expires_at: Schema.String,
|
|
216
|
+
}), Schema.Struct({ status: Schema.Literal('denied') }), Schema.Struct({ status: Schema.Literal('expired') }));
|
|
217
|
+
/**
|
|
218
|
+
* `POST /auth/device/approve` request body — browser leg, user-facing.
|
|
219
|
+
*
|
|
220
|
+
* Called from the Console's verification page after the user clicks
|
|
221
|
+
* Authorize. Cookie-session auth identifies the approving user;
|
|
222
|
+
* `user_code` is the short public code the user typed / confirmed on
|
|
223
|
+
* the verification page.
|
|
224
|
+
*/
|
|
225
|
+
export const DeviceApproveRequest = Schema.Struct({
|
|
226
|
+
user_code: Schema.String,
|
|
227
|
+
});
|
|
228
|
+
/**
|
|
229
|
+
* `POST /auth/device/approve` response — confirmation envelope.
|
|
230
|
+
* The CLI picks up the tokens on its next `/auth/device/poll` call.
|
|
231
|
+
*/
|
|
232
|
+
export const DeviceApproveResponse = Schema.Struct({
|
|
233
|
+
success: Schema.Literal(true),
|
|
234
|
+
});
|
|
235
|
+
/**
|
|
236
|
+
* `POST /auth/device/deny` request body — same shape as approve.
|
|
237
|
+
*/
|
|
238
|
+
export const DeviceDenyRequest = Schema.Struct({
|
|
239
|
+
user_code: Schema.String,
|
|
240
|
+
});
|
|
241
|
+
/**
|
|
242
|
+
* `POST /auth/device/deny` response.
|
|
243
|
+
*/
|
|
244
|
+
export const DeviceDenyResponse = Schema.Struct({
|
|
245
|
+
success: Schema.Literal(true),
|
|
246
|
+
});
|
|
247
|
+
// ─── OAuth /oauth/token (ADR-089 Phase 5.1b + 5.1c) ───────────────────────────
|
|
248
|
+
//
|
|
249
|
+
// RFC 6749 §3.2 token endpoint — the unified mint surface for every
|
|
250
|
+
// Platform-issued access/refresh bearer. Phase 5.1b shipped the
|
|
251
|
+
// authorization_code + refresh_token grants; Phase 5.1c extends the
|
|
252
|
+
// dispatcher with device_code (RFC 8628 §3.4) + client_credentials
|
|
253
|
+
// (RFC 6749 §4.4). The contract schemas here model the wire shape but the
|
|
254
|
+
// runtime still parses bodies as `Record<string, string>` for forward
|
|
255
|
+
// compatibility — unknown grant-type fields MUST not fail the dispatcher
|
|
256
|
+
// before the client auth check runs.
|
|
257
|
+
/**
|
|
258
|
+
* `authorization_code` grant body — RFC 6749 §4.1.3 + RFC 7636.
|
|
259
|
+
*/
|
|
260
|
+
export const OAuthTokenAuthorizationCodeRequest = Schema.Struct({
|
|
261
|
+
grant_type: Schema.Literal('authorization_code'),
|
|
262
|
+
code: Schema.String,
|
|
263
|
+
redirect_uri: Schema.String,
|
|
264
|
+
client_id: Schema.String,
|
|
265
|
+
client_secret: Schema.optional(Schema.String),
|
|
266
|
+
code_verifier: Schema.String,
|
|
267
|
+
});
|
|
268
|
+
/**
|
|
269
|
+
* `refresh_token` grant body — RFC 6749 §6. Rotation is mandatory on the
|
|
270
|
+
* server side; clients simply present their current refresh_token.
|
|
271
|
+
*/
|
|
272
|
+
export const OAuthTokenRefreshRequest = Schema.Struct({
|
|
273
|
+
grant_type: Schema.Literal('refresh_token'),
|
|
274
|
+
refresh_token: Schema.String,
|
|
275
|
+
client_id: Schema.String,
|
|
276
|
+
client_secret: Schema.optional(Schema.String),
|
|
277
|
+
scope: Schema.optional(Schema.String),
|
|
278
|
+
});
|
|
279
|
+
/**
|
|
280
|
+
* `device_code` grant body — RFC 8628 §3.4. Client auth is registry-driven;
|
|
281
|
+
* public clients present `client_id` only, confidential clients add
|
|
282
|
+
* `client_secret`.
|
|
283
|
+
*/
|
|
284
|
+
export const OAuthTokenDeviceCodeRequest = Schema.Struct({
|
|
285
|
+
grant_type: Schema.Literal('urn:ietf:params:oauth:grant-type:device_code'),
|
|
286
|
+
device_code: Schema.String,
|
|
287
|
+
client_id: Schema.String,
|
|
288
|
+
client_secret: Schema.optional(Schema.String),
|
|
289
|
+
});
|
|
290
|
+
/**
|
|
291
|
+
* `client_credentials` grant body — RFC 6749 §4.4. Confidential clients
|
|
292
|
+
* only; `client_secret` is mandatory.
|
|
293
|
+
*/
|
|
294
|
+
export const OAuthTokenClientCredentialsRequest = Schema.Struct({
|
|
295
|
+
grant_type: Schema.Literal('client_credentials'),
|
|
296
|
+
client_id: Schema.String,
|
|
297
|
+
client_secret: Schema.String,
|
|
298
|
+
scope: Schema.optional(Schema.String),
|
|
299
|
+
});
|
|
300
|
+
/**
|
|
301
|
+
* Union of every token-endpoint request shape. Discriminated by
|
|
302
|
+
* `grant_type` — new grants join the union, never replace an existing
|
|
303
|
+
* variant. Rejected grant types return an RFC 6749 §5.2 error envelope
|
|
304
|
+
* with `error='unsupported_grant_type'`.
|
|
305
|
+
*/
|
|
306
|
+
export const OAuthTokenRequest = Schema.Union(OAuthTokenAuthorizationCodeRequest, OAuthTokenRefreshRequest, OAuthTokenDeviceCodeRequest, OAuthTokenClientCredentialsRequest);
|
|
307
|
+
/**
|
|
308
|
+
* Successful `/oauth/token` response carrying access + refresh token pair.
|
|
309
|
+
* Used by `authorization_code`, `refresh_token`, and `device_code` grants.
|
|
310
|
+
*/
|
|
311
|
+
export const OAuthTokenResponse = Schema.Struct({
|
|
312
|
+
access_token: Schema.String,
|
|
313
|
+
token_type: Schema.Literal('Bearer'),
|
|
314
|
+
expires_in: Schema.Number,
|
|
315
|
+
refresh_token: Schema.String,
|
|
316
|
+
scope: Schema.String,
|
|
317
|
+
});
|
|
318
|
+
/**
|
|
319
|
+
* `client_credentials` success response — RFC 6749 §4.4.3 forbids refresh
|
|
320
|
+
* tokens on this grant, so the envelope is deliberately narrower.
|
|
321
|
+
*/
|
|
322
|
+
export const OAuthClientCredentialsResponse = Schema.Struct({
|
|
323
|
+
access_token: Schema.String,
|
|
324
|
+
token_type: Schema.Literal('Bearer'),
|
|
325
|
+
expires_in: Schema.Number,
|
|
326
|
+
scope: Schema.String,
|
|
327
|
+
});
|
|
328
|
+
/**
|
|
329
|
+
* RFC 6749 §5.2 error codes + RFC 8628 §3.5 polling codes. One closed
|
|
330
|
+
* enumeration — SDK callers pattern-match on this value to choose the
|
|
331
|
+
* next action (retry / abort / re-auth).
|
|
332
|
+
*/
|
|
333
|
+
export const OAuthTokenErrorCode = Schema.Literal(
|
|
334
|
+
// RFC 6749 §5.2
|
|
335
|
+
'invalid_request', 'invalid_client', 'invalid_grant', 'unauthorized_client', 'unsupported_grant_type', 'invalid_scope',
|
|
336
|
+
// RFC 8628 §3.5 — device_code grant only.
|
|
337
|
+
'authorization_pending', 'slow_down', 'access_denied', 'expired_token');
|
|
338
|
+
/**
|
|
339
|
+
* RFC 6749 §5.2 error envelope. Surfaced with HTTP 400 (or 401 when a
|
|
340
|
+
* Basic auth header was presented with bad credentials).
|
|
341
|
+
*/
|
|
342
|
+
export const OAuthTokenErrorResponse = Schema.Struct({
|
|
343
|
+
error: OAuthTokenErrorCode,
|
|
344
|
+
error_description: Schema.optional(Schema.String),
|
|
345
|
+
error_uri: Schema.optional(Schema.String),
|
|
346
|
+
});
|
|
347
|
+
// ─── OAuth /oauth/revoke (RFC 7009, ADR-089 Phase 5.1d) ────────────────────
|
|
348
|
+
//
|
|
349
|
+
// Revocation is deliberately uniform across access + refresh tokens on the
|
|
350
|
+
// wire — the server disambiguates by `token_type_hint` OR by probing both
|
|
351
|
+
// stores. The response is always 200 with an empty body per §2.2; error
|
|
352
|
+
// envelopes (`OAuthTokenErrorResponse`) apply only on client-auth /
|
|
353
|
+
// malformed-request paths.
|
|
354
|
+
/**
|
|
355
|
+
* `/oauth/revoke` request body — RFC 7009 §2.1.
|
|
356
|
+
*/
|
|
357
|
+
export const OAuthRevokeRequest = Schema.Struct({
|
|
358
|
+
token: Schema.String,
|
|
359
|
+
token_type_hint: Schema.optional(Schema.Literal('access_token', 'refresh_token')),
|
|
360
|
+
client_id: Schema.String,
|
|
361
|
+
client_secret: Schema.optional(Schema.String),
|
|
362
|
+
});
|
|
363
|
+
/**
|
|
364
|
+
* `/oauth/revoke` success response — per §2.2 an empty body. Modelled as
|
|
365
|
+
* an empty struct so the SDK has a typed `void`-equivalent to await.
|
|
366
|
+
*/
|
|
367
|
+
export const OAuthRevokeResponse = Schema.Struct({});
|
|
368
|
+
// ─── OAuth /oauth/introspect (RFC 7662, ADR-089 Phase 5.1d) ────────────────
|
|
369
|
+
//
|
|
370
|
+
// Introspection returns either the full active-token envelope OR the
|
|
371
|
+
// `{ active: false }` sentinel. RFC 7662 §2.2 requires `active` to be
|
|
372
|
+
// present on every response; all other fields are optional. The schema
|
|
373
|
+
// reflects that — every claim is `optional` so a strict parser cannot
|
|
374
|
+
// reject the inactive sentinel.
|
|
375
|
+
/**
|
|
376
|
+
* `/oauth/introspect` request body — RFC 7662 §2.1. Same auth model as
|
|
377
|
+
* `/oauth/revoke` (client_id + optional client_secret, or Basic header).
|
|
378
|
+
*/
|
|
379
|
+
export const OAuthIntrospectRequest = Schema.Struct({
|
|
380
|
+
token: Schema.String,
|
|
381
|
+
token_type_hint: Schema.optional(Schema.Literal('access_token', 'refresh_token')),
|
|
382
|
+
client_id: Schema.String,
|
|
383
|
+
client_secret: Schema.optional(Schema.String),
|
|
384
|
+
});
|
|
385
|
+
/**
|
|
386
|
+
* `/oauth/introspect` response — RFC 7662 §2.2. Only `active` is required.
|
|
387
|
+
* Inactive responses carry ONLY `{ active: false }` per §4; populated
|
|
388
|
+
* responses echo the token's claims (scope, client_id, username, etc.).
|
|
389
|
+
*/
|
|
390
|
+
export const OAuthIntrospectResponse = Schema.Struct({
|
|
391
|
+
active: Schema.Boolean,
|
|
392
|
+
scope: Schema.optional(Schema.String),
|
|
393
|
+
client_id: Schema.optional(Schema.String),
|
|
394
|
+
username: Schema.optional(Schema.String),
|
|
395
|
+
token_type: Schema.optional(Schema.Literal('Bearer')),
|
|
396
|
+
exp: Schema.optional(Schema.Number),
|
|
397
|
+
iat: Schema.optional(Schema.Number),
|
|
398
|
+
nbf: Schema.optional(Schema.Number),
|
|
399
|
+
sub: Schema.optional(Schema.String),
|
|
400
|
+
aud: Schema.optional(Schema.Union(Schema.String, Schema.Array(Schema.String))),
|
|
401
|
+
iss: Schema.optional(Schema.String),
|
|
402
|
+
jti: Schema.optional(Schema.String),
|
|
403
|
+
});
|
|
404
|
+
// ─── Platform Sessions (ADR-089 Phase 2b) ──────────────────────────────────
|
|
405
|
+
//
|
|
406
|
+
// Session management for the Platform plane (Console / CLI operators).
|
|
407
|
+
// These schemas back the `/auth/platform-sessions/*` endpoints in
|
|
408
|
+
// `apps/runtime` that Phase 2b migrates off the Platform bypass (previously
|
|
409
|
+
// served by `apps/api/.../security/sessions.ts` + `user.ts` imports of
|
|
410
|
+
// `@sylphx/core/features/auth/lib/sessions`).
|
|
411
|
+
//
|
|
412
|
+
// Shapes deliberately mirror the Platform-side `SecuritySession` /
|
|
413
|
+
// `GetSessionsResult` / `RevokeOtherSessionsResult` etc. in
|
|
414
|
+
// `packages/contract/src/schemas/security.ts` so the SDK swap is a
|
|
415
|
+
// zero-diff pass-through on the Platform side.
|
|
416
|
+
/**
|
|
417
|
+
* A single platform-plane session row as surfaced to the client.
|
|
418
|
+
*
|
|
419
|
+
* `id` is the prefixed TypeID (`sess_*`) — the BaaS route encodes the
|
|
420
|
+
* underlying UUID on the way out. Consumers must pass this back
|
|
421
|
+
* verbatim on the revoke/rename endpoints; the BaaS side accepts both
|
|
422
|
+
* forms via `parseIdOrError` but the canonical wire representation is
|
|
423
|
+
* prefixed.
|
|
424
|
+
*/
|
|
425
|
+
export const PlatformSession = Schema.Struct({
|
|
426
|
+
id: Schema.String,
|
|
427
|
+
name: Schema.NullOr(Schema.String),
|
|
428
|
+
ipAddress: Schema.NullOr(Schema.String),
|
|
429
|
+
userAgent: Schema.NullOr(Schema.String),
|
|
430
|
+
createdAt: Schema.String,
|
|
431
|
+
lastActiveAt: Schema.NullOr(Schema.String),
|
|
432
|
+
isCurrent: Schema.Boolean,
|
|
433
|
+
});
|
|
434
|
+
/**
|
|
435
|
+
* `GET /auth/platform-sessions` — list envelope.
|
|
436
|
+
*
|
|
437
|
+
* Ordering: most-recently-active first (descending `lastActiveAt`).
|
|
438
|
+
* Matches the pre-existing Platform `GetSessionsResult` shape so the
|
|
439
|
+
* migration is a drop-in on the caller side.
|
|
440
|
+
*/
|
|
441
|
+
export const PlatformSessionsListResponse = Schema.Struct({
|
|
442
|
+
sessions: Schema.Array(PlatformSession),
|
|
443
|
+
});
|
|
444
|
+
/**
|
|
445
|
+
* `POST /auth/platform-sessions/revoke` — revoke one session.
|
|
446
|
+
*
|
|
447
|
+
* `sessionId` accepts either the prefixed TypeID (`sess_*`, preferred)
|
|
448
|
+
* or the raw UUID — the BaaS side normalises via `parseIdOrError`.
|
|
449
|
+
*/
|
|
450
|
+
export const PlatformSessionRevokeRequest = Schema.Struct({
|
|
451
|
+
sessionId: Schema.String,
|
|
452
|
+
});
|
|
453
|
+
export const PlatformSessionRevokeResponse = Schema.Struct({
|
|
454
|
+
success: Schema.Literal(true),
|
|
455
|
+
});
|
|
456
|
+
/**
|
|
457
|
+
* `POST /auth/platform-sessions/revoke-other` — revoke every session
|
|
458
|
+
* except the one presenting the current access token.
|
|
459
|
+
*
|
|
460
|
+
* When the token carries no `sid` claim (pure-Bearer CLI/CI flows),
|
|
461
|
+
* every session for the user is revoked — equivalent to `revoke-all`.
|
|
462
|
+
*/
|
|
463
|
+
export const PlatformSessionRevokeOtherResponse = Schema.Struct({
|
|
464
|
+
revokedCount: Schema.Number,
|
|
465
|
+
});
|
|
466
|
+
/**
|
|
467
|
+
* `POST /auth/platform-sessions/revoke-all` — revoke every session for
|
|
468
|
+
* the user, including the caller's own. Used by "sign me out
|
|
469
|
+
* everywhere" after a password change or a compromise scare.
|
|
470
|
+
*/
|
|
471
|
+
export const PlatformSessionRevokeAllResponse = Schema.Struct({
|
|
472
|
+
success: Schema.Literal(true),
|
|
473
|
+
count: Schema.Number,
|
|
474
|
+
});
|
|
475
|
+
/**
|
|
476
|
+
* `POST /auth/platform-sessions/rename` — update the user-visible
|
|
477
|
+
* device label on a session row.
|
|
478
|
+
*/
|
|
479
|
+
export const PlatformSessionRenameRequest = Schema.Struct({
|
|
480
|
+
sessionId: Schema.String,
|
|
481
|
+
name: Schema.String,
|
|
482
|
+
});
|
|
483
|
+
export const PlatformSessionRenameResponse = Schema.Struct({
|
|
484
|
+
success: Schema.Literal(true),
|
|
485
|
+
});
|
|
486
|
+
// ─── Platform Password (ADR-089 Phase 2c) ──────────────────────────────────
|
|
487
|
+
//
|
|
488
|
+
// Password management for the Platform plane (Console / CLI operators).
|
|
489
|
+
// These schemas back the `/auth/platform-password/*` endpoints in
|
|
490
|
+
// `apps/runtime` that Phase 2c migrates off the Platform bypass (previously
|
|
491
|
+
// served by `apps/api/.../security/password.ts` + `user.ts` imports of
|
|
492
|
+
// `@sylphx/core/features/auth/lib/password`).
|
|
493
|
+
//
|
|
494
|
+
// Shapes deliberately mirror the Platform-side `PasswordStatusResult` /
|
|
495
|
+
// `SetPasswordInput` / `ChangePasswordInput` in the contract's
|
|
496
|
+
// `schemas/security.ts` + `schemas/user.ts` so the SDK swap is a
|
|
497
|
+
// zero-diff pass-through on the Platform side. All primitive-hash work
|
|
498
|
+
// (bcrypt/argon2/scrypt) lives inside the BaaS route — Platform callers
|
|
499
|
+
// never touch the primitives directly (ADR-089 §5 S1–S4).
|
|
500
|
+
/**
|
|
501
|
+
* `GET /auth/platform-password/status` — whether the authenticated user
|
|
502
|
+
* has a password set. OAuth-only users return `{ hasPassword: false }`.
|
|
503
|
+
*/
|
|
504
|
+
export const PlatformPasswordStatusResponse = Schema.Struct({
|
|
505
|
+
hasPassword: Schema.Boolean,
|
|
506
|
+
});
|
|
507
|
+
/**
|
|
508
|
+
* `POST /auth/platform-password/set` — initial password for users that
|
|
509
|
+
* don't have one (signed up via OAuth, never set a local password).
|
|
510
|
+
*
|
|
511
|
+
* BaaS enforces the 8-char minimum and the have-i-been-pwned breach check
|
|
512
|
+
* server-side; Platform callers just forward the plaintext.
|
|
513
|
+
*/
|
|
514
|
+
export const PlatformPasswordSetRequest = Schema.Struct({
|
|
515
|
+
password: Schema.String,
|
|
516
|
+
});
|
|
517
|
+
export const PlatformPasswordSetResponse = Schema.Struct({
|
|
518
|
+
success: Schema.Literal(true),
|
|
519
|
+
});
|
|
520
|
+
/**
|
|
521
|
+
* `POST /auth/platform-password/change` — change an existing password.
|
|
522
|
+
*
|
|
523
|
+
* `currentPassword` verification happens server-side via
|
|
524
|
+
* `verifyPasswordEffect`; a mismatch returns 401 UNAUTHORIZED. Users
|
|
525
|
+
* that are OAuth-only (no `passwordHash`) receive a 400 so the UI can
|
|
526
|
+
* redirect them to `set`.
|
|
527
|
+
*/
|
|
528
|
+
export const PlatformPasswordChangeRequest = Schema.Struct({
|
|
529
|
+
currentPassword: Schema.String,
|
|
530
|
+
newPassword: Schema.String,
|
|
531
|
+
});
|
|
532
|
+
export const PlatformPasswordChangeResponse = Schema.Struct({
|
|
533
|
+
success: Schema.Literal(true),
|
|
534
|
+
});
|
|
535
|
+
// ─── Platform User Data (ADR-089 Phase 2d) ─────────────────────────────────
|
|
536
|
+
//
|
|
537
|
+
// GDPR operations for the Platform plane (Console / CLI operators).
|
|
538
|
+
// These schemas back the `/auth/platform-user/*` endpoints in
|
|
539
|
+
// `apps/runtime` that Phase 2d migrates off the Platform bypass
|
|
540
|
+
// (previously served by `apps/api/.../user.ts` reaching directly into
|
|
541
|
+
// `@sylphx/core/lib/auth/index` for `exportUserData` + `deleteUserData`).
|
|
542
|
+
//
|
|
543
|
+
// Shapes deliberately mirror `UserDataExport` / `DeleteAccountResult` in
|
|
544
|
+
// `schemas/user.ts` so the SDK swap is a zero-diff pass-through on the
|
|
545
|
+
// Platform side. All cascading erasure work (per-project BaaS DBs,
|
|
546
|
+
// Stripe cleanup, S3 blob deletion, audit anonymisation) lives inside
|
|
547
|
+
// the BaaS route — Platform callers never touch the underlying stores
|
|
548
|
+
// directly, per ADR-089 Principle 2.
|
|
549
|
+
/**
|
|
550
|
+
* `GET /auth/platform-user/export` — GDPR data-portability envelope.
|
|
551
|
+
*
|
|
552
|
+
* Deliberately permissive — the export contains per-project data that
|
|
553
|
+
* varies by customer provisioning (storage files, project memberships,
|
|
554
|
+
* subscription rows). Platform callers pass the whole record through
|
|
555
|
+
* to the user verbatim; the Console renders it as a JSON download.
|
|
556
|
+
*/
|
|
557
|
+
export const AuthUserExportResponse = Schema.Record({
|
|
558
|
+
key: Schema.String,
|
|
559
|
+
value: Schema.Unknown,
|
|
560
|
+
});
|
|
561
|
+
/**
|
|
562
|
+
* `DELETE /auth/platform-user/account` — GDPR right-to-erasure request.
|
|
563
|
+
*
|
|
564
|
+
* `reason` is optional operator context (`user_request` / `admin_action`
|
|
565
|
+
* / `account_violation`); the BaaS route defaults to `user_request`.
|
|
566
|
+
* Production hardening (WebAuthn step-up challenge) lands in Phase 5.11 —
|
|
567
|
+
* see the handler TODO.
|
|
568
|
+
*/
|
|
569
|
+
export const AuthUserDeleteRequest = Schema.Struct({
|
|
570
|
+
reason: Schema.optional(Schema.String),
|
|
571
|
+
});
|
|
572
|
+
/**
|
|
573
|
+
* `DELETE /auth/platform-user/account` response.
|
|
574
|
+
*
|
|
575
|
+
* `deletedData` is the string list of resource kinds actually erased
|
|
576
|
+
* (sessions, oauthAccounts, projectUsers, storageFiles, …). Mirrors the
|
|
577
|
+
* `UserDeletionResult.deletedData` surface from the core helper but
|
|
578
|
+
* flattened to a string array — the per-kind counts are audit-log
|
|
579
|
+
* payload only.
|
|
580
|
+
*/
|
|
581
|
+
export const AuthUserDeleteResponse = Schema.Struct({
|
|
582
|
+
success: Schema.Boolean,
|
|
583
|
+
deletedData: Schema.Array(Schema.String),
|
|
584
|
+
});
|
|
585
|
+
// ─── Platform Audit Query (ADR-089 Phase 5.3b) ─────────────────────────────
|
|
586
|
+
//
|
|
587
|
+
// Scope-filtered reader for the tamper-evident audit-log chain introduced
|
|
588
|
+
// by Phase 5.3 foundation. Backs the `/audit/query` endpoint in
|
|
589
|
+
// `apps/runtime/src/server/runtime/routes/audit.ts` (renamed out of
|
|
590
|
+
// `/auth/platform-audit/*` by Phase Σ1 SoC rename).
|
|
591
|
+
//
|
|
592
|
+
// Scope enforcement (server-side — `audit` handler in runtime):
|
|
593
|
+
// - `super_admin` / `admin` → all scopes, all rows.
|
|
594
|
+
// - project admin → `project-ops` + `app-events` for projects
|
|
595
|
+
// they admin (org-level role check).
|
|
596
|
+
// - regular user → `project-ops` for projects they're a member
|
|
597
|
+
// of, OR their own `app-events`.
|
|
598
|
+
// - scope escalation → 403 `audit_scope_forbidden`.
|
|
599
|
+
//
|
|
600
|
+
// Cursor is opaque, HMAC-signed: base64({ lastTs, lastId }) + sig. Clients
|
|
601
|
+
// MUST treat it as a black box — the shape is NOT a wire contract and can
|
|
602
|
+
// change without a version bump.
|
|
603
|
+
/** Scope taxonomy — matches `audit_logs.scope` CHECK on the DB side. */
|
|
604
|
+
export const AuditScopeLiteral = Schema.Literal('platform-ops', 'project-ops', 'app-events');
|
|
605
|
+
/**
|
|
606
|
+
* `GET /audit/query` — filter envelope. All fields optional
|
|
607
|
+
* except `limit` (default 100, max 500). `from` / `to` are ISO-8601 UTC;
|
|
608
|
+
* `cursor` paginates; `scope` narrows to one plane (caller role must
|
|
609
|
+
* include it — see scope enforcement notes above).
|
|
610
|
+
*/
|
|
611
|
+
export const PlatformAuditQueryRequest = Schema.Struct({
|
|
612
|
+
scope: Schema.optional(AuditScopeLiteral),
|
|
613
|
+
actor: Schema.optional(Schema.String),
|
|
614
|
+
resourceType: Schema.optional(Schema.String),
|
|
615
|
+
resourceId: Schema.optional(Schema.String),
|
|
616
|
+
action: Schema.optional(Schema.String),
|
|
617
|
+
from: Schema.optional(Schema.String),
|
|
618
|
+
to: Schema.optional(Schema.String),
|
|
619
|
+
cursor: Schema.optional(Schema.String),
|
|
620
|
+
limit: Schema.optional(Schema.Number),
|
|
621
|
+
});
|
|
622
|
+
/** One audit row as surfaced to the query client. Hashes are hex-encoded. */
|
|
623
|
+
export const PlatformAuditEvent = Schema.Struct({
|
|
624
|
+
id: Schema.String,
|
|
625
|
+
ts: Schema.String,
|
|
626
|
+
scope: AuditScopeLiteral,
|
|
627
|
+
actor: Schema.NullOr(Schema.String),
|
|
628
|
+
user: Schema.NullOr(Schema.String),
|
|
629
|
+
orgId: Schema.NullOr(Schema.String),
|
|
630
|
+
projectId: Schema.NullOr(Schema.String),
|
|
631
|
+
resourceType: Schema.String,
|
|
632
|
+
resourceId: Schema.NullOr(Schema.String),
|
|
633
|
+
action: Schema.String,
|
|
634
|
+
metadata: Schema.NullOr(Schema.Record({ key: Schema.String, value: Schema.Unknown })),
|
|
635
|
+
prevHashHex: Schema.NullOr(Schema.String),
|
|
636
|
+
rowHashHex: Schema.NullOr(Schema.String),
|
|
637
|
+
});
|
|
638
|
+
/**
|
|
639
|
+
* Response envelope — paginated events + chain-verification flag.
|
|
640
|
+
*
|
|
641
|
+
* `chainVerified` is `true` when every returned row's `prev_hash` equals
|
|
642
|
+
* the preceding row's `row_hash` (rows returned in chain order). It MAY
|
|
643
|
+
* be `false` when a range query skips a row (rare; not corruption) —
|
|
644
|
+
* the field is advisory for the client, the ground-truth verifier is
|
|
645
|
+
* `scripts/check-audit-hash-chain.ts --nightly`.
|
|
646
|
+
*/
|
|
647
|
+
export const PlatformAuditQueryResponse = Schema.Struct({
|
|
648
|
+
events: Schema.Array(PlatformAuditEvent),
|
|
649
|
+
nextCursor: Schema.NullOr(Schema.String),
|
|
650
|
+
chainVerified: Schema.Boolean,
|
|
651
|
+
});
|
|
652
|
+
// ─── Platform Rate-Limit API (ADR-089 Phase 5.2) ───────────────────────────
|
|
653
|
+
//
|
|
654
|
+
// BaaS surface that lets operators inspect live rate-limit counter state and
|
|
655
|
+
// manage per-(scope, scope_id, namespace) strategy overrides without a code
|
|
656
|
+
// deploy. Enforcement reads the override table through the resolver with a
|
|
657
|
+
// 60s in-process cache; upserts/deletes invalidate the cache in-band and
|
|
658
|
+
// the next read sees the new config. Missing overrides fall through to the
|
|
659
|
+
// hard-coded `RateLimitPresets` defaults in `@sylphx/core`.
|
|
660
|
+
//
|
|
661
|
+
// Scope enforcement (server-side — `authPlatformRateLimits` handler):
|
|
662
|
+
// - super_admin / admin → all scopes.
|
|
663
|
+
// - project admin → `project` + their project_id only.
|
|
664
|
+
// - regular user → `user` + their own user id only.
|
|
665
|
+
// - scope escalation → 403 `rate_limit_scope_forbidden`.
|
|
666
|
+
/** Scope taxonomy — mirrors `RATE_LIMIT_SCOPES` in the Drizzle schema. */
|
|
667
|
+
export const RateLimitScopeLiteral = Schema.Literal('global', 'project', 'user');
|
|
668
|
+
/** Strategy taxonomy — mirrors `RATE_LIMIT_STRATEGIES`. */
|
|
669
|
+
export const RateLimitStrategyLiteral = Schema.Literal('token-bucket', 'sliding-window', 'fixed-window');
|
|
670
|
+
const NamespaceString = Schema.String.pipe(Schema.pattern(/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/));
|
|
671
|
+
export const PlatformRateLimitStatusRequest = Schema.Struct({
|
|
672
|
+
scope: Schema.optional(RateLimitScopeLiteral),
|
|
673
|
+
scope_id: Schema.optional(Schema.String),
|
|
674
|
+
namespace: Schema.optional(NamespaceString),
|
|
675
|
+
});
|
|
676
|
+
export const PlatformRateLimitStatusRow = Schema.Struct({
|
|
677
|
+
namespace: Schema.String,
|
|
678
|
+
scope: RateLimitScopeLiteral,
|
|
679
|
+
scopeId: Schema.NullOr(Schema.String),
|
|
680
|
+
strategy: RateLimitStrategyLiteral,
|
|
681
|
+
limit: Schema.Number,
|
|
682
|
+
windowSeconds: Schema.Number,
|
|
683
|
+
burst: Schema.NullOr(Schema.Number),
|
|
684
|
+
source: Schema.Literal('default', 'global', 'project', 'user'),
|
|
685
|
+
});
|
|
686
|
+
export const PlatformRateLimitStatusResponse = Schema.Struct({
|
|
687
|
+
rows: Schema.Array(PlatformRateLimitStatusRow),
|
|
688
|
+
});
|
|
689
|
+
export const PlatformRateLimitStrategiesListRequest = Schema.Struct({
|
|
690
|
+
scope: Schema.optional(RateLimitScopeLiteral),
|
|
691
|
+
scope_id: Schema.optional(Schema.String),
|
|
692
|
+
});
|
|
693
|
+
export const PlatformRateLimitStrategyRow = Schema.Struct({
|
|
694
|
+
id: Schema.String,
|
|
695
|
+
scope: RateLimitScopeLiteral,
|
|
696
|
+
scopeId: Schema.NullOr(Schema.String),
|
|
697
|
+
namespace: Schema.String,
|
|
698
|
+
strategy: RateLimitStrategyLiteral,
|
|
699
|
+
limitCount: Schema.Number,
|
|
700
|
+
windowSeconds: Schema.Number,
|
|
701
|
+
burstCount: Schema.NullOr(Schema.Number),
|
|
702
|
+
updatedAt: Schema.String,
|
|
703
|
+
updatedBy: Schema.NullOr(Schema.String),
|
|
704
|
+
});
|
|
705
|
+
export const PlatformRateLimitStrategiesListResponse = Schema.Struct({
|
|
706
|
+
strategies: Schema.Array(PlatformRateLimitStrategyRow),
|
|
707
|
+
});
|
|
708
|
+
export const PlatformRateLimitNamespaceParams = Schema.Struct({
|
|
709
|
+
namespace: NamespaceString,
|
|
710
|
+
});
|
|
711
|
+
export const PlatformRateLimitStrategyUpsertRequest = Schema.Struct({
|
|
712
|
+
scope: RateLimitScopeLiteral,
|
|
713
|
+
scope_id: Schema.optional(Schema.String),
|
|
714
|
+
strategy: RateLimitStrategyLiteral,
|
|
715
|
+
limit: Schema.Number,
|
|
716
|
+
windowSeconds: Schema.Number,
|
|
717
|
+
burst: Schema.optional(Schema.NullOr(Schema.Number)),
|
|
718
|
+
});
|
|
719
|
+
export const PlatformRateLimitStrategyUpsertResponse = Schema.Struct({
|
|
720
|
+
strategy: PlatformRateLimitStrategyRow,
|
|
721
|
+
});
|
|
722
|
+
export const PlatformRateLimitStrategyDeleteRequest = Schema.Struct({
|
|
723
|
+
scope: RateLimitScopeLiteral,
|
|
724
|
+
scope_id: Schema.optional(Schema.String),
|
|
725
|
+
});
|
|
726
|
+
export const PlatformRateLimitStrategyDeleteResponse = Schema.Struct({
|
|
727
|
+
deleted: Schema.Boolean,
|
|
728
|
+
});
|
|
729
|
+
// ============================================================================
|
|
730
|
+
// Passkey-Primary Signup — ADR-089 Phase 5.11 / P14 + S26
|
|
731
|
+
// ============================================================================
|
|
732
|
+
/**
|
|
733
|
+
* Passkey signup-challenge request. `orgId` binds the ceremony to an org
|
|
734
|
+
* for policy enforcement (device-bound + AAGUID allow-list). Omit for
|
|
735
|
+
* personal signups.
|
|
736
|
+
*/
|
|
737
|
+
export const PasskeySignupChallengeRequest = Schema.Struct({
|
|
738
|
+
email: Schema.String,
|
|
739
|
+
displayName: Schema.optional(Schema.String),
|
|
740
|
+
orgId: Schema.optional(Schema.String),
|
|
741
|
+
});
|
|
742
|
+
/**
|
|
743
|
+
* WebAuthn registration options + platform-issued `userHandle`. Caller
|
|
744
|
+
* feeds these to `navigator.credentials.create({ publicKey: options })`
|
|
745
|
+
* and echoes `userHandle` back to /signup-verify.
|
|
746
|
+
*/
|
|
747
|
+
export const PasskeySignupChallengeResponse = Schema.Struct({
|
|
748
|
+
challenge: Schema.String,
|
|
749
|
+
rp: Schema.Struct({
|
|
750
|
+
name: Schema.String,
|
|
751
|
+
id: Schema.optional(Schema.String),
|
|
752
|
+
}),
|
|
753
|
+
user: Schema.Struct({
|
|
754
|
+
id: Schema.String,
|
|
755
|
+
name: Schema.String,
|
|
756
|
+
displayName: Schema.String,
|
|
757
|
+
}),
|
|
758
|
+
pubKeyCredParams: Schema.Array(Schema.Struct({ type: Schema.Literal('public-key'), alg: Schema.Number })),
|
|
759
|
+
timeout: Schema.optional(Schema.Number),
|
|
760
|
+
attestation: Schema.optional(Schema.String),
|
|
761
|
+
authenticatorSelection: Schema.optional(Schema.Struct({
|
|
762
|
+
authenticatorAttachment: Schema.optional(Schema.Literal('platform', 'cross-platform')),
|
|
763
|
+
residentKey: Schema.optional(Schema.Literal('discouraged', 'preferred', 'required')),
|
|
764
|
+
userVerification: Schema.optional(Schema.Literal('discouraged', 'preferred', 'required')),
|
|
765
|
+
})),
|
|
766
|
+
userHandle: Schema.String,
|
|
767
|
+
});
|
|
768
|
+
export const PasskeySignupVerifyRequest = Schema.Struct({
|
|
769
|
+
email: Schema.String,
|
|
770
|
+
userHandle: Schema.String,
|
|
771
|
+
credential: Schema.Unknown, // RegistrationResponseJSON — shape varies by browser
|
|
772
|
+
deviceName: Schema.optional(Schema.String),
|
|
773
|
+
});
|
|
774
|
+
export const PasskeySignupVerifyResponse = Schema.Struct({
|
|
775
|
+
accessToken: Schema.String,
|
|
776
|
+
refreshToken: Schema.String,
|
|
777
|
+
expiresIn: Schema.Number,
|
|
778
|
+
user: Schema.Struct({
|
|
779
|
+
id: Schema.String,
|
|
780
|
+
email: Schema.String,
|
|
781
|
+
name: Schema.NullOr(Schema.String),
|
|
782
|
+
role: Schema.String,
|
|
783
|
+
}),
|
|
784
|
+
passkey: Schema.Struct({
|
|
785
|
+
id: Schema.String,
|
|
786
|
+
authenticatorAttachment: Schema.NullOr(Schema.Literal('platform', 'cross-platform')),
|
|
787
|
+
backupState: Schema.NullOr(Schema.Boolean),
|
|
788
|
+
aaguid: Schema.NullOr(Schema.String),
|
|
789
|
+
}),
|
|
790
|
+
});
|
|
791
|
+
export const PasskeyPolicyViolationResponse = Schema.Struct({
|
|
792
|
+
error: Schema.Literal('policy_violation'),
|
|
793
|
+
code: Schema.Literal('device_bound_required', 'aaguid_not_allowed'),
|
|
794
|
+
message: Schema.String,
|
|
795
|
+
});
|
|
796
|
+
export const PrimaryAuthMethodResponse = Schema.Struct({
|
|
797
|
+
userId: Schema.String,
|
|
798
|
+
primaryAuthMethod: Schema.Literal('passkey', 'password'),
|
|
799
|
+
});
|
|
800
|
+
// ============================================================================
|
|
801
|
+
// Org Auth Policy — ADR-089 Phase 5.11 / S26
|
|
802
|
+
// ============================================================================
|
|
803
|
+
export const OrgAuthPolicy = Schema.Struct({
|
|
804
|
+
orgId: Schema.String,
|
|
805
|
+
requirePasskeyForSignup: Schema.Boolean,
|
|
806
|
+
requireDeviceBoundPasskeys: Schema.Boolean,
|
|
807
|
+
allowedAaguids: Schema.Array(Schema.String),
|
|
808
|
+
updatedAt: Schema.String,
|
|
809
|
+
updatedBy: Schema.NullOr(Schema.String),
|
|
810
|
+
});
|
|
811
|
+
export const OrgAuthPolicyUpdateRequest = Schema.Struct({
|
|
812
|
+
requirePasskeyForSignup: Schema.optional(Schema.Boolean),
|
|
813
|
+
requireDeviceBoundPasskeys: Schema.optional(Schema.Boolean),
|
|
814
|
+
allowedAaguids: Schema.optional(Schema.Array(Schema.String)),
|
|
815
|
+
});
|