@marinoscar/platform-contract 0.0.0-stage → 0.1.0-next.4
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 +206 -0
- package/LICENSE +21 -0
- package/README.md +167 -2
- package/dist/cjs/ai/capabilities.d.ts +85 -0
- package/dist/cjs/ai/capabilities.d.ts.map +1 -0
- package/dist/cjs/ai/capabilities.js +93 -0
- package/dist/cjs/ai/capabilities.js.map +1 -0
- package/dist/cjs/ai/constants.d.ts +239 -0
- package/dist/cjs/ai/constants.d.ts.map +1 -0
- package/dist/cjs/ai/constants.js +233 -0
- package/dist/cjs/ai/constants.js.map +1 -0
- package/dist/cjs/ai/features.d.ts +24 -0
- package/dist/cjs/ai/features.d.ts.map +1 -0
- package/dist/cjs/ai/features.js +33 -0
- package/dist/cjs/ai/features.js.map +1 -0
- package/dist/cjs/ai/index.d.ts +11 -0
- package/dist/cjs/ai/index.d.ts.map +1 -0
- package/dist/cjs/ai/index.js +81 -0
- package/dist/cjs/ai/index.js.map +1 -0
- package/dist/cjs/ai/org-keys.d.ts +50 -0
- package/dist/cjs/ai/org-keys.d.ts.map +1 -0
- package/dist/cjs/ai/org-keys.js +43 -0
- package/dist/cjs/ai/org-keys.js.map +1 -0
- package/dist/cjs/ai/schemas.d.ts +642 -0
- package/dist/cjs/ai/schemas.d.ts.map +1 -0
- package/dist/cjs/ai/schemas.js +894 -0
- package/dist/cjs/ai/schemas.js.map +1 -0
- package/dist/cjs/android-app/constants.d.ts +337 -0
- package/dist/cjs/android-app/constants.d.ts.map +1 -0
- package/dist/cjs/android-app/constants.js +312 -0
- package/dist/cjs/android-app/constants.js.map +1 -0
- package/dist/cjs/android-app/index.d.ts +5 -0
- package/dist/cjs/android-app/index.d.ts.map +1 -0
- package/dist/cjs/android-app/index.js +57 -0
- package/dist/cjs/android-app/index.js.map +1 -0
- package/dist/cjs/android-app/schemas.d.ts +358 -0
- package/dist/cjs/android-app/schemas.d.ts.map +1 -0
- package/dist/cjs/android-app/schemas.js +310 -0
- package/dist/cjs/android-app/schemas.js.map +1 -0
- package/dist/cjs/credentials/constants.d.ts +35 -0
- package/dist/cjs/credentials/constants.d.ts.map +1 -0
- package/dist/cjs/credentials/constants.js +39 -0
- package/dist/cjs/credentials/constants.js.map +1 -0
- package/dist/cjs/credentials/index.d.ts +5 -0
- package/dist/cjs/credentials/index.d.ts.map +1 -0
- package/dist/cjs/credentials/index.js +17 -0
- package/dist/cjs/credentials/index.js.map +1 -0
- package/dist/cjs/credentials/schemas.d.ts +64 -0
- package/dist/cjs/credentials/schemas.d.ts.map +1 -0
- package/dist/cjs/credentials/schemas.js +82 -0
- package/dist/cjs/credentials/schemas.js.map +1 -0
- package/dist/cjs/db-backup/config.d.ts +76 -0
- package/dist/cjs/db-backup/config.d.ts.map +1 -0
- package/dist/cjs/db-backup/config.js +115 -0
- package/dist/cjs/db-backup/config.js.map +1 -0
- package/dist/cjs/db-backup/constants.d.ts +314 -0
- package/dist/cjs/db-backup/constants.d.ts.map +1 -0
- package/dist/cjs/db-backup/constants.js +243 -0
- package/dist/cjs/db-backup/constants.js.map +1 -0
- package/dist/cjs/db-backup/index.d.ts +19 -0
- package/dist/cjs/db-backup/index.d.ts.map +1 -0
- package/dist/cjs/db-backup/index.js +81 -0
- package/dist/cjs/db-backup/index.js.map +1 -0
- package/dist/cjs/db-backup/node-credential.d.ts +37 -0
- package/dist/cjs/db-backup/node-credential.d.ts.map +1 -0
- package/dist/cjs/db-backup/node-credential.js +107 -0
- package/dist/cjs/db-backup/node-credential.js.map +1 -0
- package/dist/cjs/db-backup/node-result.d.ts +34 -0
- package/dist/cjs/db-backup/node-result.d.ts.map +1 -0
- package/dist/cjs/db-backup/node-result.js +168 -0
- package/dist/cjs/db-backup/node-result.js.map +1 -0
- package/dist/cjs/db-backup/restore.d.ts +405 -0
- package/dist/cjs/db-backup/restore.d.ts.map +1 -0
- package/dist/cjs/db-backup/restore.js +497 -0
- package/dist/cjs/db-backup/restore.js.map +1 -0
- package/dist/cjs/db-backup/run-actions.d.ts +49 -0
- package/dist/cjs/db-backup/run-actions.d.ts.map +1 -0
- package/dist/cjs/db-backup/run-actions.js +121 -0
- package/dist/cjs/db-backup/run-actions.js.map +1 -0
- package/dist/cjs/db-backup/runs-list-query.d.ts +20 -0
- package/dist/cjs/db-backup/runs-list-query.d.ts.map +1 -0
- package/dist/cjs/db-backup/runs-list-query.js +53 -0
- package/dist/cjs/db-backup/runs-list-query.js.map +1 -0
- package/dist/cjs/db-backup/runs.d.ts +46 -0
- package/dist/cjs/db-backup/runs.d.ts.map +1 -0
- package/dist/cjs/db-backup/runs.js +232 -0
- package/dist/cjs/db-backup/runs.js.map +1 -0
- package/dist/cjs/db-backup/schemas.d.ts +9 -0
- package/dist/cjs/db-backup/schemas.d.ts.map +1 -0
- package/dist/cjs/db-backup/schemas.js +31 -0
- package/dist/cjs/db-backup/schemas.js.map +1 -0
- package/dist/cjs/db-backup/settings-schemas.d.ts +217 -0
- package/dist/cjs/db-backup/settings-schemas.d.ts.map +1 -0
- package/dist/cjs/db-backup/settings-schemas.js +319 -0
- package/dist/cjs/db-backup/settings-schemas.js.map +1 -0
- package/dist/cjs/doctor/constants.d.ts +59 -0
- package/dist/cjs/doctor/constants.d.ts.map +1 -0
- package/dist/cjs/doctor/constants.js +57 -0
- package/dist/cjs/doctor/constants.js.map +1 -0
- package/dist/cjs/doctor/index.d.ts +5 -0
- package/dist/cjs/doctor/index.d.ts.map +1 -0
- package/dist/cjs/doctor/index.js +24 -0
- package/dist/cjs/doctor/index.js.map +1 -0
- package/dist/cjs/doctor/schemas.d.ts +186 -0
- package/dist/cjs/doctor/schemas.d.ts.map +1 -0
- package/dist/cjs/doctor/schemas.js +183 -0
- package/dist/cjs/doctor/schemas.js.map +1 -0
- package/dist/cjs/email/constants.d.ts +82 -0
- package/dist/cjs/email/constants.d.ts.map +1 -0
- package/dist/cjs/email/constants.js +82 -0
- package/dist/cjs/email/constants.js.map +1 -0
- package/dist/cjs/email/index.d.ts +5 -0
- package/dist/cjs/email/index.d.ts.map +1 -0
- package/dist/cjs/email/index.js +30 -0
- package/dist/cjs/email/index.js.map +1 -0
- package/dist/cjs/email/schemas.d.ts +276 -0
- package/dist/cjs/email/schemas.d.ts.map +1 -0
- package/dist/cjs/email/schemas.js +280 -0
- package/dist/cjs/email/schemas.js.map +1 -0
- package/dist/cjs/exports/constants.d.ts +123 -0
- package/dist/cjs/exports/constants.d.ts.map +1 -0
- package/dist/cjs/exports/constants.js +109 -0
- package/dist/cjs/exports/constants.js.map +1 -0
- package/dist/cjs/exports/index.d.ts +5 -0
- package/dist/cjs/exports/index.d.ts.map +1 -0
- package/dist/cjs/exports/index.js +42 -0
- package/dist/cjs/exports/index.js.map +1 -0
- package/dist/cjs/exports/schemas.d.ts +386 -0
- package/dist/cjs/exports/schemas.d.ts.map +1 -0
- package/dist/cjs/exports/schemas.js +288 -0
- package/dist/cjs/exports/schemas.js.map +1 -0
- package/dist/cjs/identity/constants.d.ts +273 -0
- package/dist/cjs/identity/constants.d.ts.map +1 -0
- package/dist/cjs/identity/constants.js +248 -0
- package/dist/cjs/identity/constants.js.map +1 -0
- package/dist/cjs/identity/index.d.ts +5 -0
- package/dist/cjs/identity/index.d.ts.map +1 -0
- package/dist/cjs/identity/index.js +73 -0
- package/dist/cjs/identity/index.js.map +1 -0
- package/dist/cjs/identity/schemas.d.ts +784 -0
- package/dist/cjs/identity/schemas.d.ts.map +1 -0
- package/dist/cjs/identity/schemas.js +684 -0
- package/dist/cjs/identity/schemas.js.map +1 -0
- package/dist/cjs/index.d.ts +13 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +16 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/jobs/constants.d.ts +135 -0
- package/dist/cjs/jobs/constants.d.ts.map +1 -0
- package/dist/cjs/jobs/constants.js +130 -0
- package/dist/cjs/jobs/constants.js.map +1 -0
- package/dist/cjs/jobs/index.d.ts +9 -0
- package/dist/cjs/jobs/index.d.ts.map +1 -0
- package/dist/cjs/jobs/index.js +59 -0
- package/dist/cjs/jobs/index.js.map +1 -0
- package/dist/cjs/jobs/retention-schemas.d.ts +252 -0
- package/dist/cjs/jobs/retention-schemas.d.ts.map +1 -0
- package/dist/cjs/jobs/retention-schemas.js +233 -0
- package/dist/cjs/jobs/retention-schemas.js.map +1 -0
- package/dist/cjs/jobs/schemas.d.ts +361 -0
- package/dist/cjs/jobs/schemas.d.ts.map +1 -0
- package/dist/cjs/jobs/schemas.js +706 -0
- package/dist/cjs/jobs/schemas.js.map +1 -0
- package/dist/cjs/jobs/settings-schemas.d.ts +84 -0
- package/dist/cjs/jobs/settings-schemas.d.ts.map +1 -0
- package/dist/cjs/jobs/settings-schemas.js +116 -0
- package/dist/cjs/jobs/settings-schemas.js.map +1 -0
- package/dist/cjs/nodes/admin-schemas.d.ts +204 -0
- package/dist/cjs/nodes/admin-schemas.d.ts.map +1 -0
- package/dist/cjs/nodes/admin-schemas.js +153 -0
- package/dist/cjs/nodes/admin-schemas.js.map +1 -0
- package/dist/cjs/nodes/constants.d.ts +86 -0
- package/dist/cjs/nodes/constants.d.ts.map +1 -0
- package/dist/cjs/nodes/constants.js +102 -0
- package/dist/cjs/nodes/constants.js.map +1 -0
- package/dist/cjs/nodes/index.d.ts +8 -0
- package/dist/cjs/nodes/index.d.ts.map +1 -0
- package/dist/cjs/nodes/index.js +50 -0
- package/dist/cjs/nodes/index.js.map +1 -0
- package/dist/cjs/nodes/schemas.d.ts +332 -0
- package/dist/cjs/nodes/schemas.d.ts.map +1 -0
- package/dist/cjs/nodes/schemas.js +937 -0
- package/dist/cjs/nodes/schemas.js.map +1 -0
- package/dist/cjs/nodes/settings-schemas.d.ts +82 -0
- package/dist/cjs/nodes/settings-schemas.d.ts.map +1 -0
- package/dist/cjs/nodes/settings-schemas.js +106 -0
- package/dist/cjs/nodes/settings-schemas.js.map +1 -0
- package/dist/cjs/notifications/constants.d.ts +197 -0
- package/dist/cjs/notifications/constants.d.ts.map +1 -0
- package/dist/cjs/notifications/constants.js +181 -0
- package/dist/cjs/notifications/constants.js.map +1 -0
- package/dist/cjs/notifications/index.d.ts +5 -0
- package/dist/cjs/notifications/index.d.ts.map +1 -0
- package/dist/cjs/notifications/index.js +86 -0
- package/dist/cjs/notifications/index.js.map +1 -0
- package/dist/cjs/notifications/schemas.d.ts +1016 -0
- package/dist/cjs/notifications/schemas.d.ts.map +1 -0
- package/dist/cjs/notifications/schemas.js +851 -0
- package/dist/cjs/notifications/schemas.js.map +1 -0
- package/dist/cjs/onboarding/constants.d.ts +138 -0
- package/dist/cjs/onboarding/constants.d.ts.map +1 -0
- package/dist/cjs/onboarding/constants.js +123 -0
- package/dist/cjs/onboarding/constants.js.map +1 -0
- package/dist/cjs/onboarding/index.d.ts +5 -0
- package/dist/cjs/onboarding/index.d.ts.map +1 -0
- package/dist/cjs/onboarding/index.js +42 -0
- package/dist/cjs/onboarding/index.js.map +1 -0
- package/dist/cjs/onboarding/schemas.d.ts +360 -0
- package/dist/cjs/onboarding/schemas.d.ts.map +1 -0
- package/dist/cjs/onboarding/schemas.js +260 -0
- package/dist/cjs/onboarding/schemas.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/settings/constants.d.ts +206 -0
- package/dist/cjs/settings/constants.d.ts.map +1 -0
- package/dist/cjs/settings/constants.js +200 -0
- package/dist/cjs/settings/constants.js.map +1 -0
- package/dist/cjs/settings/index.d.ts +6 -0
- package/dist/cjs/settings/index.d.ts.map +1 -0
- package/dist/cjs/settings/index.js +62 -0
- package/dist/cjs/settings/index.js.map +1 -0
- package/dist/cjs/settings/schemas.d.ts +574 -0
- package/dist/cjs/settings/schemas.d.ts.map +1 -0
- package/dist/cjs/settings/schemas.js +437 -0
- package/dist/cjs/settings/schemas.js.map +1 -0
- package/dist/cjs/settings/types.d.ts +79 -0
- package/dist/cjs/settings/types.d.ts.map +1 -0
- package/dist/cjs/settings/types.js +6 -0
- package/dist/cjs/settings/types.js.map +1 -0
- package/dist/cjs/sharing/constants.d.ts +216 -0
- package/dist/cjs/sharing/constants.d.ts.map +1 -0
- package/dist/cjs/sharing/constants.js +163 -0
- package/dist/cjs/sharing/constants.js.map +1 -0
- package/dist/cjs/sharing/enum.d.ts +5 -0
- package/dist/cjs/sharing/enum.d.ts.map +1 -0
- package/dist/cjs/sharing/enum.js +9 -0
- package/dist/cjs/sharing/enum.js.map +1 -0
- package/dist/cjs/sharing/grants.d.ts +490 -0
- package/dist/cjs/sharing/grants.d.ts.map +1 -0
- package/dist/cjs/sharing/grants.js +447 -0
- package/dist/cjs/sharing/grants.js.map +1 -0
- package/dist/cjs/sharing/groups.d.ts +410 -0
- package/dist/cjs/sharing/groups.d.ts.map +1 -0
- package/dist/cjs/sharing/groups.js +375 -0
- package/dist/cjs/sharing/groups.js.map +1 -0
- package/dist/cjs/sharing/index.d.ts +5 -0
- package/dist/cjs/sharing/index.d.ts.map +1 -0
- package/dist/cjs/sharing/index.js +77 -0
- package/dist/cjs/sharing/index.js.map +1 -0
- package/dist/cjs/sharing/schemas.d.ts +3 -0
- package/dist/cjs/sharing/schemas.d.ts.map +1 -0
- package/dist/cjs/sharing/schemas.js +21 -0
- package/dist/cjs/sharing/schemas.js.map +1 -0
- package/dist/cjs/storage/constants.d.ts +111 -0
- package/dist/cjs/storage/constants.d.ts.map +1 -0
- package/dist/cjs/storage/constants.js +107 -0
- package/dist/cjs/storage/constants.js.map +1 -0
- package/dist/cjs/storage/index.d.ts +27 -0
- package/dist/cjs/storage/index.d.ts.map +1 -0
- package/dist/cjs/storage/index.js +69 -0
- package/dist/cjs/storage/index.js.map +1 -0
- package/dist/cjs/storage/objects-complete-upload.d.ts +19 -0
- package/dist/cjs/storage/objects-complete-upload.d.ts.map +1 -0
- package/dist/cjs/storage/objects-complete-upload.js +19 -0
- package/dist/cjs/storage/objects-complete-upload.js.map +1 -0
- package/dist/cjs/storage/objects-download-url.d.ts +17 -0
- package/dist/cjs/storage/objects-download-url.d.ts.map +1 -0
- package/dist/cjs/storage/objects-download-url.js +16 -0
- package/dist/cjs/storage/objects-download-url.js.map +1 -0
- package/dist/cjs/storage/objects-init-upload.d.ts +39 -0
- package/dist/cjs/storage/objects-init-upload.d.ts.map +1 -0
- package/dist/cjs/storage/objects-init-upload.js +40 -0
- package/dist/cjs/storage/objects-init-upload.js.map +1 -0
- package/dist/cjs/storage/objects-list-query.d.ts +50 -0
- package/dist/cjs/storage/objects-list-query.d.ts.map +1 -0
- package/dist/cjs/storage/objects-list-query.js +23 -0
- package/dist/cjs/storage/objects-list-query.js.map +1 -0
- package/dist/cjs/storage/objects-object-response.d.ts +49 -0
- package/dist/cjs/storage/objects-object-response.d.ts.map +1 -0
- package/dist/cjs/storage/objects-object-response.js +54 -0
- package/dist/cjs/storage/objects-object-response.js.map +1 -0
- package/dist/cjs/storage/objects-update-metadata.d.ts +16 -0
- package/dist/cjs/storage/objects-update-metadata.d.ts.map +1 -0
- package/dist/cjs/storage/objects-update-metadata.js +14 -0
- package/dist/cjs/storage/objects-update-metadata.js.map +1 -0
- package/dist/cjs/storage/schemas.d.ts +13 -0
- package/dist/cjs/storage/schemas.d.ts.map +1 -0
- package/dist/cjs/storage/schemas.js +35 -0
- package/dist/cjs/storage/schemas.js.map +1 -0
- package/dist/cjs/storage/settings-schemas.d.ts +188 -0
- package/dist/cjs/storage/settings-schemas.d.ts.map +1 -0
- package/dist/cjs/storage/settings-schemas.js +223 -0
- package/dist/cjs/storage/settings-schemas.js.map +1 -0
- package/dist/cjs/storage/storage-bucket-provision.d.ts +152 -0
- package/dist/cjs/storage/storage-bucket-provision.d.ts.map +1 -0
- package/dist/cjs/storage/storage-bucket-provision.js +216 -0
- package/dist/cjs/storage/storage-bucket-provision.js.map +1 -0
- package/dist/cjs/storage/storage-config-response.d.ts +99 -0
- package/dist/cjs/storage/storage-config-response.d.ts.map +1 -0
- package/dist/cjs/storage/storage-config-response.js +173 -0
- package/dist/cjs/storage/storage-config-response.js.map +1 -0
- package/dist/cjs/storage/storage-config-update.d.ts +46 -0
- package/dist/cjs/storage/storage-config-update.d.ts.map +1 -0
- package/dist/cjs/storage/storage-config-update.js +133 -0
- package/dist/cjs/storage/storage-config-update.js.map +1 -0
- package/dist/cjs/storage/storage-connection-test.d.ts +129 -0
- package/dist/cjs/storage/storage-connection-test.d.ts.map +1 -0
- package/dist/cjs/storage/storage-connection-test.js +244 -0
- package/dist/cjs/storage/storage-connection-test.js.map +1 -0
- package/dist/cjs/storage/storage-status.d.ts +16 -0
- package/dist/cjs/storage/storage-status.d.ts.map +1 -0
- package/dist/cjs/storage/storage-status.js +23 -0
- package/dist/cjs/storage/storage-status.js.map +1 -0
- package/dist/cjs/telemetry/assistant.d.ts +173 -0
- package/dist/cjs/telemetry/assistant.d.ts.map +1 -0
- package/dist/cjs/telemetry/assistant.js +43 -0
- package/dist/cjs/telemetry/assistant.js.map +1 -0
- package/dist/cjs/telemetry/config.d.ts +96 -0
- package/dist/cjs/telemetry/config.d.ts.map +1 -0
- package/dist/cjs/telemetry/config.js +115 -0
- package/dist/cjs/telemetry/config.js.map +1 -0
- package/dist/cjs/telemetry/connection.d.ts +355 -0
- package/dist/cjs/telemetry/connection.d.ts.map +1 -0
- package/dist/cjs/telemetry/connection.js +451 -0
- package/dist/cjs/telemetry/connection.js.map +1 -0
- package/dist/cjs/telemetry/constants.d.ts +814 -0
- package/dist/cjs/telemetry/constants.d.ts.map +1 -0
- package/dist/cjs/telemetry/constants.js +685 -0
- package/dist/cjs/telemetry/constants.js.map +1 -0
- package/dist/cjs/telemetry/dashboard.d.ts +997 -0
- package/dist/cjs/telemetry/dashboard.d.ts.map +1 -0
- package/dist/cjs/telemetry/dashboard.js +755 -0
- package/dist/cjs/telemetry/dashboard.js.map +1 -0
- package/dist/cjs/telemetry/enum.d.ts +5 -0
- package/dist/cjs/telemetry/enum.d.ts.map +1 -0
- package/dist/cjs/telemetry/enum.js +12 -0
- package/dist/cjs/telemetry/enum.js.map +1 -0
- package/dist/cjs/telemetry/index.d.ts +5 -0
- package/dist/cjs/telemetry/index.d.ts.map +1 -0
- package/dist/cjs/telemetry/index.js +160 -0
- package/dist/cjs/telemetry/index.js.map +1 -0
- package/dist/cjs/telemetry/presentation.d.ts +243 -0
- package/dist/cjs/telemetry/presentation.d.ts.map +1 -0
- package/dist/cjs/telemetry/presentation.js +300 -0
- package/dist/cjs/telemetry/presentation.js.map +1 -0
- package/dist/cjs/telemetry/query.d.ts +147 -0
- package/dist/cjs/telemetry/query.d.ts.map +1 -0
- package/dist/cjs/telemetry/query.js +141 -0
- package/dist/cjs/telemetry/query.js.map +1 -0
- package/dist/cjs/telemetry/schemas.d.ts +20 -0
- package/dist/cjs/telemetry/schemas.d.ts.map +1 -0
- package/dist/cjs/telemetry/schemas.js +109 -0
- package/dist/cjs/telemetry/schemas.js.map +1 -0
- package/dist/cjs/telemetry/settings.d.ts +65 -0
- package/dist/cjs/telemetry/settings.d.ts.map +1 -0
- package/dist/cjs/telemetry/settings.js +77 -0
- package/dist/cjs/telemetry/settings.js.map +1 -0
- package/dist/cjs/telemetry/stack.d.ts +87 -0
- package/dist/cjs/telemetry/stack.d.ts.map +1 -0
- package/dist/cjs/telemetry/stack.js +93 -0
- package/dist/cjs/telemetry/stack.js.map +1 -0
- package/dist/cjs/telemetry/status.d.ts +65 -0
- package/dist/cjs/telemetry/status.d.ts.map +1 -0
- package/dist/cjs/telemetry/status.js +65 -0
- package/dist/cjs/telemetry/status.js.map +1 -0
- package/dist/cjs/telemetry/store.d.ts +111 -0
- package/dist/cjs/telemetry/store.d.ts.map +1 -0
- package/dist/cjs/telemetry/store.js +83 -0
- package/dist/cjs/telemetry/store.js.map +1 -0
- package/dist/cjs/user-data/constants.d.ts +157 -0
- package/dist/cjs/user-data/constants.d.ts.map +1 -0
- package/dist/cjs/user-data/constants.js +137 -0
- package/dist/cjs/user-data/constants.js.map +1 -0
- package/dist/cjs/user-data/index.d.ts +5 -0
- package/dist/cjs/user-data/index.d.ts.map +1 -0
- package/dist/cjs/user-data/index.js +46 -0
- package/dist/cjs/user-data/index.js.map +1 -0
- package/dist/cjs/user-data/schemas.d.ts +306 -0
- package/dist/cjs/user-data/schemas.d.ts.map +1 -0
- package/dist/cjs/user-data/schemas.js +333 -0
- package/dist/cjs/user-data/schemas.js.map +1 -0
- package/dist/esm/ai/capabilities.d.ts +85 -0
- package/dist/esm/ai/capabilities.d.ts.map +1 -0
- package/dist/esm/ai/capabilities.js +90 -0
- package/dist/esm/ai/capabilities.js.map +1 -0
- package/dist/esm/ai/constants.d.ts +239 -0
- package/dist/esm/ai/constants.d.ts.map +1 -0
- package/dist/esm/ai/constants.js +229 -0
- package/dist/esm/ai/constants.js.map +1 -0
- package/dist/esm/ai/features.d.ts +24 -0
- package/dist/esm/ai/features.d.ts.map +1 -0
- package/dist/esm/ai/features.js +30 -0
- package/dist/esm/ai/features.js.map +1 -0
- package/dist/esm/ai/index.d.ts +11 -0
- package/dist/esm/ai/index.d.ts.map +1 -0
- package/dist/esm/ai/index.js +16 -0
- package/dist/esm/ai/index.js.map +1 -0
- package/dist/esm/ai/org-keys.d.ts +50 -0
- package/dist/esm/ai/org-keys.d.ts.map +1 -0
- package/dist/esm/ai/org-keys.js +40 -0
- package/dist/esm/ai/org-keys.js.map +1 -0
- package/dist/esm/ai/schemas.d.ts +642 -0
- package/dist/esm/ai/schemas.d.ts.map +1 -0
- package/dist/esm/ai/schemas.js +889 -0
- package/dist/esm/ai/schemas.js.map +1 -0
- package/dist/esm/android-app/constants.d.ts +337 -0
- package/dist/esm/android-app/constants.d.ts.map +1 -0
- package/dist/esm/android-app/constants.js +306 -0
- package/dist/esm/android-app/constants.js.map +1 -0
- package/dist/esm/android-app/index.d.ts +5 -0
- package/dist/esm/android-app/index.d.ts.map +1 -0
- package/dist/esm/android-app/index.js +8 -0
- package/dist/esm/android-app/index.js.map +1 -0
- package/dist/esm/android-app/schemas.d.ts +358 -0
- package/dist/esm/android-app/schemas.d.ts.map +1 -0
- package/dist/esm/android-app/schemas.js +306 -0
- package/dist/esm/android-app/schemas.js.map +1 -0
- package/dist/esm/credentials/constants.d.ts +35 -0
- package/dist/esm/credentials/constants.d.ts.map +1 -0
- package/dist/esm/credentials/constants.js +36 -0
- package/dist/esm/credentials/constants.js.map +1 -0
- package/dist/esm/credentials/index.d.ts +5 -0
- package/dist/esm/credentials/index.d.ts.map +1 -0
- package/dist/esm/credentials/index.js +8 -0
- package/dist/esm/credentials/index.js.map +1 -0
- package/dist/esm/credentials/schemas.d.ts +64 -0
- package/dist/esm/credentials/schemas.d.ts.map +1 -0
- package/dist/esm/credentials/schemas.js +79 -0
- package/dist/esm/credentials/schemas.js.map +1 -0
- package/dist/esm/db-backup/config.d.ts +76 -0
- package/dist/esm/db-backup/config.d.ts.map +1 -0
- package/dist/esm/db-backup/config.js +112 -0
- package/dist/esm/db-backup/config.js.map +1 -0
- package/dist/esm/db-backup/constants.d.ts +314 -0
- package/dist/esm/db-backup/constants.d.ts.map +1 -0
- package/dist/esm/db-backup/constants.js +240 -0
- package/dist/esm/db-backup/constants.js.map +1 -0
- package/dist/esm/db-backup/index.d.ts +19 -0
- package/dist/esm/db-backup/index.d.ts.map +1 -0
- package/dist/esm/db-backup/index.js +25 -0
- package/dist/esm/db-backup/index.js.map +1 -0
- package/dist/esm/db-backup/node-credential.d.ts +37 -0
- package/dist/esm/db-backup/node-credential.d.ts.map +1 -0
- package/dist/esm/db-backup/node-credential.js +104 -0
- package/dist/esm/db-backup/node-credential.js.map +1 -0
- package/dist/esm/db-backup/node-result.d.ts +34 -0
- package/dist/esm/db-backup/node-result.d.ts.map +1 -0
- package/dist/esm/db-backup/node-result.js +165 -0
- package/dist/esm/db-backup/node-result.js.map +1 -0
- package/dist/esm/db-backup/restore.d.ts +405 -0
- package/dist/esm/db-backup/restore.d.ts.map +1 -0
- package/dist/esm/db-backup/restore.js +494 -0
- package/dist/esm/db-backup/restore.js.map +1 -0
- package/dist/esm/db-backup/run-actions.d.ts +49 -0
- package/dist/esm/db-backup/run-actions.d.ts.map +1 -0
- package/dist/esm/db-backup/run-actions.js +118 -0
- package/dist/esm/db-backup/run-actions.js.map +1 -0
- package/dist/esm/db-backup/runs-list-query.d.ts +20 -0
- package/dist/esm/db-backup/runs-list-query.d.ts.map +1 -0
- package/dist/esm/db-backup/runs-list-query.js +50 -0
- package/dist/esm/db-backup/runs-list-query.js.map +1 -0
- package/dist/esm/db-backup/runs.d.ts +46 -0
- package/dist/esm/db-backup/runs.d.ts.map +1 -0
- package/dist/esm/db-backup/runs.js +229 -0
- package/dist/esm/db-backup/runs.js.map +1 -0
- package/dist/esm/db-backup/schemas.d.ts +9 -0
- package/dist/esm/db-backup/schemas.d.ts.map +1 -0
- package/dist/esm/db-backup/schemas.js +15 -0
- package/dist/esm/db-backup/schemas.js.map +1 -0
- package/dist/esm/db-backup/settings-schemas.d.ts +217 -0
- package/dist/esm/db-backup/settings-schemas.d.ts.map +1 -0
- package/dist/esm/db-backup/settings-schemas.js +316 -0
- package/dist/esm/db-backup/settings-schemas.js.map +1 -0
- package/dist/esm/doctor/constants.d.ts +59 -0
- package/dist/esm/doctor/constants.d.ts.map +1 -0
- package/dist/esm/doctor/constants.js +54 -0
- package/dist/esm/doctor/constants.js.map +1 -0
- package/dist/esm/doctor/index.d.ts +5 -0
- package/dist/esm/doctor/index.d.ts.map +1 -0
- package/dist/esm/doctor/index.js +10 -0
- package/dist/esm/doctor/index.js.map +1 -0
- package/dist/esm/doctor/schemas.d.ts +186 -0
- package/dist/esm/doctor/schemas.d.ts.map +1 -0
- package/dist/esm/doctor/schemas.js +180 -0
- package/dist/esm/doctor/schemas.js.map +1 -0
- package/dist/esm/email/constants.d.ts +82 -0
- package/dist/esm/email/constants.d.ts.map +1 -0
- package/dist/esm/email/constants.js +79 -0
- package/dist/esm/email/constants.js.map +1 -0
- package/dist/esm/email/index.d.ts +5 -0
- package/dist/esm/email/index.d.ts.map +1 -0
- package/dist/esm/email/index.js +8 -0
- package/dist/esm/email/index.js.map +1 -0
- package/dist/esm/email/schemas.d.ts +276 -0
- package/dist/esm/email/schemas.d.ts.map +1 -0
- package/dist/esm/email/schemas.js +277 -0
- package/dist/esm/email/schemas.js.map +1 -0
- package/dist/esm/exports/constants.d.ts +123 -0
- package/dist/esm/exports/constants.d.ts.map +1 -0
- package/dist/esm/exports/constants.js +106 -0
- package/dist/esm/exports/constants.js.map +1 -0
- package/dist/esm/exports/index.d.ts +5 -0
- package/dist/esm/exports/index.d.ts.map +1 -0
- package/dist/esm/exports/index.js +7 -0
- package/dist/esm/exports/index.js.map +1 -0
- package/dist/esm/exports/schemas.d.ts +386 -0
- package/dist/esm/exports/schemas.d.ts.map +1 -0
- package/dist/esm/exports/schemas.js +285 -0
- package/dist/esm/exports/schemas.js.map +1 -0
- package/dist/esm/identity/constants.d.ts +273 -0
- package/dist/esm/identity/constants.d.ts.map +1 -0
- package/dist/esm/identity/constants.js +244 -0
- package/dist/esm/identity/constants.js.map +1 -0
- package/dist/esm/identity/index.d.ts +5 -0
- package/dist/esm/identity/index.d.ts.map +1 -0
- package/dist/esm/identity/index.js +10 -0
- package/dist/esm/identity/index.js.map +1 -0
- package/dist/esm/identity/schemas.d.ts +784 -0
- package/dist/esm/identity/schemas.d.ts.map +1 -0
- package/dist/esm/identity/schemas.js +681 -0
- package/dist/esm/identity/schemas.js.map +1 -0
- package/dist/esm/index.d.ts +13 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +13 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/jobs/constants.d.ts +135 -0
- package/dist/esm/jobs/constants.d.ts.map +1 -0
- package/dist/esm/jobs/constants.js +127 -0
- package/dist/esm/jobs/constants.js.map +1 -0
- package/dist/esm/jobs/index.d.ts +9 -0
- package/dist/esm/jobs/index.d.ts.map +1 -0
- package/dist/esm/jobs/index.js +11 -0
- package/dist/esm/jobs/index.js.map +1 -0
- package/dist/esm/jobs/retention-schemas.d.ts +252 -0
- package/dist/esm/jobs/retention-schemas.d.ts.map +1 -0
- package/dist/esm/jobs/retention-schemas.js +229 -0
- package/dist/esm/jobs/retention-schemas.js.map +1 -0
- package/dist/esm/jobs/schemas.d.ts +361 -0
- package/dist/esm/jobs/schemas.d.ts.map +1 -0
- package/dist/esm/jobs/schemas.js +703 -0
- package/dist/esm/jobs/schemas.js.map +1 -0
- package/dist/esm/jobs/settings-schemas.d.ts +84 -0
- package/dist/esm/jobs/settings-schemas.d.ts.map +1 -0
- package/dist/esm/jobs/settings-schemas.js +113 -0
- package/dist/esm/jobs/settings-schemas.js.map +1 -0
- package/dist/esm/nodes/admin-schemas.d.ts +204 -0
- package/dist/esm/nodes/admin-schemas.d.ts.map +1 -0
- package/dist/esm/nodes/admin-schemas.js +150 -0
- package/dist/esm/nodes/admin-schemas.js.map +1 -0
- package/dist/esm/nodes/constants.d.ts +86 -0
- package/dist/esm/nodes/constants.d.ts.map +1 -0
- package/dist/esm/nodes/constants.js +99 -0
- package/dist/esm/nodes/constants.js.map +1 -0
- package/dist/esm/nodes/index.d.ts +8 -0
- package/dist/esm/nodes/index.d.ts.map +1 -0
- package/dist/esm/nodes/index.js +11 -0
- package/dist/esm/nodes/index.js.map +1 -0
- package/dist/esm/nodes/schemas.d.ts +332 -0
- package/dist/esm/nodes/schemas.d.ts.map +1 -0
- package/dist/esm/nodes/schemas.js +934 -0
- package/dist/esm/nodes/schemas.js.map +1 -0
- package/dist/esm/nodes/settings-schemas.d.ts +82 -0
- package/dist/esm/nodes/settings-schemas.d.ts.map +1 -0
- package/dist/esm/nodes/settings-schemas.js +103 -0
- package/dist/esm/nodes/settings-schemas.js.map +1 -0
- package/dist/esm/notifications/constants.d.ts +197 -0
- package/dist/esm/notifications/constants.d.ts.map +1 -0
- package/dist/esm/notifications/constants.js +178 -0
- package/dist/esm/notifications/constants.js.map +1 -0
- package/dist/esm/notifications/index.d.ts +5 -0
- package/dist/esm/notifications/index.d.ts.map +1 -0
- package/dist/esm/notifications/index.js +9 -0
- package/dist/esm/notifications/index.js.map +1 -0
- package/dist/esm/notifications/schemas.d.ts +1016 -0
- package/dist/esm/notifications/schemas.d.ts.map +1 -0
- package/dist/esm/notifications/schemas.js +848 -0
- package/dist/esm/notifications/schemas.js.map +1 -0
- package/dist/esm/onboarding/constants.d.ts +138 -0
- package/dist/esm/onboarding/constants.d.ts.map +1 -0
- package/dist/esm/onboarding/constants.js +120 -0
- package/dist/esm/onboarding/constants.js.map +1 -0
- package/dist/esm/onboarding/index.d.ts +5 -0
- package/dist/esm/onboarding/index.d.ts.map +1 -0
- package/dist/esm/onboarding/index.js +7 -0
- package/dist/esm/onboarding/index.js.map +1 -0
- package/dist/esm/onboarding/schemas.d.ts +360 -0
- package/dist/esm/onboarding/schemas.d.ts.map +1 -0
- package/dist/esm/onboarding/schemas.js +257 -0
- package/dist/esm/onboarding/schemas.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/settings/constants.d.ts +206 -0
- package/dist/esm/settings/constants.d.ts.map +1 -0
- package/dist/esm/settings/constants.js +197 -0
- package/dist/esm/settings/constants.js.map +1 -0
- package/dist/esm/settings/index.d.ts +6 -0
- package/dist/esm/settings/index.d.ts.map +1 -0
- package/dist/esm/settings/index.js +11 -0
- package/dist/esm/settings/index.js.map +1 -0
- package/dist/esm/settings/schemas.d.ts +574 -0
- package/dist/esm/settings/schemas.d.ts.map +1 -0
- package/dist/esm/settings/schemas.js +434 -0
- package/dist/esm/settings/schemas.js.map +1 -0
- package/dist/esm/settings/types.d.ts +79 -0
- package/dist/esm/settings/types.d.ts.map +1 -0
- package/dist/esm/settings/types.js +5 -0
- package/dist/esm/settings/types.js.map +1 -0
- package/dist/esm/sharing/constants.d.ts +216 -0
- package/dist/esm/sharing/constants.d.ts.map +1 -0
- package/dist/esm/sharing/constants.js +159 -0
- package/dist/esm/sharing/constants.js.map +1 -0
- package/dist/esm/sharing/enum.d.ts +5 -0
- package/dist/esm/sharing/enum.d.ts.map +1 -0
- package/dist/esm/sharing/enum.js +6 -0
- package/dist/esm/sharing/enum.js.map +1 -0
- package/dist/esm/sharing/grants.d.ts +490 -0
- package/dist/esm/sharing/grants.d.ts.map +1 -0
- package/dist/esm/sharing/grants.js +444 -0
- package/dist/esm/sharing/grants.js.map +1 -0
- package/dist/esm/sharing/groups.d.ts +410 -0
- package/dist/esm/sharing/groups.d.ts.map +1 -0
- package/dist/esm/sharing/groups.js +372 -0
- package/dist/esm/sharing/groups.js.map +1 -0
- package/dist/esm/sharing/index.d.ts +5 -0
- package/dist/esm/sharing/index.d.ts.map +1 -0
- package/dist/esm/sharing/index.js +11 -0
- package/dist/esm/sharing/index.js.map +1 -0
- package/dist/esm/sharing/schemas.d.ts +3 -0
- package/dist/esm/sharing/schemas.d.ts.map +1 -0
- package/dist/esm/sharing/schemas.js +5 -0
- package/dist/esm/sharing/schemas.js.map +1 -0
- package/dist/esm/storage/constants.d.ts +111 -0
- package/dist/esm/storage/constants.d.ts.map +1 -0
- package/dist/esm/storage/constants.js +104 -0
- package/dist/esm/storage/constants.js.map +1 -0
- package/dist/esm/storage/index.d.ts +27 -0
- package/dist/esm/storage/index.d.ts.map +1 -0
- package/dist/esm/storage/index.js +23 -0
- package/dist/esm/storage/index.js.map +1 -0
- package/dist/esm/storage/objects-complete-upload.d.ts +19 -0
- package/dist/esm/storage/objects-complete-upload.d.ts.map +1 -0
- package/dist/esm/storage/objects-complete-upload.js +16 -0
- package/dist/esm/storage/objects-complete-upload.js.map +1 -0
- package/dist/esm/storage/objects-download-url.d.ts +17 -0
- package/dist/esm/storage/objects-download-url.d.ts.map +1 -0
- package/dist/esm/storage/objects-download-url.js +13 -0
- package/dist/esm/storage/objects-download-url.js.map +1 -0
- package/dist/esm/storage/objects-init-upload.d.ts +39 -0
- package/dist/esm/storage/objects-init-upload.d.ts.map +1 -0
- package/dist/esm/storage/objects-init-upload.js +37 -0
- package/dist/esm/storage/objects-init-upload.js.map +1 -0
- package/dist/esm/storage/objects-list-query.d.ts +50 -0
- package/dist/esm/storage/objects-list-query.d.ts.map +1 -0
- package/dist/esm/storage/objects-list-query.js +20 -0
- package/dist/esm/storage/objects-list-query.js.map +1 -0
- package/dist/esm/storage/objects-object-response.d.ts +49 -0
- package/dist/esm/storage/objects-object-response.d.ts.map +1 -0
- package/dist/esm/storage/objects-object-response.js +51 -0
- package/dist/esm/storage/objects-object-response.js.map +1 -0
- package/dist/esm/storage/objects-update-metadata.d.ts +16 -0
- package/dist/esm/storage/objects-update-metadata.d.ts.map +1 -0
- package/dist/esm/storage/objects-update-metadata.js +11 -0
- package/dist/esm/storage/objects-update-metadata.js.map +1 -0
- package/dist/esm/storage/schemas.d.ts +13 -0
- package/dist/esm/storage/schemas.d.ts.map +1 -0
- package/dist/esm/storage/schemas.js +19 -0
- package/dist/esm/storage/schemas.js.map +1 -0
- package/dist/esm/storage/settings-schemas.d.ts +188 -0
- package/dist/esm/storage/settings-schemas.d.ts.map +1 -0
- package/dist/esm/storage/settings-schemas.js +220 -0
- package/dist/esm/storage/settings-schemas.js.map +1 -0
- package/dist/esm/storage/storage-bucket-provision.d.ts +152 -0
- package/dist/esm/storage/storage-bucket-provision.d.ts.map +1 -0
- package/dist/esm/storage/storage-bucket-provision.js +213 -0
- package/dist/esm/storage/storage-bucket-provision.js.map +1 -0
- package/dist/esm/storage/storage-config-response.d.ts +99 -0
- package/dist/esm/storage/storage-config-response.d.ts.map +1 -0
- package/dist/esm/storage/storage-config-response.js +170 -0
- package/dist/esm/storage/storage-config-response.js.map +1 -0
- package/dist/esm/storage/storage-config-update.d.ts +46 -0
- package/dist/esm/storage/storage-config-update.d.ts.map +1 -0
- package/dist/esm/storage/storage-config-update.js +130 -0
- package/dist/esm/storage/storage-config-update.js.map +1 -0
- package/dist/esm/storage/storage-connection-test.d.ts +129 -0
- package/dist/esm/storage/storage-connection-test.d.ts.map +1 -0
- package/dist/esm/storage/storage-connection-test.js +241 -0
- package/dist/esm/storage/storage-connection-test.js.map +1 -0
- package/dist/esm/storage/storage-status.d.ts +16 -0
- package/dist/esm/storage/storage-status.d.ts.map +1 -0
- package/dist/esm/storage/storage-status.js +20 -0
- package/dist/esm/storage/storage-status.js.map +1 -0
- package/dist/esm/telemetry/assistant.d.ts +173 -0
- package/dist/esm/telemetry/assistant.d.ts.map +1 -0
- package/dist/esm/telemetry/assistant.js +40 -0
- package/dist/esm/telemetry/assistant.js.map +1 -0
- package/dist/esm/telemetry/config.d.ts +96 -0
- package/dist/esm/telemetry/config.d.ts.map +1 -0
- package/dist/esm/telemetry/config.js +112 -0
- package/dist/esm/telemetry/config.js.map +1 -0
- package/dist/esm/telemetry/connection.d.ts +355 -0
- package/dist/esm/telemetry/connection.d.ts.map +1 -0
- package/dist/esm/telemetry/connection.js +447 -0
- package/dist/esm/telemetry/connection.js.map +1 -0
- package/dist/esm/telemetry/constants.d.ts +814 -0
- package/dist/esm/telemetry/constants.d.ts.map +1 -0
- package/dist/esm/telemetry/constants.js +681 -0
- package/dist/esm/telemetry/constants.js.map +1 -0
- package/dist/esm/telemetry/dashboard.d.ts +997 -0
- package/dist/esm/telemetry/dashboard.d.ts.map +1 -0
- package/dist/esm/telemetry/dashboard.js +748 -0
- package/dist/esm/telemetry/dashboard.js.map +1 -0
- package/dist/esm/telemetry/enum.d.ts +5 -0
- package/dist/esm/telemetry/enum.d.ts.map +1 -0
- package/dist/esm/telemetry/enum.js +9 -0
- package/dist/esm/telemetry/enum.js.map +1 -0
- package/dist/esm/telemetry/index.d.ts +5 -0
- package/dist/esm/telemetry/index.d.ts.map +1 -0
- package/dist/esm/telemetry/index.js +10 -0
- package/dist/esm/telemetry/index.js.map +1 -0
- package/dist/esm/telemetry/presentation.d.ts +243 -0
- package/dist/esm/telemetry/presentation.d.ts.map +1 -0
- package/dist/esm/telemetry/presentation.js +297 -0
- package/dist/esm/telemetry/presentation.js.map +1 -0
- package/dist/esm/telemetry/query.d.ts +147 -0
- package/dist/esm/telemetry/query.d.ts.map +1 -0
- package/dist/esm/telemetry/query.js +138 -0
- package/dist/esm/telemetry/query.js.map +1 -0
- package/dist/esm/telemetry/schemas.d.ts +20 -0
- package/dist/esm/telemetry/schemas.d.ts.map +1 -0
- package/dist/esm/telemetry/schemas.js +14 -0
- package/dist/esm/telemetry/schemas.js.map +1 -0
- package/dist/esm/telemetry/settings.d.ts +65 -0
- package/dist/esm/telemetry/settings.d.ts.map +1 -0
- package/dist/esm/telemetry/settings.js +74 -0
- package/dist/esm/telemetry/settings.js.map +1 -0
- package/dist/esm/telemetry/stack.d.ts +87 -0
- package/dist/esm/telemetry/stack.d.ts.map +1 -0
- package/dist/esm/telemetry/stack.js +90 -0
- package/dist/esm/telemetry/stack.js.map +1 -0
- package/dist/esm/telemetry/status.d.ts +65 -0
- package/dist/esm/telemetry/status.d.ts.map +1 -0
- package/dist/esm/telemetry/status.js +62 -0
- package/dist/esm/telemetry/status.js.map +1 -0
- package/dist/esm/telemetry/store.d.ts +111 -0
- package/dist/esm/telemetry/store.d.ts.map +1 -0
- package/dist/esm/telemetry/store.js +80 -0
- package/dist/esm/telemetry/store.js.map +1 -0
- package/dist/esm/user-data/constants.d.ts +157 -0
- package/dist/esm/user-data/constants.d.ts.map +1 -0
- package/dist/esm/user-data/constants.js +134 -0
- package/dist/esm/user-data/constants.js.map +1 -0
- package/dist/esm/user-data/index.d.ts +5 -0
- package/dist/esm/user-data/index.d.ts.map +1 -0
- package/dist/esm/user-data/index.js +7 -0
- package/dist/esm/user-data/index.js.map +1 -0
- package/dist/esm/user-data/schemas.d.ts +306 -0
- package/dist/esm/user-data/schemas.d.ts.map +1 -0
- package/dist/esm/user-data/schemas.js +330 -0
- package/dist/esm/user-data/schemas.js.map +1 -0
- package/package.json +228 -4
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// The restore and rollback wire contract (issue #286, epic #254)
|
|
3
|
+
// =============================================================================
|
|
4
|
+
//
|
|
5
|
+
// ⚠ THIS IS THE ONE PLACE IN THIS APPLICATION WHERE A MIS-FIRED OR RETRIED
|
|
6
|
+
// REQUEST IS AN OUTAGE RATHER THAN A DUPLICATE ROW. Every other POST in this
|
|
7
|
+
// API, sent twice, costs at worst a wasted row: a second backup is refused by
|
|
8
|
+
// the single-active index, a second job is a second job, a second broadcast is
|
|
9
|
+
// embarrassing. A second restore replaces the production database. So the
|
|
10
|
+
// request body is shaped to be IMPOSSIBLE TO RECONSTRUCT BY ACCIDENT, and that
|
|
11
|
+
// is what the two `confirmation` literals below are for.
|
|
12
|
+
//
|
|
13
|
+
// -----------------------------------------------------------------------------
|
|
14
|
+
// WHY A TYPED LITERAL AND NOT `confirm: true`
|
|
15
|
+
// -----------------------------------------------------------------------------
|
|
16
|
+
//
|
|
17
|
+
// ⚠ REJECTED: `{ "confirm": true }`. It is the obvious shape and it is worth
|
|
18
|
+
// naming so it is not proposed again. A boolean is reproduced by:
|
|
19
|
+
//
|
|
20
|
+
// - a browser or proxy replaying a POST it believes idempotent;
|
|
21
|
+
// - a `curl` line copied out of a runbook, a terminal history or a chat;
|
|
22
|
+
// - a client library retrying on a socket timeout — which is exactly when a
|
|
23
|
+
// restore is in flight and answering slowly;
|
|
24
|
+
// - a double-click on a button whose first response has not arrived.
|
|
25
|
+
//
|
|
26
|
+
// In all four the body is `{"confirm":true}` and the server cannot tell the
|
|
27
|
+
// second request from the first. `{"confirmation":"RESTORE"}` is reproduced by
|
|
28
|
+
// none of them ACCIDENTALLY — it can still be replayed deliberately, which is
|
|
29
|
+
// the point: a replay of this body is a decision somebody made, and a request
|
|
30
|
+
// that carries the wrong word (or no word) is refused with a 400 having started
|
|
31
|
+
// NOTHING. Not a 409, not a queued attempt, not a partially-run pre-flight.
|
|
32
|
+
//
|
|
33
|
+
// The two words differ (`RESTORE` and `ROLLBACK`) so that a body copied from
|
|
34
|
+
// one route to the other is refused too. They are UPPERCASE and matched
|
|
35
|
+
// exactly: a case-insensitive compare would accept `restore`, which is a word
|
|
36
|
+
// somebody types by habit.
|
|
37
|
+
//
|
|
38
|
+
// -----------------------------------------------------------------------------
|
|
39
|
+
// THREE NORMAL OUTCOMES PER ROUTE, KEYED BY `mode` — AND `mode` IS THE ANSWER,
|
|
40
|
+
// NOT THE STATUS CODE
|
|
41
|
+
// -----------------------------------------------------------------------------
|
|
42
|
+
//
|
|
43
|
+
// Both routes answer `200` on every one of their three outcomes, and the
|
|
44
|
+
// discriminator is the `mode` field. This is the same contract
|
|
45
|
+
// `CancelBackupResultDto` states for its `outcome`, and it is forced by the
|
|
46
|
+
// same fact: THE HONEST ANSWER HAS MORE THAN ONE SHAPE AND A STATUS CODE CANNOT
|
|
47
|
+
// CARRY THE DIFFERENCE.
|
|
48
|
+
//
|
|
49
|
+
// ⚠ `guided` IS NOT AN ERROR STATUS, and this is the single most important
|
|
50
|
+
// decision in this file. A `guided` result means a CAPABILITY gate failed —
|
|
51
|
+
// nearly always `CREATEDB`, which managed PostgreSQL routinely denies — and the
|
|
52
|
+
// body carries a complete, paste-ready command block plus a runbook link so the
|
|
53
|
+
// operator can perform the same restore by hand with a superuser. Answering
|
|
54
|
+
// `4xx` would tell them, in the middle of an incident, that their platform is
|
|
55
|
+
// unsupported. It is not: it is a platform this design PLANNED for. See
|
|
56
|
+
// `docs/specs/database-restore.md`, "Outcomes and precedence".
|
|
57
|
+
//
|
|
58
|
+
// `blocked` is likewise a 200: the schema gate found a migration mismatch, and
|
|
59
|
+
// the caller's next move is to re-send with `overrideSchemaCheck: true`. That
|
|
60
|
+
// is an answer, not a failure.
|
|
61
|
+
//
|
|
62
|
+
// What IS an error is anything that means the request could not be answered at
|
|
63
|
+
// all: no such run (404), a run that is not a restorable archive (400), a
|
|
64
|
+
// missing or wrong confirmation (400), and another restore already in flight
|
|
65
|
+
// (409). See the controller for that mapping and why it lives there.
|
|
66
|
+
//
|
|
67
|
+
// -----------------------------------------------------------------------------
|
|
68
|
+
// ⚠ `overrideSchemaCheck` UNBLOCKS EXACTLY ONE GATE
|
|
69
|
+
// -----------------------------------------------------------------------------
|
|
70
|
+
//
|
|
71
|
+
// It clears the SCHEMA COMPATIBILITY gate and nothing else. It can never
|
|
72
|
+
// unblock a capability gate, and the difference is not a policy choice:
|
|
73
|
+
//
|
|
74
|
+
// - A schema mismatch is a JUDGEMENT. "This archive predates two migrations;
|
|
75
|
+
// I accept that and will run `prisma migrate deploy` afterwards" is a
|
|
76
|
+
// sentence an operator is entitled to say.
|
|
77
|
+
// - A capability failure is a STATEMENT OF FACT. No amount of accepting makes
|
|
78
|
+
// a role without `CREATEDB` able to create a database. An override that
|
|
79
|
+
// silenced it would not enable a restore; it would start one that fails at
|
|
80
|
+
// `CREATE DATABASE`, having already downloaded the archive.
|
|
81
|
+
//
|
|
82
|
+
// There is an explicit negative test for that, in both the colocated service
|
|
83
|
+
// spec and the integration spec.
|
|
84
|
+
//
|
|
85
|
+
// -----------------------------------------------------------------------------
|
|
86
|
+
// THE FIELD NAME IS PUBLISHED BY THE PRE-FLIGHT, NOT INVENTED HERE
|
|
87
|
+
// -----------------------------------------------------------------------------
|
|
88
|
+
//
|
|
89
|
+
// A `blocked` body carries `block.overrideParameter`, whose whole purpose is to
|
|
90
|
+
// tell the client WHICH REQUEST FIELD to set. It must therefore be this DTO's
|
|
91
|
+
// field name, so `restore-preflight.service.ts` exports
|
|
92
|
+
// {@link RESTORE_SCHEMA_OVERRIDE_FIELD} and this file ties its schema to it —
|
|
93
|
+
// once at compile time ({@link RestoreOverrideFieldIsReal}) and once at run time
|
|
94
|
+
// in the spec. The two cannot drift into naming different things.
|
|
95
|
+
// =============================================================================
|
|
96
|
+
import { z } from 'zod';
|
|
97
|
+
import { RESTORE_CONFIRMATION, RESTORE_GATE_ID_PATTERN, ROLLBACK_CONFIRMATION } from './constants.js';
|
|
98
|
+
/**
|
|
99
|
+
* A restore gate id on the wire: any id matching {@link RESTORE_GATE_ID_PATTERN}
|
|
100
|
+
* (the eight built-ins and the ids an app registered with `registerRestoreGate`).
|
|
101
|
+
* An open vocabulary: it was a closed enum of the eight.
|
|
102
|
+
*
|
|
103
|
+
* @extensionPoint schema
|
|
104
|
+
* @stability experimental
|
|
105
|
+
*/
|
|
106
|
+
export const restoreGateIdSchema = z.string().regex(RESTORE_GATE_ID_PATTERN);
|
|
107
|
+
// ---------------------------------------------------------------------------
|
|
108
|
+
// Requests
|
|
109
|
+
// ---------------------------------------------------------------------------
|
|
110
|
+
/**
|
|
111
|
+
* `POST /api/admin/db-backup/runs/:id/restore` body.
|
|
112
|
+
*
|
|
113
|
+
* @stability stable
|
|
114
|
+
*/
|
|
115
|
+
export const startRestoreRequestSchema = z.object({
|
|
116
|
+
/**
|
|
117
|
+
* The literal string `RESTORE`.
|
|
118
|
+
*
|
|
119
|
+
* ⚠ THE SAFETY FEATURE OF THIS ENDPOINT. A missing, empty, misspelt or
|
|
120
|
+
* lower-case value is a `400` and STARTS NOTHING — not the pre-flight, not a
|
|
121
|
+
* download, not a row. See this file's header for why a boolean was rejected.
|
|
122
|
+
*/
|
|
123
|
+
confirmation: z.literal(RESTORE_CONFIRMATION),
|
|
124
|
+
/**
|
|
125
|
+
* Accepts a schema-compatibility mismatch and proceeds anyway.
|
|
126
|
+
*
|
|
127
|
+
* ⚠ IT UNBLOCKS THE SCHEMA GATE AND NOTHING ELSE. It is not a force flag and
|
|
128
|
+
* must never become one — see this file's header. Set it only after reading
|
|
129
|
+
* the `blocked` body that asked for it: that body names the archive's
|
|
130
|
+
* migration and the live one, which is the comparison the decision rests on.
|
|
131
|
+
*
|
|
132
|
+
* Optional, defaulting to `false`, so an ordinary restore body is exactly
|
|
133
|
+
* `{ "confirmation": "RESTORE" }`.
|
|
134
|
+
*/
|
|
135
|
+
overrideSchemaCheck: z.boolean().optional().default(false),
|
|
136
|
+
});
|
|
137
|
+
/**
|
|
138
|
+
* `POST /api/admin/db-backup/runs/:id/rollback` body.
|
|
139
|
+
*
|
|
140
|
+
* @stability stable
|
|
141
|
+
*/
|
|
142
|
+
export const rollbackRestoreRequestSchema = z.object({
|
|
143
|
+
/**
|
|
144
|
+
* The literal string `ROLLBACK`.
|
|
145
|
+
*
|
|
146
|
+
* A DIFFERENT WORD FROM THE RESTORE ROUTE'S, on purpose: a body copied from
|
|
147
|
+
* one route to the other is refused rather than silently accepted. In
|
|
148
|
+
* `pre_restore_dump` mode a rollback IS a multi-hour restore, so confusing
|
|
149
|
+
* the two is not a harmless mistake.
|
|
150
|
+
*/
|
|
151
|
+
confirmation: z.literal(ROLLBACK_CONFIRMATION),
|
|
152
|
+
});
|
|
153
|
+
// ---------------------------------------------------------------------------
|
|
154
|
+
// The pre-flight verdict, on the wire
|
|
155
|
+
// ---------------------------------------------------------------------------
|
|
156
|
+
/**
|
|
157
|
+
* One gate's finding.
|
|
158
|
+
*
|
|
159
|
+
* ⚠ EVERY GATE APPEARS, INCLUDING THE ONES THAT PASSED. An operator about to
|
|
160
|
+
* replace their production database is entitled to see WHAT WAS CHECKED, not
|
|
161
|
+
* only what failed — a list containing only failures gives no way to tell
|
|
162
|
+
* "checked, fine" from "never ran". #287's dialog renders the whole list.
|
|
163
|
+
*
|
|
164
|
+
* @stability stable
|
|
165
|
+
*/
|
|
166
|
+
export const restoreGateSchema = z.object({
|
|
167
|
+
/** Id. */
|
|
168
|
+
id: restoreGateIdSchema,
|
|
169
|
+
/**
|
|
170
|
+
* What kind of problem this gate reports, which is what decides how a failure
|
|
171
|
+
* is handled — and therefore whether `overrideSchemaCheck` can do anything
|
|
172
|
+
* about it. Only `overridable` can.
|
|
173
|
+
*/
|
|
174
|
+
kind: z.enum(['capability', 'disk', 'replicas', 'overridable', 'app']),
|
|
175
|
+
/** `warning` is a pass that says something; it does not stop a restore. */
|
|
176
|
+
verdict: z.enum(['pass', 'warning', 'block']),
|
|
177
|
+
/** Short label, safe to render as a row heading. */
|
|
178
|
+
title: z.string(),
|
|
179
|
+
/** What was found, in one or two sentences an operator can act on. */
|
|
180
|
+
detail: z.string(),
|
|
181
|
+
/**
|
|
182
|
+
* What to DO about it, or `null` when there is nothing to do.
|
|
183
|
+
*
|
|
184
|
+
* Per-gate rather than one message on the result: a `guided` outcome
|
|
185
|
+
* routinely has two or three findings with different remedies, and flattening
|
|
186
|
+
* them into one string is how an operator fixes the first and is surprised by
|
|
187
|
+
* the second.
|
|
188
|
+
*/
|
|
189
|
+
action: z.string().nullable(),
|
|
190
|
+
});
|
|
191
|
+
/**
|
|
192
|
+
* What the restore's rollback story will be, after pre-flight has had its say.
|
|
193
|
+
*
|
|
194
|
+
* @stability stable
|
|
195
|
+
*/
|
|
196
|
+
export const restoreRollbackPlanSchema = z.object({
|
|
197
|
+
/** What `databaseBackup.restoreRollbackMode` stores. */
|
|
198
|
+
configured: z.enum(['retain_database', 'drop_database']),
|
|
199
|
+
/**
|
|
200
|
+
* What will actually happen, which is what the rollback route's `mode` will
|
|
201
|
+
* report.
|
|
202
|
+
*
|
|
203
|
+
* `pre_restore_dump` is what `drop_database` MEANS once you ask what the way
|
|
204
|
+
* back is. Naming the effective mode after the thing that RECOVERS you rather
|
|
205
|
+
* than the thing that is destroyed is what makes the downgrade message
|
|
206
|
+
* honest.
|
|
207
|
+
*/
|
|
208
|
+
effective: z.enum(['retain_database', 'pre_restore_dump']),
|
|
209
|
+
/** `true` when disk pressure changed the answer. */
|
|
210
|
+
downgraded: z.boolean(),
|
|
211
|
+
/** Why it changed, in the operator's terms. `null` when it did not. */
|
|
212
|
+
reason: z.string().nullable(),
|
|
213
|
+
});
|
|
214
|
+
/**
|
|
215
|
+
* The pre-flight verdict, minus its outcome-specific member.
|
|
216
|
+
*
|
|
217
|
+
* `guidance` and `block` are NOT repeated in here: they are hoisted to the top
|
|
218
|
+
* level of the response next to the `mode` that selects them, so a client
|
|
219
|
+
* narrows once rather than twice and a multi-line command block is never sent
|
|
220
|
+
* twice in one body.
|
|
221
|
+
*
|
|
222
|
+
* @stability stable
|
|
223
|
+
*/
|
|
224
|
+
export const restorePreflightSchema = z.object({
|
|
225
|
+
/**
|
|
226
|
+
* What the gates decided, which mirrors the response's own `mode` exactly:
|
|
227
|
+
* `ok`→`running`, `guided`→`guided`, `blocked`→`blocked`.
|
|
228
|
+
*
|
|
229
|
+
* Published even though it is redundant with `mode`, because this object is
|
|
230
|
+
* also the thing a future read-only pre-flight route would return on its own,
|
|
231
|
+
* and a verdict that does not say what it decided is not a verdict.
|
|
232
|
+
*/
|
|
233
|
+
outcome: z.enum(['ok', 'guided', 'blocked']),
|
|
234
|
+
/** The backup this verdict is about. */
|
|
235
|
+
runId: z.uuid(),
|
|
236
|
+
/** The application's database — the one a restore would displace. */
|
|
237
|
+
targetDatabase: z.string(),
|
|
238
|
+
/** The database the archive is replayed into, before the swap. */
|
|
239
|
+
scratchDatabase: z.string(),
|
|
240
|
+
/** The name the live database is renamed to during the swap. */
|
|
241
|
+
oldDatabase: z.string(),
|
|
242
|
+
/** Gates. */
|
|
243
|
+
gates: z.array(restoreGateSchema),
|
|
244
|
+
/** Rollback. */
|
|
245
|
+
rollback: restoreRollbackPlanSchema,
|
|
246
|
+
/** The migration recorded on the archive, and the one live right now. */
|
|
247
|
+
archiveMigration: z.string().nullable(),
|
|
248
|
+
/** Live migration. */
|
|
249
|
+
liveMigration: z.string().nullable(),
|
|
250
|
+
/**
|
|
251
|
+
* The live database's on-disk size, as a DECIMAL STRING.
|
|
252
|
+
*
|
|
253
|
+
* A string for the reason `db-backup-run.dto.ts` gives at length:
|
|
254
|
+
* `pg_database_size` returns `int8`, `JSON.stringify` refuses a `bigint`
|
|
255
|
+
* outright, and `Number()` rounds above 2^53. `null` when the cluster could
|
|
256
|
+
* not be read.
|
|
257
|
+
*/
|
|
258
|
+
databaseSizeBytes: z.string().regex(/^\d+$/).nullable(),
|
|
259
|
+
/**
|
|
260
|
+
* Free bytes where the server keeps its data, as a decimal string.
|
|
261
|
+
*
|
|
262
|
+
* `null` IS THE COMMON CASE and not a failure: the database is usually
|
|
263
|
+
* external to this container, so its data directory is on a filesystem this
|
|
264
|
+
* process has never seen. The disk gate turns that into a warning and never
|
|
265
|
+
* into a refusal.
|
|
266
|
+
*/
|
|
267
|
+
freeDiskBytes: z.string().regex(/^\d+$/).nullable(),
|
|
268
|
+
});
|
|
269
|
+
// ---------------------------------------------------------------------------
|
|
270
|
+
// POST runs/:id/restore
|
|
271
|
+
// ---------------------------------------------------------------------------
|
|
272
|
+
/**
|
|
273
|
+
* `mode: "running"`: the gates passed and the restore is under way.
|
|
274
|
+
*
|
|
275
|
+
* @stability stable
|
|
276
|
+
*/
|
|
277
|
+
export const startRestoreRunningSchema = z.object({
|
|
278
|
+
/**
|
|
279
|
+
* The gates passed and the restore is UNDER WAY, in the background.
|
|
280
|
+
*
|
|
281
|
+
* ⚠ NOT "FINISHED". The response returns as soon as the cheap pre-flight
|
|
282
|
+
* gates have run, because a restore rebuilds every index in the database
|
|
283
|
+
* from scratch and takes HOURS, while every proxy in front of this API has
|
|
284
|
+
* a response timeout measured in seconds. Poll `GET runs/{id}` and watch
|
|
285
|
+
* `restoreStatus`: `restoring` → `verifying` → `swapping` →
|
|
286
|
+
* `completed`/`failed`.
|
|
287
|
+
*/
|
|
288
|
+
mode: z.literal('running'),
|
|
289
|
+
/** The backup being replayed. The same id you poll. */
|
|
290
|
+
runId: z.uuid(),
|
|
291
|
+
/** Where the archive is being replayed. Exists from now until the swap. */
|
|
292
|
+
scratchDatabase: z.string(),
|
|
293
|
+
/**
|
|
294
|
+
* What the live database will be renamed to at the swap.
|
|
295
|
+
*
|
|
296
|
+
* Worth reading before the swap lands: in `retain_database` mode this is
|
|
297
|
+
* the database a rollback renames back, and it is the name a human needs if
|
|
298
|
+
* they ever have to finish a swap by hand.
|
|
299
|
+
*/
|
|
300
|
+
oldDatabase: z.string(),
|
|
301
|
+
/** Preflight. */
|
|
302
|
+
preflight: restorePreflightSchema,
|
|
303
|
+
});
|
|
304
|
+
/**
|
|
305
|
+
* `mode: "guided"`: this deployment cannot restore automatically; here is how a human can.
|
|
306
|
+
*
|
|
307
|
+
* @stability stable
|
|
308
|
+
*/
|
|
309
|
+
export const startRestoreGuidedSchema = z.object({
|
|
310
|
+
/**
|
|
311
|
+
* A CAPABILITY gate failed. NOTHING WAS STARTED and nothing was created.
|
|
312
|
+
*
|
|
313
|
+
* ⚠ NOT AN ERROR. This is the EXPECTED path on managed PostgreSQL that
|
|
314
|
+
* denies `CREATEDB`, and the body below is the deliverable: the same
|
|
315
|
+
* restore, performed by hand, with a superuser, from the same archive.
|
|
316
|
+
*/
|
|
317
|
+
mode: z.literal('guided'),
|
|
318
|
+
/** Run id. */
|
|
319
|
+
runId: z.uuid(),
|
|
320
|
+
/** Guidance. */
|
|
321
|
+
guidance: z.object({
|
|
322
|
+
/** Which gate(s) sent the operator here, in one sentence. */
|
|
323
|
+
reason: z.string(),
|
|
324
|
+
/**
|
|
325
|
+
* A COMPLETE shell block — real database names, real user, real host and
|
|
326
|
+
* port, real run id. No placeholders: a command block with a
|
|
327
|
+
* `<your-host>` in it is not a deliverable, it is homework, and it is
|
|
328
|
+
* being read during an incident. Render it in a monospace block and let
|
|
329
|
+
* it be copied whole.
|
|
330
|
+
*/
|
|
331
|
+
commands: z.string(),
|
|
332
|
+
/** Repository-relative path to the runbook that explains the block. */
|
|
333
|
+
runbook: z.string(),
|
|
334
|
+
}),
|
|
335
|
+
/** Preflight. */
|
|
336
|
+
preflight: restorePreflightSchema,
|
|
337
|
+
});
|
|
338
|
+
/**
|
|
339
|
+
* `mode: "blocked"`: a gate refused the restore.
|
|
340
|
+
*
|
|
341
|
+
* @stability stable
|
|
342
|
+
*/
|
|
343
|
+
export const startRestoreBlockedSchema = z.object({
|
|
344
|
+
/**
|
|
345
|
+
* The schema-compatibility gate refused. NOTHING WAS STARTED.
|
|
346
|
+
*
|
|
347
|
+
* Re-send with `overrideSchemaCheck: true` to proceed anyway — after
|
|
348
|
+
* comparing `preflight.archiveMigration` against `preflight.liveMigration`,
|
|
349
|
+
* which is the comparison the decision actually rests on.
|
|
350
|
+
*/
|
|
351
|
+
mode: z.literal('blocked'),
|
|
352
|
+
/** Run id. */
|
|
353
|
+
runId: z.uuid(),
|
|
354
|
+
/** Block. */
|
|
355
|
+
block: z.object({
|
|
356
|
+
/** Which gate refused. */
|
|
357
|
+
gateId: restoreGateIdSchema,
|
|
358
|
+
/** What it found, in one or two sentences. */
|
|
359
|
+
message: z.string(),
|
|
360
|
+
/**
|
|
361
|
+
* Whether a human may override this block at all.
|
|
362
|
+
*
|
|
363
|
+
* `false` means the answer is no and re-sending will not help — the
|
|
364
|
+
* client/server version pair is the live example. Do not offer an
|
|
365
|
+
* override button for a block that says `false`.
|
|
366
|
+
*/
|
|
367
|
+
overridable: z.boolean(),
|
|
368
|
+
/**
|
|
369
|
+
* The REQUEST FIELD that unblocks it, or `null` when nothing does.
|
|
370
|
+
*
|
|
371
|
+
* Published so a client never has to hard-code which flag clears which
|
|
372
|
+
* gate. Today the only value is `overrideSchemaCheck`.
|
|
373
|
+
*/
|
|
374
|
+
overrideParameter: z.string().nullable(),
|
|
375
|
+
}),
|
|
376
|
+
/** Preflight. */
|
|
377
|
+
preflight: restorePreflightSchema,
|
|
378
|
+
});
|
|
379
|
+
/**
|
|
380
|
+
* The three variants as one discriminated union — the RUNTIME contract and the
|
|
381
|
+
* TypeScript type.
|
|
382
|
+
*
|
|
383
|
+
* ⚠ `createZodDto` IS APPLIED TO EACH VARIANT, NOT TO THIS UNION, and it is not
|
|
384
|
+
* a stylistic choice: `createZodDto` builds a CLASS whose instance type is the
|
|
385
|
+
* schema's output, and a class cannot have a union instance type — TypeScript
|
|
386
|
+
* rejects it outright ("Base constructor return type is not an object type").
|
|
387
|
+
* So the union stays a schema and a type, and the OpenAPI document composes the
|
|
388
|
+
* three variant classes with `oneOf`. `openapi/data-envelope.ts` still wraps the
|
|
389
|
+
* result correctly because `ApiDataResponse` emits the `{ data: … }` envelope
|
|
390
|
+
* itself rather than relying on the later pass to recognise a composed schema.
|
|
391
|
+
*
|
|
392
|
+
* @stability stable
|
|
393
|
+
*/
|
|
394
|
+
export const startRestoreResponseSchema = z.discriminatedUnion('mode', [
|
|
395
|
+
startRestoreRunningSchema,
|
|
396
|
+
startRestoreGuidedSchema,
|
|
397
|
+
startRestoreBlockedSchema,
|
|
398
|
+
]);
|
|
399
|
+
// ---------------------------------------------------------------------------
|
|
400
|
+
// POST runs/:id/rollback
|
|
401
|
+
// ---------------------------------------------------------------------------
|
|
402
|
+
/**
|
|
403
|
+
* `mode: "renamed"`: the displaced database was renamed back into place.
|
|
404
|
+
*
|
|
405
|
+
* @stability stable
|
|
406
|
+
*/
|
|
407
|
+
export const rollbackRenamedSchema = z.object({
|
|
408
|
+
/**
|
|
409
|
+
* `retain_database` mode: the retained pre-swap database was renamed back
|
|
410
|
+
* into place and the process is exiting. SECONDS.
|
|
411
|
+
*
|
|
412
|
+
* This is the entire justification for paying roughly double the PostgreSQL
|
|
413
|
+
* volume for `databaseBackup.oldDatabaseRetentionHours`.
|
|
414
|
+
*
|
|
415
|
+
* ⚠ THE PROCESS EXITS moments after this response is flushed, because its
|
|
416
|
+
* connection pool is bound to a database that has just been renamed out
|
|
417
|
+
* from under it. Expect the very next request to fail until the supervisor
|
|
418
|
+
* restarts the process.
|
|
419
|
+
*/
|
|
420
|
+
mode: z.literal('renamed'),
|
|
421
|
+
/** Run id. */
|
|
422
|
+
runId: z.uuid(),
|
|
423
|
+
/** The database that is now live — the one the restore had displaced. */
|
|
424
|
+
promoted: z.string(),
|
|
425
|
+
/** Where the restored database was parked. Dropped by the retention sweep. */
|
|
426
|
+
parked: z.string(),
|
|
427
|
+
/** One sentence an operator can act on, matched to `mode`. */
|
|
428
|
+
detail: z.string(),
|
|
429
|
+
});
|
|
430
|
+
/**
|
|
431
|
+
* `mode: "restore_started"`: the pre-restore safety dump is being restored instead.
|
|
432
|
+
*
|
|
433
|
+
* @stability stable
|
|
434
|
+
*/
|
|
435
|
+
export const rollbackRestoreStartedSchema = z.object({
|
|
436
|
+
/**
|
|
437
|
+
* `pre_restore_dump` mode: there was no database to rename, so this
|
|
438
|
+
* delegated into the RESTORE path against the safety archive taken
|
|
439
|
+
* immediately before the swap. HOURS, not seconds.
|
|
440
|
+
*
|
|
441
|
+
* ⚠ THE DELEGATED RESTORE RUNS WITH THE SCHEMA CHECK OVERRIDDEN, and it has
|
|
442
|
+
* to. That dump came from the schema this code was running moments before
|
|
443
|
+
* the restore, so the migration it would be compared against is the
|
|
444
|
+
* ARCHIVE's — the gate would block on a mismatch that exists only because
|
|
445
|
+
* the thing being undone happened. A spurious block, fired at the exact
|
|
446
|
+
* moment an operator needs the way back.
|
|
447
|
+
*
|
|
448
|
+
* Poll `GET runs/{preRestoreRunId}` — NOT `runId` — for progress: the
|
|
449
|
+
* restore's state lives on the row of the backup being replayed.
|
|
450
|
+
*/
|
|
451
|
+
mode: z.literal('restore_started'),
|
|
452
|
+
/** Run id. */
|
|
453
|
+
runId: z.uuid(),
|
|
454
|
+
/** The `pre_restore` backup now being restored. The row to poll. */
|
|
455
|
+
preRestoreRunId: z.uuid(),
|
|
456
|
+
/** Detail. */
|
|
457
|
+
detail: z.string(),
|
|
458
|
+
});
|
|
459
|
+
/**
|
|
460
|
+
* `mode: "unavailable"`: there is nothing to roll back to.
|
|
461
|
+
*
|
|
462
|
+
* @stability stable
|
|
463
|
+
*/
|
|
464
|
+
export const rollbackUnavailableSchema = z.object({
|
|
465
|
+
/**
|
|
466
|
+
* There is nothing left to roll back to.
|
|
467
|
+
*
|
|
468
|
+
* ⚠ REPORTED HONESTLY RATHER THAN AS A FAILURE, and it is a `200` for that
|
|
469
|
+
* reason. Nothing went wrong just now: the retained database passed its
|
|
470
|
+
* retention window and was dropped, or the deployment never had one and no
|
|
471
|
+
* completed pre-restore backup exists. An operator needs that as a FACT,
|
|
472
|
+
* not as an error to retry — retrying changes nothing, and restoring some
|
|
473
|
+
* other archive is a new restore, not a rollback.
|
|
474
|
+
*/
|
|
475
|
+
mode: z.literal('unavailable'),
|
|
476
|
+
/** Run id. */
|
|
477
|
+
runId: z.uuid(),
|
|
478
|
+
/**
|
|
479
|
+
* Why, in the operator's terms — verbatim from the service, which is the
|
|
480
|
+
* only thing that knows which of the two ways in it arrived by.
|
|
481
|
+
*/
|
|
482
|
+
detail: z.string(),
|
|
483
|
+
});
|
|
484
|
+
/**
|
|
485
|
+
* The three variants as one discriminated union. Split into classes for the same reason.
|
|
486
|
+
*
|
|
487
|
+
* @stability stable
|
|
488
|
+
*/
|
|
489
|
+
export const rollbackRestoreResponseSchema = z.discriminatedUnion('mode', [
|
|
490
|
+
rollbackRenamedSchema,
|
|
491
|
+
rollbackRestoreStartedSchema,
|
|
492
|
+
rollbackUnavailableSchema,
|
|
493
|
+
]);
|
|
494
|
+
//# sourceMappingURL=restore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restore.js","sourceRoot":"","sources":["../../../src/db-backup/restore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { type DbBackupEnum } from './constants.js';
|
|
3
|
+
/**
|
|
4
|
+
* `DELETE /api/admin/db-backup/runs/:id` response.
|
|
5
|
+
*
|
|
6
|
+
* @stability stable
|
|
7
|
+
*/
|
|
8
|
+
export declare const deleteBackupResultSchema: z.ZodObject<{
|
|
9
|
+
id: z.ZodUUID;
|
|
10
|
+
objectDeleted: z.ZodBoolean;
|
|
11
|
+
}, z.core.$strip>;
|
|
12
|
+
/**
|
|
13
|
+
* The parsed {@link deleteBackupResultSchema}.
|
|
14
|
+
*
|
|
15
|
+
* @stability stable
|
|
16
|
+
*/
|
|
17
|
+
export type DeleteBackupResult = z.infer<typeof deleteBackupResultSchema>;
|
|
18
|
+
/**
|
|
19
|
+
* `POST /api/admin/db-backup/runs/:id/cancel` response.
|
|
20
|
+
*
|
|
21
|
+
* @stability stable
|
|
22
|
+
*/
|
|
23
|
+
export declare const cancelBackupResultSchema: z.ZodObject<{
|
|
24
|
+
runId: z.ZodUUID;
|
|
25
|
+
outcome: z.ZodEnum<DbBackupEnum<readonly ["signalled", "not_running_here"]>>;
|
|
26
|
+
detail: z.ZodString;
|
|
27
|
+
}, z.core.$strip>;
|
|
28
|
+
/**
|
|
29
|
+
* The parsed {@link cancelBackupResultSchema}.
|
|
30
|
+
*
|
|
31
|
+
* @stability stable
|
|
32
|
+
*/
|
|
33
|
+
export type CancelBackupResult = z.infer<typeof cancelBackupResultSchema>;
|
|
34
|
+
/**
|
|
35
|
+
* `GET /api/admin/db-backup/runs/:id/download-url` response.
|
|
36
|
+
*
|
|
37
|
+
* @stability stable
|
|
38
|
+
*/
|
|
39
|
+
export declare const backupDownloadUrlSchema: z.ZodObject<{
|
|
40
|
+
url: z.ZodURL;
|
|
41
|
+
expiresIn: z.ZodNumber;
|
|
42
|
+
}, z.core.$strip>;
|
|
43
|
+
/**
|
|
44
|
+
* The parsed {@link backupDownloadUrlSchema}.
|
|
45
|
+
*
|
|
46
|
+
* @stability stable
|
|
47
|
+
*/
|
|
48
|
+
export type BackupDownloadUrl = z.infer<typeof backupDownloadUrlSchema>;
|
|
49
|
+
//# sourceMappingURL=run-actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-actions.d.ts","sourceRoot":"","sources":["../../../src/db-backup/run-actions.ts"],"names":[],"mappings":"AA0CA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAMpE;;;;GAIG;AACH,eAAO,MAAM,wBAAwB;;;iBAanC,CAAC;AAEH;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAM1E;;;;GAIG;AACH,eAAO,MAAM,wBAAwB;;;;iBAyBnC,CAAC;AAEH;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAM1E;;;;GAIG;AACH,eAAO,MAAM,uBAAuB;;;iBAalC,CAAC;AAEH;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// What the three action routes answer with (issue #283, epic #254)
|
|
3
|
+
// =============================================================================
|
|
4
|
+
//
|
|
5
|
+
// Delete, cancel and download. Each returns a body rather than a bare `204`,
|
|
6
|
+
// and in each case the reason is the same: THE HONEST ANSWER HAS MORE THAN ONE
|
|
7
|
+
// SHAPE, and a status code cannot carry the difference.
|
|
8
|
+
//
|
|
9
|
+
// -----------------------------------------------------------------------------
|
|
10
|
+
// DELETE RETURNS `objectDeleted`, SO A MISSING OBJECT CANNOT STRAND A ROW
|
|
11
|
+
// -----------------------------------------------------------------------------
|
|
12
|
+
//
|
|
13
|
+
// The archive is deleted first and the row second — the reverse order would
|
|
14
|
+
// leave a multi-gigabyte object in the bucket that nothing points at, billed
|
|
15
|
+
// forever, because the row is the only index of what exists there. The same
|
|
16
|
+
// ordering, for the same reason, is in `db-backup-retention.service.ts`.
|
|
17
|
+
//
|
|
18
|
+
// But the object delete is BEST-EFFORT, and that is what this field reports. An
|
|
19
|
+
// object that is already gone — pruned by a bucket lifecycle rule, removed by
|
|
20
|
+
// hand, deleted by a previous attempt that failed after the object and before
|
|
21
|
+
// the row — must not make the row undeletable. Failing the request would leave
|
|
22
|
+
// an administrator staring at a row they cannot remove for a reason that is not
|
|
23
|
+
// their fault and that no retry will change. So the row goes, and
|
|
24
|
+
// `objectDeleted: false` says plainly that there was nothing in storage to
|
|
25
|
+
// remove (or that removing it did not work), which is exactly the fact an
|
|
26
|
+
// operator needs if they are reconciling a bucket against this table.
|
|
27
|
+
//
|
|
28
|
+
// -----------------------------------------------------------------------------
|
|
29
|
+
// CANCEL RETURNS AN OUTCOME, BECAUSE CANCELLATION IS PROCESS-LOCAL
|
|
30
|
+
// -----------------------------------------------------------------------------
|
|
31
|
+
//
|
|
32
|
+
// A dump is stopped by signalling a CHILD PROCESS, and only the API replica
|
|
33
|
+
// that spawned it holds that handle. A run started on another replica genuinely
|
|
34
|
+
// cannot be stopped from here. `DatabaseBackupRunnerService.cancel` already
|
|
35
|
+
// says so — it returns a discriminated result rather than a `boolean` — and
|
|
36
|
+
// this DTO's whole job is to carry that distinction to the client instead of
|
|
37
|
+
// flattening it into a 200 that means "cancelled" when it does not.
|
|
38
|
+
//
|
|
39
|
+
// See `DatabaseBackupAdminService.cancelRun` for why `not_running_here` is a
|
|
40
|
+
// 200 with an honest body rather than a 409 or a 500.
|
|
41
|
+
// =============================================================================
|
|
42
|
+
import { z } from 'zod';
|
|
43
|
+
import { CANCEL_OUTCOMES } from './constants.js';
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
// DELETE runs/:id
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
/**
|
|
48
|
+
* `DELETE /api/admin/db-backup/runs/:id` response.
|
|
49
|
+
*
|
|
50
|
+
* @stability stable
|
|
51
|
+
*/
|
|
52
|
+
export const deleteBackupResultSchema = z.object({
|
|
53
|
+
/** The run that was removed. Echoed so a client need not remember what it asked. */
|
|
54
|
+
id: z.uuid(),
|
|
55
|
+
/**
|
|
56
|
+
* Whether the archive was removed from object storage.
|
|
57
|
+
*
|
|
58
|
+
* `false` is NOT an error and NOT a partial failure the caller should retry:
|
|
59
|
+
* the row is gone either way. It means storage had nothing to remove, or
|
|
60
|
+
* refused — see this file's header. An operator reconciling a bucket against
|
|
61
|
+
* this table is the reader this field exists for.
|
|
62
|
+
*/
|
|
63
|
+
objectDeleted: z.boolean(),
|
|
64
|
+
});
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
// POST runs/:id/cancel
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
/**
|
|
69
|
+
* `POST /api/admin/db-backup/runs/:id/cancel` response.
|
|
70
|
+
*
|
|
71
|
+
* @stability stable
|
|
72
|
+
*/
|
|
73
|
+
export const cancelBackupResultSchema = z.object({
|
|
74
|
+
/** The run the cancel was aimed at. */
|
|
75
|
+
runId: z.uuid(),
|
|
76
|
+
/**
|
|
77
|
+
* What actually happened.
|
|
78
|
+
*
|
|
79
|
+
* - `signalled` — the dump process was killed and its upload torn down. The
|
|
80
|
+
* run travels the ORDINARY failure path from there (partial object
|
|
81
|
+
* deleted, row marked `failed`), so poll the run to watch it settle;
|
|
82
|
+
* cancellation is deliberately not a second teardown mechanism.
|
|
83
|
+
* - `not_running_here` — this replica holds no handle for that run. Either
|
|
84
|
+
* another replica is executing it, or it settled between the read and the
|
|
85
|
+
* cancel. Nothing was stopped, and the response says so.
|
|
86
|
+
*/
|
|
87
|
+
outcome: z.enum(CANCEL_OUTCOMES),
|
|
88
|
+
/**
|
|
89
|
+
* One sentence an operator can act on, matched to `outcome`.
|
|
90
|
+
*
|
|
91
|
+
* Present so a UI can render the `not_running_here` case without hard-coding
|
|
92
|
+
* an explanation of process-local cancellation — the explanation belongs with
|
|
93
|
+
* the code that knows why, not in every client.
|
|
94
|
+
*/
|
|
95
|
+
detail: z.string(),
|
|
96
|
+
});
|
|
97
|
+
// ---------------------------------------------------------------------------
|
|
98
|
+
// GET runs/:id/download
|
|
99
|
+
// ---------------------------------------------------------------------------
|
|
100
|
+
/**
|
|
101
|
+
* `GET /api/admin/db-backup/runs/:id/download-url` response.
|
|
102
|
+
*
|
|
103
|
+
* @stability stable
|
|
104
|
+
*/
|
|
105
|
+
export const backupDownloadUrlSchema = z.object({
|
|
106
|
+
/**
|
|
107
|
+
* A pre-signed URL that downloads the archive DIRECTLY FROM OBJECT STORAGE.
|
|
108
|
+
*
|
|
109
|
+
* Treat it as a credential: anyone holding it can fetch a complete copy of
|
|
110
|
+
* this deployment's database until it expires, with no bearer token of any
|
|
111
|
+
* kind. That is why `expiresIn` below is short — see
|
|
112
|
+
* `BACKUP_DOWNLOAD_URL_EXPIRY_SECONDS` in `db-backup-admin.service.ts`.
|
|
113
|
+
*/
|
|
114
|
+
url: z.url(),
|
|
115
|
+
/** Seconds the URL stays valid, counted from when it was issued. */
|
|
116
|
+
expiresIn: z.number().int().positive(),
|
|
117
|
+
});
|
|
118
|
+
//# sourceMappingURL=run-actions.js.map
|