@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,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin Resources — operator recovery schemas (OPS-3).
|
|
3
|
+
*
|
|
4
|
+
* Mirrors `apps/api/src/server/platform/routes/admin/resources.ts`.
|
|
5
|
+
* Replaces the manual `DELETE FROM managed_resources WHERE id=...` from
|
|
6
|
+
* `docs/how-to/teardown-failure.md` (lines 113, 131) with a structured
|
|
7
|
+
* admin endpoint.
|
|
8
|
+
*
|
|
9
|
+
* Plane: `admin` (super-admin / scoped service-token only — scope
|
|
10
|
+
* `platform:resources:forcedelete`).
|
|
11
|
+
*
|
|
12
|
+
* Sibling slice OPS-2 (reseal) extends this file with its own schemas
|
|
13
|
+
* when it lands; keeping both under `admin-resources` so the audit
|
|
14
|
+
* `resourceType='managed_resource'` aligns with the surface name.
|
|
15
|
+
*/
|
|
16
|
+
import { Schema } from 'effect';
|
|
17
|
+
/**
|
|
18
|
+
* Path param for `DELETE /admin/resources/:id`. Matches the TypeID grammar
|
|
19
|
+
* (`res_xxx`) — invalid input returns 400 at the validator boundary.
|
|
20
|
+
*/
|
|
21
|
+
export declare const AdminResourceIdParams: Schema.Struct<{
|
|
22
|
+
id: Schema.filter<typeof Schema.String>;
|
|
23
|
+
}>;
|
|
24
|
+
export type AdminResourceIdParams = typeof AdminResourceIdParams.Type;
|
|
25
|
+
/**
|
|
26
|
+
* Query parameters for `DELETE /admin/resources/:id`.
|
|
27
|
+
*
|
|
28
|
+
* Semantics:
|
|
29
|
+
*
|
|
30
|
+
* - `reason` — required. Goes verbatim into the audit row.
|
|
31
|
+
* - `cascade` — when `true`, also tears down dependent rows (PITR
|
|
32
|
+
* restore points, project_platform_resources binding,
|
|
33
|
+
* project_resource_bindings rows). Default `false`.
|
|
34
|
+
* - `reallyForce` — escape hatch for rows whose `reconcile_status` is
|
|
35
|
+
* NOT `terminating`. Default `false`. The endpoint
|
|
36
|
+
* refuses the row otherwise (the reconciler should
|
|
37
|
+
* drive normal teardown — only rows already in
|
|
38
|
+
* `terminating` are valid candidates here).
|
|
39
|
+
*/
|
|
40
|
+
export declare const AdminResourceForceDeleteQuery: Schema.Struct<{
|
|
41
|
+
reason: Schema.filter<Schema.filter<typeof Schema.String>>;
|
|
42
|
+
cascade: Schema.optional<Schema.transform<Schema.Union<[Schema.Literal<["true"]>, Schema.Literal<["false"]>]>, typeof Schema.Boolean>>;
|
|
43
|
+
reallyForce: Schema.optional<Schema.transform<Schema.Union<[Schema.Literal<["true"]>, Schema.Literal<["false"]>]>, typeof Schema.Boolean>>;
|
|
44
|
+
}>;
|
|
45
|
+
export type AdminResourceForceDeleteQuery = typeof AdminResourceForceDeleteQuery.Type;
|
|
46
|
+
/**
|
|
47
|
+
* Response envelope.
|
|
48
|
+
*
|
|
49
|
+
* - `id` — TypeID (`res_xxx`) of the row that was deleted.
|
|
50
|
+
* - `previousStatus` — `reconcile_status` value the row carried just
|
|
51
|
+
* before the DELETE landed. Operators use this to
|
|
52
|
+
* confirm the row was in `terminating` (or that
|
|
53
|
+
* `--really-force` was the override path).
|
|
54
|
+
* - `cascade` — echo of the request flag.
|
|
55
|
+
* - `reallyForce` — echo of the request flag.
|
|
56
|
+
* - `dependentsDeleted` — count of dependent rows additionally removed
|
|
57
|
+
* when cascade was true (PITR restore points,
|
|
58
|
+
* platform binding, project resource bindings).
|
|
59
|
+
* Always 0 when cascade=false.
|
|
60
|
+
*/
|
|
61
|
+
export declare const AdminResourceForceDeleteResult: Schema.Struct<{
|
|
62
|
+
id: typeof Schema.String;
|
|
63
|
+
previousStatus: typeof Schema.String;
|
|
64
|
+
cascade: typeof Schema.Boolean;
|
|
65
|
+
reallyForce: typeof Schema.Boolean;
|
|
66
|
+
dependentsDeleted: typeof Schema.Number;
|
|
67
|
+
}>;
|
|
68
|
+
export type AdminResourceForceDeleteResult = typeof AdminResourceForceDeleteResult.Type;
|
|
69
|
+
/**
|
|
70
|
+
* Body of `POST /admin/resources/reseal`.
|
|
71
|
+
*
|
|
72
|
+
* - `keyId` — the active KEK ID the operator believes the platform
|
|
73
|
+
* is serving with. The endpoint refuses with 409 if the
|
|
74
|
+
* live ring's `activeKeyId` does not match — protecting
|
|
75
|
+
* against split-brain rotations where two operators race.
|
|
76
|
+
* - `filter` — reserved (see `ResealFilter`). Today the endpoint walks
|
|
77
|
+
* the canonical `buildRotationFields()` registry for ALL
|
|
78
|
+
* rows whose envelope is not under the active key; the
|
|
79
|
+
* filter is accepted but logged as ignored. When per-
|
|
80
|
+
* row scoping ships, the registry adapter will honour it.
|
|
81
|
+
*
|
|
82
|
+
* Idempotent: re-running with the same `keyId` rewrites zero rows once
|
|
83
|
+
* the registry has converged.
|
|
84
|
+
*/
|
|
85
|
+
export declare const AdminResourceResealInput: Schema.Struct<{
|
|
86
|
+
keyId: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
|
|
87
|
+
filter: Schema.optional<Schema.Struct<{
|
|
88
|
+
projectId: Schema.optional<typeof Schema.String>;
|
|
89
|
+
envId: Schema.optional<typeof Schema.String>;
|
|
90
|
+
}>>;
|
|
91
|
+
}>;
|
|
92
|
+
export type AdminResourceResealInput = typeof AdminResourceResealInput.Type;
|
|
93
|
+
/**
|
|
94
|
+
* Per-field result. Mirrors `RotationFieldResult` from
|
|
95
|
+
* `packages/core/src/lib/crypto/rotation.ts` so the wire format stays a
|
|
96
|
+
* faithful projection of the in-process struct.
|
|
97
|
+
*/
|
|
98
|
+
export declare const AdminResourceResealFieldResult: Schema.Struct<{
|
|
99
|
+
fieldName: typeof Schema.String;
|
|
100
|
+
rowsSeen: typeof Schema.Number;
|
|
101
|
+
rowsRotated: typeof Schema.Number;
|
|
102
|
+
rowsFailed: typeof Schema.Number;
|
|
103
|
+
failures: Schema.Array$<Schema.Struct<{
|
|
104
|
+
id: typeof Schema.String;
|
|
105
|
+
reason: typeof Schema.String;
|
|
106
|
+
}>>;
|
|
107
|
+
}>;
|
|
108
|
+
export type AdminResourceResealFieldResult = typeof AdminResourceResealFieldResult.Type;
|
|
109
|
+
/**
|
|
110
|
+
* Response envelope. `activeKeyId` is the server's authoritative answer
|
|
111
|
+
* (echo of the input on success).
|
|
112
|
+
*/
|
|
113
|
+
export declare const AdminResourceResealResult: Schema.Struct<{
|
|
114
|
+
activeKeyId: typeof Schema.String;
|
|
115
|
+
totalRotated: typeof Schema.Number;
|
|
116
|
+
totalFailed: typeof Schema.Number;
|
|
117
|
+
fields: Schema.Array$<Schema.Struct<{
|
|
118
|
+
fieldName: typeof Schema.String;
|
|
119
|
+
rowsSeen: typeof Schema.Number;
|
|
120
|
+
rowsRotated: typeof Schema.Number;
|
|
121
|
+
rowsFailed: typeof Schema.Number;
|
|
122
|
+
failures: Schema.Array$<Schema.Struct<{
|
|
123
|
+
id: typeof Schema.String;
|
|
124
|
+
reason: typeof Schema.String;
|
|
125
|
+
}>>;
|
|
126
|
+
}>>;
|
|
127
|
+
}>;
|
|
128
|
+
export type AdminResourceResealResult = typeof AdminResourceResealResult.Type;
|
|
129
|
+
//# sourceMappingURL=admin-resources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-resources.d.ts","sourceRoot":"","sources":["../../src/schemas/admin-resources.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAI/B;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;EAMhC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,OAAO,qBAAqB,CAAC,IAAI,CAAA;AAgBrE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,6BAA6B;;;;EAIxC,CAAA;AACF,MAAM,MAAM,6BAA6B,GAAG,OAAO,6BAA6B,CAAC,IAAI,CAAA;AAErF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,8BAA8B;;;;;;EAMzC,CAAA;AACF,MAAM,MAAM,8BAA8B,GAAG,OAAO,8BAA8B,CAAC,IAAI,CAAA;AA6BvF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,wBAAwB;;;;;;EAGnC,CAAA;AACF,MAAM,MAAM,wBAAwB,GAAG,OAAO,wBAAwB,CAAC,IAAI,CAAA;AAE3E;;;;GAIG;AACH,eAAO,MAAM,8BAA8B;;;;;;;;;EAWzC,CAAA;AACF,MAAM,MAAM,8BAA8B,GAAG,OAAO,8BAA8B,CAAC,IAAI,CAAA;AAEvF;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;EAKpC,CAAA;AACF,MAAM,MAAM,yBAAyB,GAAG,OAAO,yBAAyB,CAAC,IAAI,CAAA"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin Resources — operator recovery schemas (OPS-3).
|
|
3
|
+
*
|
|
4
|
+
* Mirrors `apps/api/src/server/platform/routes/admin/resources.ts`.
|
|
5
|
+
* Replaces the manual `DELETE FROM managed_resources WHERE id=...` from
|
|
6
|
+
* `docs/how-to/teardown-failure.md` (lines 113, 131) with a structured
|
|
7
|
+
* admin endpoint.
|
|
8
|
+
*
|
|
9
|
+
* Plane: `admin` (super-admin / scoped service-token only — scope
|
|
10
|
+
* `platform:resources:forcedelete`).
|
|
11
|
+
*
|
|
12
|
+
* Sibling slice OPS-2 (reseal) extends this file with its own schemas
|
|
13
|
+
* when it lands; keeping both under `admin-resources` so the audit
|
|
14
|
+
* `resourceType='managed_resource'` aligns with the surface name.
|
|
15
|
+
*/
|
|
16
|
+
import { Schema } from 'effect';
|
|
17
|
+
// ─── Force-delete (OPS-3) ───────────────────────────────────────────────
|
|
18
|
+
/**
|
|
19
|
+
* Path param for `DELETE /admin/resources/:id`. Matches the TypeID grammar
|
|
20
|
+
* (`res_xxx`) — invalid input returns 400 at the validator boundary.
|
|
21
|
+
*/
|
|
22
|
+
export const AdminResourceIdParams = Schema.Struct({
|
|
23
|
+
id: Schema.String.pipe(Schema.pattern(/^res_[0-9a-z]{20,30}$/i, {
|
|
24
|
+
message: () => 'id must be a TypeID with prefix `res_`',
|
|
25
|
+
})),
|
|
26
|
+
});
|
|
27
|
+
/**
|
|
28
|
+
* Reason string for the audit trail. Length-bounded so audit_logs.metadata
|
|
29
|
+
* stays predictable.
|
|
30
|
+
*/
|
|
31
|
+
const Reason = Schema.String.pipe(Schema.minLength(3), Schema.maxLength(500));
|
|
32
|
+
const BoolString = Schema.Union(Schema.Literal('true'), Schema.Literal('false')).pipe(Schema.transform(Schema.Boolean, {
|
|
33
|
+
strict: true,
|
|
34
|
+
decode: (s) => s === 'true',
|
|
35
|
+
encode: (b) => (b ? 'true' : 'false'),
|
|
36
|
+
}));
|
|
37
|
+
/**
|
|
38
|
+
* Query parameters for `DELETE /admin/resources/:id`.
|
|
39
|
+
*
|
|
40
|
+
* Semantics:
|
|
41
|
+
*
|
|
42
|
+
* - `reason` — required. Goes verbatim into the audit row.
|
|
43
|
+
* - `cascade` — when `true`, also tears down dependent rows (PITR
|
|
44
|
+
* restore points, project_platform_resources binding,
|
|
45
|
+
* project_resource_bindings rows). Default `false`.
|
|
46
|
+
* - `reallyForce` — escape hatch for rows whose `reconcile_status` is
|
|
47
|
+
* NOT `terminating`. Default `false`. The endpoint
|
|
48
|
+
* refuses the row otherwise (the reconciler should
|
|
49
|
+
* drive normal teardown — only rows already in
|
|
50
|
+
* `terminating` are valid candidates here).
|
|
51
|
+
*/
|
|
52
|
+
export const AdminResourceForceDeleteQuery = Schema.Struct({
|
|
53
|
+
reason: Reason,
|
|
54
|
+
cascade: Schema.optional(BoolString),
|
|
55
|
+
reallyForce: Schema.optional(BoolString),
|
|
56
|
+
});
|
|
57
|
+
/**
|
|
58
|
+
* Response envelope.
|
|
59
|
+
*
|
|
60
|
+
* - `id` — TypeID (`res_xxx`) of the row that was deleted.
|
|
61
|
+
* - `previousStatus` — `reconcile_status` value the row carried just
|
|
62
|
+
* before the DELETE landed. Operators use this to
|
|
63
|
+
* confirm the row was in `terminating` (or that
|
|
64
|
+
* `--really-force` was the override path).
|
|
65
|
+
* - `cascade` — echo of the request flag.
|
|
66
|
+
* - `reallyForce` — echo of the request flag.
|
|
67
|
+
* - `dependentsDeleted` — count of dependent rows additionally removed
|
|
68
|
+
* when cascade was true (PITR restore points,
|
|
69
|
+
* platform binding, project resource bindings).
|
|
70
|
+
* Always 0 when cascade=false.
|
|
71
|
+
*/
|
|
72
|
+
export const AdminResourceForceDeleteResult = Schema.Struct({
|
|
73
|
+
id: Schema.String,
|
|
74
|
+
previousStatus: Schema.String,
|
|
75
|
+
cascade: Schema.Boolean,
|
|
76
|
+
reallyForce: Schema.Boolean,
|
|
77
|
+
dependentsDeleted: Schema.Number,
|
|
78
|
+
});
|
|
79
|
+
// ─── Reseal (OPS-2) ─────────────────────────────────────────────────────
|
|
80
|
+
/**
|
|
81
|
+
* Active KEK identifier grammar. Sylphx KEK ids are short opaque strings
|
|
82
|
+
* (e.g. `kek-2026-04`); we constrain to printable ASCII so the audit
|
|
83
|
+
* row stays grep-friendly and the value can't smuggle control chars
|
|
84
|
+
* into log pipelines.
|
|
85
|
+
*/
|
|
86
|
+
const KeyId = Schema.String.pipe(Schema.minLength(1), Schema.maxLength(64), Schema.pattern(/^[A-Za-z0-9._:-]+$/, {
|
|
87
|
+
message: () => 'keyId must match ^[A-Za-z0-9._:-]+$',
|
|
88
|
+
}));
|
|
89
|
+
/**
|
|
90
|
+
* Optional filter — currently unused by the rotation primitive (the
|
|
91
|
+
* canonical registry walks all rows under retired keys). Reserved for
|
|
92
|
+
* future per-project / per-env scoped rotations; accepted today so the
|
|
93
|
+
* shape stabilises before we expand the registry.
|
|
94
|
+
*/
|
|
95
|
+
const ResealFilter = Schema.Struct({
|
|
96
|
+
projectId: Schema.optional(Schema.String),
|
|
97
|
+
envId: Schema.optional(Schema.String),
|
|
98
|
+
});
|
|
99
|
+
/**
|
|
100
|
+
* Body of `POST /admin/resources/reseal`.
|
|
101
|
+
*
|
|
102
|
+
* - `keyId` — the active KEK ID the operator believes the platform
|
|
103
|
+
* is serving with. The endpoint refuses with 409 if the
|
|
104
|
+
* live ring's `activeKeyId` does not match — protecting
|
|
105
|
+
* against split-brain rotations where two operators race.
|
|
106
|
+
* - `filter` — reserved (see `ResealFilter`). Today the endpoint walks
|
|
107
|
+
* the canonical `buildRotationFields()` registry for ALL
|
|
108
|
+
* rows whose envelope is not under the active key; the
|
|
109
|
+
* filter is accepted but logged as ignored. When per-
|
|
110
|
+
* row scoping ships, the registry adapter will honour it.
|
|
111
|
+
*
|
|
112
|
+
* Idempotent: re-running with the same `keyId` rewrites zero rows once
|
|
113
|
+
* the registry has converged.
|
|
114
|
+
*/
|
|
115
|
+
export const AdminResourceResealInput = Schema.Struct({
|
|
116
|
+
keyId: KeyId,
|
|
117
|
+
filter: Schema.optional(ResealFilter),
|
|
118
|
+
});
|
|
119
|
+
/**
|
|
120
|
+
* Per-field result. Mirrors `RotationFieldResult` from
|
|
121
|
+
* `packages/core/src/lib/crypto/rotation.ts` so the wire format stays a
|
|
122
|
+
* faithful projection of the in-process struct.
|
|
123
|
+
*/
|
|
124
|
+
export const AdminResourceResealFieldResult = Schema.Struct({
|
|
125
|
+
fieldName: Schema.String,
|
|
126
|
+
rowsSeen: Schema.Number,
|
|
127
|
+
rowsRotated: Schema.Number,
|
|
128
|
+
rowsFailed: Schema.Number,
|
|
129
|
+
failures: Schema.Array(Schema.Struct({
|
|
130
|
+
id: Schema.String,
|
|
131
|
+
reason: Schema.String,
|
|
132
|
+
})),
|
|
133
|
+
});
|
|
134
|
+
/**
|
|
135
|
+
* Response envelope. `activeKeyId` is the server's authoritative answer
|
|
136
|
+
* (echo of the input on success).
|
|
137
|
+
*/
|
|
138
|
+
export const AdminResourceResealResult = Schema.Struct({
|
|
139
|
+
activeKeyId: Schema.String,
|
|
140
|
+
totalRotated: Schema.Number,
|
|
141
|
+
totalFailed: Schema.Number,
|
|
142
|
+
fields: Schema.Array(AdminResourceResealFieldResult),
|
|
143
|
+
});
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin Secrets — operator-driven secret rotation primitives.
|
|
3
|
+
*
|
|
4
|
+
* G-5: closes the production-ready audit gap on secret rotation. The
|
|
5
|
+
* Platform holds a small set of HMAC / encryption secrets in K8s Secret
|
|
6
|
+
* env-var slots (BREAK_GLASS_SECRET, PLATFORM_ENCRYPTION_KEY, …). Pre-G-5
|
|
7
|
+
* rotation was a manual two-person rule documented in
|
|
8
|
+
* `docs/runbooks/break-glass.md` §4 — not auditable, not metered, no
|
|
9
|
+
* automated reminder when a secret aged past 90 days.
|
|
10
|
+
*
|
|
11
|
+
* This endpoint surface gives operators a uniform CLI path to:
|
|
12
|
+
* - List rotatable secrets + their last-rotation age (`--dry-run`)
|
|
13
|
+
* - Initiate a rotation event for compliance (audit row + metric tick)
|
|
14
|
+
*
|
|
15
|
+
* The actual K8s secret value rotation is delegated to the runbook's
|
|
16
|
+
* existing two-person procedure; this endpoint is the AUDIT trail and
|
|
17
|
+
* the OBSERVABILITY anchor for `sylphx_secret_age_days`. We deliberately
|
|
18
|
+
* do NOT mint the new value server-side — minting would require holding
|
|
19
|
+
* the cluster KMS key in process memory, which is the very threat the
|
|
20
|
+
* rotation is hedging against. Operators paste the new value into the
|
|
21
|
+
* cluster Secret store; the endpoint records that it happened.
|
|
22
|
+
*
|
|
23
|
+
* Scope (`platform:secrets:rotate`) is service-token only; super-admin
|
|
24
|
+
* sessions are explicitly NOT accepted — a rotation MUST be a programmatic
|
|
25
|
+
* step in an Ops runbook, never an interactive Console click.
|
|
26
|
+
*/
|
|
27
|
+
import { Schema } from 'effect';
|
|
28
|
+
/**
|
|
29
|
+
* The set of platform secrets that follow the Sylphx rotation cadence.
|
|
30
|
+
* Adding a new secret = adding a literal here AND a row in
|
|
31
|
+
* `secret_rotation_events` retention; CI guards both.
|
|
32
|
+
*/
|
|
33
|
+
export declare const AdminSecretType: Schema.Literal<["break-glass", "encryption-key", "jwt-signing"]>;
|
|
34
|
+
export type AdminSecretType = typeof AdminSecretType.Type;
|
|
35
|
+
export declare const AdminRotateSecretInput: Schema.Struct<{
|
|
36
|
+
/** Which secret to rotate. */
|
|
37
|
+
type: Schema.Literal<["break-glass", "encryption-key", "jwt-signing"]>;
|
|
38
|
+
/**
|
|
39
|
+
* If true, returns the rotation eligibility report WITHOUT writing an
|
|
40
|
+
* audit row or emitting the metric tick. Always-safe; used by the CLI's
|
|
41
|
+
* `--dry-run` mode and by the periodic `sylphx_secret_age_days` alert
|
|
42
|
+
* cron to read state.
|
|
43
|
+
*/
|
|
44
|
+
dryRun: Schema.optional<typeof Schema.Boolean>;
|
|
45
|
+
/**
|
|
46
|
+
* Operator note explaining WHY this rotation is happening. Required on
|
|
47
|
+
* non-dry-run calls (min 3 chars). Recorded on the audit row + on the
|
|
48
|
+
* `secret_rotation_events` ledger.
|
|
49
|
+
*/
|
|
50
|
+
reason: Schema.optional<typeof Schema.String>;
|
|
51
|
+
}>;
|
|
52
|
+
export type AdminRotateSecretInput = typeof AdminRotateSecretInput.Type;
|
|
53
|
+
/**
|
|
54
|
+
* Per-secret rotation status — one row per known secret type.
|
|
55
|
+
*
|
|
56
|
+
* `lastRotatedAt` is null for a secret that has never been rotated since
|
|
57
|
+
* ledger ingest (greenfield clusters, freshly seeded `secret_rotation_events`).
|
|
58
|
+
* `ageDays` is `now() - lastRotatedAt` in days, or null when never-rotated;
|
|
59
|
+
* the alert rule fires when `ageDays > 90`.
|
|
60
|
+
*/
|
|
61
|
+
export declare const AdminSecretStatus: Schema.Struct<{
|
|
62
|
+
type: Schema.Literal<["break-glass", "encryption-key", "jwt-signing"]>;
|
|
63
|
+
lastRotatedAt: Schema.NullOr<typeof Schema.String>;
|
|
64
|
+
ageDays: Schema.NullOr<typeof Schema.Number>;
|
|
65
|
+
/** Operator-facing rotation cadence in days (90 today). */
|
|
66
|
+
cadenceDays: typeof Schema.Number;
|
|
67
|
+
/** True iff `ageDays > cadenceDays` (or never-rotated). */
|
|
68
|
+
overdue: typeof Schema.Boolean;
|
|
69
|
+
/** Name of the K8s Secret + key the operator must update. */
|
|
70
|
+
clusterSecretRef: typeof Schema.String;
|
|
71
|
+
}>;
|
|
72
|
+
export type AdminSecretStatus = typeof AdminSecretStatus.Type;
|
|
73
|
+
export declare const AdminRotateSecretResult: Schema.Struct<{
|
|
74
|
+
/** True iff a real rotation event was recorded; false on dry-run. */
|
|
75
|
+
rotated: typeof Schema.Boolean;
|
|
76
|
+
/** Per-type rotation status snapshot (always populated). */
|
|
77
|
+
status: Schema.Struct<{
|
|
78
|
+
type: Schema.Literal<["break-glass", "encryption-key", "jwt-signing"]>;
|
|
79
|
+
lastRotatedAt: Schema.NullOr<typeof Schema.String>;
|
|
80
|
+
ageDays: Schema.NullOr<typeof Schema.Number>;
|
|
81
|
+
/** Operator-facing rotation cadence in days (90 today). */
|
|
82
|
+
cadenceDays: typeof Schema.Number;
|
|
83
|
+
/** True iff `ageDays > cadenceDays` (or never-rotated). */
|
|
84
|
+
overdue: typeof Schema.Boolean;
|
|
85
|
+
/** Name of the K8s Secret + key the operator must update. */
|
|
86
|
+
clusterSecretRef: typeof Schema.String;
|
|
87
|
+
}>;
|
|
88
|
+
/** ID of the audit_logs row written on a non-dry-run call. */
|
|
89
|
+
auditLogId: Schema.NullOr<typeof Schema.String>;
|
|
90
|
+
/** Operator-facing next-step instruction. */
|
|
91
|
+
message: typeof Schema.String;
|
|
92
|
+
}>;
|
|
93
|
+
export type AdminRotateSecretResult = typeof AdminRotateSecretResult.Type;
|
|
94
|
+
/**
|
|
95
|
+
* `GET /admin/secrets` — list every secret type + its rotation status.
|
|
96
|
+
* Used by the `sylphx_secret_age_days` alert and by the Console operator
|
|
97
|
+
* dashboard's secret-rotation widget.
|
|
98
|
+
*/
|
|
99
|
+
export declare const AdminListSecretsResult: Schema.Struct<{
|
|
100
|
+
secrets: Schema.Array$<Schema.Struct<{
|
|
101
|
+
type: Schema.Literal<["break-glass", "encryption-key", "jwt-signing"]>;
|
|
102
|
+
lastRotatedAt: Schema.NullOr<typeof Schema.String>;
|
|
103
|
+
ageDays: Schema.NullOr<typeof Schema.Number>;
|
|
104
|
+
/** Operator-facing rotation cadence in days (90 today). */
|
|
105
|
+
cadenceDays: typeof Schema.Number;
|
|
106
|
+
/** True iff `ageDays > cadenceDays` (or never-rotated). */
|
|
107
|
+
overdue: typeof Schema.Boolean;
|
|
108
|
+
/** Name of the K8s Secret + key the operator must update. */
|
|
109
|
+
clusterSecretRef: typeof Schema.String;
|
|
110
|
+
}>>;
|
|
111
|
+
}>;
|
|
112
|
+
export type AdminListSecretsResult = typeof AdminListSecretsResult.Type;
|
|
113
|
+
//# sourceMappingURL=admin-secrets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-secrets.d.ts","sourceRoot":"","sources":["../../src/schemas/admin-secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B;;;;GAIG;AACH,eAAO,MAAM,eAAe,kEAQ3B,CAAA;AACD,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA;AAEzD,eAAO,MAAM,sBAAsB;IAClC,8BAA8B;;IAE9B;;;;;OAKG;;IAEH;;;;OAIG;;EAEF,CAAA;AACF,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAC,IAAI,CAAA;AAEvE;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB;;;;IAI7B,2DAA2D;;IAE3D,2DAA2D;;IAE3D,6DAA6D;;EAE5D,CAAA;AACF,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAA;AAE7D,eAAO,MAAM,uBAAuB;IACnC,qEAAqE;;IAErE,4DAA4D;;;;;QAZ5D,2DAA2D;;QAE3D,2DAA2D;;QAE3D,6DAA6D;;;IAU7D,8DAA8D;;IAE9D,6CAA6C;;EAE5C,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,OAAO,uBAAuB,CAAC,IAAI,CAAA;AAEzE;;;;GAIG;AACH,eAAO,MAAM,sBAAsB;;;;;QA1BlC,2DAA2D;;QAE3D,2DAA2D;;QAE3D,6DAA6D;;;EAwB5D,CAAA;AACF,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAC,IAAI,CAAA"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin Secrets — operator-driven secret rotation primitives.
|
|
3
|
+
*
|
|
4
|
+
* G-5: closes the production-ready audit gap on secret rotation. The
|
|
5
|
+
* Platform holds a small set of HMAC / encryption secrets in K8s Secret
|
|
6
|
+
* env-var slots (BREAK_GLASS_SECRET, PLATFORM_ENCRYPTION_KEY, …). Pre-G-5
|
|
7
|
+
* rotation was a manual two-person rule documented in
|
|
8
|
+
* `docs/runbooks/break-glass.md` §4 — not auditable, not metered, no
|
|
9
|
+
* automated reminder when a secret aged past 90 days.
|
|
10
|
+
*
|
|
11
|
+
* This endpoint surface gives operators a uniform CLI path to:
|
|
12
|
+
* - List rotatable secrets + their last-rotation age (`--dry-run`)
|
|
13
|
+
* - Initiate a rotation event for compliance (audit row + metric tick)
|
|
14
|
+
*
|
|
15
|
+
* The actual K8s secret value rotation is delegated to the runbook's
|
|
16
|
+
* existing two-person procedure; this endpoint is the AUDIT trail and
|
|
17
|
+
* the OBSERVABILITY anchor for `sylphx_secret_age_days`. We deliberately
|
|
18
|
+
* do NOT mint the new value server-side — minting would require holding
|
|
19
|
+
* the cluster KMS key in process memory, which is the very threat the
|
|
20
|
+
* rotation is hedging against. Operators paste the new value into the
|
|
21
|
+
* cluster Secret store; the endpoint records that it happened.
|
|
22
|
+
*
|
|
23
|
+
* Scope (`platform:secrets:rotate`) is service-token only; super-admin
|
|
24
|
+
* sessions are explicitly NOT accepted — a rotation MUST be a programmatic
|
|
25
|
+
* step in an Ops runbook, never an interactive Console click.
|
|
26
|
+
*/
|
|
27
|
+
import { Schema } from 'effect';
|
|
28
|
+
/**
|
|
29
|
+
* The set of platform secrets that follow the Sylphx rotation cadence.
|
|
30
|
+
* Adding a new secret = adding a literal here AND a row in
|
|
31
|
+
* `secret_rotation_events` retention; CI guards both.
|
|
32
|
+
*/
|
|
33
|
+
export const AdminSecretType = Schema.Literal(
|
|
34
|
+
/** HMAC key for the `/admin/break-glass` endpoint (90-day cadence). */
|
|
35
|
+
'break-glass',
|
|
36
|
+
/** AES-256-GCM key for at-rest encryption of secrets / webhooks. */
|
|
37
|
+
'encryption-key',
|
|
38
|
+
/** RSA private key family for JWT signing — superseded by the
|
|
39
|
+
* `adminJwtKeys.rotate` namespace; included here for parity dashboards. */
|
|
40
|
+
'jwt-signing');
|
|
41
|
+
export const AdminRotateSecretInput = Schema.Struct({
|
|
42
|
+
/** Which secret to rotate. */
|
|
43
|
+
type: AdminSecretType,
|
|
44
|
+
/**
|
|
45
|
+
* If true, returns the rotation eligibility report WITHOUT writing an
|
|
46
|
+
* audit row or emitting the metric tick. Always-safe; used by the CLI's
|
|
47
|
+
* `--dry-run` mode and by the periodic `sylphx_secret_age_days` alert
|
|
48
|
+
* cron to read state.
|
|
49
|
+
*/
|
|
50
|
+
dryRun: Schema.optional(Schema.Boolean),
|
|
51
|
+
/**
|
|
52
|
+
* Operator note explaining WHY this rotation is happening. Required on
|
|
53
|
+
* non-dry-run calls (min 3 chars). Recorded on the audit row + on the
|
|
54
|
+
* `secret_rotation_events` ledger.
|
|
55
|
+
*/
|
|
56
|
+
reason: Schema.optional(Schema.String),
|
|
57
|
+
});
|
|
58
|
+
/**
|
|
59
|
+
* Per-secret rotation status — one row per known secret type.
|
|
60
|
+
*
|
|
61
|
+
* `lastRotatedAt` is null for a secret that has never been rotated since
|
|
62
|
+
* ledger ingest (greenfield clusters, freshly seeded `secret_rotation_events`).
|
|
63
|
+
* `ageDays` is `now() - lastRotatedAt` in days, or null when never-rotated;
|
|
64
|
+
* the alert rule fires when `ageDays > 90`.
|
|
65
|
+
*/
|
|
66
|
+
export const AdminSecretStatus = Schema.Struct({
|
|
67
|
+
type: AdminSecretType,
|
|
68
|
+
lastRotatedAt: Schema.NullOr(Schema.String),
|
|
69
|
+
ageDays: Schema.NullOr(Schema.Number),
|
|
70
|
+
/** Operator-facing rotation cadence in days (90 today). */
|
|
71
|
+
cadenceDays: Schema.Number,
|
|
72
|
+
/** True iff `ageDays > cadenceDays` (or never-rotated). */
|
|
73
|
+
overdue: Schema.Boolean,
|
|
74
|
+
/** Name of the K8s Secret + key the operator must update. */
|
|
75
|
+
clusterSecretRef: Schema.String,
|
|
76
|
+
});
|
|
77
|
+
export const AdminRotateSecretResult = Schema.Struct({
|
|
78
|
+
/** True iff a real rotation event was recorded; false on dry-run. */
|
|
79
|
+
rotated: Schema.Boolean,
|
|
80
|
+
/** Per-type rotation status snapshot (always populated). */
|
|
81
|
+
status: AdminSecretStatus,
|
|
82
|
+
/** ID of the audit_logs row written on a non-dry-run call. */
|
|
83
|
+
auditLogId: Schema.NullOr(Schema.String),
|
|
84
|
+
/** Operator-facing next-step instruction. */
|
|
85
|
+
message: Schema.String,
|
|
86
|
+
});
|
|
87
|
+
/**
|
|
88
|
+
* `GET /admin/secrets` — list every secret type + its rotation status.
|
|
89
|
+
* Used by the `sylphx_secret_age_days` alert and by the Console operator
|
|
90
|
+
* dashboard's secret-rotation widget.
|
|
91
|
+
*/
|
|
92
|
+
export const AdminListSecretsResult = Schema.Struct({
|
|
93
|
+
secrets: Schema.Array(AdminSecretStatus),
|
|
94
|
+
});
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin Services — operator-only image-status drift schemas (drift-watchdog).
|
|
3
|
+
*
|
|
4
|
+
* Mirrors `apps/api/src/server/platform/routes/admin/services.ts`.
|
|
5
|
+
*
|
|
6
|
+
* The drift watchdog (`infra/addons/dogfood-smoke/manifests/image-drift-cronjob.yaml`)
|
|
7
|
+
* polls this endpoint every 10 minutes. For each Platform service it
|
|
8
|
+
* compares:
|
|
9
|
+
*
|
|
10
|
+
* - DB SSOT — `project_services.latest_image_ref` (the digest the
|
|
11
|
+
* build pipeline says is current).
|
|
12
|
+
* - K8s live — `deployment.spec.template.spec.containers[0].image`
|
|
13
|
+
* (the digest actually rolling on cluster).
|
|
14
|
+
*
|
|
15
|
+
* When the two diverge for >30 minutes the probe pages on-call. Inside the
|
|
16
|
+
* 30-minute grace window drift is tolerated (legit during a rolling deploy
|
|
17
|
+
* or a fresh build that hasn't propagated yet).
|
|
18
|
+
*
|
|
19
|
+
* Plane: `admin` (super-admin / scoped service-token only — scope
|
|
20
|
+
* `platform:services:read`).
|
|
21
|
+
*/
|
|
22
|
+
import { Schema } from 'effect';
|
|
23
|
+
/**
|
|
24
|
+
* One row of the image-status report.
|
|
25
|
+
*
|
|
26
|
+
* - `name` — service name within the platform project
|
|
27
|
+
* (e.g. `api`, `controller`, `runtime`).
|
|
28
|
+
* - `dbRef` — `latest_image_ref` from `project_services`.
|
|
29
|
+
* `null` if the service has never been built.
|
|
30
|
+
* - `k8sRef` — image string from the live `Deployment`.
|
|
31
|
+
* `null` if the deployment is missing in K8s.
|
|
32
|
+
* - `driftMinutes` — minutes since the divergence first appeared.
|
|
33
|
+
* `0` when DB and K8s agree (or both null).
|
|
34
|
+
* `null` when one side is missing.
|
|
35
|
+
* - `inSync` — `true` iff `dbRef === k8sRef` AND both non-null.
|
|
36
|
+
* Probes alert when this is `false` past the grace
|
|
37
|
+
* window.
|
|
38
|
+
* - `dbUpdatedAt` — ISO timestamp the DB row was last touched
|
|
39
|
+
* (`project_services.updated_at`). Drives the
|
|
40
|
+
* `driftMinutes` calculation when DB is the lagger.
|
|
41
|
+
*/
|
|
42
|
+
export declare const AdminServiceImageStatusRow: Schema.Struct<{
|
|
43
|
+
name: typeof Schema.String;
|
|
44
|
+
dbRef: Schema.NullOr<typeof Schema.String>;
|
|
45
|
+
k8sRef: Schema.NullOr<typeof Schema.String>;
|
|
46
|
+
driftMinutes: Schema.NullOr<typeof Schema.Number>;
|
|
47
|
+
inSync: typeof Schema.Boolean;
|
|
48
|
+
dbUpdatedAt: Schema.NullOr<typeof Schema.String>;
|
|
49
|
+
}>;
|
|
50
|
+
export type AdminServiceImageStatusRow = typeof AdminServiceImageStatusRow.Type;
|
|
51
|
+
/**
|
|
52
|
+
* Response of `GET /admin/services/image-status`.
|
|
53
|
+
*
|
|
54
|
+
* Always returns one row per Platform service (controller, api, runtime,
|
|
55
|
+
* web, exec-server, storage-gateway, storage-worker). Missing rows on
|
|
56
|
+
* either side surface as `dbRef=null` or `k8sRef=null` so the probe can
|
|
57
|
+
* still page on configuration drift, not just digest drift.
|
|
58
|
+
*/
|
|
59
|
+
export declare const AdminServiceImageStatusResult: Schema.Struct<{
|
|
60
|
+
services: Schema.Array$<Schema.Struct<{
|
|
61
|
+
name: typeof Schema.String;
|
|
62
|
+
dbRef: Schema.NullOr<typeof Schema.String>;
|
|
63
|
+
k8sRef: Schema.NullOr<typeof Schema.String>;
|
|
64
|
+
driftMinutes: Schema.NullOr<typeof Schema.Number>;
|
|
65
|
+
inSync: typeof Schema.Boolean;
|
|
66
|
+
dbUpdatedAt: Schema.NullOr<typeof Schema.String>;
|
|
67
|
+
}>>;
|
|
68
|
+
checkedAt: typeof Schema.String;
|
|
69
|
+
}>;
|
|
70
|
+
export type AdminServiceImageStatusResult = typeof AdminServiceImageStatusResult.Type;
|
|
71
|
+
//# sourceMappingURL=admin-services.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-services.d.ts","sourceRoot":"","sources":["../../src/schemas/admin-services.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,0BAA0B;;;;;;;EAOrC,CAAA;AACF,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAC,IAAI,CAAA;AAE/E;;;;;;;GAOG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;EAGxC,CAAA;AACF,MAAM,MAAM,6BAA6B,GAAG,OAAO,6BAA6B,CAAC,IAAI,CAAA"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin Services — operator-only image-status drift schemas (drift-watchdog).
|
|
3
|
+
*
|
|
4
|
+
* Mirrors `apps/api/src/server/platform/routes/admin/services.ts`.
|
|
5
|
+
*
|
|
6
|
+
* The drift watchdog (`infra/addons/dogfood-smoke/manifests/image-drift-cronjob.yaml`)
|
|
7
|
+
* polls this endpoint every 10 minutes. For each Platform service it
|
|
8
|
+
* compares:
|
|
9
|
+
*
|
|
10
|
+
* - DB SSOT — `project_services.latest_image_ref` (the digest the
|
|
11
|
+
* build pipeline says is current).
|
|
12
|
+
* - K8s live — `deployment.spec.template.spec.containers[0].image`
|
|
13
|
+
* (the digest actually rolling on cluster).
|
|
14
|
+
*
|
|
15
|
+
* When the two diverge for >30 minutes the probe pages on-call. Inside the
|
|
16
|
+
* 30-minute grace window drift is tolerated (legit during a rolling deploy
|
|
17
|
+
* or a fresh build that hasn't propagated yet).
|
|
18
|
+
*
|
|
19
|
+
* Plane: `admin` (super-admin / scoped service-token only — scope
|
|
20
|
+
* `platform:services:read`).
|
|
21
|
+
*/
|
|
22
|
+
import { Schema } from 'effect';
|
|
23
|
+
/**
|
|
24
|
+
* One row of the image-status report.
|
|
25
|
+
*
|
|
26
|
+
* - `name` — service name within the platform project
|
|
27
|
+
* (e.g. `api`, `controller`, `runtime`).
|
|
28
|
+
* - `dbRef` — `latest_image_ref` from `project_services`.
|
|
29
|
+
* `null` if the service has never been built.
|
|
30
|
+
* - `k8sRef` — image string from the live `Deployment`.
|
|
31
|
+
* `null` if the deployment is missing in K8s.
|
|
32
|
+
* - `driftMinutes` — minutes since the divergence first appeared.
|
|
33
|
+
* `0` when DB and K8s agree (or both null).
|
|
34
|
+
* `null` when one side is missing.
|
|
35
|
+
* - `inSync` — `true` iff `dbRef === k8sRef` AND both non-null.
|
|
36
|
+
* Probes alert when this is `false` past the grace
|
|
37
|
+
* window.
|
|
38
|
+
* - `dbUpdatedAt` — ISO timestamp the DB row was last touched
|
|
39
|
+
* (`project_services.updated_at`). Drives the
|
|
40
|
+
* `driftMinutes` calculation when DB is the lagger.
|
|
41
|
+
*/
|
|
42
|
+
export const AdminServiceImageStatusRow = Schema.Struct({
|
|
43
|
+
name: Schema.String,
|
|
44
|
+
dbRef: Schema.NullOr(Schema.String),
|
|
45
|
+
k8sRef: Schema.NullOr(Schema.String),
|
|
46
|
+
driftMinutes: Schema.NullOr(Schema.Number),
|
|
47
|
+
inSync: Schema.Boolean,
|
|
48
|
+
dbUpdatedAt: Schema.NullOr(Schema.String),
|
|
49
|
+
});
|
|
50
|
+
/**
|
|
51
|
+
* Response of `GET /admin/services/image-status`.
|
|
52
|
+
*
|
|
53
|
+
* Always returns one row per Platform service (controller, api, runtime,
|
|
54
|
+
* web, exec-server, storage-gateway, storage-worker). Missing rows on
|
|
55
|
+
* either side surface as `dbRef=null` or `k8sRef=null` so the probe can
|
|
56
|
+
* still page on configuration drift, not just digest drift.
|
|
57
|
+
*/
|
|
58
|
+
export const AdminServiceImageStatusResult = Schema.Struct({
|
|
59
|
+
services: Schema.Array(AdminServiceImageStatusRow),
|
|
60
|
+
checkedAt: Schema.String,
|
|
61
|
+
});
|