@hexclave/shared 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +7 -0
- package/dist/ai/image-limits.d.ts +24 -0
- package/dist/ai/image-limits.d.ts.map +1 -0
- package/dist/ai/image-limits.js +61 -0
- package/dist/ai/image-limits.js.map +1 -0
- package/dist/ai/unified-prompts/reminders.d.ts +5 -0
- package/dist/ai/unified-prompts/reminders.d.ts.map +1 -0
- package/dist/ai/unified-prompts/reminders.js +33 -0
- package/dist/ai/unified-prompts/reminders.js.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts +11 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js +851 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/brain.d.ts +5 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/brain.d.ts.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/brain.js +12 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/brain.js.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/cli-help.d.ts +5 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/cli-help.d.ts.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/cli-help.js +12 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/cli-help.js.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/config-docs.d.ts +5 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/config-docs.d.ts.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/config-docs.js +12 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/config-docs.js.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.d.ts +5 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.d.ts.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js +12 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.d.ts +5 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.d.ts.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js +12 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts +5 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.js +64 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.js.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.d.ts +5 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.d.ts.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js +12 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.d.ts +5 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.d.ts.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js +12 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt.d.ts +5 -0
- package/dist/ai/unified-prompts/skill-site-prompt.d.ts.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt.js +75 -0
- package/dist/ai/unified-prompts/skill-site-prompt.js.map +1 -0
- package/dist/apps/apps-config.d.ts +168 -0
- package/dist/apps/apps-config.d.ts.map +1 -0
- package/dist/apps/apps-config.js +157 -0
- package/dist/apps/apps-config.js.map +1 -0
- package/dist/apps/apps-ui.d.ts +45 -0
- package/dist/apps/apps-ui.d.ts.map +1 -0
- package/dist/apps/apps-ui.js +109 -0
- package/dist/apps/apps-ui.js.map +1 -0
- package/dist/chunk-BE-pF4vm.js +34 -0
- package/dist/config/db-sync-mappings.d.ts +193 -0
- package/dist/config/db-sync-mappings.d.ts.map +1 -0
- package/dist/config/db-sync-mappings.js +2255 -0
- package/dist/config/db-sync-mappings.js.map +1 -0
- package/dist/config/format.d.ts +61 -0
- package/dist/config/format.d.ts.map +1 -0
- package/dist/config/format.js +337 -0
- package/dist/config/format.js.map +1 -0
- package/dist/config/migrate-catalogs-to-product-lines.d.ts +14 -0
- package/dist/config/migrate-catalogs-to-product-lines.d.ts.map +1 -0
- package/dist/config/migrate-catalogs-to-product-lines.js +379 -0
- package/dist/config/migrate-catalogs-to-product-lines.js.map +1 -0
- package/dist/config/schema-fuzzer.test.d.ts +1 -0
- package/dist/config/schema-fuzzer.test.js +401 -0
- package/dist/config/schema-fuzzer.test.js.map +1 -0
- package/dist/config/schema.d.ts +2315 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +1085 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config-authoring.d.ts +12 -0
- package/dist/config-authoring.d.ts.map +1 -0
- package/dist/config-authoring.js +12 -0
- package/dist/config-authoring.js.map +1 -0
- package/dist/config-authoring.test.d.ts +1 -0
- package/dist/config-authoring.test.js +29 -0
- package/dist/config-authoring.test.js.map +1 -0
- package/dist/config-rendering.d.ts +17 -0
- package/dist/config-rendering.d.ts.map +1 -0
- package/dist/config-rendering.js +114 -0
- package/dist/config-rendering.js.map +1 -0
- package/dist/crud.d.ts +98 -0
- package/dist/crud.d.ts.map +1 -0
- package/dist/crud.js +129 -0
- package/dist/crud.js.map +1 -0
- package/dist/esm/ai/image-limits.d.ts +24 -0
- package/dist/esm/ai/image-limits.d.ts.map +1 -0
- package/dist/esm/ai/image-limits.js +53 -0
- package/dist/esm/ai/image-limits.js.map +1 -0
- package/dist/esm/ai/unified-prompts/reminders.d.ts +5 -0
- package/dist/esm/ai/unified-prompts/reminders.d.ts.map +1 -0
- package/dist/esm/ai/unified-prompts/reminders.js +31 -0
- package/dist/esm/ai/unified-prompts/reminders.js.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts +11 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js +843 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/brain.d.ts +5 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/brain.d.ts.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/brain.js +10 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/brain.js.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/cli-help.d.ts +5 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/cli-help.d.ts.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/cli-help.js +10 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/cli-help.js.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/config-docs.d.ts +5 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/config-docs.d.ts.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/config-docs.js +10 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/config-docs.js.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.d.ts +5 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.d.ts.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js +10 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.d.ts +5 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.d.ts.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js +10 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts +5 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.js +61 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.js.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.d.ts +5 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.d.ts.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js +10 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.d.ts +5 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.d.ts.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js +10 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt.d.ts +5 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt.d.ts.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt.js +73 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt.js.map +1 -0
- package/dist/esm/apps/apps-config.d.ts +168 -0
- package/dist/esm/apps/apps-config.d.ts.map +1 -0
- package/dist/esm/apps/apps-config.js +154 -0
- package/dist/esm/apps/apps-config.js.map +1 -0
- package/dist/esm/apps/apps-ui.d.ts +45 -0
- package/dist/esm/apps/apps-ui.d.ts.map +1 -0
- package/dist/esm/apps/apps-ui.js +104 -0
- package/dist/esm/apps/apps-ui.js.map +1 -0
- package/dist/esm/config/db-sync-mappings.d.ts +193 -0
- package/dist/esm/config/db-sync-mappings.d.ts.map +1 -0
- package/dist/esm/config/db-sync-mappings.js +2253 -0
- package/dist/esm/config/db-sync-mappings.js.map +1 -0
- package/dist/esm/config/format.d.ts +61 -0
- package/dist/esm/config/format.d.ts.map +1 -0
- package/dist/esm/config/format.js +327 -0
- package/dist/esm/config/format.js.map +1 -0
- package/dist/esm/config/migrate-catalogs-to-product-lines.d.ts +14 -0
- package/dist/esm/config/migrate-catalogs-to-product-lines.d.ts.map +1 -0
- package/dist/esm/config/migrate-catalogs-to-product-lines.js +377 -0
- package/dist/esm/config/migrate-catalogs-to-product-lines.js.map +1 -0
- package/dist/esm/config/schema-fuzzer.test.d.ts +1 -0
- package/dist/esm/config/schema-fuzzer.test.js +401 -0
- package/dist/esm/config/schema-fuzzer.test.js.map +1 -0
- package/dist/esm/config/schema.d.ts +2315 -0
- package/dist/esm/config/schema.d.ts.map +1 -0
- package/dist/esm/config/schema.js +1065 -0
- package/dist/esm/config/schema.js.map +1 -0
- package/dist/esm/config-authoring.d.ts +12 -0
- package/dist/esm/config-authoring.d.ts.map +1 -0
- package/dist/esm/config-authoring.js +9 -0
- package/dist/esm/config-authoring.js.map +1 -0
- package/dist/esm/config-authoring.test.d.ts +1 -0
- package/dist/esm/config-authoring.test.js +29 -0
- package/dist/esm/config-authoring.test.js.map +1 -0
- package/dist/esm/config-rendering.d.ts +17 -0
- package/dist/esm/config-rendering.d.ts.map +1 -0
- package/dist/esm/config-rendering.js +108 -0
- package/dist/esm/config-rendering.js.map +1 -0
- package/dist/esm/crud.d.ts +98 -0
- package/dist/esm/crud.d.ts.map +1 -0
- package/dist/esm/crud.js +127 -0
- package/dist/esm/crud.js.map +1 -0
- package/dist/esm/global.d.ts +1 -0
- package/dist/esm/helpers/emails.d.ts +69 -0
- package/dist/esm/helpers/emails.d.ts.map +1 -0
- package/dist/esm/helpers/emails.js +243 -0
- package/dist/esm/helpers/emails.js.map +1 -0
- package/dist/esm/helpers/init-prompt.d.ts +5 -0
- package/dist/esm/helpers/init-prompt.d.ts.map +1 -0
- package/dist/esm/helpers/init-prompt.js +40 -0
- package/dist/esm/helpers/init-prompt.js.map +1 -0
- package/dist/esm/helpers/password.d.ts +7 -0
- package/dist/esm/helpers/password.d.ts.map +1 -0
- package/dist/esm/helpers/password.js +13 -0
- package/dist/esm/helpers/password.js.map +1 -0
- package/dist/esm/helpers/production-mode.d.ts +11 -0
- package/dist/esm/helpers/production-mode.d.ts.map +1 -0
- package/dist/esm/helpers/production-mode.js +46 -0
- package/dist/esm/helpers/production-mode.js.map +1 -0
- package/dist/esm/helpers/support-sla.d.ts +48 -0
- package/dist/esm/helpers/support-sla.d.ts.map +1 -0
- package/dist/esm/helpers/support-sla.js +65 -0
- package/dist/esm/helpers/support-sla.js.map +1 -0
- package/dist/esm/helpers/support-sla.test.d.ts +1 -0
- package/dist/esm/helpers/support-sla.test.js +102 -0
- package/dist/esm/helpers/support-sla.test.js.map +1 -0
- package/dist/esm/helpers/vault/client-side.d.ts +16 -0
- package/dist/esm/helpers/vault/client-side.d.ts.map +1 -0
- package/dist/esm/helpers/vault/client-side.js +69 -0
- package/dist/esm/helpers/vault/client-side.js.map +1 -0
- package/dist/esm/helpers/vault/server-side.d.ts +9 -0
- package/dist/esm/helpers/vault/server-side.d.ts.map +1 -0
- package/dist/esm/helpers/vault/server-side.js +123 -0
- package/dist/esm/helpers/vault/server-side.js.map +1 -0
- package/dist/esm/hooks/use-async-callback.d.ts +8 -0
- package/dist/esm/hooks/use-async-callback.d.ts.map +1 -0
- package/dist/esm/hooks/use-async-callback.js +38 -0
- package/dist/esm/hooks/use-async-callback.js.map +1 -0
- package/dist/esm/hooks/use-async-external-store.d.ts +9 -0
- package/dist/esm/hooks/use-async-external-store.d.ts.map +1 -0
- package/dist/esm/hooks/use-async-external-store.js +20 -0
- package/dist/esm/hooks/use-async-external-store.js.map +1 -0
- package/dist/esm/hooks/use-hash.d.ts +5 -0
- package/dist/esm/hooks/use-hash.d.ts.map +1 -0
- package/dist/esm/hooks/use-hash.js +15 -0
- package/dist/esm/hooks/use-hash.js.map +1 -0
- package/dist/esm/hooks/use-hover.d.ts +8 -0
- package/dist/esm/hooks/use-hover.d.ts.map +1 -0
- package/dist/esm/hooks/use-hover.js +59 -0
- package/dist/esm/hooks/use-hover.js.map +1 -0
- package/dist/esm/hooks/use-strict-memo.d.ts +10 -0
- package/dist/esm/hooks/use-strict-memo.d.ts.map +1 -0
- package/dist/esm/hooks/use-strict-memo.js +119 -0
- package/dist/esm/hooks/use-strict-memo.js.map +1 -0
- package/dist/esm/index.d.ts +5 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/interface/admin-interface.d.ts +308 -0
- package/dist/esm/interface/admin-interface.d.ts.map +1 -0
- package/dist/esm/interface/admin-interface.js +463 -0
- package/dist/esm/interface/admin-interface.js.map +1 -0
- package/dist/esm/interface/admin-metrics.d.ts +597 -0
- package/dist/esm/interface/admin-metrics.d.ts.map +1 -0
- package/dist/esm/interface/admin-metrics.js +134 -0
- package/dist/esm/interface/admin-metrics.js.map +1 -0
- package/dist/esm/interface/client-interface.d.ts +447 -0
- package/dist/esm/interface/client-interface.d.ts.map +1 -0
- package/dist/esm/interface/client-interface.js +1946 -0
- package/dist/esm/interface/client-interface.js.map +1 -0
- package/dist/esm/interface/client-interface.test.d.ts +1 -0
- package/dist/esm/interface/client-interface.test.js +559 -0
- package/dist/esm/interface/client-interface.test.js.map +1 -0
- package/dist/esm/interface/conversations.d.ts +314 -0
- package/dist/esm/interface/conversations.d.ts.map +1 -0
- package/dist/esm/interface/conversations.js +108 -0
- package/dist/esm/interface/conversations.js.map +1 -0
- package/dist/esm/interface/crud/analytics.d.ts +14 -0
- package/dist/esm/interface/crud/analytics.d.ts.map +1 -0
- package/dist/esm/interface/crud/analytics.js +1 -0
- package/dist/esm/interface/crud/connected-accounts.d.ts +69 -0
- package/dist/esm/interface/crud/connected-accounts.d.ts.map +1 -0
- package/dist/esm/interface/crud/connected-accounts.js +35 -0
- package/dist/esm/interface/crud/connected-accounts.js.map +1 -0
- package/dist/esm/interface/crud/contact-channels.d.ts +182 -0
- package/dist/esm/interface/crud/contact-channels.d.ts.map +1 -0
- package/dist/esm/interface/crud/contact-channels.js +68 -0
- package/dist/esm/interface/crud/contact-channels.js.map +1 -0
- package/dist/esm/interface/crud/current-user.d.ts +286 -0
- package/dist/esm/interface/crud/current-user.d.ts.map +1 -0
- package/dist/esm/interface/crud/current-user.js +69 -0
- package/dist/esm/interface/crud/current-user.js.map +1 -0
- package/dist/esm/interface/crud/email-outbox.d.ts +1466 -0
- package/dist/esm/interface/crud/email-outbox.d.ts.map +1 -0
- package/dist/esm/interface/crud/email-outbox.js +190 -0
- package/dist/esm/interface/crud/email-outbox.js.map +1 -0
- package/dist/esm/interface/crud/email-templates.d.ts +86 -0
- package/dist/esm/interface/crud/email-templates.d.ts.map +1 -0
- package/dist/esm/interface/crud/email-templates.js +46 -0
- package/dist/esm/interface/crud/email-templates.js.map +1 -0
- package/dist/esm/interface/crud/emails.d.ts +42 -0
- package/dist/esm/interface/crud/emails.d.ts.map +1 -0
- package/dist/esm/interface/crud/emails.js +19 -0
- package/dist/esm/interface/crud/emails.js.map +1 -0
- package/dist/esm/interface/crud/internal-api-keys.d.ts +141 -0
- package/dist/esm/interface/crud/internal-api-keys.d.ts.map +1 -0
- package/dist/esm/interface/crud/internal-api-keys.js +49 -0
- package/dist/esm/interface/crud/internal-api-keys.js.map +1 -0
- package/dist/esm/interface/crud/invoices.d.ts +43 -0
- package/dist/esm/interface/crud/invoices.d.ts.map +1 -0
- package/dist/esm/interface/crud/invoices.js +25 -0
- package/dist/esm/interface/crud/invoices.js.map +1 -0
- package/dist/esm/interface/crud/items.d.ts +31 -0
- package/dist/esm/interface/crud/items.d.ts.map +1 -0
- package/dist/esm/interface/crud/items.js +23 -0
- package/dist/esm/interface/crud/items.js.map +1 -0
- package/dist/esm/interface/crud/notification-preferences.d.ts +39 -0
- package/dist/esm/interface/crud/notification-preferences.d.ts.map +1 -0
- package/dist/esm/interface/crud/notification-preferences.js +31 -0
- package/dist/esm/interface/crud/notification-preferences.js.map +1 -0
- package/dist/esm/interface/crud/oauth-providers.d.ts +187 -0
- package/dist/esm/interface/crud/oauth-providers.d.ts.map +1 -0
- package/dist/esm/interface/crud/oauth-providers.js +75 -0
- package/dist/esm/interface/crud/oauth-providers.js.map +1 -0
- package/dist/esm/interface/crud/products.d.ts +182 -0
- package/dist/esm/interface/crud/products.d.ts.map +1 -0
- package/dist/esm/interface/crud/products.js +29 -0
- package/dist/esm/interface/crud/products.js.map +1 -0
- package/dist/esm/interface/crud/project-api-keys.d.ts +204 -0
- package/dist/esm/interface/crud/project-api-keys.d.ts.map +1 -0
- package/dist/esm/interface/crud/project-api-keys.js +72 -0
- package/dist/esm/interface/crud/project-api-keys.js.map +1 -0
- package/dist/esm/interface/crud/project-permissions.d.ts +162 -0
- package/dist/esm/interface/crud/project-permissions.d.ts.map +1 -0
- package/dist/esm/interface/crud/project-permissions.js +104 -0
- package/dist/esm/interface/crud/project-permissions.js.map +1 -0
- package/dist/esm/interface/crud/projects.d.ts +852 -0
- package/dist/esm/interface/crud/projects.d.ts.map +1 -0
- package/dist/esm/interface/crud/projects.js +193 -0
- package/dist/esm/interface/crud/projects.js.map +1 -0
- package/dist/esm/interface/crud/session-replays.d.ts +83 -0
- package/dist/esm/interface/crud/session-replays.d.ts.map +1 -0
- package/dist/esm/interface/crud/session-replays.js +1 -0
- package/dist/esm/interface/crud/sessions.d.ts +151 -0
- package/dist/esm/interface/crud/sessions.d.ts.map +1 -0
- package/dist/esm/interface/crud/sessions.js +56 -0
- package/dist/esm/interface/crud/sessions.js.map +1 -0
- package/dist/esm/interface/crud/sign-up-rules.d.ts +15 -0
- package/dist/esm/interface/crud/sign-up-rules.d.ts.map +1 -0
- package/dist/esm/interface/crud/sign-up-rules.js +1 -0
- package/dist/esm/interface/crud/svix-token.d.ts +32 -0
- package/dist/esm/interface/crud/svix-token.d.ts.map +1 -0
- package/dist/esm/interface/crud/svix-token.js +18 -0
- package/dist/esm/interface/crud/svix-token.js.map +1 -0
- package/dist/esm/interface/crud/team-invitation-details.d.ts +32 -0
- package/dist/esm/interface/crud/team-invitation-details.d.ts.map +1 -0
- package/dist/esm/interface/crud/team-invitation-details.js +21 -0
- package/dist/esm/interface/crud/team-invitation-details.js.map +1 -0
- package/dist/esm/interface/crud/team-invitation.d.ts +55 -0
- package/dist/esm/interface/crud/team-invitation.d.ts.map +1 -0
- package/dist/esm/interface/crud/team-invitation.js +37 -0
- package/dist/esm/interface/crud/team-invitation.js.map +1 -0
- package/dist/esm/interface/crud/team-member-profiles.d.ts +287 -0
- package/dist/esm/interface/crud/team-member-profiles.d.ts.map +1 -0
- package/dist/esm/interface/crud/team-member-profiles.js +58 -0
- package/dist/esm/interface/crud/team-member-profiles.js.map +1 -0
- package/dist/esm/interface/crud/team-memberships.d.ts +76 -0
- package/dist/esm/interface/crud/team-memberships.d.ts.map +1 -0
- package/dist/esm/interface/crud/team-memberships.js +54 -0
- package/dist/esm/interface/crud/team-memberships.js.map +1 -0
- package/dist/esm/interface/crud/team-permissions.d.ts +170 -0
- package/dist/esm/interface/crud/team-permissions.d.ts.map +1 -0
- package/dist/esm/interface/crud/team-permissions.js +105 -0
- package/dist/esm/interface/crud/team-permissions.js.map +1 -0
- package/dist/esm/interface/crud/teams.d.ts +300 -0
- package/dist/esm/interface/crud/teams.d.ts.map +1 -0
- package/dist/esm/interface/crud/teams.js +129 -0
- package/dist/esm/interface/crud/teams.js.map +1 -0
- package/dist/esm/interface/crud/transactions.d.ts +183 -0
- package/dist/esm/interface/crud/transactions.d.ts.map +1 -0
- package/dist/esm/interface/crud/transactions.js +85 -0
- package/dist/esm/interface/crud/transactions.js.map +1 -0
- package/dist/esm/interface/crud/users.d.ts +654 -0
- package/dist/esm/interface/crud/users.d.ts.map +1 -0
- package/dist/esm/interface/crud/users.js +181 -0
- package/dist/esm/interface/crud/users.js.map +1 -0
- package/dist/esm/interface/handler-urls.d.ts +51 -0
- package/dist/esm/interface/handler-urls.d.ts.map +1 -0
- package/dist/esm/interface/handler-urls.js +3 -0
- package/dist/esm/interface/page-component-versions.d.ts +25 -0
- package/dist/esm/interface/page-component-versions.d.ts.map +1 -0
- package/dist/esm/interface/page-component-versions.js +1661 -0
- package/dist/esm/interface/page-component-versions.js.map +1 -0
- package/dist/esm/interface/server-interface.d.ts +255 -0
- package/dist/esm/interface/server-interface.d.ts.map +1 -0
- package/dist/esm/interface/server-interface.js +459 -0
- package/dist/esm/interface/server-interface.js.map +1 -0
- package/dist/esm/interface/webhooks.d.ts +326 -0
- package/dist/esm/interface/webhooks.d.ts.map +1 -0
- package/dist/esm/interface/webhooks.js +22 -0
- package/dist/esm/interface/webhooks.js.map +1 -0
- package/dist/esm/known-errors.d.ts +575 -0
- package/dist/esm/known-errors.d.ts.map +1 -0
- package/dist/esm/known-errors.js +791 -0
- package/dist/esm/known-errors.js.map +1 -0
- package/dist/esm/local-emulator.d.ts +6 -0
- package/dist/esm/local-emulator.d.ts.map +1 -0
- package/dist/esm/local-emulator.js +7 -0
- package/dist/esm/local-emulator.js.map +1 -0
- package/dist/esm/payments/payment-methods.d.ts +64 -0
- package/dist/esm/payments/payment-methods.d.ts.map +1 -0
- package/dist/esm/payments/payment-methods.js +205 -0
- package/dist/esm/payments/payment-methods.js.map +1 -0
- package/dist/esm/payments/stripe-limits.d.ts +17 -0
- package/dist/esm/payments/stripe-limits.d.ts.map +1 -0
- package/dist/esm/payments/stripe-limits.js +17 -0
- package/dist/esm/payments/stripe-limits.js.map +1 -0
- package/dist/esm/plans.d.ts +72 -0
- package/dist/esm/plans.d.ts.map +1 -0
- package/dist/esm/plans.js +81 -0
- package/dist/esm/plans.js.map +1 -0
- package/dist/esm/schema-fields.d.ts +472 -0
- package/dist/esm/schema-fields.d.ts.map +1 -0
- package/dist/esm/schema-fields.js +1009 -0
- package/dist/esm/schema-fields.js.map +1 -0
- package/dist/esm/sessions.d.ts +165 -0
- package/dist/esm/sessions.d.ts.map +1 -0
- package/dist/esm/sessions.js +226 -0
- package/dist/esm/sessions.js.map +1 -0
- package/dist/esm/stack-config-file.d.ts +15 -0
- package/dist/esm/stack-config-file.d.ts.map +1 -0
- package/dist/esm/stack-config-file.js +76 -0
- package/dist/esm/stack-config-file.js.map +1 -0
- package/dist/esm/utils/api-keys.d.ts +26 -0
- package/dist/esm/utils/api-keys.d.ts.map +1 -0
- package/dist/esm/utils/api-keys.js +77 -0
- package/dist/esm/utils/api-keys.js.map +1 -0
- package/dist/esm/utils/arrays.d.ts +25 -0
- package/dist/esm/utils/arrays.d.ts.map +1 -0
- package/dist/esm/utils/arrays.js +552 -0
- package/dist/esm/utils/arrays.js.map +1 -0
- package/dist/esm/utils/auth-methods.d.ts +6 -0
- package/dist/esm/utils/auth-methods.d.ts.map +1 -0
- package/dist/esm/utils/auth-methods.js +11 -0
- package/dist/esm/utils/auth-methods.js.map +1 -0
- package/dist/esm/utils/base64.d.ts +6 -0
- package/dist/esm/utils/base64.d.ts.map +1 -0
- package/dist/esm/utils/base64.js +25 -0
- package/dist/esm/utils/base64.js.map +1 -0
- package/dist/esm/utils/booleans.d.ts +8 -0
- package/dist/esm/utils/booleans.d.ts.map +1 -0
- package/dist/esm/utils/booleans.js +35 -0
- package/dist/esm/utils/booleans.js.map +1 -0
- package/dist/esm/utils/browser-compat.d.ts +10 -0
- package/dist/esm/utils/browser-compat.d.ts.map +1 -0
- package/dist/esm/utils/browser-compat.js +21 -0
- package/dist/esm/utils/browser-compat.js.map +1 -0
- package/dist/esm/utils/bytes.d.ts +17 -0
- package/dist/esm/utils/bytes.d.ts.map +1 -0
- package/dist/esm/utils/bytes.js +290 -0
- package/dist/esm/utils/bytes.js.map +1 -0
- package/dist/esm/utils/caches.d.ts +102 -0
- package/dist/esm/utils/caches.d.ts.map +1 -0
- package/dist/esm/utils/caches.js +185 -0
- package/dist/esm/utils/caches.js.map +1 -0
- package/dist/esm/utils/cel-fields.d.ts +23 -0
- package/dist/esm/utils/cel-fields.d.ts.map +1 -0
- package/dist/esm/utils/cel-fields.js +99 -0
- package/dist/esm/utils/cel-fields.js.map +1 -0
- package/dist/esm/utils/compile-time.d.ts +10 -0
- package/dist/esm/utils/compile-time.d.ts.map +1 -0
- package/dist/esm/utils/compile-time.js +14 -0
- package/dist/esm/utils/compile-time.js.map +1 -0
- package/dist/esm/utils/country-codes.d.ts +11 -0
- package/dist/esm/utils/country-codes.d.ts.map +1 -0
- package/dist/esm/utils/country-codes.js +36 -0
- package/dist/esm/utils/country-codes.js.map +1 -0
- package/dist/esm/utils/crypto.d.ts +48 -0
- package/dist/esm/utils/crypto.d.ts.map +1 -0
- package/dist/esm/utils/crypto.js +208 -0
- package/dist/esm/utils/crypto.js.map +1 -0
- package/dist/esm/utils/currencies.d.ts +8 -0
- package/dist/esm/utils/currencies.d.ts.map +1 -0
- package/dist/esm/utils/currencies.js +50 -0
- package/dist/esm/utils/currencies.js.map +1 -0
- package/dist/esm/utils/currency-constants.d.ts +39 -0
- package/dist/esm/utils/currency-constants.d.ts.map +1 -0
- package/dist/esm/utils/currency-constants.js +42 -0
- package/dist/esm/utils/currency-constants.js.map +1 -0
- package/dist/esm/utils/dates.d.ts +23 -0
- package/dist/esm/utils/dates.d.ts.map +1 -0
- package/dist/esm/utils/dates.js +167 -0
- package/dist/esm/utils/dates.js.map +1 -0
- package/dist/esm/utils/dev-env-state-path.d.ts +6 -0
- package/dist/esm/utils/dev-env-state-path.d.ts.map +1 -0
- package/dist/esm/utils/dev-env-state-path.js +15 -0
- package/dist/esm/utils/dev-env-state-path.js.map +1 -0
- package/dist/esm/utils/dom.d.ts +5 -0
- package/dist/esm/utils/dom.d.ts.map +1 -0
- package/dist/esm/utils/dom.js +11 -0
- package/dist/esm/utils/dom.js.map +1 -0
- package/dist/esm/utils/env.d.ts +25 -0
- package/dist/esm/utils/env.d.ts.map +1 -0
- package/dist/esm/utils/env.js +78 -0
- package/dist/esm/utils/env.js.map +1 -0
- package/dist/esm/utils/errors.d.ts +231 -0
- package/dist/esm/utils/errors.d.ts.map +1 -0
- package/dist/esm/utils/errors.js +385 -0
- package/dist/esm/utils/errors.js.map +1 -0
- package/dist/esm/utils/esbuild.d.ts +16 -0
- package/dist/esm/utils/esbuild.d.ts.map +1 -0
- package/dist/esm/utils/esbuild.js +182 -0
- package/dist/esm/utils/esbuild.js.map +1 -0
- package/dist/esm/utils/featurebase.d.ts +30 -0
- package/dist/esm/utils/featurebase.d.ts.map +1 -0
- package/dist/esm/utils/featurebase.js +166 -0
- package/dist/esm/utils/featurebase.js.map +1 -0
- package/dist/esm/utils/fs.d.ts +9 -0
- package/dist/esm/utils/fs.d.ts.map +1 -0
- package/dist/esm/utils/fs.js +25 -0
- package/dist/esm/utils/fs.js.map +1 -0
- package/dist/esm/utils/functions.d.ts +6 -0
- package/dist/esm/utils/functions.d.ts.map +1 -0
- package/dist/esm/utils/functions.js +34 -0
- package/dist/esm/utils/functions.js.map +1 -0
- package/dist/esm/utils/geo.d.ts +24 -0
- package/dist/esm/utils/geo.d.ts.map +1 -0
- package/dist/esm/utils/geo.js +16 -0
- package/dist/esm/utils/geo.js.map +1 -0
- package/dist/esm/utils/globals.d.ts +13 -0
- package/dist/esm/utils/globals.d.ts.map +1 -0
- package/dist/esm/utils/globals.js +34 -0
- package/dist/esm/utils/globals.js.map +1 -0
- package/dist/esm/utils/hashes.d.ts +9 -0
- package/dist/esm/utils/hashes.d.ts.map +1 -0
- package/dist/esm/utils/hashes.js +40 -0
- package/dist/esm/utils/hashes.js.map +1 -0
- package/dist/esm/utils/html.d.ts +7 -0
- package/dist/esm/utils/html.d.ts.map +1 -0
- package/dist/esm/utils/html.js +33 -0
- package/dist/esm/utils/html.js.map +1 -0
- package/dist/esm/utils/http.d.ts +45 -0
- package/dist/esm/utils/http.d.ts.map +1 -0
- package/dist/esm/utils/http.js +75 -0
- package/dist/esm/utils/http.js.map +1 -0
- package/dist/esm/utils/ips.d.ts +8 -0
- package/dist/esm/utils/ips.d.ts.map +1 -0
- package/dist/esm/utils/ips.js +36 -0
- package/dist/esm/utils/ips.js.map +1 -0
- package/dist/esm/utils/json.d.ts +15 -0
- package/dist/esm/utils/json.d.ts.map +1 -0
- package/dist/esm/utils/json.js +178 -0
- package/dist/esm/utils/json.js.map +1 -0
- package/dist/esm/utils/jsx-editable-transpiler.d.ts +68 -0
- package/dist/esm/utils/jsx-editable-transpiler.d.ts.map +1 -0
- package/dist/esm/utils/jsx-editable-transpiler.js +216 -0
- package/dist/esm/utils/jsx-editable-transpiler.js.map +1 -0
- package/dist/esm/utils/jsx-editable-transpiler.test.d.ts +1 -0
- package/dist/esm/utils/jsx-editable-transpiler.test.js +122 -0
- package/dist/esm/utils/jsx-editable-transpiler.test.js.map +1 -0
- package/dist/esm/utils/jwt.d.ts +79 -0
- package/dist/esm/utils/jwt.d.ts.map +1 -0
- package/dist/esm/utils/jwt.js +102 -0
- package/dist/esm/utils/jwt.js.map +1 -0
- package/dist/esm/utils/locks.d.ts +17 -0
- package/dist/esm/utils/locks.d.ts.map +1 -0
- package/dist/esm/utils/locks.js +54 -0
- package/dist/esm/utils/locks.js.map +1 -0
- package/dist/esm/utils/maps.d.ts +61 -0
- package/dist/esm/utils/maps.d.ts.map +1 -0
- package/dist/esm/utils/maps.js +297 -0
- package/dist/esm/utils/maps.js.map +1 -0
- package/dist/esm/utils/math.d.ts +8 -0
- package/dist/esm/utils/math.d.ts.map +1 -0
- package/dist/esm/utils/math.js +21 -0
- package/dist/esm/utils/math.js.map +1 -0
- package/dist/esm/utils/monkey-patch.d.ts +7 -0
- package/dist/esm/utils/monkey-patch.d.ts.map +1 -0
- package/dist/esm/utils/monkey-patch.js +21 -0
- package/dist/esm/utils/monkey-patch.js.map +1 -0
- package/dist/esm/utils/node-http.d.ts +17 -0
- package/dist/esm/utils/node-http.d.ts.map +1 -0
- package/dist/esm/utils/node-http.js +38 -0
- package/dist/esm/utils/node-http.js.map +1 -0
- package/dist/esm/utils/numbers.d.ts +7 -0
- package/dist/esm/utils/numbers.d.ts.map +1 -0
- package/dist/esm/utils/numbers.js +75 -0
- package/dist/esm/utils/numbers.js.map +1 -0
- package/dist/esm/utils/oauth.d.ts +11 -0
- package/dist/esm/utils/oauth.d.ts.map +1 -0
- package/dist/esm/utils/oauth.js +27 -0
- package/dist/esm/utils/oauth.js.map +1 -0
- package/dist/esm/utils/objects.d.ts +59 -0
- package/dist/esm/utils/objects.d.ts.map +1 -0
- package/dist/esm/utils/objects.js +818 -0
- package/dist/esm/utils/objects.js.map +1 -0
- package/dist/esm/utils/paginated-lists.d.ts +442 -0
- package/dist/esm/utils/paginated-lists.d.ts.map +1 -0
- package/dist/esm/utils/paginated-lists.js +411 -0
- package/dist/esm/utils/paginated-lists.js.map +1 -0
- package/dist/esm/utils/paginated-lists.test.d.ts +1 -0
- package/dist/esm/utils/paginated-lists.test.js +1304 -0
- package/dist/esm/utils/paginated-lists.test.js.map +1 -0
- package/dist/esm/utils/passkey.d.ts +2 -0
- package/dist/esm/utils/passkey.js +1 -0
- package/dist/esm/utils/promises.d.ts +80 -0
- package/dist/esm/utils/promises.d.ts.map +1 -0
- package/dist/esm/utils/promises.js +333 -0
- package/dist/esm/utils/promises.js.map +1 -0
- package/dist/esm/utils/proxies.d.ts +13 -0
- package/dist/esm/utils/proxies.d.ts.map +1 -0
- package/dist/esm/utils/proxies.js +197 -0
- package/dist/esm/utils/proxies.js.map +1 -0
- package/dist/esm/utils/react.d.ts +61 -0
- package/dist/esm/utils/react.d.ts.map +1 -0
- package/dist/esm/utils/react.js +229 -0
- package/dist/esm/utils/react.js.map +1 -0
- package/dist/esm/utils/redirect-urls.d.ts +30 -0
- package/dist/esm/utils/redirect-urls.d.ts.map +1 -0
- package/dist/esm/utils/redirect-urls.js +215 -0
- package/dist/esm/utils/redirect-urls.js.map +1 -0
- package/dist/esm/utils/regex.d.ts +5 -0
- package/dist/esm/utils/regex.d.ts.map +1 -0
- package/dist/esm/utils/regex.js +13 -0
- package/dist/esm/utils/regex.js.map +1 -0
- package/dist/esm/utils/results.d.ts +70 -0
- package/dist/esm/utils/results.d.ts.map +1 -0
- package/dist/esm/utils/results.js +339 -0
- package/dist/esm/utils/results.js.map +1 -0
- package/dist/esm/utils/sentry.d.ts +13 -0
- package/dist/esm/utils/sentry.d.ts.map +1 -0
- package/dist/esm/utils/sentry.js +14 -0
- package/dist/esm/utils/sentry.js.map +1 -0
- package/dist/esm/utils/stores.d.ts +104 -0
- package/dist/esm/utils/stores.d.ts.map +1 -0
- package/dist/esm/utils/stores.js +175 -0
- package/dist/esm/utils/stores.js.map +1 -0
- package/dist/esm/utils/strings.d.ts +76 -0
- package/dist/esm/utils/strings.d.ts.map +1 -0
- package/dist/esm/utils/strings.js +530 -0
- package/dist/esm/utils/strings.js.map +1 -0
- package/dist/esm/utils/strings.nicify.test.d.ts +1 -0
- package/dist/esm/utils/strings.nicify.test.js +243 -0
- package/dist/esm/utils/strings.nicify.test.js.map +1 -0
- package/dist/esm/utils/telemetry.d.ts +15 -0
- package/dist/esm/utils/telemetry.d.ts.map +1 -0
- package/dist/esm/utils/telemetry.js +31 -0
- package/dist/esm/utils/telemetry.js.map +1 -0
- package/dist/esm/utils/turnstile-browser.d.ts +32 -0
- package/dist/esm/utils/turnstile-browser.d.ts.map +1 -0
- package/dist/esm/utils/turnstile-browser.js +61 -0
- package/dist/esm/utils/turnstile-browser.js.map +1 -0
- package/dist/esm/utils/turnstile-flow.d.ts +29 -0
- package/dist/esm/utils/turnstile-flow.d.ts.map +1 -0
- package/dist/esm/utils/turnstile-flow.js +219 -0
- package/dist/esm/utils/turnstile-flow.js.map +1 -0
- package/dist/esm/utils/turnstile-flow.test.d.ts +1 -0
- package/dist/esm/utils/turnstile-flow.test.js +75 -0
- package/dist/esm/utils/turnstile-flow.test.js.map +1 -0
- package/dist/esm/utils/turnstile.d.ts +17 -0
- package/dist/esm/utils/turnstile.d.ts.map +1 -0
- package/dist/esm/utils/turnstile.js +25 -0
- package/dist/esm/utils/turnstile.js.map +1 -0
- package/dist/esm/utils/typed-arrays.d.ts +14 -0
- package/dist/esm/utils/typed-arrays.d.ts.map +1 -0
- package/dist/esm/utils/typed-arrays.js +20 -0
- package/dist/esm/utils/typed-arrays.js.map +1 -0
- package/dist/esm/utils/types.d.ts +77 -0
- package/dist/esm/utils/types.d.ts.map +1 -0
- package/dist/esm/utils/types.js +55 -0
- package/dist/esm/utils/types.js.map +1 -0
- package/dist/esm/utils/unicode.d.ts +5 -0
- package/dist/esm/utils/unicode.d.ts.map +1 -0
- package/dist/esm/utils/unicode.js +24 -0
- package/dist/esm/utils/unicode.js.map +1 -0
- package/dist/esm/utils/urls.d.ts +28 -0
- package/dist/esm/utils/urls.d.ts.map +1 -0
- package/dist/esm/utils/urls.js +259 -0
- package/dist/esm/utils/urls.js.map +1 -0
- package/dist/esm/utils/uuids.d.ts +6 -0
- package/dist/esm/utils/uuids.d.ts.map +1 -0
- package/dist/esm/utils/uuids.js +36 -0
- package/dist/esm/utils/uuids.js.map +1 -0
- package/dist/global.d.d.ts +0 -0
- package/dist/global.d.ts +1 -0
- package/dist/helpers/emails.d.ts +69 -0
- package/dist/helpers/emails.d.ts.map +1 -0
- package/dist/helpers/emails.js +252 -0
- package/dist/helpers/emails.js.map +1 -0
- package/dist/helpers/init-prompt.d.ts +5 -0
- package/dist/helpers/init-prompt.d.ts.map +1 -0
- package/dist/helpers/init-prompt.js +42 -0
- package/dist/helpers/init-prompt.js.map +1 -0
- package/dist/helpers/password.d.ts +6 -0
- package/dist/helpers/password.d.ts.map +1 -0
- package/dist/helpers/password.js +15 -0
- package/dist/helpers/password.js.map +1 -0
- package/dist/helpers/production-mode.d.ts +11 -0
- package/dist/helpers/production-mode.d.ts.map +1 -0
- package/dist/helpers/production-mode.js +48 -0
- package/dist/helpers/production-mode.js.map +1 -0
- package/dist/helpers/support-sla.d.ts +48 -0
- package/dist/helpers/support-sla.d.ts.map +1 -0
- package/dist/helpers/support-sla.js +72 -0
- package/dist/helpers/support-sla.js.map +1 -0
- package/dist/helpers/support-sla.test.d.ts +1 -0
- package/dist/helpers/support-sla.test.js +102 -0
- package/dist/helpers/support-sla.test.js.map +1 -0
- package/dist/helpers/vault/client-side.d.ts +16 -0
- package/dist/helpers/vault/client-side.d.ts.map +1 -0
- package/dist/helpers/vault/client-side.js +73 -0
- package/dist/helpers/vault/client-side.js.map +1 -0
- package/dist/helpers/vault/server-side.d.ts +9 -0
- package/dist/helpers/vault/server-side.d.ts.map +1 -0
- package/dist/helpers/vault/server-side.js +126 -0
- package/dist/helpers/vault/server-side.js.map +1 -0
- package/dist/hooks/use-async-callback.d.ts +8 -0
- package/dist/hooks/use-async-callback.d.ts.map +1 -0
- package/dist/hooks/use-async-callback.js +42 -0
- package/dist/hooks/use-async-callback.js.map +1 -0
- package/dist/hooks/use-async-external-store.d.ts +9 -0
- package/dist/hooks/use-async-external-store.d.ts.map +1 -0
- package/dist/hooks/use-async-external-store.js +22 -0
- package/dist/hooks/use-async-external-store.js.map +1 -0
- package/dist/hooks/use-hash.d.ts +5 -0
- package/dist/hooks/use-hash.d.ts.map +1 -0
- package/dist/hooks/use-hash.js +17 -0
- package/dist/hooks/use-hash.js.map +1 -0
- package/dist/hooks/use-hover.d.ts +8 -0
- package/dist/hooks/use-hover.d.ts.map +1 -0
- package/dist/hooks/use-hover.js +61 -0
- package/dist/hooks/use-hover.js.map +1 -0
- package/dist/hooks/use-strict-memo.d.ts +10 -0
- package/dist/hooks/use-strict-memo.d.ts.map +1 -0
- package/dist/hooks/use-strict-memo.js +121 -0
- package/dist/hooks/use-strict-memo.js.map +1 -0
- package/dist/index-D9ysacya.d.ts +153 -0
- package/dist/index-D9ysacya.d.ts.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +37 -0
- package/dist/interface/admin-interface.d.ts +308 -0
- package/dist/interface/admin-interface.d.ts.map +1 -0
- package/dist/interface/admin-interface.js +465 -0
- package/dist/interface/admin-interface.js.map +1 -0
- package/dist/interface/admin-metrics.d.ts +597 -0
- package/dist/interface/admin-metrics.d.ts.map +1 -0
- package/dist/interface/admin-metrics.js +153 -0
- package/dist/interface/admin-metrics.js.map +1 -0
- package/dist/interface/client-interface.d.ts +447 -0
- package/dist/interface/client-interface.d.ts.map +1 -0
- package/dist/interface/client-interface.js +1948 -0
- package/dist/interface/client-interface.js.map +1 -0
- package/dist/interface/client-interface.test.d.ts +1 -0
- package/dist/interface/client-interface.test.js +559 -0
- package/dist/interface/client-interface.test.js.map +1 -0
- package/dist/interface/conversations.d.ts +314 -0
- package/dist/interface/conversations.d.ts.map +1 -0
- package/dist/interface/conversations.js +121 -0
- package/dist/interface/conversations.js.map +1 -0
- package/dist/interface/crud/analytics.d.ts +14 -0
- package/dist/interface/crud/analytics.d.ts.map +1 -0
- package/dist/interface/crud/analytics.js +0 -0
- package/dist/interface/crud/connected-accounts.d.ts +68 -0
- package/dist/interface/crud/connected-accounts.d.ts.map +1 -0
- package/dist/interface/crud/connected-accounts.js +41 -0
- package/dist/interface/crud/connected-accounts.js.map +1 -0
- package/dist/interface/crud/contact-channels.d.ts +181 -0
- package/dist/interface/crud/contact-channels.d.ts.map +1 -0
- package/dist/interface/crud/contact-channels.js +76 -0
- package/dist/interface/crud/contact-channels.js.map +1 -0
- package/dist/interface/crud/current-user.d.ts +285 -0
- package/dist/interface/crud/current-user.d.ts.map +1 -0
- package/dist/interface/crud/current-user.js +71 -0
- package/dist/interface/crud/current-user.js.map +1 -0
- package/dist/interface/crud/email-outbox.d.ts +1465 -0
- package/dist/interface/crud/email-outbox.d.ts.map +1 -0
- package/dist/interface/crud/email-outbox.js +195 -0
- package/dist/interface/crud/email-outbox.js.map +1 -0
- package/dist/interface/crud/email-templates.d.ts +85 -0
- package/dist/interface/crud/email-templates.d.ts.map +1 -0
- package/dist/interface/crud/email-templates.js +53 -0
- package/dist/interface/crud/email-templates.js.map +1 -0
- package/dist/interface/crud/emails.d.ts +41 -0
- package/dist/interface/crud/emails.d.ts.map +1 -0
- package/dist/interface/crud/emails.js +23 -0
- package/dist/interface/crud/emails.js.map +1 -0
- package/dist/interface/crud/internal-api-keys.d.ts +140 -0
- package/dist/interface/crud/internal-api-keys.d.ts.map +1 -0
- package/dist/interface/crud/internal-api-keys.js +56 -0
- package/dist/interface/crud/internal-api-keys.js.map +1 -0
- package/dist/interface/crud/invoices.d.ts +43 -0
- package/dist/interface/crud/invoices.d.ts.map +1 -0
- package/dist/interface/crud/invoices.js +28 -0
- package/dist/interface/crud/invoices.js.map +1 -0
- package/dist/interface/crud/items.d.ts +30 -0
- package/dist/interface/crud/items.d.ts.map +1 -0
- package/dist/interface/crud/items.js +25 -0
- package/dist/interface/crud/items.js.map +1 -0
- package/dist/interface/crud/notification-preferences.d.ts +38 -0
- package/dist/interface/crud/notification-preferences.d.ts.map +1 -0
- package/dist/interface/crud/notification-preferences.js +33 -0
- package/dist/interface/crud/notification-preferences.js.map +1 -0
- package/dist/interface/crud/oauth-providers.d.ts +186 -0
- package/dist/interface/crud/oauth-providers.d.ts.map +1 -0
- package/dist/interface/crud/oauth-providers.js +83 -0
- package/dist/interface/crud/oauth-providers.js.map +1 -0
- package/dist/interface/crud/products.d.ts +182 -0
- package/dist/interface/crud/products.d.ts.map +1 -0
- package/dist/interface/crud/products.js +32 -0
- package/dist/interface/crud/products.js.map +1 -0
- package/dist/interface/crud/project-api-keys.d.ts +203 -0
- package/dist/interface/crud/project-api-keys.d.ts.map +1 -0
- package/dist/interface/crud/project-api-keys.js +79 -0
- package/dist/interface/crud/project-api-keys.js.map +1 -0
- package/dist/interface/crud/project-permissions.d.ts +161 -0
- package/dist/interface/crud/project-permissions.d.ts.map +1 -0
- package/dist/interface/crud/project-permissions.js +116 -0
- package/dist/interface/crud/project-permissions.js.map +1 -0
- package/dist/interface/crud/projects.d.ts +851 -0
- package/dist/interface/crud/projects.d.ts.map +1 -0
- package/dist/interface/crud/projects.js +204 -0
- package/dist/interface/crud/projects.js.map +1 -0
- package/dist/interface/crud/session-replays.d.ts +83 -0
- package/dist/interface/crud/session-replays.d.ts.map +1 -0
- package/dist/interface/crud/session-replays.js +0 -0
- package/dist/interface/crud/sessions.d.ts +150 -0
- package/dist/interface/crud/sessions.d.ts.map +1 -0
- package/dist/interface/crud/sessions.js +62 -0
- package/dist/interface/crud/sessions.js.map +1 -0
- package/dist/interface/crud/sign-up-rules.d.ts +15 -0
- package/dist/interface/crud/sign-up-rules.d.ts.map +1 -0
- package/dist/interface/crud/sign-up-rules.js +0 -0
- package/dist/interface/crud/svix-token.d.ts +31 -0
- package/dist/interface/crud/svix-token.d.ts.map +1 -0
- package/dist/interface/crud/svix-token.js +22 -0
- package/dist/interface/crud/svix-token.js.map +1 -0
- package/dist/interface/crud/team-invitation-details.d.ts +31 -0
- package/dist/interface/crud/team-invitation-details.d.ts.map +1 -0
- package/dist/interface/crud/team-invitation-details.js +24 -0
- package/dist/interface/crud/team-invitation-details.js.map +1 -0
- package/dist/interface/crud/team-invitation.d.ts +54 -0
- package/dist/interface/crud/team-invitation.d.ts.map +1 -0
- package/dist/interface/crud/team-invitation.js +40 -0
- package/dist/interface/crud/team-invitation.js.map +1 -0
- package/dist/interface/crud/team-member-profiles.d.ts +286 -0
- package/dist/interface/crud/team-member-profiles.d.ts.map +1 -0
- package/dist/interface/crud/team-member-profiles.js +63 -0
- package/dist/interface/crud/team-member-profiles.js.map +1 -0
- package/dist/interface/crud/team-memberships.d.ts +75 -0
- package/dist/interface/crud/team-memberships.d.ts.map +1 -0
- package/dist/interface/crud/team-memberships.js +61 -0
- package/dist/interface/crud/team-memberships.js.map +1 -0
- package/dist/interface/crud/team-permissions.d.ts +169 -0
- package/dist/interface/crud/team-permissions.d.ts.map +1 -0
- package/dist/interface/crud/team-permissions.js +117 -0
- package/dist/interface/crud/team-permissions.js.map +1 -0
- package/dist/interface/crud/teams.d.ts +299 -0
- package/dist/interface/crud/teams.d.ts.map +1 -0
- package/dist/interface/crud/teams.js +142 -0
- package/dist/interface/crud/teams.js.map +1 -0
- package/dist/interface/crud/transactions.d.ts +183 -0
- package/dist/interface/crud/transactions.d.ts.map +1 -0
- package/dist/interface/crud/transactions.js +89 -0
- package/dist/interface/crud/transactions.js.map +1 -0
- package/dist/interface/crud/users.d.ts +653 -0
- package/dist/interface/crud/users.d.ts.map +1 -0
- package/dist/interface/crud/users.js +193 -0
- package/dist/interface/crud/users.js.map +1 -0
- package/dist/interface/handler-urls.d.ts +51 -0
- package/dist/interface/handler-urls.d.ts.map +1 -0
- package/dist/interface/handler-urls.js +16 -0
- package/dist/interface/page-component-versions.d.ts +25 -0
- package/dist/interface/page-component-versions.d.ts.map +1 -0
- package/dist/interface/page-component-versions.js +1664 -0
- package/dist/interface/page-component-versions.js.map +1 -0
- package/dist/interface/server-interface.d.ts +255 -0
- package/dist/interface/server-interface.d.ts.map +1 -0
- package/dist/interface/server-interface.js +461 -0
- package/dist/interface/server-interface.js.map +1 -0
- package/dist/interface/webhooks.d.ts +326 -0
- package/dist/interface/webhooks.d.ts.map +1 -0
- package/dist/interface/webhooks.js +24 -0
- package/dist/interface/webhooks.js.map +1 -0
- package/dist/known-errors.d.ts +575 -0
- package/dist/known-errors.d.ts.map +1 -0
- package/dist/known-errors.js +794 -0
- package/dist/known-errors.js.map +1 -0
- package/dist/local-emulator.d.ts +6 -0
- package/dist/local-emulator.d.ts.map +1 -0
- package/dist/local-emulator.js +10 -0
- package/dist/local-emulator.js.map +1 -0
- package/dist/payments/payment-methods.d.ts +64 -0
- package/dist/payments/payment-methods.d.ts.map +1 -0
- package/dist/payments/payment-methods.js +216 -0
- package/dist/payments/payment-methods.js.map +1 -0
- package/dist/payments/stripe-limits.d.ts +17 -0
- package/dist/payments/stripe-limits.d.ts.map +1 -0
- package/dist/payments/stripe-limits.js +20 -0
- package/dist/payments/stripe-limits.js.map +1 -0
- package/dist/plans.d.ts +72 -0
- package/dist/plans.d.ts.map +1 -0
- package/dist/plans.js +88 -0
- package/dist/plans.js.map +1 -0
- package/dist/schema-fields.d.ts +472 -0
- package/dist/schema-fields.d.ts.map +1 -0
- package/dist/schema-fields.js +1188 -0
- package/dist/schema-fields.js.map +1 -0
- package/dist/sessions.d.ts +165 -0
- package/dist/sessions.d.ts.map +1 -0
- package/dist/sessions.js +231 -0
- package/dist/sessions.js.map +1 -0
- package/dist/stack-config-file.d.ts +15 -0
- package/dist/stack-config-file.d.ts.map +1 -0
- package/dist/stack-config-file.js +82 -0
- package/dist/stack-config-file.js.map +1 -0
- package/dist/utils/api-keys.d.ts +26 -0
- package/dist/utils/api-keys.d.ts.map +1 -0
- package/dist/utils/api-keys.js +82 -0
- package/dist/utils/api-keys.js.map +1 -0
- package/dist/utils/arrays.d.ts +25 -0
- package/dist/utils/arrays.d.ts.map +1 -0
- package/dist/utils/arrays.js +569 -0
- package/dist/utils/arrays.js.map +1 -0
- package/dist/utils/auth-methods.d.ts +6 -0
- package/dist/utils/auth-methods.d.ts.map +1 -0
- package/dist/utils/auth-methods.js +13 -0
- package/dist/utils/auth-methods.js.map +1 -0
- package/dist/utils/base64.d.ts +6 -0
- package/dist/utils/base64.d.ts.map +1 -0
- package/dist/utils/base64.js +28 -0
- package/dist/utils/base64.js.map +1 -0
- package/dist/utils/booleans.d.ts +8 -0
- package/dist/utils/booleans.d.ts.map +1 -0
- package/dist/utils/booleans.js +38 -0
- package/dist/utils/booleans.js.map +1 -0
- package/dist/utils/browser-compat.d.ts +10 -0
- package/dist/utils/browser-compat.d.ts.map +1 -0
- package/dist/utils/browser-compat.js +23 -0
- package/dist/utils/browser-compat.js.map +1 -0
- package/dist/utils/bytes.d.ts +17 -0
- package/dist/utils/bytes.d.ts.map +1 -0
- package/dist/utils/bytes.js +304 -0
- package/dist/utils/bytes.js.map +1 -0
- package/dist/utils/caches.d.ts +102 -0
- package/dist/utils/caches.d.ts.map +1 -0
- package/dist/utils/caches.js +188 -0
- package/dist/utils/caches.js.map +1 -0
- package/dist/utils/cel-fields.d.ts +23 -0
- package/dist/utils/cel-fields.d.ts.map +1 -0
- package/dist/utils/cel-fields.js +108 -0
- package/dist/utils/cel-fields.js.map +1 -0
- package/dist/utils/compile-time.d.ts +10 -0
- package/dist/utils/compile-time.d.ts.map +1 -0
- package/dist/utils/compile-time.js +16 -0
- package/dist/utils/compile-time.js.map +1 -0
- package/dist/utils/country-codes.d.ts +11 -0
- package/dist/utils/country-codes.d.ts.map +1 -0
- package/dist/utils/country-codes.js +40 -0
- package/dist/utils/country-codes.js.map +1 -0
- package/dist/utils/crypto.d.ts +48 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +215 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/currencies.d.ts +8 -0
- package/dist/utils/currencies.d.ts.map +1 -0
- package/dist/utils/currencies.js +52 -0
- package/dist/utils/currencies.js.map +1 -0
- package/dist/utils/currency-constants.d.ts +39 -0
- package/dist/utils/currency-constants.d.ts.map +1 -0
- package/dist/utils/currency-constants.js +44 -0
- package/dist/utils/currency-constants.js.map +1 -0
- package/dist/utils/dates.d.ts +23 -0
- package/dist/utils/dates.d.ts.map +1 -0
- package/dist/utils/dates.js +176 -0
- package/dist/utils/dates.js.map +1 -0
- package/dist/utils/dev-env-state-path.d.ts +6 -0
- package/dist/utils/dev-env-state-path.d.ts.map +1 -0
- package/dist/utils/dev-env-state-path.js +18 -0
- package/dist/utils/dev-env-state-path.js.map +1 -0
- package/dist/utils/dom.d.ts +5 -0
- package/dist/utils/dom.d.ts.map +1 -0
- package/dist/utils/dom.js +13 -0
- package/dist/utils/dom.js.map +1 -0
- package/dist/utils/env.d.ts +25 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +85 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/errors.d.ts +231 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +393 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/esbuild.d.ts +16 -0
- package/dist/utils/esbuild.d.ts.map +1 -0
- package/dist/utils/esbuild.js +186 -0
- package/dist/utils/esbuild.js.map +1 -0
- package/dist/utils/featurebase.d.ts +30 -0
- package/dist/utils/featurebase.d.ts.map +1 -0
- package/dist/utils/featurebase.js +168 -0
- package/dist/utils/featurebase.js.map +1 -0
- package/dist/utils/fs.d.ts +9 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +31 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/functions.d.ts +6 -0
- package/dist/utils/functions.d.ts.map +1 -0
- package/dist/utils/functions.js +37 -0
- package/dist/utils/functions.js.map +1 -0
- package/dist/utils/geo.d.ts +24 -0
- package/dist/utils/geo.d.ts.map +1 -0
- package/dist/utils/geo.js +18 -0
- package/dist/utils/geo.js.map +1 -0
- package/dist/utils/globals.d.ts +13 -0
- package/dist/utils/globals.d.ts.map +1 -0
- package/dist/utils/globals.js +40 -0
- package/dist/utils/globals.js.map +1 -0
- package/dist/utils/hashes.d.ts +9 -0
- package/dist/utils/hashes.d.ts.map +1 -0
- package/dist/utils/hashes.js +47 -0
- package/dist/utils/hashes.js.map +1 -0
- package/dist/utils/html.d.ts +7 -0
- package/dist/utils/html.d.ts.map +1 -0
- package/dist/utils/html.js +37 -0
- package/dist/utils/html.js.map +1 -0
- package/dist/utils/http.d.ts +45 -0
- package/dist/utils/http.d.ts.map +1 -0
- package/dist/utils/http.js +79 -0
- package/dist/utils/http.js.map +1 -0
- package/dist/utils/ips.d.ts +8 -0
- package/dist/utils/ips.d.ts.map +1 -0
- package/dist/utils/ips.js +40 -0
- package/dist/utils/ips.js.map +1 -0
- package/dist/utils/json.d.ts +15 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +182 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/jsx-editable-transpiler.d.ts +68 -0
- package/dist/utils/jsx-editable-transpiler.d.ts.map +1 -0
- package/dist/utils/jsx-editable-transpiler.js +223 -0
- package/dist/utils/jsx-editable-transpiler.js.map +1 -0
- package/dist/utils/jsx-editable-transpiler.test.d.ts +1 -0
- package/dist/utils/jsx-editable-transpiler.test.js +122 -0
- package/dist/utils/jsx-editable-transpiler.test.js.map +1 -0
- package/dist/utils/jwt.d.ts +79 -0
- package/dist/utils/jwt.d.ts.map +1 -0
- package/dist/utils/jwt.js +112 -0
- package/dist/utils/jwt.js.map +1 -0
- package/dist/utils/locks.d.ts +17 -0
- package/dist/utils/locks.d.ts.map +1 -0
- package/dist/utils/locks.js +56 -0
- package/dist/utils/locks.js.map +1 -0
- package/dist/utils/maps.d.ts +61 -0
- package/dist/utils/maps.d.ts.map +1 -0
- package/dist/utils/maps.js +302 -0
- package/dist/utils/maps.js.map +1 -0
- package/dist/utils/math.d.ts +8 -0
- package/dist/utils/math.d.ts.map +1 -0
- package/dist/utils/math.js +23 -0
- package/dist/utils/math.js.map +1 -0
- package/dist/utils/monkey-patch.d.ts +7 -0
- package/dist/utils/monkey-patch.d.ts.map +1 -0
- package/dist/utils/monkey-patch.js +25 -0
- package/dist/utils/monkey-patch.js.map +1 -0
- package/dist/utils/node-http.d.ts +17 -0
- package/dist/utils/node-http.d.ts.map +1 -0
- package/dist/utils/node-http.js +40 -0
- package/dist/utils/node-http.js.map +1 -0
- package/dist/utils/numbers.d.ts +7 -0
- package/dist/utils/numbers.d.ts.map +1 -0
- package/dist/utils/numbers.js +79 -0
- package/dist/utils/numbers.js.map +1 -0
- package/dist/utils/oauth.d.ts +11 -0
- package/dist/utils/oauth.d.ts.map +1 -0
- package/dist/utils/oauth.js +32 -0
- package/dist/utils/oauth.js.map +1 -0
- package/dist/utils/objects.d.ts +59 -0
- package/dist/utils/objects.d.ts.map +1 -0
- package/dist/utils/objects.js +846 -0
- package/dist/utils/objects.js.map +1 -0
- package/dist/utils/paginated-lists.d.ts +442 -0
- package/dist/utils/paginated-lists.d.ts.map +1 -0
- package/dist/utils/paginated-lists.js +414 -0
- package/dist/utils/paginated-lists.js.map +1 -0
- package/dist/utils/paginated-lists.test.d.ts +1 -0
- package/dist/utils/paginated-lists.test.js +1304 -0
- package/dist/utils/paginated-lists.test.js.map +1 -0
- package/dist/utils/passkey.d.ts +2 -0
- package/dist/utils/passkey.js +0 -0
- package/dist/utils/promises.d.ts +80 -0
- package/dist/utils/promises.d.ts.map +1 -0
- package/dist/utils/promises.js +349 -0
- package/dist/utils/promises.js.map +1 -0
- package/dist/utils/proxies.d.ts +13 -0
- package/dist/utils/proxies.d.ts.map +1 -0
- package/dist/utils/proxies.js +201 -0
- package/dist/utils/proxies.js.map +1 -0
- package/dist/utils/react.d.ts +61 -0
- package/dist/utils/react.d.ts.map +1 -0
- package/dist/utils/react.js +243 -0
- package/dist/utils/react.js.map +1 -0
- package/dist/utils/redirect-urls.d.ts +30 -0
- package/dist/utils/redirect-urls.d.ts.map +1 -0
- package/dist/utils/redirect-urls.js +222 -0
- package/dist/utils/redirect-urls.js.map +1 -0
- package/dist/utils/regex.d.ts +5 -0
- package/dist/utils/regex.d.ts.map +1 -0
- package/dist/utils/regex.js +15 -0
- package/dist/utils/regex.js.map +1 -0
- package/dist/utils/results.d.ts +70 -0
- package/dist/utils/results.d.ts.map +1 -0
- package/dist/utils/results.js +342 -0
- package/dist/utils/results.js.map +1 -0
- package/dist/utils/sentry.d.ts +13 -0
- package/dist/utils/sentry.d.ts.map +1 -0
- package/dist/utils/sentry.js +16 -0
- package/dist/utils/sentry.js.map +1 -0
- package/dist/utils/stores.d.ts +104 -0
- package/dist/utils/stores.d.ts.map +1 -0
- package/dist/utils/stores.js +179 -0
- package/dist/utils/stores.js.map +1 -0
- package/dist/utils/strings.d.ts +76 -0
- package/dist/utils/strings.d.ts.map +1 -0
- package/dist/utils/strings.js +549 -0
- package/dist/utils/strings.js.map +1 -0
- package/dist/utils/strings.nicify.test.d.ts +1 -0
- package/dist/utils/strings.nicify.test.js +243 -0
- package/dist/utils/strings.nicify.test.js.map +1 -0
- package/dist/utils/telemetry.d.ts +15 -0
- package/dist/utils/telemetry.d.ts.map +1 -0
- package/dist/utils/telemetry.js +35 -0
- package/dist/utils/telemetry.js.map +1 -0
- package/dist/utils/turnstile-browser.d.ts +32 -0
- package/dist/utils/turnstile-browser.d.ts.map +1 -0
- package/dist/utils/turnstile-browser.js +65 -0
- package/dist/utils/turnstile-browser.js.map +1 -0
- package/dist/utils/turnstile-flow.d.ts +29 -0
- package/dist/utils/turnstile-flow.d.ts.map +1 -0
- package/dist/utils/turnstile-flow.js +225 -0
- package/dist/utils/turnstile-flow.js.map +1 -0
- package/dist/utils/turnstile-flow.test.d.ts +1 -0
- package/dist/utils/turnstile-flow.test.js +75 -0
- package/dist/utils/turnstile-flow.test.js.map +1 -0
- package/dist/utils/turnstile.d.ts +17 -0
- package/dist/utils/turnstile.d.ts.map +1 -0
- package/dist/utils/turnstile.js +31 -0
- package/dist/utils/turnstile.js.map +1 -0
- package/dist/utils/typed-arrays.d.ts +14 -0
- package/dist/utils/typed-arrays.d.ts.map +1 -0
- package/dist/utils/typed-arrays.js +22 -0
- package/dist/utils/typed-arrays.js.map +1 -0
- package/dist/utils/types.d.ts +77 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/dist/utils/types.js +59 -0
- package/dist/utils/types.js.map +1 -0
- package/dist/utils/unicode.d.ts +5 -0
- package/dist/utils/unicode.d.ts.map +1 -0
- package/dist/utils/unicode.js +26 -0
- package/dist/utils/unicode.js.map +1 -0
- package/dist/utils/urls.d.ts +28 -0
- package/dist/utils/urls.d.ts.map +1 -0
- package/dist/utils/urls.js +274 -0
- package/dist/utils/urls.js.map +1 -0
- package/dist/utils/uuids.d.ts +6 -0
- package/dist/utils/uuids.d.ts.map +1 -0
- package/dist/utils/uuids.js +39 -0
- package/dist/utils/uuids.js.map +1 -0
- package/package.json +99 -0
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { encodeBase32, encodeBase64 } from "./bytes.js";
|
|
2
|
+
import { HexclaveAssertionError } from "./errors.js";
|
|
3
|
+
import { globalVar } from "./globals.js";
|
|
4
|
+
import { Result } from "./results.js";
|
|
5
|
+
import { toArrayBufferBacked } from "./typed-arrays.js";
|
|
6
|
+
|
|
7
|
+
//#region src/utils/crypto.tsx
|
|
8
|
+
function generateRandomValues(array) {
|
|
9
|
+
if (!globalVar.crypto) throw new HexclaveAssertionError("Crypto API is not available in this environment. Are you using an old browser?");
|
|
10
|
+
if (!globalVar.crypto.getRandomValues) throw new HexclaveAssertionError("crypto.getRandomValues is not available in this environment. Are you using an old browser?");
|
|
11
|
+
return globalVar.crypto.getRandomValues(array);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Generates a secure alphanumeric string using the system's cryptographically secure
|
|
15
|
+
* random number generator.
|
|
16
|
+
*/
|
|
17
|
+
function generateSecureRandomString(minBitsOfEntropy = 224) {
|
|
18
|
+
const base32CharactersCount = Math.ceil(minBitsOfEntropy / 5);
|
|
19
|
+
const bytesCount = Math.ceil(base32CharactersCount * 5 / 8);
|
|
20
|
+
const str = encodeBase32(generateRandomValues(new Uint8Array(bytesCount)));
|
|
21
|
+
return str.slice(str.length - base32CharactersCount).toLowerCase();
|
|
22
|
+
}
|
|
23
|
+
async function getDerivedSymmetricKey(purpose, secret, salt) {
|
|
24
|
+
const secretBytes = typeof secret === "string" ? new TextEncoder().encode(secret) : toArrayBufferBacked(secret);
|
|
25
|
+
const originalSecretKey = await crypto.subtle.importKey("raw", secretBytes, "HKDF", false, ["deriveKey"]);
|
|
26
|
+
return await crypto.subtle.deriveKey({
|
|
27
|
+
name: "HKDF",
|
|
28
|
+
salt: toArrayBufferBacked(salt),
|
|
29
|
+
hash: "SHA-256",
|
|
30
|
+
info: new TextEncoder().encode(JSON.stringify([
|
|
31
|
+
"stack-crypto-helper-derived-symmetric-key",
|
|
32
|
+
purpose,
|
|
33
|
+
typeof secret === "string" ? "string-key" : "binary-key",
|
|
34
|
+
encodeBase64(salt)
|
|
35
|
+
]))
|
|
36
|
+
}, originalSecretKey, {
|
|
37
|
+
name: "AES-GCM",
|
|
38
|
+
length: 256
|
|
39
|
+
}, false, ["encrypt", "decrypt"]);
|
|
40
|
+
}
|
|
41
|
+
async function encrypt({ purpose, secret, value }) {
|
|
42
|
+
const iv = crypto.getRandomValues(new Uint8Array(12));
|
|
43
|
+
const salt = crypto.getRandomValues(new Uint8Array(16));
|
|
44
|
+
const derivedSecretKey = await getDerivedSymmetricKey(purpose, secret, salt);
|
|
45
|
+
const cipher = await crypto.subtle.encrypt({
|
|
46
|
+
name: "AES-GCM",
|
|
47
|
+
iv
|
|
48
|
+
}, derivedSecretKey, toArrayBufferBacked(value));
|
|
49
|
+
return new Uint8Array([
|
|
50
|
+
...[1, 0],
|
|
51
|
+
...salt,
|
|
52
|
+
...iv,
|
|
53
|
+
...new Uint8Array(cipher)
|
|
54
|
+
]);
|
|
55
|
+
}
|
|
56
|
+
async function decrypt({ purpose, secret, cipher }) {
|
|
57
|
+
const version = cipher.slice(0, 2);
|
|
58
|
+
if (version[0] !== 1 || version[1] !== 0) throw new HexclaveAssertionError("Invalid ciphertext version in decrypt(...); expected 0x0100", { purpose });
|
|
59
|
+
const salt = cipher.slice(2, 18);
|
|
60
|
+
const iv = cipher.slice(18, 30);
|
|
61
|
+
const cipherBytes = cipher.slice(30);
|
|
62
|
+
const derivedSecretKey = await getDerivedSymmetricKey(purpose, secret, salt);
|
|
63
|
+
try {
|
|
64
|
+
const plaintext = await crypto.subtle.decrypt({
|
|
65
|
+
name: "AES-GCM",
|
|
66
|
+
iv
|
|
67
|
+
}, derivedSecretKey, cipherBytes);
|
|
68
|
+
return Result.ok(new Uint8Array(plaintext));
|
|
69
|
+
} catch (e) {
|
|
70
|
+
if (e instanceof DOMException && e.name === "OperationError") return Result.error(new Error("Invalid ciphertext or secret when decrypting encrypted value", { cause: e }));
|
|
71
|
+
throw e;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
(void 0)?.test("encrypt & decrypt", async ({ expect }) => {
|
|
75
|
+
const encryptAndDecrypt = async (encryptPurpose, decryptPurpose, encryptSecret, decryptSecret, value) => {
|
|
76
|
+
return await decrypt({
|
|
77
|
+
purpose: decryptPurpose,
|
|
78
|
+
secret: decryptSecret,
|
|
79
|
+
cipher: await encrypt({
|
|
80
|
+
purpose: encryptPurpose,
|
|
81
|
+
secret: encryptSecret,
|
|
82
|
+
value
|
|
83
|
+
})
|
|
84
|
+
});
|
|
85
|
+
};
|
|
86
|
+
const exampleBytes = new TextEncoder().encode("hello");
|
|
87
|
+
const exampleKey1 = crypto.getRandomValues(new Uint8Array(32));
|
|
88
|
+
const exampleKey2 = crypto.getRandomValues(new Uint8Array(32));
|
|
89
|
+
expect(await encryptAndDecrypt("p", "p", "secret", "secret", exampleBytes)).toEqual(Result.ok(exampleBytes));
|
|
90
|
+
expect(await encryptAndDecrypt("p", "p", exampleKey1, exampleKey1, exampleBytes)).toEqual(Result.ok(exampleBytes));
|
|
91
|
+
expect(await encryptAndDecrypt("p", "p", exampleKey1, "secret", exampleBytes)).toEqual(Result.error(expect.objectContaining({ message: "Invalid ciphertext or secret when decrypting encrypted value" })));
|
|
92
|
+
expect(await encryptAndDecrypt("p", "p", exampleKey1, exampleKey2, exampleBytes)).toEqual(Result.error(expect.objectContaining({ message: "Invalid ciphertext or secret when decrypting encrypted value" })));
|
|
93
|
+
expect(await encryptAndDecrypt("p", "not-p", exampleKey1, exampleKey1, exampleBytes)).toEqual(Result.error(expect.objectContaining({ message: "Invalid ciphertext or secret when decrypting encrypted value" })));
|
|
94
|
+
});
|
|
95
|
+
async function hash(options) {
|
|
96
|
+
return await iteratedHash({
|
|
97
|
+
...options,
|
|
98
|
+
iterations: 1
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
async function iteratedHash(options) {
|
|
102
|
+
const stringOrUint8ArrayToUint8Array = (value) => typeof value === "string" ? new TextEncoder().encode(value) : toArrayBufferBacked(value);
|
|
103
|
+
const stringOrUint8ArrayToBase64 = (value) => encodeBase64(stringOrUint8ArrayToUint8Array(value));
|
|
104
|
+
const input = await crypto.subtle.importKey("raw", stringOrUint8ArrayToUint8Array(options.value), "PBKDF2", false, ["deriveBits"]);
|
|
105
|
+
return new Uint8Array(await crypto.subtle.deriveBits({
|
|
106
|
+
name: "PBKDF2",
|
|
107
|
+
salt: new TextEncoder().encode(JSON.stringify([
|
|
108
|
+
"stack-crypto-helper-iterated-hash",
|
|
109
|
+
options.purpose,
|
|
110
|
+
stringOrUint8ArrayToBase64(options.salt ?? ""),
|
|
111
|
+
stringOrUint8ArrayToBase64(options.extra ?? "")
|
|
112
|
+
])),
|
|
113
|
+
iterations: options.iterations,
|
|
114
|
+
hash: "SHA-256"
|
|
115
|
+
}, input, 256));
|
|
116
|
+
}
|
|
117
|
+
(void 0)?.test("iteratedHash", async ({ expect }) => {
|
|
118
|
+
const valueBytes = new TextEncoder().encode("hello");
|
|
119
|
+
const incrementBytes = new Uint8Array([
|
|
120
|
+
1,
|
|
121
|
+
2,
|
|
122
|
+
3,
|
|
123
|
+
4,
|
|
124
|
+
5,
|
|
125
|
+
6,
|
|
126
|
+
7,
|
|
127
|
+
8,
|
|
128
|
+
9,
|
|
129
|
+
10,
|
|
130
|
+
11,
|
|
131
|
+
12,
|
|
132
|
+
13,
|
|
133
|
+
14,
|
|
134
|
+
15,
|
|
135
|
+
16
|
|
136
|
+
]);
|
|
137
|
+
const hash = await iteratedHash({
|
|
138
|
+
purpose: "purpose",
|
|
139
|
+
value: valueBytes,
|
|
140
|
+
iterations: 1e5
|
|
141
|
+
});
|
|
142
|
+
const hash2 = await iteratedHash({
|
|
143
|
+
purpose: "purpose",
|
|
144
|
+
value: valueBytes,
|
|
145
|
+
iterations: 1e5
|
|
146
|
+
});
|
|
147
|
+
const hashWithDifferentPurpose = await iteratedHash({
|
|
148
|
+
purpose: "different-purpose",
|
|
149
|
+
value: valueBytes,
|
|
150
|
+
iterations: 1e5
|
|
151
|
+
});
|
|
152
|
+
const hashWithEmptySalt = await iteratedHash({
|
|
153
|
+
purpose: "purpose",
|
|
154
|
+
value: valueBytes,
|
|
155
|
+
salt: new Uint8Array(0),
|
|
156
|
+
iterations: 1e5
|
|
157
|
+
});
|
|
158
|
+
const hashWithDifferentSalt = await iteratedHash({
|
|
159
|
+
purpose: "purpose",
|
|
160
|
+
value: valueBytes,
|
|
161
|
+
salt: incrementBytes,
|
|
162
|
+
iterations: 1e5
|
|
163
|
+
});
|
|
164
|
+
const hashWithEmptyExtra = await iteratedHash({
|
|
165
|
+
purpose: "purpose",
|
|
166
|
+
value: valueBytes,
|
|
167
|
+
extra: new Uint8Array(0),
|
|
168
|
+
iterations: 1e5
|
|
169
|
+
});
|
|
170
|
+
const hashWithDifferentExtra = await iteratedHash({
|
|
171
|
+
purpose: "purpose",
|
|
172
|
+
value: valueBytes,
|
|
173
|
+
extra: incrementBytes,
|
|
174
|
+
iterations: 1e5
|
|
175
|
+
});
|
|
176
|
+
const hashWithDifferentValue = await iteratedHash({
|
|
177
|
+
purpose: "purpose",
|
|
178
|
+
value: new TextEncoder().encode("hello2"),
|
|
179
|
+
iterations: 1e5
|
|
180
|
+
});
|
|
181
|
+
const hashWithDifferentSaltAndExtra = await iteratedHash({
|
|
182
|
+
purpose: "purpose",
|
|
183
|
+
value: valueBytes,
|
|
184
|
+
salt: incrementBytes,
|
|
185
|
+
extra: incrementBytes,
|
|
186
|
+
iterations: 1e5
|
|
187
|
+
});
|
|
188
|
+
const hashWithDifferentIterations = await iteratedHash({
|
|
189
|
+
purpose: "purpose",
|
|
190
|
+
value: valueBytes,
|
|
191
|
+
iterations: 100001
|
|
192
|
+
});
|
|
193
|
+
expect(hash).toEqual(hash2);
|
|
194
|
+
expect(hash).not.toEqual(hashWithDifferentPurpose);
|
|
195
|
+
expect(hash).toEqual(hashWithEmptySalt);
|
|
196
|
+
expect(hash).not.toEqual(hashWithDifferentSalt);
|
|
197
|
+
expect(hash).toEqual(hashWithEmptyExtra);
|
|
198
|
+
expect(hash).not.toEqual(hashWithDifferentExtra);
|
|
199
|
+
expect(hash).not.toEqual(hashWithDifferentValue);
|
|
200
|
+
expect(hash).not.toEqual(hashWithDifferentIterations);
|
|
201
|
+
expect(hashWithDifferentSalt).not.toEqual(hashWithDifferentExtra);
|
|
202
|
+
expect(hashWithDifferentSalt).not.toEqual(hashWithDifferentSaltAndExtra);
|
|
203
|
+
expect(hashWithDifferentExtra).not.toEqual(hashWithDifferentSaltAndExtra);
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
//#endregion
|
|
207
|
+
export { decrypt, encrypt, generateRandomValues, generateSecureRandomString, hash, iteratedHash };
|
|
208
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","names":[],"sources":["../../../src/utils/crypto.tsx"],"sourcesContent":["import { encodeBase32, encodeBase64 } from \"./bytes\";\nimport { HexclaveAssertionError } from \"./errors\";\nimport { globalVar } from \"./globals\";\nimport { Result } from \"./results\";\nimport { toArrayBufferBacked } from \"./typed-arrays\";\n\nexport function generateRandomValues(array: Uint8Array): typeof array {\n if (!globalVar.crypto) {\n throw new HexclaveAssertionError(\"Crypto API is not available in this environment. Are you using an old browser?\");\n }\n if (!globalVar.crypto.getRandomValues) {\n throw new HexclaveAssertionError(\"crypto.getRandomValues is not available in this environment. Are you using an old browser?\");\n }\n return globalVar.crypto.getRandomValues(array);\n}\n\n/**\n * Generates a secure alphanumeric string using the system's cryptographically secure\n * random number generator.\n */\nexport function generateSecureRandomString(minBitsOfEntropy: number = 224) {\n const base32CharactersCount = Math.ceil(minBitsOfEntropy / 5);\n const bytesCount = Math.ceil(base32CharactersCount * 5 / 8);\n const randomBytes = generateRandomValues(new Uint8Array(bytesCount));\n const str = encodeBase32(randomBytes);\n return str.slice(str.length - base32CharactersCount).toLowerCase();\n}\n\nasync function getDerivedSymmetricKey(purpose: string, secret: string | Uint8Array, salt: Uint8Array) {\n const secretBytes = typeof secret === \"string\" ? new TextEncoder().encode(secret) : toArrayBufferBacked(secret);\n const originalSecretKey = await crypto.subtle.importKey(\"raw\", secretBytes, \"HKDF\", false, [\"deriveKey\"]);\n return await crypto.subtle.deriveKey(\n {\n name: \"HKDF\",\n salt: toArrayBufferBacked(salt),\n hash: \"SHA-256\",\n info: new TextEncoder().encode(JSON.stringify([\n \"stack-crypto-helper-derived-symmetric-key\",\n purpose,\n typeof secret === \"string\" ? \"string-key\" : \"binary-key\",\n encodeBase64(salt),\n ])),\n },\n originalSecretKey,\n { name: \"AES-GCM\", length: 256 },\n false,\n [\"encrypt\", \"decrypt\"]\n );\n}\n\nexport async function encrypt({ purpose, secret, value }: { purpose: string, secret: string | Uint8Array, value: Uint8Array }) {\n const iv = crypto.getRandomValues(new Uint8Array(12));\n const salt = crypto.getRandomValues(new Uint8Array(16));\n const derivedSecretKey = await getDerivedSymmetricKey(purpose, secret, salt);\n\n const cipher = await crypto.subtle.encrypt({\n name: \"AES-GCM\",\n iv,\n }, derivedSecretKey, toArrayBufferBacked(value));\n\n const version = [0x01, 0x00];\n return new Uint8Array([...version, ...salt, ...iv, ...new Uint8Array(cipher)]);\n}\n\nexport async function decrypt({ purpose, secret, cipher }: { purpose: string, secret: string | Uint8Array, cipher: Uint8Array }) {\n const version = cipher.slice(0, 2);\n if (version[0] !== 0x01 || version[1] !== 0x00) throw new HexclaveAssertionError(\"Invalid ciphertext version in decrypt(...); expected 0x0100\", { purpose });\n const salt = cipher.slice(2, 18);\n const iv = cipher.slice(18, 30);\n const cipherBytes = cipher.slice(30);\n const derivedSecretKey = await getDerivedSymmetricKey(purpose, secret, salt);\n\n try {\n const plaintext = await crypto.subtle.decrypt({\n name: \"AES-GCM\",\n iv,\n }, derivedSecretKey, cipherBytes);\n return Result.ok(new Uint8Array(plaintext));\n } catch (e) {\n if (e instanceof DOMException && e.name === \"OperationError\") {\n return Result.error(new Error(\"Invalid ciphertext or secret when decrypting encrypted value\", { cause: e }));\n }\n throw e;\n }\n}\n\nimport.meta.vitest?.test(\"encrypt & decrypt\", async ({ expect }) => {\n const encryptAndDecrypt = async (encryptPurpose: string, decryptPurpose: string, encryptSecret: string | Uint8Array, decryptSecret: string | Uint8Array, value: Uint8Array) => {\n const encrypted = await encrypt({ purpose: encryptPurpose, secret: encryptSecret, value });\n const decrypted = await decrypt({ purpose: decryptPurpose, secret: decryptSecret, cipher: encrypted });\n return decrypted;\n };\n\n const exampleBytes = new TextEncoder().encode(\"hello\");\n\n const exampleKey1 = crypto.getRandomValues(new Uint8Array(32));\n const exampleKey2 = crypto.getRandomValues(new Uint8Array(32));\n\n expect(await encryptAndDecrypt(\"p\", \"p\", \"secret\", \"secret\", exampleBytes)).toEqual(Result.ok(exampleBytes));\n expect(await encryptAndDecrypt(\"p\", \"p\", exampleKey1, exampleKey1, exampleBytes)).toEqual(Result.ok(exampleBytes));\n expect(await encryptAndDecrypt(\"p\", \"p\", exampleKey1, \"secret\", exampleBytes)).toEqual(Result.error(expect.objectContaining({ message: \"Invalid ciphertext or secret when decrypting encrypted value\" })));\n expect(await encryptAndDecrypt(\"p\", \"p\", exampleKey1, exampleKey2, exampleBytes)).toEqual(Result.error(expect.objectContaining({ message: \"Invalid ciphertext or secret when decrypting encrypted value\" })));\n expect(await encryptAndDecrypt(\"p\", \"not-p\", exampleKey1, exampleKey1, exampleBytes)).toEqual(Result.error(expect.objectContaining({ message: \"Invalid ciphertext or secret when decrypting encrypted value\" })));\n});\n\nexport type HashOptions = {\n purpose: string,\n salt?: string | Uint8Array,\n extra?: string | Uint8Array,\n value: string | Uint8Array,\n};\n\nexport async function hash(options: HashOptions) {\n return await iteratedHash({ ...options, iterations: 1 });\n}\n\nexport async function iteratedHash(options: HashOptions & { iterations: number }) {\n const stringOrUint8ArrayToUint8Array = (value: string | Uint8Array) => typeof value === \"string\" ? new TextEncoder().encode(value) : toArrayBufferBacked(value);\n const stringOrUint8ArrayToBase64 = (value: string | Uint8Array) => encodeBase64(stringOrUint8ArrayToUint8Array(value));\n const input = await crypto.subtle.importKey(\n \"raw\",\n stringOrUint8ArrayToUint8Array(options.value),\n \"PBKDF2\",\n false,\n [\"deriveBits\"]\n );\n return new Uint8Array(await crypto.subtle.deriveBits({\n name: \"PBKDF2\",\n salt: new TextEncoder().encode(JSON.stringify([\n \"stack-crypto-helper-iterated-hash\",\n options.purpose,\n stringOrUint8ArrayToBase64(options.salt ?? \"\"),\n stringOrUint8ArrayToBase64(options.extra ?? \"\"),\n ])),\n iterations: options.iterations,\n hash: \"SHA-256\",\n }, input, 256));\n}\n\nimport.meta.vitest?.test(\"iteratedHash\", async ({ expect }) => {\n const valueBytes = new TextEncoder().encode(\"hello\");\n const incrementBytes = new Uint8Array([0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10]);\n\n const hash = await iteratedHash({ purpose: \"purpose\", value: valueBytes, iterations: 100_000 });\n const hash2 = await iteratedHash({ purpose: \"purpose\", value: valueBytes, iterations: 100_000 });\n const hashWithDifferentPurpose = await iteratedHash({ purpose: \"different-purpose\", value: valueBytes, iterations: 100_000 });\n const hashWithEmptySalt = await iteratedHash({ purpose: \"purpose\", value: valueBytes, salt: new Uint8Array(0), iterations: 100_000 });\n const hashWithDifferentSalt = await iteratedHash({ purpose: \"purpose\", value: valueBytes, salt: incrementBytes, iterations: 100_000 });\n const hashWithEmptyExtra = await iteratedHash({ purpose: \"purpose\", value: valueBytes, extra: new Uint8Array(0), iterations: 100_000 });\n const hashWithDifferentExtra = await iteratedHash({ purpose: \"purpose\", value: valueBytes, extra: incrementBytes, iterations: 100_000 });\n const hashWithDifferentValue = await iteratedHash({ purpose: \"purpose\", value: new TextEncoder().encode(\"hello2\"), iterations: 100_000 });\n const hashWithDifferentSaltAndExtra = await iteratedHash({ purpose: \"purpose\", value: valueBytes, salt: incrementBytes, extra: incrementBytes, iterations: 100_000 });\n const hashWithDifferentIterations = await iteratedHash({ purpose: \"purpose\", value: valueBytes, iterations: 100_001 });\n\n\n expect(hash).toEqual(hash2);\n expect(hash).not.toEqual(hashWithDifferentPurpose);\n expect(hash).toEqual(hashWithEmptySalt);\n expect(hash).not.toEqual(hashWithDifferentSalt);\n expect(hash).toEqual(hashWithEmptyExtra);\n expect(hash).not.toEqual(hashWithDifferentExtra);\n expect(hash).not.toEqual(hashWithDifferentValue);\n expect(hash).not.toEqual(hashWithDifferentIterations);\n\n expect(hashWithDifferentSalt).not.toEqual(hashWithDifferentExtra);\n expect(hashWithDifferentSalt).not.toEqual(hashWithDifferentSaltAndExtra);\n expect(hashWithDifferentExtra).not.toEqual(hashWithDifferentSaltAndExtra);\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Currency, MoneyAmount, SUPPORTED_CURRENCIES } from "./currency-constants";
|
|
2
|
+
|
|
3
|
+
//#region src/utils/currencies.d.ts
|
|
4
|
+
type SupportedCurrency = (typeof SUPPORTED_CURRENCIES)[number];
|
|
5
|
+
declare function moneyAmountToStripeUnits(amount: MoneyAmount, currency: Currency): number;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { SupportedCurrency, moneyAmountToStripeUnits };
|
|
8
|
+
//# sourceMappingURL=currencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"currencies.d.ts","names":[],"sources":["../../../src/utils/currencies.tsx"],"mappings":";;;KAIY,iBAAA,WAA4B,oBAAA;AAAA,iBAExB,wBAAA,CAAyB,MAAA,EAAQ,WAAA,EAAa,QAAA,EAAU,QAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { moneyAmountSchema } from "../schema-fields.js";
|
|
2
|
+
import { HexclaveAssertionError } from "./errors.js";
|
|
3
|
+
import { SUPPORTED_CURRENCIES } from "./currency-constants.js";
|
|
4
|
+
|
|
5
|
+
//#region src/utils/currencies.tsx
|
|
6
|
+
function moneyAmountToStripeUnits(amount, currency) {
|
|
7
|
+
const validated = moneyAmountSchema(currency).defined().validateSync(amount);
|
|
8
|
+
if (currency.stripeDecimals !== currency.decimals) throw new HexclaveAssertionError("unimplemented: TODO support different decimal configurations");
|
|
9
|
+
const [whole, fractional = ""] = validated.split(".");
|
|
10
|
+
const paddedFractional = fractional.padEnd(currency.decimals, "0");
|
|
11
|
+
return Number.parseInt(whole + paddedFractional, 10);
|
|
12
|
+
}
|
|
13
|
+
(void 0)?.describe("moneyAmountToStripeUnits", (test) => {
|
|
14
|
+
const USD = SUPPORTED_CURRENCIES.find((c) => c.code === "USD");
|
|
15
|
+
test("converts fully-padded USD amounts", ({ expect }) => {
|
|
16
|
+
expect(moneyAmountToStripeUnits("5.00", USD)).toBe(500);
|
|
17
|
+
expect(moneyAmountToStripeUnits("0.01", USD)).toBe(1);
|
|
18
|
+
expect(moneyAmountToStripeUnits("12.34", USD)).toBe(1234);
|
|
19
|
+
});
|
|
20
|
+
test("converts whole-number USD amounts (no decimals)", ({ expect }) => {
|
|
21
|
+
expect(moneyAmountToStripeUnits("5", USD)).toBe(500);
|
|
22
|
+
expect(moneyAmountToStripeUnits("10", USD)).toBe(1e3);
|
|
23
|
+
expect(moneyAmountToStripeUnits("0", USD)).toBe(0);
|
|
24
|
+
});
|
|
25
|
+
test("converts USD amounts with one decimal digit", ({ expect }) => {
|
|
26
|
+
expect(moneyAmountToStripeUnits("5.5", USD)).toBe(550);
|
|
27
|
+
expect(moneyAmountToStripeUnits("0.5", USD)).toBe(50);
|
|
28
|
+
});
|
|
29
|
+
test("matches stripeUnitsToMoneyAmount round-trip", ({ expect }) => {
|
|
30
|
+
for (const cents of [
|
|
31
|
+
0,
|
|
32
|
+
1,
|
|
33
|
+
5,
|
|
34
|
+
50,
|
|
35
|
+
99,
|
|
36
|
+
100,
|
|
37
|
+
1234,
|
|
38
|
+
1e5
|
|
39
|
+
]) expect(moneyAmountToStripeUnits(`${Math.floor(cents / 100)}.${(cents % 100).toString().padStart(2, "0")}`, USD)).toBe(cents);
|
|
40
|
+
});
|
|
41
|
+
test("rejects invalid money strings via schema", ({ expect }) => {
|
|
42
|
+
expect(() => moneyAmountToStripeUnits("abc", USD)).toThrow();
|
|
43
|
+
expect(() => moneyAmountToStripeUnits("5.555", USD)).toThrow();
|
|
44
|
+
expect(() => moneyAmountToStripeUnits("05", USD)).toThrow();
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
//#endregion
|
|
49
|
+
export { moneyAmountToStripeUnits };
|
|
50
|
+
//# sourceMappingURL=currencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"currencies.js","names":[],"sources":["../../../src/utils/currencies.tsx"],"sourcesContent":["import { moneyAmountSchema } from \"../schema-fields\";\nimport { SUPPORTED_CURRENCIES, type Currency, type MoneyAmount } from \"./currency-constants\";\nimport { HexclaveAssertionError } from \"./errors\";\n\nexport type SupportedCurrency = (typeof SUPPORTED_CURRENCIES)[number];\n\nexport function moneyAmountToStripeUnits(amount: MoneyAmount, currency: Currency): number {\n const validated = moneyAmountSchema(currency).defined().validateSync(amount);\n if (currency.stripeDecimals !== currency.decimals) {\n throw new HexclaveAssertionError(\"unimplemented: TODO support different decimal configurations\");\n }\n // `moneyAmountSchema` accepts strings with 0..currency.decimals fractional\n // digits, so we must right-pad the fractional part before stripping the dot.\n // A naïve `replace('.', '')` underweights inputs like \"5\" → 5 (should be 500\n // for USD) and \"0.5\" → 5 (should be 50).\n const [whole, fractional = \"\"] = validated.split(\".\");\n const paddedFractional = fractional.padEnd(currency.decimals, \"0\");\n return Number.parseInt(whole + paddedFractional, 10);\n}\n\nimport.meta.vitest?.describe(\"moneyAmountToStripeUnits\", (test) => {\n const USD = SUPPORTED_CURRENCIES.find((c) => c.code === \"USD\")!;\n\n test(\"converts fully-padded USD amounts\", ({ expect }) => {\n expect(moneyAmountToStripeUnits(\"5.00\" as MoneyAmount, USD)).toBe(500);\n expect(moneyAmountToStripeUnits(\"0.01\" as MoneyAmount, USD)).toBe(1);\n expect(moneyAmountToStripeUnits(\"12.34\" as MoneyAmount, USD)).toBe(1234);\n });\n\n test(\"converts whole-number USD amounts (no decimals)\", ({ expect }) => {\n expect(moneyAmountToStripeUnits(\"5\" as MoneyAmount, USD)).toBe(500);\n expect(moneyAmountToStripeUnits(\"10\" as MoneyAmount, USD)).toBe(1000);\n expect(moneyAmountToStripeUnits(\"0\" as MoneyAmount, USD)).toBe(0);\n });\n\n test(\"converts USD amounts with one decimal digit\", ({ expect }) => {\n expect(moneyAmountToStripeUnits(\"5.5\" as MoneyAmount, USD)).toBe(550);\n expect(moneyAmountToStripeUnits(\"0.5\" as MoneyAmount, USD)).toBe(50);\n });\n\n test(\"matches stripeUnitsToMoneyAmount round-trip\", ({ expect }) => {\n for (const cents of [0, 1, 5, 50, 99, 100, 1234, 100000]) {\n const padded = `${Math.floor(cents / 100)}.${(cents % 100).toString().padStart(2, \"0\")}` as MoneyAmount;\n expect(moneyAmountToStripeUnits(padded, USD)).toBe(cents);\n }\n });\n\n test(\"rejects invalid money strings via schema\", ({ expect }) => {\n expect(() => moneyAmountToStripeUnits(\"abc\" as MoneyAmount, USD)).toThrow();\n expect(() => moneyAmountToStripeUnits(\"5.555\" as MoneyAmount, USD)).toThrow();\n expect(() => moneyAmountToStripeUnits(\"05\" as MoneyAmount, USD)).toThrow();\n });\n});\n"],"mappings":";;;;;AAMA,SAAgB,yBAAyB,QAAqB,UAA4B;CACxF,MAAM,YAAY,kBAAkB,SAAS,CAAC,SAAS,CAAC,aAAa,OAAO;AAC5E,KAAI,SAAS,mBAAmB,SAAS,SACvC,OAAM,IAAI,uBAAuB,+DAA+D;CAMlG,MAAM,CAAC,OAAO,aAAa,MAAM,UAAU,MAAM,IAAI;CACrD,MAAM,mBAAmB,WAAW,OAAO,SAAS,UAAU,IAAI;AAClE,QAAO,OAAO,SAAS,QAAQ,kBAAkB,GAAG;;CAGtD,SAAW,SAAS,6BAAU,SAA4B;CACxD,MAAM,MAAM,qBAAqB,MAAM,MAAM,EAAE,SAAS,MAAM;AAE9D,MAAK,sCAAsC,EAAE,aAAa;AACxD,SAAO,yBAAyB,QAAuB,IAAI,CAAC,CAAC,KAAK,IAAI;AACtE,SAAO,yBAAyB,QAAuB,IAAI,CAAC,CAAC,KAAK,EAAE;AACpE,SAAO,yBAAyB,SAAwB,IAAI,CAAC,CAAC,KAAK,KAAK;GACxE;AAEF,MAAK,oDAAoD,EAAE,aAAa;AACtE,SAAO,yBAAyB,KAAoB,IAAI,CAAC,CAAC,KAAK,IAAI;AACnE,SAAO,yBAAyB,MAAqB,IAAI,CAAC,CAAC,KAAK,IAAK;AACrE,SAAO,yBAAyB,KAAoB,IAAI,CAAC,CAAC,KAAK,EAAE;GACjE;AAEF,MAAK,gDAAgD,EAAE,aAAa;AAClE,SAAO,yBAAyB,OAAsB,IAAI,CAAC,CAAC,KAAK,IAAI;AACrE,SAAO,yBAAyB,OAAsB,IAAI,CAAC,CAAC,KAAK,GAAG;GACpE;AAEF,MAAK,gDAAgD,EAAE,aAAa;AAClE,OAAK,MAAM,SAAS;GAAC;GAAG;GAAG;GAAG;GAAI;GAAI;GAAK;GAAM;GAAO,CAEtD,QAAO,yBADQ,GAAG,KAAK,MAAM,QAAQ,IAAI,CAAC,IAAI,QAAQ,KAAK,UAAU,CAAC,SAAS,GAAG,IAAI,IAC9C,IAAI,CAAC,CAAC,KAAK,MAAM;GAE3D;AAEF,MAAK,6CAA6C,EAAE,aAAa;AAC/D,eAAa,yBAAyB,OAAsB,IAAI,CAAC,CAAC,SAAS;AAC3E,eAAa,yBAAyB,SAAwB,IAAI,CAAC,CAAC,SAAS;AAC7E,eAAa,yBAAyB,MAAqB,IAAI,CAAC,CAAC,SAAS;GAC1E;EACF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
//#region src/utils/currency-constants.d.ts
|
|
2
|
+
type MoneyAmount = `${number}` | `${number}.${number}`;
|
|
3
|
+
type Currency = {
|
|
4
|
+
code: Uppercase<string>;
|
|
5
|
+
decimals: number;
|
|
6
|
+
stripeDecimals: number;
|
|
7
|
+
};
|
|
8
|
+
declare const SUPPORTED_CURRENCIES: [{
|
|
9
|
+
readonly code: "USD";
|
|
10
|
+
readonly decimals: 2;
|
|
11
|
+
readonly stripeDecimals: 2;
|
|
12
|
+
}, {
|
|
13
|
+
readonly code: "EUR";
|
|
14
|
+
readonly decimals: 2;
|
|
15
|
+
readonly stripeDecimals: 2;
|
|
16
|
+
}, {
|
|
17
|
+
readonly code: "GBP";
|
|
18
|
+
readonly decimals: 2;
|
|
19
|
+
readonly stripeDecimals: 2;
|
|
20
|
+
}, {
|
|
21
|
+
readonly code: "JPY";
|
|
22
|
+
readonly decimals: 0;
|
|
23
|
+
readonly stripeDecimals: 0;
|
|
24
|
+
}, {
|
|
25
|
+
readonly code: "INR";
|
|
26
|
+
readonly decimals: 2;
|
|
27
|
+
readonly stripeDecimals: 2;
|
|
28
|
+
}, {
|
|
29
|
+
readonly code: "AUD";
|
|
30
|
+
readonly decimals: 2;
|
|
31
|
+
readonly stripeDecimals: 2;
|
|
32
|
+
}, {
|
|
33
|
+
readonly code: "CAD";
|
|
34
|
+
readonly decimals: 2;
|
|
35
|
+
readonly stripeDecimals: 2;
|
|
36
|
+
}];
|
|
37
|
+
//#endregion
|
|
38
|
+
export { Currency, MoneyAmount, SUPPORTED_CURRENCIES };
|
|
39
|
+
//# sourceMappingURL=currency-constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"currency-constants.d.ts","names":[],"sources":["../../../src/utils/currency-constants.tsx"],"mappings":";KAAY,WAAA;AAAA,KAEA,QAAA;EACV,IAAA,EAAM,SAAA;EACN,QAAA;EACA,cAAA;AAAA;AAAA,cAGW,oBAAA;EAAA"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
//#region src/utils/currency-constants.tsx
|
|
2
|
+
const SUPPORTED_CURRENCIES = [
|
|
3
|
+
{
|
|
4
|
+
code: "USD",
|
|
5
|
+
decimals: 2,
|
|
6
|
+
stripeDecimals: 2
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
code: "EUR",
|
|
10
|
+
decimals: 2,
|
|
11
|
+
stripeDecimals: 2
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
code: "GBP",
|
|
15
|
+
decimals: 2,
|
|
16
|
+
stripeDecimals: 2
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
code: "JPY",
|
|
20
|
+
decimals: 0,
|
|
21
|
+
stripeDecimals: 0
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
code: "INR",
|
|
25
|
+
decimals: 2,
|
|
26
|
+
stripeDecimals: 2
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
code: "AUD",
|
|
30
|
+
decimals: 2,
|
|
31
|
+
stripeDecimals: 2
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
code: "CAD",
|
|
35
|
+
decimals: 2,
|
|
36
|
+
stripeDecimals: 2
|
|
37
|
+
}
|
|
38
|
+
];
|
|
39
|
+
|
|
40
|
+
//#endregion
|
|
41
|
+
export { SUPPORTED_CURRENCIES };
|
|
42
|
+
//# sourceMappingURL=currency-constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"currency-constants.js","names":[],"sources":["../../../src/utils/currency-constants.tsx"],"sourcesContent":["export type MoneyAmount = `${number}` | `${number}.${number}`;\n\nexport type Currency = {\n code: Uppercase<string>,\n decimals: number,\n stripeDecimals: number,\n};\n\nexport const SUPPORTED_CURRENCIES = [\n {\n code: 'USD',\n decimals: 2,\n stripeDecimals: 2,\n },\n {\n code: 'EUR',\n decimals: 2,\n stripeDecimals: 2,\n },\n {\n code: 'GBP',\n decimals: 2,\n stripeDecimals: 2,\n },\n {\n code: 'JPY',\n decimals: 0,\n stripeDecimals: 0,\n },\n {\n code: 'INR',\n decimals: 2,\n stripeDecimals: 2,\n },\n {\n code: 'AUD',\n decimals: 2,\n stripeDecimals: 2,\n },\n {\n code: 'CAD',\n decimals: 2,\n stripeDecimals: 2,\n },\n] as const satisfies Currency[];\n"],"mappings":";AAQA,MAAa,uBAAuB;CAClC;EACE,MAAM;EACN,UAAU;EACV,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,UAAU;EACV,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,UAAU;EACV,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,UAAU;EACV,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,UAAU;EACV,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,UAAU;EACV,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,UAAU;EACV,gBAAgB;EACjB;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region src/utils/dates.d.ts
|
|
2
|
+
declare function isWeekend(date: Date): boolean;
|
|
3
|
+
declare function fromNow(date: Date): string;
|
|
4
|
+
declare function fromNowDetailed(date: Date): {
|
|
5
|
+
result: string;
|
|
6
|
+
/**
|
|
7
|
+
* May be Infinity if the result will never change.
|
|
8
|
+
*/
|
|
9
|
+
secondsUntilChange: number;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Returns a string representation of the given date in the format expected by the `datetime-local` input type.
|
|
13
|
+
*/
|
|
14
|
+
declare function getInputDatetimeLocalString(date: Date): string;
|
|
15
|
+
type Interval = [number, 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year'];
|
|
16
|
+
type DayInterval = [number, 'day' | 'week' | 'month' | 'year'];
|
|
17
|
+
declare function subtractInterval(date: Date, interval: Interval): Date;
|
|
18
|
+
declare function addInterval(date: Date, interval: Interval): Date;
|
|
19
|
+
declare const FAR_FUTURE_DATE: Date;
|
|
20
|
+
declare function getIntervalsElapsed(anchor: Date, to: Date, repeat: DayInterval): number;
|
|
21
|
+
//#endregion
|
|
22
|
+
export { DayInterval, FAR_FUTURE_DATE, Interval, addInterval, fromNow, fromNowDetailed, getInputDatetimeLocalString, getIntervalsElapsed, isWeekend, subtractInterval };
|
|
23
|
+
//# sourceMappingURL=dates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dates.d.ts","names":[],"sources":["../../../src/utils/dates.tsx"],"mappings":";iBAIgB,SAAA,CAAU,IAAA,EAAM,IAAA;AAAA,iBAuBhB,OAAA,CAAQ,IAAA,EAAM,IAAA;AAAA,iBAiCd,eAAA,CAAgB,IAAA,EAAM,IAAA;EACpC,MAAA;EAzD8B;;AAuBhC;EAsCE,kBAAA;AAAA;;;AALF;iBAkDgB,2BAAA,CAA4B,IAAA,EAAM,IAAA;AAAA,KAkCtC,QAAA;AAAA,KACA,WAAA;AAAA,iBA+CI,gBAAA,CAAiB,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,QAAA,GAAW,IAAA;AAAA,iBAIlD,WAAA,CAAY,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,QAAA,GAAW,IAAA;AAAA,cAIhD,eAAA,EAAe,IAAA;AAAA,iBAUZ,mBAAA,CAAoB,MAAA,EAAQ,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,WAAA"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { intervalSchema } from "../schema-fields.js";
|
|
2
|
+
import { HexclaveAssertionError } from "./errors.js";
|
|
3
|
+
import { remainder } from "./math.js";
|
|
4
|
+
|
|
5
|
+
//#region src/utils/dates.tsx
|
|
6
|
+
function isWeekend(date) {
|
|
7
|
+
return date.getDay() === 0 || date.getDay() === 6;
|
|
8
|
+
}
|
|
9
|
+
(void 0)?.test("isWeekend", ({ expect }) => {
|
|
10
|
+
expect(isWeekend(new Date(2023, 0, 1))).toBe(true);
|
|
11
|
+
expect(isWeekend(new Date(2023, 0, 7))).toBe(true);
|
|
12
|
+
expect(isWeekend(new Date(2023, 0, 2))).toBe(false);
|
|
13
|
+
expect(isWeekend(new Date(2023, 0, 6))).toBe(false);
|
|
14
|
+
});
|
|
15
|
+
const agoUnits = [
|
|
16
|
+
[60, "second"],
|
|
17
|
+
[60, "minute"],
|
|
18
|
+
[24, "hour"],
|
|
19
|
+
[7, "day"],
|
|
20
|
+
[5, "week"]
|
|
21
|
+
];
|
|
22
|
+
function fromNow(date) {
|
|
23
|
+
return fromNowDetailed(date).result;
|
|
24
|
+
}
|
|
25
|
+
(void 0)?.test("fromNow", ({ expect }) => {
|
|
26
|
+
const fixedDate = /* @__PURE__ */ new Date("2023-01-15T12:00:00.000Z");
|
|
27
|
+
(void 0)?.vi.useFakeTimers();
|
|
28
|
+
(void 0)?.vi.setSystemTime(fixedDate);
|
|
29
|
+
expect(fromNow(/* @__PURE__ */ new Date("2023-01-15T11:59:50.000Z"))).toBe("just now");
|
|
30
|
+
expect(fromNow(/* @__PURE__ */ new Date("2023-01-15T11:59:00.000Z"))).toBe("1 minute ago");
|
|
31
|
+
expect(fromNow(/* @__PURE__ */ new Date("2023-01-15T11:00:00.000Z"))).toBe("1 hour ago");
|
|
32
|
+
expect(fromNow(/* @__PURE__ */ new Date("2023-01-14T12:00:00.000Z"))).toBe("1 day ago");
|
|
33
|
+
expect(fromNow(/* @__PURE__ */ new Date("2023-01-08T12:00:00.000Z"))).toBe("1 week ago");
|
|
34
|
+
expect(fromNow(/* @__PURE__ */ new Date("2023-01-15T12:00:10.000Z"))).toBe("just now");
|
|
35
|
+
expect(fromNow(/* @__PURE__ */ new Date("2023-01-15T12:01:00.000Z"))).toBe("in 1 minute");
|
|
36
|
+
expect(fromNow(/* @__PURE__ */ new Date("2023-01-15T13:00:00.000Z"))).toBe("in 1 hour");
|
|
37
|
+
expect(fromNow(/* @__PURE__ */ new Date("2023-01-16T12:00:00.000Z"))).toBe("in 1 day");
|
|
38
|
+
expect(fromNow(/* @__PURE__ */ new Date("2023-01-22T12:00:00.000Z"))).toBe("in 1 week");
|
|
39
|
+
expect(fromNow(/* @__PURE__ */ new Date("2022-01-15T12:00:00.000Z"))).toMatch(/Jan 15, 2022/);
|
|
40
|
+
(void 0)?.vi.useRealTimers();
|
|
41
|
+
});
|
|
42
|
+
function fromNowDetailed(date) {
|
|
43
|
+
if (!(date instanceof Date)) throw new Error(`fromNow only accepts Date objects (received: ${date})`);
|
|
44
|
+
const elapsed = (/* @__PURE__ */ new Date()).getTime() - date.getTime();
|
|
45
|
+
let remainingInUnit = Math.abs(elapsed) / 1e3;
|
|
46
|
+
if (remainingInUnit < 15) return {
|
|
47
|
+
result: "just now",
|
|
48
|
+
secondsUntilChange: 15 - remainingInUnit
|
|
49
|
+
};
|
|
50
|
+
let unitInSeconds = 1;
|
|
51
|
+
for (const [nextUnitSize, unitName] of agoUnits) {
|
|
52
|
+
const rounded = Math.round(remainingInUnit);
|
|
53
|
+
if (rounded < nextUnitSize) if (elapsed < 0) return {
|
|
54
|
+
result: `in ${rounded} ${unitName}${rounded === 1 ? "" : "s"}`,
|
|
55
|
+
secondsUntilChange: remainder((remainingInUnit - rounded + .5) * unitInSeconds, unitInSeconds)
|
|
56
|
+
};
|
|
57
|
+
else return {
|
|
58
|
+
result: `${rounded} ${unitName}${rounded === 1 ? "" : "s"} ago`,
|
|
59
|
+
secondsUntilChange: remainder((rounded - remainingInUnit - .5) * unitInSeconds, unitInSeconds)
|
|
60
|
+
};
|
|
61
|
+
unitInSeconds *= nextUnitSize;
|
|
62
|
+
remainingInUnit /= nextUnitSize;
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
result: date.toLocaleDateString("en-US", {
|
|
66
|
+
year: "numeric",
|
|
67
|
+
month: "short",
|
|
68
|
+
day: "numeric"
|
|
69
|
+
}),
|
|
70
|
+
secondsUntilChange: Infinity
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Returns a string representation of the given date in the format expected by the `datetime-local` input type.
|
|
75
|
+
*/
|
|
76
|
+
function getInputDatetimeLocalString(date) {
|
|
77
|
+
date = new Date(date);
|
|
78
|
+
date.setMinutes(date.getMinutes() - date.getTimezoneOffset());
|
|
79
|
+
return date.toISOString().slice(0, 19);
|
|
80
|
+
}
|
|
81
|
+
(void 0)?.test("getInputDatetimeLocalString", ({ expect }) => {
|
|
82
|
+
(void 0)?.vi.useFakeTimers();
|
|
83
|
+
expect(getInputDatetimeLocalString(/* @__PURE__ */ new Date("2023-01-15T12:30:45.000Z"))).toMatch(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/);
|
|
84
|
+
const dates = [
|
|
85
|
+
/* @__PURE__ */ new Date("2023-01-01T00:00:00.000Z"),
|
|
86
|
+
/* @__PURE__ */ new Date("2023-06-15T23:59:59.000Z"),
|
|
87
|
+
/* @__PURE__ */ new Date("2023-12-31T12:34:56.000Z")
|
|
88
|
+
];
|
|
89
|
+
for (const date of dates) expect(getInputDatetimeLocalString(date)).toMatch(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/);
|
|
90
|
+
(void 0)?.vi.useRealTimers();
|
|
91
|
+
});
|
|
92
|
+
function applyInterval(date, times, interval) {
|
|
93
|
+
if (!intervalSchema.isValidSync(interval)) throw new HexclaveAssertionError(`Invalid interval`, { interval });
|
|
94
|
+
const [amount, unit] = interval;
|
|
95
|
+
switch (unit) {
|
|
96
|
+
case "millisecond":
|
|
97
|
+
date.setMilliseconds(date.getMilliseconds() + amount * times);
|
|
98
|
+
break;
|
|
99
|
+
case "second":
|
|
100
|
+
date.setSeconds(date.getSeconds() + amount * times);
|
|
101
|
+
break;
|
|
102
|
+
case "minute":
|
|
103
|
+
date.setMinutes(date.getMinutes() + amount * times);
|
|
104
|
+
break;
|
|
105
|
+
case "hour":
|
|
106
|
+
date.setHours(date.getHours() + amount * times);
|
|
107
|
+
break;
|
|
108
|
+
case "day":
|
|
109
|
+
date.setDate(date.getDate() + amount * times);
|
|
110
|
+
break;
|
|
111
|
+
case "week":
|
|
112
|
+
date.setDate(date.getDate() + amount * times * 7);
|
|
113
|
+
break;
|
|
114
|
+
case "month":
|
|
115
|
+
date.setMonth(date.getMonth() + amount * times);
|
|
116
|
+
break;
|
|
117
|
+
case "year":
|
|
118
|
+
date.setFullYear(date.getFullYear() + amount * times);
|
|
119
|
+
break;
|
|
120
|
+
default: throw new HexclaveAssertionError(`Invalid interval despite schema validation`, { interval });
|
|
121
|
+
}
|
|
122
|
+
return date;
|
|
123
|
+
}
|
|
124
|
+
function subtractInterval(date, interval) {
|
|
125
|
+
return applyInterval(date, -1, interval);
|
|
126
|
+
}
|
|
127
|
+
function addInterval(date, interval) {
|
|
128
|
+
return applyInterval(date, 1, interval);
|
|
129
|
+
}
|
|
130
|
+
const FAR_FUTURE_DATE = /* @__PURE__ */ new Date(864e13);
|
|
131
|
+
function getMsPerDayIntervalUnit(unit) {
|
|
132
|
+
if (unit === "day") return 1440 * 60 * 1e3;
|
|
133
|
+
return 10080 * 60 * 1e3;
|
|
134
|
+
}
|
|
135
|
+
function getIntervalsElapsed(anchor, to, repeat) {
|
|
136
|
+
const [amount, unit] = repeat;
|
|
137
|
+
if (to <= anchor) return 0;
|
|
138
|
+
if (unit === "day" || unit === "week") {
|
|
139
|
+
const msPerUnit = getMsPerDayIntervalUnit(unit);
|
|
140
|
+
const diffMs = to.getTime() - anchor.getTime();
|
|
141
|
+
return Math.floor(diffMs / (msPerUnit * amount));
|
|
142
|
+
}
|
|
143
|
+
if (["month", "year"].includes(unit)) {
|
|
144
|
+
let count = 0;
|
|
145
|
+
let current = new Date(anchor);
|
|
146
|
+
for (;;) {
|
|
147
|
+
const next = addInterval(new Date(current), [amount, unit]);
|
|
148
|
+
if (next > to) break;
|
|
149
|
+
current = next;
|
|
150
|
+
count += 1;
|
|
151
|
+
}
|
|
152
|
+
return count;
|
|
153
|
+
}
|
|
154
|
+
return 0;
|
|
155
|
+
}
|
|
156
|
+
(void 0)?.test("getIntervalsElapsed", ({ expect }) => {
|
|
157
|
+
const anchor = /* @__PURE__ */ new Date("2025-01-01T00:00:00.000Z");
|
|
158
|
+
const to = /* @__PURE__ */ new Date("2025-01-15T00:00:00.000Z");
|
|
159
|
+
expect(getIntervalsElapsed(anchor, to, [1, "week"])).toBe(2);
|
|
160
|
+
expect(getIntervalsElapsed(anchor, to, [3, "day"])).toBe(4);
|
|
161
|
+
expect(getIntervalsElapsed(/* @__PURE__ */ new Date("2023-01-31T00:00:00.000Z"), /* @__PURE__ */ new Date("2023-03-01T00:00:00.000Z"), [1, "month"])).toBe(0);
|
|
162
|
+
expect(getIntervalsElapsed(/* @__PURE__ */ new Date("2020-01-01T00:00:00.000Z"), /* @__PURE__ */ new Date("2022-06-01T00:00:00.000Z"), [1, "year"])).toBe(2);
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
//#endregion
|
|
166
|
+
export { FAR_FUTURE_DATE, addInterval, fromNow, fromNowDetailed, getInputDatetimeLocalString, getIntervalsElapsed, isWeekend, subtractInterval };
|
|
167
|
+
//# sourceMappingURL=dates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dates.js","names":[],"sources":["../../../src/utils/dates.tsx"],"sourcesContent":["import { intervalSchema } from \"../schema-fields\";\nimport { HexclaveAssertionError } from \"./errors\";\nimport { remainder } from \"./math\";\n\nexport function isWeekend(date: Date): boolean {\n return date.getDay() === 0 || date.getDay() === 6;\n}\n\nimport.meta.vitest?.test(\"isWeekend\", ({ expect }) => {\n // Sunday (day 0)\n expect(isWeekend(new Date(2023, 0, 1))).toBe(true);\n // Saturday (day 6)\n expect(isWeekend(new Date(2023, 0, 7))).toBe(true);\n // Monday (day 1)\n expect(isWeekend(new Date(2023, 0, 2))).toBe(false);\n // Friday (day 5)\n expect(isWeekend(new Date(2023, 0, 6))).toBe(false);\n});\n\nconst agoUnits = [\n [60, 'second'],\n [60, 'minute'],\n [24, 'hour'],\n [7, 'day'],\n [5, 'week'],\n] as const;\n\nexport function fromNow(date: Date): string {\n return fromNowDetailed(date).result;\n}\n\nimport.meta.vitest?.test(\"fromNow\", ({ expect }) => {\n // Set a fixed date for testing\n const fixedDate = new Date(\"2023-01-15T12:00:00.000Z\");\n\n // Use Vitest's fake timers\n import.meta.vitest?.vi.useFakeTimers();\n import.meta.vitest?.vi.setSystemTime(fixedDate);\n\n // Test past times\n expect(fromNow(new Date(\"2023-01-15T11:59:50.000Z\"))).toBe(\"just now\");\n expect(fromNow(new Date(\"2023-01-15T11:59:00.000Z\"))).toBe(\"1 minute ago\");\n expect(fromNow(new Date(\"2023-01-15T11:00:00.000Z\"))).toBe(\"1 hour ago\");\n expect(fromNow(new Date(\"2023-01-14T12:00:00.000Z\"))).toBe(\"1 day ago\");\n expect(fromNow(new Date(\"2023-01-08T12:00:00.000Z\"))).toBe(\"1 week ago\");\n\n // Test future times\n expect(fromNow(new Date(\"2023-01-15T12:00:10.000Z\"))).toBe(\"just now\");\n expect(fromNow(new Date(\"2023-01-15T12:01:00.000Z\"))).toBe(\"in 1 minute\");\n expect(fromNow(new Date(\"2023-01-15T13:00:00.000Z\"))).toBe(\"in 1 hour\");\n expect(fromNow(new Date(\"2023-01-16T12:00:00.000Z\"))).toBe(\"in 1 day\");\n expect(fromNow(new Date(\"2023-01-22T12:00:00.000Z\"))).toBe(\"in 1 week\");\n\n // Test very old dates (should use date format)\n expect(fromNow(new Date(\"2022-01-15T12:00:00.000Z\"))).toMatch(/Jan 15, 2022/);\n\n // Restore real timers\n import.meta.vitest?.vi.useRealTimers();\n});\n\nexport function fromNowDetailed(date: Date): {\n result: string,\n /**\n * May be Infinity if the result will never change.\n */\n secondsUntilChange: number,\n} {\n if (!(date instanceof Date)) {\n throw new Error(`fromNow only accepts Date objects (received: ${date})`);\n }\n\n const now = new Date();\n const elapsed = now.getTime() - date.getTime();\n\n let remainingInUnit = Math.abs(elapsed) / 1000;\n if (remainingInUnit < 15) {\n return {\n result: 'just now',\n secondsUntilChange: 15 - remainingInUnit,\n };\n }\n let unitInSeconds = 1;\n for (const [nextUnitSize, unitName] of agoUnits) {\n const rounded = Math.round(remainingInUnit);\n if (rounded < nextUnitSize) {\n if (elapsed < 0) {\n return {\n result: `in ${rounded} ${unitName}${rounded === 1 ? '' : 's'}`,\n secondsUntilChange: remainder((remainingInUnit - rounded + 0.5) * unitInSeconds, unitInSeconds),\n };\n } else {\n return {\n result: `${rounded} ${unitName}${rounded === 1 ? '' : 's'} ago`,\n secondsUntilChange: remainder((rounded - remainingInUnit - 0.5) * unitInSeconds, unitInSeconds),\n };\n }\n }\n unitInSeconds *= nextUnitSize;\n remainingInUnit /= nextUnitSize;\n }\n\n return {\n result: date.toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' }),\n secondsUntilChange: Infinity,\n };\n}\n\n/**\n * Returns a string representation of the given date in the format expected by the `datetime-local` input type.\n */\nexport function getInputDatetimeLocalString(date: Date): string {\n date = new Date(date);\n date.setMinutes(date.getMinutes() - date.getTimezoneOffset());\n return date.toISOString().slice(0, 19);\n}\n\nimport.meta.vitest?.test(\"getInputDatetimeLocalString\", ({ expect }) => {\n // Use Vitest's fake timers to ensure consistent timezone behavior\n import.meta.vitest?.vi.useFakeTimers();\n\n // Test with a specific date\n const mockDate = new Date(\"2023-01-15T12:30:45.000Z\");\n const result = getInputDatetimeLocalString(mockDate);\n\n // The result should be in the format YYYY-MM-DDTHH:MM:SS\n expect(result).toMatch(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$/);\n\n // Test with different dates\n const dates = [\n new Date(\"2023-01-01T00:00:00.000Z\"),\n new Date(\"2023-06-15T23:59:59.000Z\"),\n new Date(\"2023-12-31T12:34:56.000Z\"),\n ];\n\n for (const date of dates) {\n const result = getInputDatetimeLocalString(date);\n expect(result).toMatch(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$/);\n }\n\n // Restore real timers\n import.meta.vitest?.vi.useRealTimers();\n});\n\n\nexport type Interval = [number, 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year'];\nexport type DayInterval = [number, 'day' | 'week' | 'month' | 'year'];\n\nfunction applyInterval(date: Date, times: number, interval: Interval): Date {\n if (!intervalSchema.isValidSync(interval)) {\n throw new HexclaveAssertionError(`Invalid interval`, { interval });\n }\n const [amount, unit] = interval;\n switch (unit) {\n case 'millisecond': {\n date.setMilliseconds(date.getMilliseconds() + amount * times);\n break;\n }\n case 'second': {\n date.setSeconds(date.getSeconds() + amount * times);\n break;\n }\n case 'minute': {\n date.setMinutes(date.getMinutes() + amount * times);\n break;\n }\n case 'hour': {\n date.setHours(date.getHours() + amount * times);\n break;\n }\n case 'day': {\n date.setDate(date.getDate() + amount * times);\n break;\n }\n case 'week': {\n date.setDate(date.getDate() + amount * times * 7);\n break;\n }\n case 'month': {\n date.setMonth(date.getMonth() + amount * times);\n break;\n }\n case 'year': {\n date.setFullYear(date.getFullYear() + amount * times);\n break;\n }\n default: {\n throw new HexclaveAssertionError(`Invalid interval despite schema validation`, { interval });\n }\n }\n return date;\n}\n\nexport function subtractInterval(date: Date, interval: Interval): Date {\n return applyInterval(date, -1, interval);\n}\n\nexport function addInterval(date: Date, interval: Interval): Date {\n return applyInterval(date, 1, interval);\n}\n\nexport const FAR_FUTURE_DATE = new Date(8640000000000000); // 13 Sep 275760 00:00:00 UTC\n\nfunction getMsPerDayIntervalUnit(unit: 'day' | 'week'): number {\n if (unit === 'day') {\n return 24 * 60 * 60 * 1000;\n }\n return 7 * 24 * 60 * 60 * 1000;\n}\n\n\nexport function getIntervalsElapsed(anchor: Date, to: Date, repeat: DayInterval): number {\n const [amount, unit] = repeat;\n if (to <= anchor) return 0;\n if (unit === 'day' || unit === 'week') {\n const msPerUnit = getMsPerDayIntervalUnit(unit);\n const diffMs = to.getTime() - anchor.getTime();\n return Math.floor(diffMs / (msPerUnit * amount));\n }\n if ([\"month\", \"year\"].includes(unit)) {\n let count = 0;\n let current = new Date(anchor);\n for (; ;) {\n const next = addInterval(new Date(current), [amount, unit]);\n if (next > to) break;\n current = next;\n count += 1;\n }\n return count;\n }\n return 0;\n}\n\nimport.meta.vitest?.test(\"getIntervalsElapsed\", ({ expect }) => {\n const anchor = new Date('2025-01-01T00:00:00.000Z');\n const to = new Date('2025-01-15T00:00:00.000Z');\n expect(getIntervalsElapsed(anchor, to, [1, 'week'])).toBe(2);\n expect(getIntervalsElapsed(anchor, to, [3, 'day'])).toBe(4);\n\n const mAnchor = new Date('2023-01-31T00:00:00.000Z');\n const mTo = new Date('2023-03-01T00:00:00.000Z');\n expect(getIntervalsElapsed(mAnchor, mTo, [1, 'month'])).toBe(0);\n\n const yAnchor = new Date('2020-01-01T00:00:00.000Z');\n const yTo = new Date('2022-06-01T00:00:00.000Z');\n expect(getIntervalsElapsed(yAnchor, yTo, [1, 'year'])).toBe(2);\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
//#region src/utils/dev-env-state-path.d.ts
|
|
2
|
+
declare function defaultStackDevEnvStatePath(): string;
|
|
3
|
+
declare function stackDevEnvStatePath(): string;
|
|
4
|
+
//#endregion
|
|
5
|
+
export { defaultStackDevEnvStatePath, stackDevEnvStatePath };
|
|
6
|
+
//# sourceMappingURL=dev-env-state-path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-env-state-path.d.ts","names":[],"sources":["../../../src/utils/dev-env-state-path.ts"],"mappings":";iBAGgB,2BAAA,CAAA;AAAA,iBAQA,oBAAA,CAAA"}
|