@raybase/core 0.0.2 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/.admin-build/AdminApp.css +2 -0
- package/dist/.admin-build/AdminApp.js +77 -0
- package/dist/.admin-docs-build/AdminDocsApp.css +2 -0
- package/dist/.admin-docs-build/AdminDocsApp.js +45 -0
- package/dist/actions.d.ts +347 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +661 -0
- package/dist/actions.js.map +1 -0
- package/dist/admin-assets/admin.7738f50720a8ed7b.css +2 -0
- package/dist/admin-assets/admin.8678cb61db34dc81.js +77 -0
- package/dist/admin-boot.d.ts +94 -0
- package/dist/admin-boot.d.ts.map +1 -0
- package/dist/admin-boot.js +139 -0
- package/dist/admin-boot.js.map +1 -0
- package/dist/admin-docs-content.d.ts +95 -0
- package/dist/admin-docs-content.d.ts.map +1 -0
- package/dist/admin-docs-content.js +463 -0
- package/dist/admin-docs-content.js.map +1 -0
- package/dist/admin-docs-ui.d.ts +11 -0
- package/dist/admin-docs-ui.d.ts.map +1 -0
- package/dist/admin-docs-ui.js +23 -0
- package/dist/admin-docs-ui.js.map +1 -0
- package/dist/admin-kit.d.ts +29 -0
- package/dist/admin-kit.js +1557 -0
- package/dist/admin-role.d.ts +8 -0
- package/dist/admin-role.d.ts.map +1 -0
- package/dist/admin-role.js +22 -0
- package/dist/admin-role.js.map +1 -0
- package/dist/admin-ui.d.ts +3 -0
- package/dist/admin-ui.d.ts.map +1 -0
- package/dist/admin-ui.js +16 -0
- package/dist/admin-ui.js.map +1 -0
- package/dist/agent-ai-chat.d.ts +127 -0
- package/dist/agent-ai-chat.d.ts.map +1 -0
- package/dist/agent-ai-chat.js +5975 -0
- package/dist/agent-ai-chat.js.map +1 -0
- package/dist/agent-chapter-archive.d.ts +214 -0
- package/dist/agent-chapter-archive.d.ts.map +1 -0
- package/dist/agent-chapter-archive.js +696 -0
- package/dist/agent-chapter-archive.js.map +1 -0
- package/dist/agent-chapter-search.d.ts +116 -0
- package/dist/agent-chapter-search.d.ts.map +1 -0
- package/dist/agent-chapter-search.js +605 -0
- package/dist/agent-chapter-search.js.map +1 -0
- package/dist/agent-chapter-tools.d.ts +45 -0
- package/dist/agent-chapter-tools.d.ts.map +1 -0
- package/dist/agent-chapter-tools.js +344 -0
- package/dist/agent-chapter-tools.js.map +1 -0
- package/dist/agent-chapters.d.ts +228 -0
- package/dist/agent-chapters.d.ts.map +1 -0
- package/dist/agent-chapters.js +737 -0
- package/dist/agent-chapters.js.map +1 -0
- package/dist/agent-data-parts.d.ts +167 -0
- package/dist/agent-data-parts.d.ts.map +1 -0
- package/dist/agent-data-parts.js +68 -0
- package/dist/agent-data-parts.js.map +1 -0
- package/dist/agent-errors.d.ts +41 -0
- package/dist/agent-errors.d.ts.map +1 -0
- package/dist/agent-errors.js +191 -0
- package/dist/agent-errors.js.map +1 -0
- package/dist/agent-follow-up-store.d.ts +273 -0
- package/dist/agent-follow-up-store.d.ts.map +1 -0
- package/dist/agent-follow-up-store.js +703 -0
- package/dist/agent-follow-up-store.js.map +1 -0
- package/dist/agent-follow-ups.d.ts +314 -0
- package/dist/agent-follow-ups.d.ts.map +1 -0
- package/dist/agent-follow-ups.js +840 -0
- package/dist/agent-follow-ups.js.map +1 -0
- package/dist/agent-memory.d.ts +323 -0
- package/dist/agent-memory.d.ts.map +1 -0
- package/dist/agent-memory.js +1270 -0
- package/dist/agent-memory.js.map +1 -0
- package/dist/agent-message-parts.d.ts +58 -0
- package/dist/agent-message-parts.d.ts.map +1 -0
- package/dist/agent-message-parts.js +163 -0
- package/dist/agent-message-parts.js.map +1 -0
- package/dist/agent-remote-mcp-credentials.d.ts +154 -0
- package/dist/agent-remote-mcp-credentials.d.ts.map +1 -0
- package/dist/agent-remote-mcp-credentials.js +287 -0
- package/dist/agent-remote-mcp-credentials.js.map +1 -0
- package/dist/agent-remote-mcp-crypto.d.ts +32 -0
- package/dist/agent-remote-mcp-crypto.d.ts.map +1 -0
- package/dist/agent-remote-mcp-crypto.js +101 -0
- package/dist/agent-remote-mcp-crypto.js.map +1 -0
- package/dist/agent-remote-mcp-install.d.ts +299 -0
- package/dist/agent-remote-mcp-install.d.ts.map +1 -0
- package/dist/agent-remote-mcp-install.js +785 -0
- package/dist/agent-remote-mcp-install.js.map +1 -0
- package/dist/agent-remote-mcp-oauth.d.ts +73 -0
- package/dist/agent-remote-mcp-oauth.d.ts.map +1 -0
- package/dist/agent-remote-mcp-oauth.js +344 -0
- package/dist/agent-remote-mcp-oauth.js.map +1 -0
- package/dist/agent-remote-mcp-transport.d.ts +46 -0
- package/dist/agent-remote-mcp-transport.d.ts.map +1 -0
- package/dist/agent-remote-mcp-transport.js +225 -0
- package/dist/agent-remote-mcp-transport.js.map +1 -0
- package/dist/agent-remote-mcp.d.ts +147 -0
- package/dist/agent-remote-mcp.d.ts.map +1 -0
- package/dist/agent-remote-mcp.js +681 -0
- package/dist/agent-remote-mcp.js.map +1 -0
- package/dist/agent-room-redaction.d.ts +66 -0
- package/dist/agent-room-redaction.d.ts.map +1 -0
- package/dist/agent-room-redaction.js +264 -0
- package/dist/agent-room-redaction.js.map +1 -0
- package/dist/agent-rooms.d.ts +209 -0
- package/dist/agent-rooms.d.ts.map +1 -0
- package/dist/agent-rooms.js +244 -0
- package/dist/agent-rooms.js.map +1 -0
- package/dist/agent-runtime.d.ts +541 -0
- package/dist/agent-runtime.d.ts.map +1 -0
- package/dist/agent-runtime.js +4260 -0
- package/dist/agent-runtime.js.map +1 -0
- package/dist/agent-skill-archive.d.ts +20 -0
- package/dist/agent-skill-archive.d.ts.map +1 -0
- package/dist/agent-skill-archive.js +316 -0
- package/dist/agent-skill-archive.js.map +1 -0
- package/dist/agent-skill-discovery.d.ts +96 -0
- package/dist/agent-skill-discovery.d.ts.map +1 -0
- package/dist/agent-skill-discovery.js +464 -0
- package/dist/agent-skill-discovery.js.map +1 -0
- package/dist/agent-skill-format.d.ts +57 -0
- package/dist/agent-skill-format.d.ts.map +1 -0
- package/dist/agent-skill-format.js +238 -0
- package/dist/agent-skill-format.js.map +1 -0
- package/dist/agent-skill-import.d.ts +64 -0
- package/dist/agent-skill-import.d.ts.map +1 -0
- package/dist/agent-skill-import.js +295 -0
- package/dist/agent-skill-import.js.map +1 -0
- package/dist/agent-skill-publish.d.ts +51 -0
- package/dist/agent-skill-publish.d.ts.map +1 -0
- package/dist/agent-skill-publish.js +136 -0
- package/dist/agent-skill-publish.js.map +1 -0
- package/dist/agent-skill-store.d.ts +252 -0
- package/dist/agent-skill-store.d.ts.map +1 -0
- package/dist/agent-skill-store.js +514 -0
- package/dist/agent-skill-store.js.map +1 -0
- package/dist/agent-skills.d.ts +85 -0
- package/dist/agent-skills.d.ts.map +1 -0
- package/dist/agent-skills.js +291 -0
- package/dist/agent-skills.js.map +1 -0
- package/dist/agent-transcript-pager.d.ts +77 -0
- package/dist/agent-transcript-pager.d.ts.map +1 -0
- package/dist/agent-transcript-pager.js +210 -0
- package/dist/agent-transcript-pager.js.map +1 -0
- package/dist/agent-user-data-parts.d.ts +20 -0
- package/dist/agent-user-data-parts.d.ts.map +1 -0
- package/dist/agent-user-data-parts.js +161 -0
- package/dist/agent-user-data-parts.js.map +1 -0
- package/dist/agent-user-transcript.d.ts +46 -0
- package/dist/agent-user-transcript.d.ts.map +1 -0
- package/dist/agent-user-transcript.js +106 -0
- package/dist/agent-user-transcript.js.map +1 -0
- package/dist/agent-voice-notes.d.ts +15 -0
- package/dist/agent-voice-notes.d.ts.map +1 -0
- package/dist/agent-voice-notes.js +17 -0
- package/dist/agent-voice-notes.js.map +1 -0
- package/dist/agent-wakes.d.ts +213 -0
- package/dist/agent-wakes.d.ts.map +1 -0
- package/dist/agent-wakes.js +534 -0
- package/dist/agent-wakes.js.map +1 -0
- package/dist/agent.d.ts +1780 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +3123 -0
- package/dist/agent.js.map +1 -0
- package/dist/ai.d.ts +583 -0
- package/dist/ai.d.ts.map +1 -0
- package/dist/ai.js +1858 -0
- package/dist/ai.js.map +1 -0
- package/dist/app-manifest.d.ts +255 -0
- package/dist/app-manifest.d.ts.map +1 -0
- package/dist/app-manifest.js +372 -0
- package/dist/app-manifest.js.map +1 -0
- package/dist/app-users.d.ts +30 -0
- package/dist/app-users.d.ts.map +1 -0
- package/dist/app-users.js +91 -0
- package/dist/app-users.js.map +1 -0
- package/dist/audit-archive.d.ts +85 -0
- package/dist/audit-archive.d.ts.map +1 -0
- package/dist/audit-archive.js +178 -0
- package/dist/audit-archive.js.map +1 -0
- package/dist/audit.d.ts +54 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +95 -0
- package/dist/audit.js.map +1 -0
- package/dist/auth-logger.d.ts +28 -0
- package/dist/auth-logger.d.ts.map +1 -0
- package/dist/auth-logger.js +53 -0
- package/dist/auth-logger.js.map +1 -0
- package/dist/auth-password-secret.d.ts +59 -0
- package/dist/auth-password-secret.d.ts.map +1 -0
- package/dist/auth-password-secret.js +409 -0
- package/dist/auth-password-secret.js.map +1 -0
- package/dist/auth-schema.d.ts +120 -0
- package/dist/auth-schema.d.ts.map +1 -0
- package/dist/auth-schema.js +285 -0
- package/dist/auth-schema.js.map +1 -0
- package/dist/auth.d.ts +321 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +1562 -0
- package/dist/auth.js.map +1 -0
- package/dist/backup-archive.d.ts +257 -0
- package/dist/backup-archive.d.ts.map +1 -0
- package/dist/backup-archive.js +2068 -0
- package/dist/backup-archive.js.map +1 -0
- package/dist/backup-crypto.d.ts +313 -0
- package/dist/backup-crypto.d.ts.map +1 -0
- package/dist/backup-crypto.js +693 -0
- package/dist/backup-crypto.js.map +1 -0
- package/dist/backup-format.d.ts +200 -0
- package/dist/backup-format.d.ts.map +1 -0
- package/dist/backup-format.js +1247 -0
- package/dist/backup-format.js.map +1 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +15 -0
- package/dist/cli.js.map +1 -0
- package/dist/clock.d.ts +35 -0
- package/dist/clock.d.ts.map +1 -0
- package/dist/clock.js +83 -0
- package/dist/clock.js.map +1 -0
- package/dist/data-client.d.ts +187 -0
- package/dist/data-client.d.ts.map +1 -0
- package/dist/data-client.js +590 -0
- package/dist/data-client.js.map +1 -0
- package/dist/data-secrets.d.ts +164 -0
- package/dist/data-secrets.d.ts.map +1 -0
- package/dist/data-secrets.js +383 -0
- package/dist/data-secrets.js.map +1 -0
- package/dist/db.d.ts +453 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +324 -0
- package/dist/db.js.map +1 -0
- package/dist/dev-activity.d.ts +48 -0
- package/dist/dev-activity.d.ts.map +1 -0
- package/dist/dev-activity.js +50 -0
- package/dist/dev-activity.js.map +1 -0
- package/dist/do.d.ts +429 -0
- package/dist/do.d.ts.map +1 -0
- package/dist/do.js +4526 -0
- package/dist/do.js.map +1 -0
- package/dist/email.d.ts +137 -0
- package/dist/email.d.ts.map +1 -0
- package/dist/email.js +527 -0
- package/dist/email.js.map +1 -0
- package/dist/generated/admin-assets.d.ts +16 -0
- package/dist/generated/admin-assets.d.ts.map +1 -0
- package/dist/generated/admin-assets.js +16 -0
- package/dist/generated/admin-assets.js.map +1 -0
- package/dist/generated/admin-docs-assets.d.ts +3 -0
- package/dist/generated/admin-docs-assets.d.ts.map +1 -0
- package/dist/generated/admin-docs-assets.js +3 -0
- package/dist/generated/admin-docs-assets.js.map +1 -0
- package/dist/handoff-consumer.d.ts +79 -0
- package/dist/handoff-consumer.d.ts.map +1 -0
- package/dist/handoff-consumer.js +300 -0
- package/dist/handoff-consumer.js.map +1 -0
- package/dist/handoff.d.ts +70 -0
- package/dist/handoff.d.ts.map +1 -0
- package/dist/handoff.js +228 -0
- package/dist/handoff.js.map +1 -0
- package/dist/host-auth.d.ts +47 -0
- package/dist/host-auth.d.ts.map +1 -0
- package/dist/host-auth.js +59 -0
- package/dist/host-auth.js.map +1 -0
- package/dist/host-user.d.ts +15 -0
- package/dist/host-user.d.ts.map +1 -0
- package/dist/host-user.js +23 -0
- package/dist/host-user.js.map +1 -0
- package/dist/html.d.ts +35 -0
- package/dist/html.d.ts.map +1 -0
- package/dist/html.js +634 -0
- package/dist/html.js.map +1 -0
- package/dist/http-error.d.ts +13 -0
- package/dist/http-error.d.ts.map +1 -0
- package/dist/http-error.js +15 -0
- package/dist/http-error.js.map +1 -0
- package/dist/imports.d.ts +219 -0
- package/dist/imports.d.ts.map +1 -0
- package/dist/imports.js +571 -0
- package/dist/imports.js.map +1 -0
- package/dist/index.d.ts +78 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/inference-tape.d.ts +64 -0
- package/dist/inference-tape.d.ts.map +1 -0
- package/dist/inference-tape.js +278 -0
- package/dist/inference-tape.js.map +1 -0
- package/dist/internal.d.ts +15 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +48 -0
- package/dist/internal.js.map +1 -0
- package/dist/jobs.d.ts +796 -0
- package/dist/jobs.d.ts.map +1 -0
- package/dist/jobs.js +538 -0
- package/dist/jobs.js.map +1 -0
- package/dist/json-schema.d.ts +91 -0
- package/dist/json-schema.d.ts.map +1 -0
- package/dist/json-schema.js +884 -0
- package/dist/json-schema.js.map +1 -0
- package/dist/knowledge.d.ts +33 -0
- package/dist/knowledge.d.ts.map +1 -0
- package/dist/knowledge.js +348 -0
- package/dist/knowledge.js.map +1 -0
- package/dist/local-dev-chrome.d.ts +29 -0
- package/dist/local-dev-chrome.d.ts.map +1 -0
- package/dist/local-dev-chrome.js +514 -0
- package/dist/local-dev-chrome.js.map +1 -0
- package/dist/local-dev-personas.d.ts +15 -0
- package/dist/local-dev-personas.d.ts.map +1 -0
- package/dist/local-dev-personas.js +46 -0
- package/dist/local-dev-personas.js.map +1 -0
- package/dist/mcp.d.ts +567 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +2480 -0
- package/dist/mcp.js.map +1 -0
- package/dist/modules.d.ts +145 -0
- package/dist/modules.d.ts.map +1 -0
- package/dist/modules.js +164 -0
- package/dist/modules.js.map +1 -0
- package/dist/notification-client.d.ts +94 -0
- package/dist/notification-client.d.ts.map +1 -0
- package/dist/notification-client.js +127 -0
- package/dist/notification-client.js.map +1 -0
- package/dist/notifications.d.ts +447 -0
- package/dist/notifications.d.ts.map +1 -0
- package/dist/notifications.js +1625 -0
- package/dist/notifications.js.map +1 -0
- package/dist/operator-data-query.d.ts +117 -0
- package/dist/operator-data-query.d.ts.map +1 -0
- package/dist/operator-data-query.js +431 -0
- package/dist/operator-data-query.js.map +1 -0
- package/dist/operator-mcp.d.ts +63 -0
- package/dist/operator-mcp.d.ts.map +1 -0
- package/dist/operator-mcp.js +2828 -0
- package/dist/operator-mcp.js.map +1 -0
- package/dist/outbound-https.d.ts +24 -0
- package/dist/outbound-https.d.ts.map +1 -0
- package/dist/outbound-https.js +172 -0
- package/dist/outbound-https.js.map +1 -0
- package/dist/pitr.d.ts +60 -0
- package/dist/pitr.d.ts.map +1 -0
- package/dist/pitr.js +94 -0
- package/dist/pitr.js.map +1 -0
- package/dist/platform.d.ts +199 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +196 -0
- package/dist/platform.js.map +1 -0
- package/dist/policies.d.ts +115 -0
- package/dist/policies.d.ts.map +1 -0
- package/dist/policies.js +158 -0
- package/dist/policies.js.map +1 -0
- package/dist/principal.d.ts +143 -0
- package/dist/principal.d.ts.map +1 -0
- package/dist/principal.js +174 -0
- package/dist/principal.js.map +1 -0
- package/dist/realtime.d.ts +280 -0
- package/dist/realtime.d.ts.map +1 -0
- package/dist/realtime.js +578 -0
- package/dist/realtime.js.map +1 -0
- package/dist/retrieval.d.ts +263 -0
- package/dist/retrieval.d.ts.map +1 -0
- package/dist/retrieval.js +602 -0
- package/dist/retrieval.js.map +1 -0
- package/dist/runtime-error-client.d.ts +10 -0
- package/dist/runtime-error-client.d.ts.map +1 -0
- package/dist/runtime-error-client.js +70 -0
- package/dist/runtime-error-client.js.map +1 -0
- package/dist/runtime-errors.d.ts +180 -0
- package/dist/runtime-errors.d.ts.map +1 -0
- package/dist/runtime-errors.js +572 -0
- package/dist/runtime-errors.js.map +1 -0
- package/dist/schema.d.ts +434 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +232 -0
- package/dist/schema.js.map +1 -0
- package/dist/search.d.ts +216 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +785 -0
- package/dist/search.js.map +1 -0
- package/dist/settings.d.ts +191 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +478 -0
- package/dist/settings.js.map +1 -0
- package/dist/sql.d.ts +7 -0
- package/dist/sql.d.ts.map +1 -0
- package/dist/sql.js +30 -0
- package/dist/sql.js.map +1 -0
- package/dist/storage-client.d.ts +69 -0
- package/dist/storage-client.d.ts.map +1 -0
- package/dist/storage-client.js +469 -0
- package/dist/storage-client.js.map +1 -0
- package/dist/storage.d.ts +21 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +82 -0
- package/dist/storage.js.map +1 -0
- package/dist/subject-domains.d.ts +15 -0
- package/dist/subject-domains.d.ts.map +1 -0
- package/dist/subject-domains.js +38 -0
- package/dist/subject-domains.js.map +1 -0
- package/dist/support.d.ts +132 -0
- package/dist/support.d.ts.map +1 -0
- package/dist/support.js +483 -0
- package/dist/support.js.map +1 -0
- package/dist/system-tables.d.ts +12 -0
- package/dist/system-tables.d.ts.map +1 -0
- package/dist/system-tables.js +225 -0
- package/dist/system-tables.js.map +1 -0
- package/dist/test.d.ts +57 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +454 -0
- package/dist/test.js.map +1 -0
- package/dist/vite.d.ts +82 -0
- package/dist/vite.d.ts.map +1 -0
- package/dist/vite.js +82 -0
- package/dist/vite.js.map +1 -0
- package/dist/webpush-crypto.d.ts +39 -0
- package/dist/webpush-crypto.d.ts.map +1 -0
- package/dist/webpush-crypto.js +213 -0
- package/dist/webpush-crypto.js.map +1 -0
- package/dist/webpush-private.d.ts +11 -0
- package/dist/webpush-private.d.ts.map +1 -0
- package/dist/webpush-private.js +11 -0
- package/dist/webpush-private.js.map +1 -0
- package/dist/webpush.d.ts +86 -0
- package/dist/webpush.d.ts.map +1 -0
- package/dist/webpush.js +375 -0
- package/dist/webpush.js.map +1 -0
- package/dist/worker.d.ts +185 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +13021 -0
- package/dist/worker.js.map +1 -0
- package/package.json +161 -8
- package/README.md +0 -3
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
import { actorAuditRef, recordAudit } from "./audit.js";
|
|
2
|
+
import { backupProviderLimits, RaybaseBackupError } from "./backup-crypto.js";
|
|
3
|
+
import { nowIso } from "./sql.js";
|
|
4
|
+
export const raybaseAuthPasswordSecretStateTableName = "_auth_password_secret_state";
|
|
5
|
+
export const raybaseAuthPasswordProviderStateTableName = "_auth_password_provider_state";
|
|
6
|
+
export const raybasePasswordSecretPurpose = "backup-key-provider";
|
|
7
|
+
export const raybasePasswordSecretKdfProfile = {
|
|
8
|
+
algorithm: "PBKDF2-SHA-256",
|
|
9
|
+
version: 1,
|
|
10
|
+
iterations: 600_000,
|
|
11
|
+
outputBytes: 32,
|
|
12
|
+
saltBytes: 16
|
|
13
|
+
};
|
|
14
|
+
const encoder = new TextEncoder();
|
|
15
|
+
const providerStateKeyPattern = /^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$/;
|
|
16
|
+
const providerIdPattern = /^[A-Za-z0-9][A-Za-z0-9._:/-]*$/;
|
|
17
|
+
const lifecycleFailureCode = "PASSWORD_SECRET_PROVIDER_HOOK_FAILED";
|
|
18
|
+
function encodeBase64Url(bytes) {
|
|
19
|
+
let binary = "";
|
|
20
|
+
for (const byte of bytes)
|
|
21
|
+
binary += String.fromCharCode(byte);
|
|
22
|
+
return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/g, "");
|
|
23
|
+
}
|
|
24
|
+
function decodeBase64Url(value) {
|
|
25
|
+
const padded = value.replace(/-/g, "+").replace(/_/g, "/").padEnd(Math.ceil(value.length / 4) * 4, "=");
|
|
26
|
+
const binary = atob(padded);
|
|
27
|
+
return Uint8Array.from(binary, (character) => character.charCodeAt(0));
|
|
28
|
+
}
|
|
29
|
+
function ownedBuffer(value) {
|
|
30
|
+
const copy = new Uint8Array(value.byteLength);
|
|
31
|
+
copy.set(value);
|
|
32
|
+
return copy.buffer;
|
|
33
|
+
}
|
|
34
|
+
function purposeForProvider(providerId) {
|
|
35
|
+
const normalized = providerId.trim();
|
|
36
|
+
if (!providerIdPattern.test(normalized) ||
|
|
37
|
+
encoder.encode(normalized).byteLength > backupProviderLimits.identifierBytes) {
|
|
38
|
+
throw new Error("Backup password-secret provider id is invalid");
|
|
39
|
+
}
|
|
40
|
+
return `${raybasePasswordSecretPurpose}:${normalized}`;
|
|
41
|
+
}
|
|
42
|
+
function providerVersion(registration) {
|
|
43
|
+
const value = registration.lifecycle.version.trim();
|
|
44
|
+
if (!providerIdPattern.test(value) ||
|
|
45
|
+
encoder.encode(value).byteLength > backupProviderLimits.identifierBytes) {
|
|
46
|
+
throw new Error("Backup password-secret lifecycle version is invalid");
|
|
47
|
+
}
|
|
48
|
+
return value;
|
|
49
|
+
}
|
|
50
|
+
function kdfDescriptor(row) {
|
|
51
|
+
if (row.kdfAlgorithm !== raybasePasswordSecretKdfProfile.algorithm ||
|
|
52
|
+
!Number.isSafeInteger(row.kdfVersion) ||
|
|
53
|
+
row.kdfVersion < 1 ||
|
|
54
|
+
!Number.isSafeInteger(row.kdfIterations) ||
|
|
55
|
+
row.kdfIterations < 100_000 ||
|
|
56
|
+
row.kdfIterations > 2_000_000 ||
|
|
57
|
+
row.kdfOutputBytes !== 32) {
|
|
58
|
+
throw new Error("Stored password-secret KDF descriptor is invalid");
|
|
59
|
+
}
|
|
60
|
+
let salt;
|
|
61
|
+
try {
|
|
62
|
+
salt = decodeBase64Url(row.salt);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
throw new Error("Stored password-secret KDF descriptor is invalid");
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
if (salt.byteLength < 1 ||
|
|
69
|
+
salt.byteLength > backupProviderLimits.saltBytes ||
|
|
70
|
+
encodeBase64Url(salt) !== row.salt) {
|
|
71
|
+
throw new Error("Stored password-secret KDF descriptor is invalid");
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
salt.fill(0);
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
algorithm: "PBKDF2-SHA-256",
|
|
79
|
+
version: row.kdfVersion,
|
|
80
|
+
salt: row.salt,
|
|
81
|
+
iterations: row.kdfIterations,
|
|
82
|
+
outputBytes: 32
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
export async function deriveRaybasePasswordSecret(password, descriptor) {
|
|
86
|
+
if (descriptor.algorithm !== "PBKDF2-SHA-256" ||
|
|
87
|
+
!Number.isSafeInteger(descriptor.version) ||
|
|
88
|
+
descriptor.version < 1 ||
|
|
89
|
+
!Number.isSafeInteger(descriptor.iterations) ||
|
|
90
|
+
descriptor.iterations < 100_000 ||
|
|
91
|
+
descriptor.iterations > 2_000_000 ||
|
|
92
|
+
descriptor.outputBytes !== 32) {
|
|
93
|
+
throw new Error("Password-secret KDF descriptor is invalid");
|
|
94
|
+
}
|
|
95
|
+
const salt = decodeBase64Url(descriptor.salt);
|
|
96
|
+
if (!salt.byteLength || salt.byteLength > backupProviderLimits.saltBytes) {
|
|
97
|
+
throw new Error("Stored password-secret salt is invalid");
|
|
98
|
+
}
|
|
99
|
+
const domainSeparatedPassword = encoder.encode(`raybase:${raybasePasswordSecretPurpose}:v${descriptor.version}\u0000${password}`);
|
|
100
|
+
try {
|
|
101
|
+
const key = await crypto.subtle.importKey("raw", ownedBuffer(domainSeparatedPassword), { name: "PBKDF2" }, false, ["deriveBits"]);
|
|
102
|
+
const bits = await crypto.subtle.deriveBits({
|
|
103
|
+
name: "PBKDF2",
|
|
104
|
+
hash: "SHA-256",
|
|
105
|
+
salt: ownedBuffer(salt),
|
|
106
|
+
iterations: descriptor.iterations
|
|
107
|
+
}, key, descriptor.outputBytes * 8);
|
|
108
|
+
return new Uint8Array(bits);
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
domainSeparatedPassword.fill(0);
|
|
112
|
+
salt.fill(0);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
async function ensureStateRow(db, registration, userId, event, occurredAt) {
|
|
116
|
+
const purpose = purposeForProvider(registration.providerId);
|
|
117
|
+
const salt = encodeBase64Url(crypto.getRandomValues(new Uint8Array(raybasePasswordSecretKdfProfile.saltBytes)));
|
|
118
|
+
await db.run(`INSERT OR IGNORE INTO "${raybaseAuthPasswordSecretStateTableName}"
|
|
119
|
+
("userId", "purpose", "salt", "kdfAlgorithm", "kdfVersion", "kdfIterations", "kdfOutputBytes",
|
|
120
|
+
"passwordVersion", "pendingEvent", "readiness", "createdAt", "updatedAt")
|
|
121
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, 0, ?, 'needs-login', ?, ?)`, [
|
|
122
|
+
userId,
|
|
123
|
+
purpose,
|
|
124
|
+
salt,
|
|
125
|
+
raybasePasswordSecretKdfProfile.algorithm,
|
|
126
|
+
raybasePasswordSecretKdfProfile.version,
|
|
127
|
+
raybasePasswordSecretKdfProfile.iterations,
|
|
128
|
+
raybasePasswordSecretKdfProfile.outputBytes,
|
|
129
|
+
event,
|
|
130
|
+
occurredAt,
|
|
131
|
+
occurredAt
|
|
132
|
+
]);
|
|
133
|
+
const row = await db.first(`SELECT * FROM "${raybaseAuthPasswordSecretStateTableName}" WHERE "userId" = ? AND "purpose" = ?`, [userId, purpose]);
|
|
134
|
+
if (!row)
|
|
135
|
+
throw new Error("Unable to provision password-secret lifecycle state");
|
|
136
|
+
return row;
|
|
137
|
+
}
|
|
138
|
+
function providerStateStore(db, registration, userId, purpose) {
|
|
139
|
+
const checkedKey = (key) => {
|
|
140
|
+
if (!providerStateKeyPattern.test(key) || encoder.encode(key).byteLength > 128) {
|
|
141
|
+
throw new Error("Backup password-secret provider state key is invalid");
|
|
142
|
+
}
|
|
143
|
+
return key;
|
|
144
|
+
};
|
|
145
|
+
return {
|
|
146
|
+
async get(key) {
|
|
147
|
+
const row = await db.first(`SELECT "value" FROM "${raybaseAuthPasswordProviderStateTableName}"
|
|
148
|
+
WHERE "userId" = ? AND "purpose" = ? AND "providerId" = ? AND "stateKey" = ?`, [userId, purpose, registration.providerId, checkedKey(key)]);
|
|
149
|
+
return row ? decodeBase64Url(row.value) : null;
|
|
150
|
+
},
|
|
151
|
+
async put(key, value) {
|
|
152
|
+
if (!(value instanceof Uint8Array))
|
|
153
|
+
throw new Error("Backup password-secret provider state must be bytes");
|
|
154
|
+
if (value.byteLength > backupProviderLimits.providerStateBytes) {
|
|
155
|
+
throw new Error(`Backup password-secret provider state exceeds ${backupProviderLimits.providerStateBytes} bytes`);
|
|
156
|
+
}
|
|
157
|
+
await db.run(`INSERT INTO "${raybaseAuthPasswordProviderStateTableName}"
|
|
158
|
+
("userId", "purpose", "providerId", "stateKey", "value", "updatedAt")
|
|
159
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
160
|
+
ON CONFLICT ("userId", "purpose", "providerId", "stateKey")
|
|
161
|
+
DO UPDATE SET "value" = excluded."value", "updatedAt" = excluded."updatedAt"`, [userId, purpose, registration.providerId, checkedKey(key), encodeBase64Url(value), nowIso()]);
|
|
162
|
+
},
|
|
163
|
+
async delete(key) {
|
|
164
|
+
await db.run(`DELETE FROM "${raybaseAuthPasswordProviderStateTableName}"
|
|
165
|
+
WHERE "userId" = ? AND "purpose" = ? AND "providerId" = ? AND "stateKey" = ?`, [userId, purpose, registration.providerId, checkedKey(key)]);
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
function providerStateReader(db, registration, userId, purpose, retained, active) {
|
|
170
|
+
const checkedKey = (key) => {
|
|
171
|
+
if (!providerStateKeyPattern.test(key) || encoder.encode(key).byteLength > 128) {
|
|
172
|
+
throw new Error("Backup password-secret provider state key is invalid");
|
|
173
|
+
}
|
|
174
|
+
return key;
|
|
175
|
+
};
|
|
176
|
+
return Object.freeze({
|
|
177
|
+
async get(key) {
|
|
178
|
+
if (!active())
|
|
179
|
+
throw new Error("Backup wrap participant state is no longer available");
|
|
180
|
+
const row = await db.first(`SELECT "value" FROM "${raybaseAuthPasswordProviderStateTableName}"
|
|
181
|
+
WHERE "userId" = ? AND "purpose" = ? AND "providerId" = ? AND "stateKey" = ?`, [userId, purpose, registration.providerId, checkedKey(key)]);
|
|
182
|
+
if (!active())
|
|
183
|
+
throw new Error("Backup wrap participant state is no longer available");
|
|
184
|
+
if (!row)
|
|
185
|
+
return null;
|
|
186
|
+
const value = decodeBase64Url(row.value);
|
|
187
|
+
if (value.byteLength > backupProviderLimits.providerStateBytes) {
|
|
188
|
+
value.fill(0);
|
|
189
|
+
throw new Error("Stored backup password-secret provider state exceeds its byte limit");
|
|
190
|
+
}
|
|
191
|
+
retained.push(value);
|
|
192
|
+
return value;
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Resolve selected ready subjects into fresh wrap-time KDF/state views. The
|
|
198
|
+
* caller must release the result immediately after `wrapDek` settles.
|
|
199
|
+
*/
|
|
200
|
+
export async function createRaybasePasswordWrapParticipants(db, registration, userIds) {
|
|
201
|
+
const purpose = purposeForProvider(registration.providerId);
|
|
202
|
+
const ids = [...userIds];
|
|
203
|
+
if (!ids.length || new Set(ids).size !== ids.length) {
|
|
204
|
+
throw new RaybaseBackupError("BACKUP_THRESHOLD_UNMET", "Backup password-secret participant ids are invalid");
|
|
205
|
+
}
|
|
206
|
+
const rows = await db.all(`SELECT * FROM "${raybaseAuthPasswordSecretStateTableName}"
|
|
207
|
+
WHERE "purpose" = ? AND "userId" IN (${ids.map(() => "?").join(", ")})`, [purpose, ...ids]);
|
|
208
|
+
const byUser = new Map(rows.map((row) => [row.userId, row]));
|
|
209
|
+
const retained = [];
|
|
210
|
+
let active = true;
|
|
211
|
+
const participants = [];
|
|
212
|
+
try {
|
|
213
|
+
for (const userId of ids) {
|
|
214
|
+
const row = byUser.get(userId);
|
|
215
|
+
if (!row ||
|
|
216
|
+
row.providerId !== registration.providerId ||
|
|
217
|
+
row.providerVersion !== providerVersion(registration) ||
|
|
218
|
+
row.lastFailureCode !== null ||
|
|
219
|
+
(row.readiness !== "ready" && row.readiness !== "reset-destructive")) {
|
|
220
|
+
throw new RaybaseBackupError("BACKUP_THRESHOLD_UNMET", "Backup password-secret participants are not ready");
|
|
221
|
+
}
|
|
222
|
+
participants.push(Object.freeze({
|
|
223
|
+
userId,
|
|
224
|
+
kdf: Object.freeze(kdfDescriptor(row)),
|
|
225
|
+
state: providerStateReader(db, registration, userId, purpose, retained, () => active)
|
|
226
|
+
}));
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
active = false;
|
|
231
|
+
for (const value of retained)
|
|
232
|
+
value.fill(0);
|
|
233
|
+
throw error;
|
|
234
|
+
}
|
|
235
|
+
return {
|
|
236
|
+
participants: Object.freeze(participants),
|
|
237
|
+
release() {
|
|
238
|
+
if (!active)
|
|
239
|
+
return;
|
|
240
|
+
active = false;
|
|
241
|
+
for (const value of retained)
|
|
242
|
+
value.fill(0);
|
|
243
|
+
retained.length = 0;
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
async function auditLifecycle(db, userId, registration, event, outcome, metadata) {
|
|
248
|
+
await recordAudit(db, {
|
|
249
|
+
actor: actorAuditRef(userId),
|
|
250
|
+
action: `auth.password_secret.lifecycle.${outcome}`,
|
|
251
|
+
target: { type: raybaseAuthPasswordSecretStateTableName, id: userId },
|
|
252
|
+
metadata: {
|
|
253
|
+
event,
|
|
254
|
+
providerId: registration.providerId,
|
|
255
|
+
providerVersion: providerVersion(registration),
|
|
256
|
+
...metadata
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Runs only after Core has observed a successful password lifecycle operation.
|
|
262
|
+
* Every failure is reduced to an audit-safe code and swallowed so auth success
|
|
263
|
+
* is never rewritten as an HTTP failure.
|
|
264
|
+
*/
|
|
265
|
+
export async function runRaybasePasswordSecretLifecycle(input) {
|
|
266
|
+
if (!input.registration)
|
|
267
|
+
return "not-configured";
|
|
268
|
+
const occurredAt = nowIso();
|
|
269
|
+
let secret;
|
|
270
|
+
let previousSecret;
|
|
271
|
+
let row;
|
|
272
|
+
try {
|
|
273
|
+
row = await ensureStateRow(input.db, input.registration, input.userId, input.event, occurredAt);
|
|
274
|
+
const purpose = row.purpose;
|
|
275
|
+
const transition = input.event === "password-change" || input.event === "password-reset"
|
|
276
|
+
? input.event
|
|
277
|
+
: row.pendingEvent ?? (row.passwordVersion === 0 ? input.event : null);
|
|
278
|
+
await input.db.run(`UPDATE "${raybaseAuthPasswordSecretStateTableName}"
|
|
279
|
+
SET "pendingEvent" = ?, "readiness" = 'needs-login',
|
|
280
|
+
"destructiveResetAt" = CASE WHEN ? = 'password-reset' THEN ? ELSE "destructiveResetAt" END,
|
|
281
|
+
"updatedAt" = ?
|
|
282
|
+
WHERE "userId" = ? AND "purpose" = ?`, [transition, input.event, occurredAt, occurredAt, input.userId, purpose]);
|
|
283
|
+
const descriptor = kdfDescriptor(row);
|
|
284
|
+
secret = await deriveRaybasePasswordSecret(input.password, descriptor);
|
|
285
|
+
if (input.event === "password-change" && input.previousPassword !== undefined) {
|
|
286
|
+
previousSecret = await deriveRaybasePasswordSecret(input.previousPassword, descriptor);
|
|
287
|
+
}
|
|
288
|
+
await input.registration.lifecycle.onPasswordSecret({
|
|
289
|
+
event: input.event,
|
|
290
|
+
userId: input.userId,
|
|
291
|
+
occurredAt,
|
|
292
|
+
...(input.environment ? { environment: input.environment } : {}),
|
|
293
|
+
kdf: descriptor,
|
|
294
|
+
secret,
|
|
295
|
+
...(previousSecret ? { previousSecret } : {}),
|
|
296
|
+
state: providerStateStore(input.db, input.registration, input.userId, purpose),
|
|
297
|
+
signal: input.signal ?? new AbortController().signal
|
|
298
|
+
});
|
|
299
|
+
const advancesPasswordVersion = Boolean(transition);
|
|
300
|
+
const nextPasswordVersion = advancesPasswordVersion
|
|
301
|
+
? Math.max(1, row.passwordVersion + 1)
|
|
302
|
+
: Math.max(1, row.passwordVersion);
|
|
303
|
+
const destructiveReset = transition === "password-reset" || Boolean(row.destructiveResetAt);
|
|
304
|
+
await input.db.run(`UPDATE "${raybaseAuthPasswordSecretStateTableName}"
|
|
305
|
+
SET "passwordVersion" = ?, "pendingEvent" = NULL, "providerId" = ?, "providerVersion" = ?,
|
|
306
|
+
"readiness" = ?, "lastSuccessEvent" = ?, "lastSuccessAt" = ?,
|
|
307
|
+
"lastFailureCode" = NULL, "lastFailureAt" = NULL, "updatedAt" = ?
|
|
308
|
+
WHERE "userId" = ? AND "purpose" = ?`, [
|
|
309
|
+
nextPasswordVersion,
|
|
310
|
+
input.registration.providerId,
|
|
311
|
+
providerVersion(input.registration),
|
|
312
|
+
destructiveReset ? "reset-destructive" : "ready",
|
|
313
|
+
input.event,
|
|
314
|
+
occurredAt,
|
|
315
|
+
occurredAt,
|
|
316
|
+
input.userId,
|
|
317
|
+
purpose
|
|
318
|
+
]);
|
|
319
|
+
await auditLifecycle(input.db, input.userId, input.registration, input.event, "succeeded", {
|
|
320
|
+
kdfVersion: descriptor.version,
|
|
321
|
+
passwordVersion: nextPasswordVersion,
|
|
322
|
+
destructiveReset
|
|
323
|
+
}).catch(() => undefined);
|
|
324
|
+
return "succeeded";
|
|
325
|
+
}
|
|
326
|
+
catch {
|
|
327
|
+
if (row) {
|
|
328
|
+
await input.db.run(`UPDATE "${raybaseAuthPasswordSecretStateTableName}"
|
|
329
|
+
SET "readiness" = CASE
|
|
330
|
+
WHEN "destructiveResetAt" IS NOT NULL THEN 'reset-destructive'
|
|
331
|
+
WHEN "pendingEvent" = 'password-change' THEN 'change-destructive'
|
|
332
|
+
ELSE 'needs-login'
|
|
333
|
+
END,
|
|
334
|
+
"lastFailureCode" = ?, "lastFailureAt" = ?, "updatedAt" = ?
|
|
335
|
+
WHERE "userId" = ? AND "purpose" = ?`, [lifecycleFailureCode, occurredAt, occurredAt, input.userId, row.purpose]).catch(() => undefined);
|
|
336
|
+
}
|
|
337
|
+
await auditLifecycle(input.db, input.userId, input.registration, input.event, "failed", {
|
|
338
|
+
failureCode: lifecycleFailureCode
|
|
339
|
+
}).catch(() => undefined);
|
|
340
|
+
return "failed";
|
|
341
|
+
}
|
|
342
|
+
finally {
|
|
343
|
+
secret?.fill(0);
|
|
344
|
+
previousSecret?.fill(0);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
function readinessFromRow(row, registration) {
|
|
348
|
+
const providerMatches = row.providerId === registration.providerId &&
|
|
349
|
+
row.providerVersion === providerVersion(registration);
|
|
350
|
+
const status = row.purpose === null
|
|
351
|
+
? row.hasCredential
|
|
352
|
+
? "needs-login"
|
|
353
|
+
: "no-password-lifecycle"
|
|
354
|
+
: !providerMatches
|
|
355
|
+
? "needs-login"
|
|
356
|
+
: row.readiness === "ready"
|
|
357
|
+
? "ready"
|
|
358
|
+
: row.readiness === "change-destructive"
|
|
359
|
+
? "change-destructive"
|
|
360
|
+
: row.readiness === "reset-destructive"
|
|
361
|
+
? "reset-destructive"
|
|
362
|
+
: "needs-login";
|
|
363
|
+
return {
|
|
364
|
+
userId: row.userId,
|
|
365
|
+
providerId: registration.providerId,
|
|
366
|
+
providerVersion: providerVersion(registration),
|
|
367
|
+
status,
|
|
368
|
+
readyForNewBackups: providerMatches &&
|
|
369
|
+
row.lastFailureCode === null &&
|
|
370
|
+
(status === "ready" || status === "reset-destructive"),
|
|
371
|
+
passwordVersion: Number(row.passwordVersion ?? 0),
|
|
372
|
+
lastSuccessEvent: row.lastSuccessEvent ?? null,
|
|
373
|
+
lastSuccessAt: row.lastSuccessAt ?? null,
|
|
374
|
+
lastFailureCode: row.lastFailureCode ?? null,
|
|
375
|
+
lastFailureAt: row.lastFailureAt ?? null,
|
|
376
|
+
destructiveResetAt: row.destructiveResetAt ?? null
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
export async function listRaybasePasswordSecretReadiness(db, registration, userIds) {
|
|
380
|
+
const purpose = purposeForProvider(registration.providerId);
|
|
381
|
+
const ids = userIds?.filter(Boolean) ?? [];
|
|
382
|
+
const where = ids.length ? `WHERE u."id" IN (${ids.map(() => "?").join(", ")})` : "";
|
|
383
|
+
const rows = await db.all(`SELECT
|
|
384
|
+
u."id" AS "userId",
|
|
385
|
+
s."purpose", s."salt", s."kdfAlgorithm", s."kdfVersion", s."kdfIterations", s."kdfOutputBytes",
|
|
386
|
+
s."passwordVersion", s."pendingEvent", s."providerId", s."providerVersion", s."readiness",
|
|
387
|
+
s."lastSuccessEvent", s."lastSuccessAt", s."lastFailureCode", s."lastFailureAt", s."destructiveResetAt",
|
|
388
|
+
EXISTS(
|
|
389
|
+
SELECT 1 FROM "_auth_accounts" a
|
|
390
|
+
WHERE a."userId" = u."id" AND a."providerId" = 'credential' AND a."password" IS NOT NULL
|
|
391
|
+
) AS "hasCredential"
|
|
392
|
+
FROM "_auth_users" u
|
|
393
|
+
LEFT JOIN "${raybaseAuthPasswordSecretStateTableName}" s
|
|
394
|
+
ON s."userId" = u."id" AND s."purpose" = ?
|
|
395
|
+
${where}
|
|
396
|
+
ORDER BY u."id"`, [purpose, ...ids]);
|
|
397
|
+
return rows.map((row) => readinessFromRow(row, registration));
|
|
398
|
+
}
|
|
399
|
+
export async function assertRaybasePasswordSecretParticipantsReady(db, registration, requiredUserIds) {
|
|
400
|
+
const uniqueIds = Array.from(new Set(requiredUserIds.filter(Boolean)));
|
|
401
|
+
const readiness = await listRaybasePasswordSecretReadiness(db, registration, uniqueIds);
|
|
402
|
+
const byUser = new Map(readiness.map((item) => [item.userId, item]));
|
|
403
|
+
const unavailable = uniqueIds.filter((userId) => !byUser.get(userId)?.readyForNewBackups);
|
|
404
|
+
if (unavailable.length) {
|
|
405
|
+
throw new RaybaseBackupError("BACKUP_THRESHOLD_UNMET", `Backup password-secret participants are not ready (${unavailable.length} unavailable)`);
|
|
406
|
+
}
|
|
407
|
+
return readiness;
|
|
408
|
+
}
|
|
409
|
+
//# sourceMappingURL=auth-password-secret.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-password-secret.js","sourceRoot":"","sources":["../src/auth-password-secret.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAOnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,CAAC,MAAM,uCAAuC,GAAG,6BAA6B,CAAC;AACrF,MAAM,CAAC,MAAM,yCAAyC,GAAG,+BAA+B,CAAC;AACzF,MAAM,CAAC,MAAM,4BAA4B,GAAG,qBAAqB,CAAC;AAElE,MAAM,CAAC,MAAM,+BAA+B,GAAG;IAC7C,SAAS,EAAE,gBAAgB;IAC3B,OAAO,EAAE,CAAC;IACV,UAAU,EAAE,OAAO;IACnB,WAAW,EAAE,EAAE;IACf,SAAS,EAAE,EAAE;CACL,CAAC;AAgDX,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAClC,MAAM,uBAAuB,GAAG,sCAAsC,CAAC;AACvE,MAAM,iBAAiB,GAAG,gCAAgC,CAAC;AAC3D,MAAM,oBAAoB,GAAG,sCAAsC,CAAC;AAEpE,SAAS,eAAe,CAAC,KAAiB;IACxC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9D,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACxG,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,WAAW,CAAC,KAAiB;IACpC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC9C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChB,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC;AAED,SAAS,kBAAkB,CAAC,UAAkB;IAC5C,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IACrC,IACE,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;QACnC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,UAAU,GAAG,oBAAoB,CAAC,eAAe,EAC5E,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,GAAG,4BAA4B,IAAI,UAAU,EAAE,CAAC;AACzD,CAAC;AAED,SAAS,eAAe,CAAC,YAAwD;IAC/E,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACpD,IACE,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,oBAAoB,CAAC,eAAe,EACvE,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,GAA2B;IAChD,IACE,GAAG,CAAC,YAAY,KAAK,+BAA+B,CAAC,SAAS;QAC9D,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC;QACrC,GAAG,CAAC,UAAU,GAAG,CAAC;QAClB,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC;QACxC,GAAG,CAAC,aAAa,GAAG,OAAO;QAC3B,GAAG,CAAC,aAAa,GAAG,SAAS;QAC7B,GAAG,CAAC,cAAc,KAAK,EAAE,EACzB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,IAAgB,CAAC;IACrB,IAAI,CAAC;QACH,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,CAAC;QACH,IACE,IAAI,CAAC,UAAU,GAAG,CAAC;YACnB,IAAI,CAAC,UAAU,GAAG,oBAAoB,CAAC,SAAS;YAChD,eAAe,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,EAClC,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACf,CAAC;IACD,OAAO;QACL,SAAS,EAAE,gBAAgB;QAC3B,OAAO,EAAE,GAAG,CAAC,UAAU;QACvB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,UAAU,EAAE,GAAG,CAAC,aAAa;QAC7B,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,QAAgB,EAChB,UAAyE;IAEzE,IACE,UAAU,CAAC,SAAS,KAAK,gBAAgB;QACzC,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;QACzC,UAAU,CAAC,OAAO,GAAG,CAAC;QACtB,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC;QAC5C,UAAU,CAAC,UAAU,GAAG,OAAO;QAC/B,UAAU,CAAC,UAAU,GAAG,SAAS;QACjC,UAAU,CAAC,WAAW,KAAK,EAAE,EAC7B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,IAAI,GAAG,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,GAAG,oBAAoB,CAAC,SAAS,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IACD,MAAM,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAC5C,WAAW,4BAA4B,KAAK,UAAU,CAAC,OAAO,SAAS,QAAQ,EAAE,CAClF,CAAC;IACF,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CACvC,KAAK,EACL,WAAW,CAAC,uBAAuB,CAAC,EACpC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAClB,KAAK,EACL,CAAC,YAAY,CAAC,CACf,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,UAAU,CACzC;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC;YACvB,UAAU,EAAE,UAAU,CAAC,UAAU;SAClC,EACD,GAAG,EACH,UAAU,CAAC,WAAW,GAAG,CAAC,CAC3B,CAAC;QACF,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;YAAS,CAAC;QACT,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,EAAe,EACf,YAAwD,EACxD,MAAc,EACd,KAAoC,EACpC,UAAkB;IAElB,MAAM,OAAO,GAAG,kBAAkB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAChH,MAAM,EAAE,CAAC,GAAG,CACV,0BAA0B,uCAAuC;;;6DAGR,EACzD;QACE,MAAM;QACN,OAAO;QACP,IAAI;QACJ,+BAA+B,CAAC,SAAS;QACzC,+BAA+B,CAAC,OAAO;QACvC,+BAA+B,CAAC,UAAU;QAC1C,+BAA+B,CAAC,WAAW;QAC3C,KAAK;QACL,UAAU;QACV,UAAU;KACX,CACF,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,KAAK,CACxB,kBAAkB,uCAAuC,wCAAwC,EACjG,CAAC,MAAM,EAAE,OAAO,CAAC,CAClB,CAAC;IACF,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACjF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,kBAAkB,CACzB,EAAe,EACf,YAAwD,EACxD,MAAc,EACd,OAAe;IAEf,MAAM,UAAU,GAAG,CAAC,GAAW,EAAU,EAAE;QACzC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;YAC/E,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,GAAG;YACX,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,KAAK,CACxB,wBAAwB,yCAAyC;sFACa,EAC9E,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAC5D,CAAC;YACF,OAAO,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACjD,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK;YAClB,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;YAC3G,IAAI,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,kBAAkB,EAAE,CAAC;gBAC/D,MAAM,IAAI,KAAK,CAAC,iDAAiD,oBAAoB,CAAC,kBAAkB,QAAQ,CAAC,CAAC;YACpH,CAAC;YACD,MAAM,EAAE,CAAC,GAAG,CACV,gBAAgB,yCAAyC;;;;sFAIqB,EAC9E,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAC9F,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,GAAG;YACd,MAAM,EAAE,CAAC,GAAG,CACV,gBAAgB,yCAAyC;sFACqB,EAC9E,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAC5D,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,EAAe,EACf,YAAwD,EACxD,MAAc,EACd,OAAe,EACf,QAAsB,EACtB,MAAqB;IAErB,MAAM,UAAU,GAAG,CAAC,GAAW,EAAU,EAAE;QACzC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;YAC/E,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,KAAK,CAAC,GAAG,CAAC,GAAW;YACnB,IAAI,CAAC,MAAM,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACvF,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,KAAK,CACxB,wBAAwB,yCAAyC;sFACa,EAC9E,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAC5D,CAAC;YACF,IAAI,CAAC,MAAM,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACvF,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC;YACtB,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,kBAAkB,EAAE,CAAC;gBAC/D,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;YACzF,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qCAAqC,CACzD,EAAe,EACf,YAAwD,EACxD,OAA0B;IAK1B,MAAM,OAAO,GAAG,kBAAkB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IACzB,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC;QACpD,MAAM,IAAI,kBAAkB,CAAC,wBAAwB,EAAE,oDAAoD,CAAC,CAAC;IAC/G,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,GAAG,CACvB,kBAAkB,uCAAuC;4CACjB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EACxE,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,CAClB,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,MAAM,YAAY,GAA4B,EAAE,CAAC;IACjD,IAAI,CAAC;QACH,KAAK,MAAM,MAAM,IAAI,GAAG,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC/B,IACE,CAAC,GAAG;gBACJ,GAAG,CAAC,UAAU,KAAK,YAAY,CAAC,UAAU;gBAC1C,GAAG,CAAC,eAAe,KAAK,eAAe,CAAC,YAAY,CAAC;gBACrD,GAAG,CAAC,eAAe,KAAK,IAAI;gBAC5B,CAAC,GAAG,CAAC,SAAS,KAAK,OAAO,IAAI,GAAG,CAAC,SAAS,KAAK,mBAAmB,CAAC,EACpE,CAAC;gBACD,MAAM,IAAI,kBAAkB,CAC1B,wBAAwB,EACxB,mDAAmD,CACpD,CAAC;YACJ,CAAC;YACD,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC9B,MAAM;gBACN,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;gBACtC,KAAK,EAAE,mBAAmB,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC;aACtF,CAAC,CAAC,CAAC;QACN,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,KAAK,CAAC;QACf,KAAK,MAAM,KAAK,IAAI,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,KAAK,CAAC;IACd,CAAC;IACD,OAAO;QACL,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;QACzC,OAAO;YACL,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,MAAM,GAAG,KAAK,CAAC;YACf,KAAK,MAAM,KAAK,IAAI,QAAQ;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5C,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACtB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,EAAe,EACf,MAAc,EACd,YAAwD,EACxD,KAAoC,EACpC,OAA+B,EAC/B,QAAiC;IAEjC,MAAM,WAAW,CAAC,EAAE,EAAE;QACpB,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC;QAC5B,MAAM,EAAE,kCAAkC,OAAO,EAAE;QACnD,MAAM,EAAE,EAAE,IAAI,EAAE,uCAAuC,EAAE,EAAE,EAAE,MAAM,EAAE;QACrE,QAAQ,EAAE;YACR,KAAK;YACL,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,eAAe,EAAE,eAAe,CAAC,YAAY,CAAC;YAC9C,GAAG,QAAQ;SACZ;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iCAAiC,CAAC,KASvD;IACC,IAAI,CAAC,KAAK,CAAC,YAAY;QAAE,OAAO,gBAAgB,CAAC;IACjD,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC;IAC5B,IAAI,MAA8B,CAAC;IACnC,IAAI,cAAsC,CAAC;IAC3C,IAAI,GAAuC,CAAC;IAC5C,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAChG,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC5B,MAAM,UAAU,GACd,KAAK,CAAC,KAAK,KAAK,iBAAiB,IAAI,KAAK,CAAC,KAAK,KAAK,gBAAgB;YACnE,CAAC,CAAC,KAAK,CAAC,KAAK;YACb,CAAC,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3E,MAAM,KAAK,CAAC,EAAE,CAAC,GAAG,CAChB,WAAW,uCAAuC;;;;4CAIZ,EACtC,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CACzE,CAAC;QAEF,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,GAAG,MAAM,2BAA2B,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACvE,IAAI,KAAK,CAAC,KAAK,KAAK,iBAAiB,IAAI,KAAK,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;YAC9E,cAAc,GAAG,MAAM,2BAA2B,CAAC,KAAK,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;QACzF,CAAC;QACD,MAAM,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,gBAAgB,CAAC;YAClD,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,UAAU;YACV,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,GAAG,EAAE,UAAU;YACf,MAAM;YACN,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC;YAC9E,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC,MAAM;SACrD,CAAC,CAAC;QAEH,MAAM,uBAAuB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,mBAAmB,GAAG,uBAAuB;YACjD,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC;YACtC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;QACrC,MAAM,gBAAgB,GAAG,UAAU,KAAK,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC5F,MAAM,KAAK,CAAC,EAAE,CAAC,GAAG,CAChB,WAAW,uCAAuC;;;;4CAIZ,EACtC;YACE,mBAAmB;YACnB,KAAK,CAAC,YAAY,CAAC,UAAU;YAC7B,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC;YACnC,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO;YAChD,KAAK,CAAC,KAAK;YACX,UAAU;YACV,UAAU;YACV,KAAK,CAAC,MAAM;YACZ,OAAO;SACR,CACF,CAAC;QACF,MAAM,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE;YACzF,UAAU,EAAE,UAAU,CAAC,OAAO;YAC9B,eAAe,EAAE,mBAAmB;YACpC,gBAAgB;SACjB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC1B,OAAO,WAAW,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,KAAK,CAAC,EAAE,CAAC,GAAG,CAChB,WAAW,uCAAuC;;;;;;;8CAOZ,EACtC,CAAC,oBAAoB,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAC1E,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,MAAM,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE;YACtF,WAAW,EAAE,oBAAoB;SAClC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC1B,OAAO,QAAQ,CAAC;IAClB,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAOD,SAAS,gBAAgB,CACvB,GAAsB,EACtB,YAAwD;IAExD,MAAM,eAAe,GACnB,GAAG,CAAC,UAAU,KAAK,YAAY,CAAC,UAAU;QAC1C,GAAG,CAAC,eAAe,KAAK,eAAe,CAAC,YAAY,CAAC,CAAC;IACxD,MAAM,MAAM,GACV,GAAG,CAAC,OAAO,KAAK,IAAI;QAClB,CAAC,CAAC,GAAG,CAAC,aAAa;YACjB,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,uBAAuB;QAC3B,CAAC,CAAC,CAAC,eAAe;YAChB,CAAC,CAAC,aAAa;YACjB,CAAC,CAAC,GAAG,CAAC,SAAS,KAAK,OAAO;gBACzB,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,GAAG,CAAC,SAAS,KAAK,oBAAoB;oBACtC,CAAC,CAAC,oBAAoB;oBACxB,CAAC,CAAC,GAAG,CAAC,SAAS,KAAK,mBAAmB;wBACrC,CAAC,CAAC,mBAAmB;wBACrB,CAAC,CAAC,aAAa,CAAC;IACxB,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,UAAU,EAAE,YAAY,CAAC,UAAU;QACnC,eAAe,EAAE,eAAe,CAAC,YAAY,CAAC;QAC9C,MAAM;QACN,kBAAkB,EAChB,eAAe;YACf,GAAG,CAAC,eAAe,KAAK,IAAI;YAC5B,CAAC,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,mBAAmB,CAAC;QACxD,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,CAAC;QACjD,gBAAgB,EAAG,GAAG,CAAC,gBAAyD,IAAI,IAAI;QACxF,aAAa,EAAE,GAAG,CAAC,aAAa,IAAI,IAAI;QACxC,eAAe,EAAE,GAAG,CAAC,eAAe,IAAI,IAAI;QAC5C,aAAa,EAAE,GAAG,CAAC,aAAa,IAAI,IAAI;QACxC,kBAAkB,EAAE,GAAG,CAAC,kBAAkB,IAAI,IAAI;KACnD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACtD,EAAe,EACf,YAAwD,EACxD,OAA2B;IAE3B,MAAM,OAAO,GAAG,kBAAkB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACrF,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,GAAG,CACvB;;;;;;;;;;kBAUc,uCAAuC;;OAElD,KAAK;qBACS,EACjB,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,CAClB,CAAC;IACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4CAA4C,CAChE,EAAe,EACf,YAAwD,EACxD,eAAkC;IAElC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,MAAM,kCAAkC,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IACxF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAC1F,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,kBAAkB,CAC1B,wBAAwB,EACxB,sDAAsD,WAAW,CAAC,MAAM,eAAe,CACxF,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
export type UserRow = {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
email: string;
|
|
5
|
+
emailVerified: number | boolean;
|
|
6
|
+
image: string | null;
|
|
7
|
+
createdAt: number | string;
|
|
8
|
+
updatedAt: number | string;
|
|
9
|
+
operatorRole: string | null;
|
|
10
|
+
appRoles: string | null;
|
|
11
|
+
banned: number | boolean | null;
|
|
12
|
+
banReason: string | null;
|
|
13
|
+
banExpires: number | string | null;
|
|
14
|
+
};
|
|
15
|
+
export type SessionRow = {
|
|
16
|
+
id: string;
|
|
17
|
+
userId: string;
|
|
18
|
+
token: string;
|
|
19
|
+
expiresAt: number | string;
|
|
20
|
+
ipAddress: string | null;
|
|
21
|
+
userAgent: string | null;
|
|
22
|
+
createdAt: number | string;
|
|
23
|
+
updatedAt: number | string;
|
|
24
|
+
impersonatedBy: string | null;
|
|
25
|
+
};
|
|
26
|
+
export type AccountRow = {
|
|
27
|
+
id: string;
|
|
28
|
+
accountId: string;
|
|
29
|
+
providerId: string;
|
|
30
|
+
userId: string;
|
|
31
|
+
accessToken: string | null;
|
|
32
|
+
refreshToken: string | null;
|
|
33
|
+
idToken: string | null;
|
|
34
|
+
accessTokenExpiresAt: number | string | null;
|
|
35
|
+
refreshTokenExpiresAt: number | string | null;
|
|
36
|
+
scope: string | null;
|
|
37
|
+
password: string | null;
|
|
38
|
+
createdAt: number | string;
|
|
39
|
+
updatedAt: number | string;
|
|
40
|
+
};
|
|
41
|
+
export type VerificationRow = {
|
|
42
|
+
id: string;
|
|
43
|
+
identifier: string;
|
|
44
|
+
value: string;
|
|
45
|
+
expiresAt: number | string;
|
|
46
|
+
createdAt: number | string | null;
|
|
47
|
+
updatedAt: number | string | null;
|
|
48
|
+
};
|
|
49
|
+
export type PasskeyRow = {
|
|
50
|
+
id: string;
|
|
51
|
+
name: string | null;
|
|
52
|
+
publicKey: string;
|
|
53
|
+
userId: string;
|
|
54
|
+
credentialID: string;
|
|
55
|
+
counter: number;
|
|
56
|
+
deviceType: string;
|
|
57
|
+
backedUp: number | boolean;
|
|
58
|
+
transports: string | null;
|
|
59
|
+
createdAt: number | string | null;
|
|
60
|
+
aaguid: string | null;
|
|
61
|
+
};
|
|
62
|
+
export type RaybaseAuthPendingRow = {
|
|
63
|
+
id: string;
|
|
64
|
+
purpose: string;
|
|
65
|
+
tokenJti: string;
|
|
66
|
+
tokenHash: string;
|
|
67
|
+
providerId: string;
|
|
68
|
+
expectedEmail: string | null;
|
|
69
|
+
operatorRole: string | null;
|
|
70
|
+
appRoles: string;
|
|
71
|
+
nonceHash: string;
|
|
72
|
+
status: string;
|
|
73
|
+
updatesChoice: string | null;
|
|
74
|
+
createdAt: string;
|
|
75
|
+
expiresAt: string;
|
|
76
|
+
consumedAt: string | null;
|
|
77
|
+
error: string | null;
|
|
78
|
+
};
|
|
79
|
+
export declare const authUserTableName = "_auth_users";
|
|
80
|
+
export declare const authSessionTableName = "_auth_sessions";
|
|
81
|
+
export declare const authAccountTableName = "_auth_accounts";
|
|
82
|
+
export declare const authVerificationTableName = "_auth_verifications";
|
|
83
|
+
export declare const authPasskeyTableName = "_auth_passkeys";
|
|
84
|
+
export declare const authPasswordSecretStateTableName = "_auth_password_secret_state";
|
|
85
|
+
export declare const authPasswordProviderStateTableName = "_auth_password_provider_state";
|
|
86
|
+
export declare const raybaseSystemTableSql = "\nCREATE TABLE IF NOT EXISTS \"_auth_users\" (\n \"id\" TEXT PRIMARY KEY NOT NULL,\n \"name\" TEXT NOT NULL,\n \"email\" TEXT NOT NULL,\n \"emailVerified\" INTEGER NOT NULL DEFAULT false,\n \"image\" TEXT,\n \"createdAt\" INTEGER NOT NULL,\n \"updatedAt\" INTEGER NOT NULL,\n \"operatorRole\" TEXT,\n \"appRoles\" TEXT,\n \"banned\" INTEGER DEFAULT false,\n \"banReason\" TEXT,\n \"banExpires\" INTEGER\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS \"_auth_users_email_unique\" ON \"_auth_users\" (\"email\");\nCREATE INDEX IF NOT EXISTS \"_auth_users_email_idx\" ON \"_auth_users\" (\"email\");\n\nCREATE TABLE IF NOT EXISTS \"_auth_sessions\" (\n \"id\" TEXT PRIMARY KEY NOT NULL,\n \"userId\" TEXT NOT NULL,\n \"token\" TEXT NOT NULL,\n \"expiresAt\" INTEGER NOT NULL,\n \"ipAddress\" TEXT,\n \"userAgent\" TEXT,\n \"createdAt\" INTEGER NOT NULL,\n \"updatedAt\" INTEGER NOT NULL,\n \"impersonatedBy\" TEXT,\n FOREIGN KEY (\"userId\") REFERENCES \"_auth_users\"(\"id\") ON UPDATE no action ON DELETE cascade\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS \"_auth_sessions_token_unique\" ON \"_auth_sessions\" (\"token\");\nCREATE INDEX IF NOT EXISTS \"_auth_sessions_user_id_idx\" ON \"_auth_sessions\" (\"userId\");\nCREATE INDEX IF NOT EXISTS \"_auth_sessions_token_idx\" ON \"_auth_sessions\" (\"token\");\n\nCREATE TABLE IF NOT EXISTS \"_auth_accounts\" (\n \"id\" TEXT PRIMARY KEY NOT NULL,\n \"accountId\" TEXT NOT NULL,\n \"providerId\" TEXT NOT NULL,\n \"userId\" TEXT NOT NULL,\n \"accessToken\" TEXT,\n \"refreshToken\" TEXT,\n \"idToken\" TEXT,\n \"accessTokenExpiresAt\" INTEGER,\n \"refreshTokenExpiresAt\" INTEGER,\n \"scope\" TEXT,\n \"password\" TEXT,\n \"createdAt\" INTEGER NOT NULL,\n \"updatedAt\" INTEGER NOT NULL,\n FOREIGN KEY (\"userId\") REFERENCES \"_auth_users\"(\"id\") ON UPDATE no action ON DELETE cascade\n);\n\nCREATE INDEX IF NOT EXISTS \"_auth_accounts_user_id_idx\" ON \"_auth_accounts\" (\"userId\");\nCREATE INDEX IF NOT EXISTS \"_auth_accounts_provider_idx\" ON \"_auth_accounts\" (\"providerId\",\"accountId\");\n\nCREATE TABLE IF NOT EXISTS \"_auth_verifications\" (\n \"id\" TEXT PRIMARY KEY NOT NULL,\n \"identifier\" TEXT NOT NULL,\n \"value\" TEXT NOT NULL,\n \"expiresAt\" INTEGER NOT NULL,\n \"createdAt\" INTEGER,\n \"updatedAt\" INTEGER\n);\n\nCREATE INDEX IF NOT EXISTS \"_auth_verifications_identifier_idx\" ON \"_auth_verifications\" (\"identifier\");\n\nCREATE TABLE IF NOT EXISTS \"_auth_passkeys\" (\n \"id\" TEXT PRIMARY KEY NOT NULL,\n \"name\" TEXT,\n \"publicKey\" TEXT NOT NULL,\n \"userId\" TEXT NOT NULL,\n \"credentialID\" TEXT NOT NULL,\n \"counter\" INTEGER NOT NULL,\n \"deviceType\" TEXT NOT NULL,\n \"backedUp\" INTEGER NOT NULL,\n \"transports\" TEXT,\n \"createdAt\" INTEGER,\n \"aaguid\" TEXT,\n FOREIGN KEY (\"userId\") REFERENCES \"_auth_users\"(\"id\") ON UPDATE no action ON DELETE cascade\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS \"_auth_passkeys_credentialID_unique\" ON \"_auth_passkeys\" (\"credentialID\");\nCREATE INDEX IF NOT EXISTS \"_auth_passkeys_user_id_idx\" ON \"_auth_passkeys\" (\"userId\");\nCREATE INDEX IF NOT EXISTS \"_auth_passkeys_credential_id_idx\" ON \"_auth_passkeys\" (\"credentialID\");\n\nCREATE TABLE IF NOT EXISTS \"_auth_password_secret_state\" (\n \"userId\" TEXT NOT NULL,\n \"purpose\" TEXT NOT NULL,\n \"salt\" TEXT NOT NULL,\n \"kdfAlgorithm\" TEXT NOT NULL,\n \"kdfVersion\" INTEGER NOT NULL,\n \"kdfIterations\" INTEGER NOT NULL,\n \"kdfOutputBytes\" INTEGER NOT NULL,\n \"passwordVersion\" INTEGER NOT NULL DEFAULT 0,\n \"pendingEvent\" TEXT,\n \"providerId\" TEXT,\n \"providerVersion\" TEXT,\n \"readiness\" TEXT NOT NULL DEFAULT 'needs-login',\n \"lastSuccessEvent\" TEXT,\n \"lastSuccessAt\" TEXT,\n \"lastFailureCode\" TEXT,\n \"lastFailureAt\" TEXT,\n \"destructiveResetAt\" TEXT,\n \"createdAt\" TEXT NOT NULL,\n \"updatedAt\" TEXT NOT NULL,\n PRIMARY KEY (\"userId\", \"purpose\"),\n FOREIGN KEY (\"userId\") REFERENCES \"_auth_users\"(\"id\") ON DELETE CASCADE\n);\n\nCREATE INDEX IF NOT EXISTS \"_auth_password_secret_readiness_idx\"\n ON \"_auth_password_secret_state\" (\"providerId\", \"providerVersion\", \"readiness\");\n\nCREATE TABLE IF NOT EXISTS \"_auth_password_provider_state\" (\n \"userId\" TEXT NOT NULL,\n \"purpose\" TEXT NOT NULL,\n \"providerId\" TEXT NOT NULL,\n \"stateKey\" TEXT NOT NULL,\n \"value\" TEXT NOT NULL,\n \"updatedAt\" TEXT NOT NULL,\n PRIMARY KEY (\"userId\", \"purpose\", \"providerId\", \"stateKey\"),\n FOREIGN KEY (\"userId\", \"purpose\") REFERENCES \"_auth_password_secret_state\"(\"userId\", \"purpose\") ON DELETE CASCADE\n);\n\nCREATE TABLE IF NOT EXISTS \"_invites\" (\n \"id\" TEXT PRIMARY KEY NOT NULL,\n \"tokenHash\" TEXT NOT NULL UNIQUE,\n \"email\" TEXT,\n \"role\" TEXT NOT NULL,\n \"roles\" TEXT NOT NULL DEFAULT '[\"user\"]',\n \"status\" TEXT NOT NULL DEFAULT 'pending',\n \"createdBy\" TEXT,\n \"note\" TEXT,\n \"expiresAt\" TEXT NOT NULL,\n \"usedAt\" TEXT,\n \"createdAt\" TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (\"createdBy\") REFERENCES \"_auth_users\"(\"id\") ON DELETE SET NULL\n);\n\nCREATE TABLE IF NOT EXISTS \"_used_tokens\" (\n \"jti\" TEXT PRIMARY KEY NOT NULL,\n \"purpose\" TEXT NOT NULL,\n \"usedAt\" TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS \"_auth_pending\" (\n \"id\" TEXT PRIMARY KEY NOT NULL,\n \"purpose\" TEXT NOT NULL,\n \"tokenJti\" TEXT NOT NULL,\n \"tokenHash\" TEXT NOT NULL,\n \"providerId\" TEXT NOT NULL,\n \"expectedEmail\" TEXT,\n \"operatorRole\" TEXT,\n \"appRoles\" TEXT NOT NULL,\n \"nonceHash\" TEXT NOT NULL,\n \"status\" TEXT NOT NULL DEFAULT 'started',\n \"updatesChoice\" TEXT,\n \"createdAt\" TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,\n \"expiresAt\" TEXT NOT NULL,\n \"consumedAt\" TEXT,\n \"error\" TEXT\n);\n\nCREATE INDEX IF NOT EXISTS \"_auth_pending_token_jti_idx\" ON \"_auth_pending\" (\"tokenJti\");\nCREATE INDEX IF NOT EXISTS \"_auth_pending_nonce_hash_idx\" ON \"_auth_pending\" (\"nonceHash\");\nCREATE INDEX IF NOT EXISTS \"_auth_pending_expires_at_idx\" ON \"_auth_pending\" (\"expiresAt\");\nCREATE INDEX IF NOT EXISTS \"_auth_pending_provider_id_idx\" ON \"_auth_pending\" (\"providerId\");\n\nCREATE TABLE IF NOT EXISTS \"_audit\" (\n \"id\" TEXT PRIMARY KEY NOT NULL,\n \"actorKind\" TEXT,\n \"actorId\" TEXT,\n \"runAsKind\" TEXT,\n \"runAsId\" TEXT,\n \"action\" TEXT NOT NULL,\n \"targetType\" TEXT NOT NULL,\n \"targetId\" TEXT,\n \"metadata\" TEXT,\n \"createdAt\" TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (\"actorId\") REFERENCES \"_auth_users\"(\"id\") ON DELETE SET NULL\n);\n\nCREATE INDEX IF NOT EXISTS \"_audit_created_at_idx\" ON \"_audit\" (\"createdAt\");\nCREATE INDEX IF NOT EXISTS \"_audit_actor_idx\" ON \"_audit\" (\"actorId\");\n\nCREATE TABLE IF NOT EXISTS \"_audit_archives\" (\n \"windowStart\" TEXT PRIMARY KEY NOT NULL,\n \"windowEnd\" TEXT NOT NULL,\n \"objectKey\" TEXT NOT NULL,\n \"rowCount\" INTEGER NOT NULL,\n \"firstCreatedAt\" TEXT,\n \"lastCreatedAt\" TEXT,\n \"sha256\" TEXT NOT NULL,\n \"archivedAt\" TEXT NOT NULL,\n \"prunedAt\" TEXT\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS \"_audit_archives_object_key_idx\" ON \"_audit_archives\" (\"objectKey\");\n\nCREATE TABLE IF NOT EXISTS \"_changes\" (\n \"seq\" INTEGER PRIMARY KEY AUTOINCREMENT,\n \"tableName\" TEXT NOT NULL,\n \"op\" TEXT NOT NULL,\n \"rowId\" TEXT NOT NULL,\n \"oldRow\" TEXT,\n \"newRow\" TEXT,\n \"actorId\" TEXT,\n \"adminOverride\" INTEGER NOT NULL DEFAULT 0,\n \"createdAt\" TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP\n);\n\nCREATE INDEX IF NOT EXISTS \"_changes_created_at_idx\" ON \"_changes\" (\"createdAt\");\nCREATE INDEX IF NOT EXISTS \"_changes_table_seq_idx\" ON \"_changes\" (\"tableName\", \"seq\");\n\nCREATE TABLE IF NOT EXISTS \"_state\" (\n \"key\" TEXT PRIMARY KEY NOT NULL,\n \"value\" TEXT,\n \"updatedAt\" TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS \"_settings\" (\n \"id\" TEXT PRIMARY KEY NOT NULL,\n \"appId\" TEXT NOT NULL,\n \"scope\" TEXT NOT NULL,\n \"subjectId\" TEXT NOT NULL,\n \"key\" TEXT NOT NULL,\n \"valueJson\" TEXT NOT NULL,\n \"createdAt\" TEXT NOT NULL,\n \"updatedAt\" TEXT NOT NULL,\n \"updatedBy\" TEXT,\n FOREIGN KEY (\"updatedBy\") REFERENCES \"_auth_users\"(\"id\") ON DELETE SET NULL\n);\n\nCREATE INDEX IF NOT EXISTS \"_settings_app_scope_subject_idx\" ON \"_settings\" (\"appId\", \"scope\", \"subjectId\");\nCREATE INDEX IF NOT EXISTS \"_settings_scope_subject_idx\" ON \"_settings\" (\"scope\", \"subjectId\");\nCREATE INDEX IF NOT EXISTS \"_settings_key_idx\" ON \"_settings\" (\"key\");\nCREATE INDEX IF NOT EXISTS \"_settings_updated_at_idx\" ON \"_settings\" (\"updatedAt\");\n\nCREATE TABLE IF NOT EXISTS \"_schema_versions\" (\n \"targetId\" TEXT PRIMARY KEY NOT NULL,\n \"kind\" TEXT NOT NULL,\n \"version\" TEXT NOT NULL,\n \"updatedAt\" TEXT NOT NULL\n);\n";
|
|
87
|
+
/**
|
|
88
|
+
* Core's non-auth system tables. A layered runtime can place these unchanged
|
|
89
|
+
* declarations in a physically isolated app store while keeping identity,
|
|
90
|
+
* session, invite, and token tables in its own control plane.
|
|
91
|
+
*/
|
|
92
|
+
export declare const raybaseApplicationSystemTableSql: string;
|
|
93
|
+
export declare const systemTableSql = "\nCREATE TABLE IF NOT EXISTS \"_auth_users\" (\n \"id\" TEXT PRIMARY KEY NOT NULL,\n \"name\" TEXT NOT NULL,\n \"email\" TEXT NOT NULL,\n \"emailVerified\" INTEGER NOT NULL DEFAULT false,\n \"image\" TEXT,\n \"createdAt\" INTEGER NOT NULL,\n \"updatedAt\" INTEGER NOT NULL,\n \"operatorRole\" TEXT,\n \"appRoles\" TEXT,\n \"banned\" INTEGER DEFAULT false,\n \"banReason\" TEXT,\n \"banExpires\" INTEGER\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS \"_auth_users_email_unique\" ON \"_auth_users\" (\"email\");\nCREATE INDEX IF NOT EXISTS \"_auth_users_email_idx\" ON \"_auth_users\" (\"email\");\n\nCREATE TABLE IF NOT EXISTS \"_auth_sessions\" (\n \"id\" TEXT PRIMARY KEY NOT NULL,\n \"userId\" TEXT NOT NULL,\n \"token\" TEXT NOT NULL,\n \"expiresAt\" INTEGER NOT NULL,\n \"ipAddress\" TEXT,\n \"userAgent\" TEXT,\n \"createdAt\" INTEGER NOT NULL,\n \"updatedAt\" INTEGER NOT NULL,\n \"impersonatedBy\" TEXT,\n FOREIGN KEY (\"userId\") REFERENCES \"_auth_users\"(\"id\") ON UPDATE no action ON DELETE cascade\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS \"_auth_sessions_token_unique\" ON \"_auth_sessions\" (\"token\");\nCREATE INDEX IF NOT EXISTS \"_auth_sessions_user_id_idx\" ON \"_auth_sessions\" (\"userId\");\nCREATE INDEX IF NOT EXISTS \"_auth_sessions_token_idx\" ON \"_auth_sessions\" (\"token\");\n\nCREATE TABLE IF NOT EXISTS \"_auth_accounts\" (\n \"id\" TEXT PRIMARY KEY NOT NULL,\n \"accountId\" TEXT NOT NULL,\n \"providerId\" TEXT NOT NULL,\n \"userId\" TEXT NOT NULL,\n \"accessToken\" TEXT,\n \"refreshToken\" TEXT,\n \"idToken\" TEXT,\n \"accessTokenExpiresAt\" INTEGER,\n \"refreshTokenExpiresAt\" INTEGER,\n \"scope\" TEXT,\n \"password\" TEXT,\n \"createdAt\" INTEGER NOT NULL,\n \"updatedAt\" INTEGER NOT NULL,\n FOREIGN KEY (\"userId\") REFERENCES \"_auth_users\"(\"id\") ON UPDATE no action ON DELETE cascade\n);\n\nCREATE INDEX IF NOT EXISTS \"_auth_accounts_user_id_idx\" ON \"_auth_accounts\" (\"userId\");\nCREATE INDEX IF NOT EXISTS \"_auth_accounts_provider_idx\" ON \"_auth_accounts\" (\"providerId\",\"accountId\");\n\nCREATE TABLE IF NOT EXISTS \"_auth_verifications\" (\n \"id\" TEXT PRIMARY KEY NOT NULL,\n \"identifier\" TEXT NOT NULL,\n \"value\" TEXT NOT NULL,\n \"expiresAt\" INTEGER NOT NULL,\n \"createdAt\" INTEGER,\n \"updatedAt\" INTEGER\n);\n\nCREATE INDEX IF NOT EXISTS \"_auth_verifications_identifier_idx\" ON \"_auth_verifications\" (\"identifier\");\n\nCREATE TABLE IF NOT EXISTS \"_auth_passkeys\" (\n \"id\" TEXT PRIMARY KEY NOT NULL,\n \"name\" TEXT,\n \"publicKey\" TEXT NOT NULL,\n \"userId\" TEXT NOT NULL,\n \"credentialID\" TEXT NOT NULL,\n \"counter\" INTEGER NOT NULL,\n \"deviceType\" TEXT NOT NULL,\n \"backedUp\" INTEGER NOT NULL,\n \"transports\" TEXT,\n \"createdAt\" INTEGER,\n \"aaguid\" TEXT,\n FOREIGN KEY (\"userId\") REFERENCES \"_auth_users\"(\"id\") ON UPDATE no action ON DELETE cascade\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS \"_auth_passkeys_credentialID_unique\" ON \"_auth_passkeys\" (\"credentialID\");\nCREATE INDEX IF NOT EXISTS \"_auth_passkeys_user_id_idx\" ON \"_auth_passkeys\" (\"userId\");\nCREATE INDEX IF NOT EXISTS \"_auth_passkeys_credential_id_idx\" ON \"_auth_passkeys\" (\"credentialID\");\n\nCREATE TABLE IF NOT EXISTS \"_auth_password_secret_state\" (\n \"userId\" TEXT NOT NULL,\n \"purpose\" TEXT NOT NULL,\n \"salt\" TEXT NOT NULL,\n \"kdfAlgorithm\" TEXT NOT NULL,\n \"kdfVersion\" INTEGER NOT NULL,\n \"kdfIterations\" INTEGER NOT NULL,\n \"kdfOutputBytes\" INTEGER NOT NULL,\n \"passwordVersion\" INTEGER NOT NULL DEFAULT 0,\n \"pendingEvent\" TEXT,\n \"providerId\" TEXT,\n \"providerVersion\" TEXT,\n \"readiness\" TEXT NOT NULL DEFAULT 'needs-login',\n \"lastSuccessEvent\" TEXT,\n \"lastSuccessAt\" TEXT,\n \"lastFailureCode\" TEXT,\n \"lastFailureAt\" TEXT,\n \"destructiveResetAt\" TEXT,\n \"createdAt\" TEXT NOT NULL,\n \"updatedAt\" TEXT NOT NULL,\n PRIMARY KEY (\"userId\", \"purpose\"),\n FOREIGN KEY (\"userId\") REFERENCES \"_auth_users\"(\"id\") ON DELETE CASCADE\n);\n\nCREATE INDEX IF NOT EXISTS \"_auth_password_secret_readiness_idx\"\n ON \"_auth_password_secret_state\" (\"providerId\", \"providerVersion\", \"readiness\");\n\nCREATE TABLE IF NOT EXISTS \"_auth_password_provider_state\" (\n \"userId\" TEXT NOT NULL,\n \"purpose\" TEXT NOT NULL,\n \"providerId\" TEXT NOT NULL,\n \"stateKey\" TEXT NOT NULL,\n \"value\" TEXT NOT NULL,\n \"updatedAt\" TEXT NOT NULL,\n PRIMARY KEY (\"userId\", \"purpose\", \"providerId\", \"stateKey\"),\n FOREIGN KEY (\"userId\", \"purpose\") REFERENCES \"_auth_password_secret_state\"(\"userId\", \"purpose\") ON DELETE CASCADE\n);\n\nCREATE TABLE IF NOT EXISTS \"_invites\" (\n \"id\" TEXT PRIMARY KEY NOT NULL,\n \"tokenHash\" TEXT NOT NULL UNIQUE,\n \"email\" TEXT,\n \"role\" TEXT NOT NULL,\n \"roles\" TEXT NOT NULL DEFAULT '[\"user\"]',\n \"status\" TEXT NOT NULL DEFAULT 'pending',\n \"createdBy\" TEXT,\n \"note\" TEXT,\n \"expiresAt\" TEXT NOT NULL,\n \"usedAt\" TEXT,\n \"createdAt\" TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (\"createdBy\") REFERENCES \"_auth_users\"(\"id\") ON DELETE SET NULL\n);\n\nCREATE TABLE IF NOT EXISTS \"_used_tokens\" (\n \"jti\" TEXT PRIMARY KEY NOT NULL,\n \"purpose\" TEXT NOT NULL,\n \"usedAt\" TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS \"_auth_pending\" (\n \"id\" TEXT PRIMARY KEY NOT NULL,\n \"purpose\" TEXT NOT NULL,\n \"tokenJti\" TEXT NOT NULL,\n \"tokenHash\" TEXT NOT NULL,\n \"providerId\" TEXT NOT NULL,\n \"expectedEmail\" TEXT,\n \"operatorRole\" TEXT,\n \"appRoles\" TEXT NOT NULL,\n \"nonceHash\" TEXT NOT NULL,\n \"status\" TEXT NOT NULL DEFAULT 'started',\n \"updatesChoice\" TEXT,\n \"createdAt\" TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,\n \"expiresAt\" TEXT NOT NULL,\n \"consumedAt\" TEXT,\n \"error\" TEXT\n);\n\nCREATE INDEX IF NOT EXISTS \"_auth_pending_token_jti_idx\" ON \"_auth_pending\" (\"tokenJti\");\nCREATE INDEX IF NOT EXISTS \"_auth_pending_nonce_hash_idx\" ON \"_auth_pending\" (\"nonceHash\");\nCREATE INDEX IF NOT EXISTS \"_auth_pending_expires_at_idx\" ON \"_auth_pending\" (\"expiresAt\");\nCREATE INDEX IF NOT EXISTS \"_auth_pending_provider_id_idx\" ON \"_auth_pending\" (\"providerId\");\n\nCREATE TABLE IF NOT EXISTS \"_audit\" (\n \"id\" TEXT PRIMARY KEY NOT NULL,\n \"actorKind\" TEXT,\n \"actorId\" TEXT,\n \"runAsKind\" TEXT,\n \"runAsId\" TEXT,\n \"action\" TEXT NOT NULL,\n \"targetType\" TEXT NOT NULL,\n \"targetId\" TEXT,\n \"metadata\" TEXT,\n \"createdAt\" TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (\"actorId\") REFERENCES \"_auth_users\"(\"id\") ON DELETE SET NULL\n);\n\nCREATE INDEX IF NOT EXISTS \"_audit_created_at_idx\" ON \"_audit\" (\"createdAt\");\nCREATE INDEX IF NOT EXISTS \"_audit_actor_idx\" ON \"_audit\" (\"actorId\");\n\nCREATE TABLE IF NOT EXISTS \"_audit_archives\" (\n \"windowStart\" TEXT PRIMARY KEY NOT NULL,\n \"windowEnd\" TEXT NOT NULL,\n \"objectKey\" TEXT NOT NULL,\n \"rowCount\" INTEGER NOT NULL,\n \"firstCreatedAt\" TEXT,\n \"lastCreatedAt\" TEXT,\n \"sha256\" TEXT NOT NULL,\n \"archivedAt\" TEXT NOT NULL,\n \"prunedAt\" TEXT\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS \"_audit_archives_object_key_idx\" ON \"_audit_archives\" (\"objectKey\");\n\nCREATE TABLE IF NOT EXISTS \"_changes\" (\n \"seq\" INTEGER PRIMARY KEY AUTOINCREMENT,\n \"tableName\" TEXT NOT NULL,\n \"op\" TEXT NOT NULL,\n \"rowId\" TEXT NOT NULL,\n \"oldRow\" TEXT,\n \"newRow\" TEXT,\n \"actorId\" TEXT,\n \"adminOverride\" INTEGER NOT NULL DEFAULT 0,\n \"createdAt\" TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP\n);\n\nCREATE INDEX IF NOT EXISTS \"_changes_created_at_idx\" ON \"_changes\" (\"createdAt\");\nCREATE INDEX IF NOT EXISTS \"_changes_table_seq_idx\" ON \"_changes\" (\"tableName\", \"seq\");\n\nCREATE TABLE IF NOT EXISTS \"_state\" (\n \"key\" TEXT PRIMARY KEY NOT NULL,\n \"value\" TEXT,\n \"updatedAt\" TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS \"_settings\" (\n \"id\" TEXT PRIMARY KEY NOT NULL,\n \"appId\" TEXT NOT NULL,\n \"scope\" TEXT NOT NULL,\n \"subjectId\" TEXT NOT NULL,\n \"key\" TEXT NOT NULL,\n \"valueJson\" TEXT NOT NULL,\n \"createdAt\" TEXT NOT NULL,\n \"updatedAt\" TEXT NOT NULL,\n \"updatedBy\" TEXT,\n FOREIGN KEY (\"updatedBy\") REFERENCES \"_auth_users\"(\"id\") ON DELETE SET NULL\n);\n\nCREATE INDEX IF NOT EXISTS \"_settings_app_scope_subject_idx\" ON \"_settings\" (\"appId\", \"scope\", \"subjectId\");\nCREATE INDEX IF NOT EXISTS \"_settings_scope_subject_idx\" ON \"_settings\" (\"scope\", \"subjectId\");\nCREATE INDEX IF NOT EXISTS \"_settings_key_idx\" ON \"_settings\" (\"key\");\nCREATE INDEX IF NOT EXISTS \"_settings_updated_at_idx\" ON \"_settings\" (\"updatedAt\");\n\nCREATE TABLE IF NOT EXISTS \"_schema_versions\" (\n \"targetId\" TEXT PRIMARY KEY NOT NULL,\n \"kind\" TEXT NOT NULL,\n \"version\" TEXT NOT NULL,\n \"updatedAt\" TEXT NOT NULL\n);\n";
|
|
94
|
+
export declare const authSchema: {
|
|
95
|
+
readonly user: "_auth_users";
|
|
96
|
+
readonly session: "_auth_sessions";
|
|
97
|
+
readonly account: "_auth_accounts";
|
|
98
|
+
readonly verification: "_auth_verifications";
|
|
99
|
+
readonly passkey: "_auth_passkeys";
|
|
100
|
+
readonly raybaseAuthPasswordSecretState: "_auth_password_secret_state";
|
|
101
|
+
readonly raybaseAuthPasswordProviderState: "_auth_password_provider_state";
|
|
102
|
+
readonly raybaseInvites: "_invites";
|
|
103
|
+
readonly raybaseUsedTokens: "_used_tokens";
|
|
104
|
+
readonly raybaseAuthPending: "_auth_pending";
|
|
105
|
+
readonly raybaseAudit: "_audit";
|
|
106
|
+
readonly raybaseAuditArchives: "_audit_archives";
|
|
107
|
+
readonly raybaseChanges: "_changes";
|
|
108
|
+
readonly raybaseState: "_state";
|
|
109
|
+
readonly raybaseSettings: "_settings";
|
|
110
|
+
readonly raybaseSchemaVersions: "_schema_versions";
|
|
111
|
+
};
|
|
112
|
+
export declare const betterAuthSchema: {
|
|
113
|
+
readonly user: "_auth_users";
|
|
114
|
+
readonly session: "_auth_sessions";
|
|
115
|
+
readonly account: "_auth_accounts";
|
|
116
|
+
readonly verification: "_auth_verifications";
|
|
117
|
+
readonly passkey: "_auth_passkeys";
|
|
118
|
+
};
|
|
119
|
+
export type BetterAuthSchema = typeof betterAuthSchema;
|
|
120
|
+
//# sourceMappingURL=auth-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-schema.d.ts","sourceRoot":"","sources":["../src/auth-schema.ts"],"names":[],"mappings":"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"}
|