@actuate-media/cms-core 0.1.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/dist/__tests__/actions/document-crud.test.d.ts +2 -0
- package/dist/__tests__/actions/document-crud.test.d.ts.map +1 -0
- package/dist/__tests__/actions/document-crud.test.js +156 -0
- package/dist/__tests__/actions/document-crud.test.js.map +1 -0
- package/dist/__tests__/auth/password.test.d.ts +2 -0
- package/dist/__tests__/auth/password.test.d.ts.map +1 -0
- package/dist/__tests__/auth/password.test.js +102 -0
- package/dist/__tests__/auth/password.test.js.map +1 -0
- package/dist/__tests__/auth/session.test.d.ts +2 -0
- package/dist/__tests__/auth/session.test.d.ts.map +1 -0
- package/dist/__tests__/auth/session.test.js +66 -0
- package/dist/__tests__/auth/session.test.js.map +1 -0
- package/dist/__tests__/codegen/generate-types.test.d.ts +2 -0
- package/dist/__tests__/codegen/generate-types.test.d.ts.map +1 -0
- package/dist/__tests__/codegen/generate-types.test.js +173 -0
- package/dist/__tests__/codegen/generate-types.test.js.map +1 -0
- package/dist/__tests__/scheduling/scheduling.test.d.ts +2 -0
- package/dist/__tests__/scheduling/scheduling.test.d.ts.map +1 -0
- package/dist/__tests__/scheduling/scheduling.test.js +84 -0
- package/dist/__tests__/scheduling/scheduling.test.js.map +1 -0
- package/dist/__tests__/security/access.test.d.ts +2 -0
- package/dist/__tests__/security/access.test.d.ts.map +1 -0
- package/dist/__tests__/security/access.test.js +181 -0
- package/dist/__tests__/security/access.test.js.map +1 -0
- package/dist/__tests__/security/csrf.test.d.ts +2 -0
- package/dist/__tests__/security/csrf.test.d.ts.map +1 -0
- package/dist/__tests__/security/csrf.test.js +40 -0
- package/dist/__tests__/security/csrf.test.js.map +1 -0
- package/dist/__tests__/security/rate-limit.test.d.ts +2 -0
- package/dist/__tests__/security/rate-limit.test.d.ts.map +1 -0
- package/dist/__tests__/security/rate-limit.test.js +62 -0
- package/dist/__tests__/security/rate-limit.test.js.map +1 -0
- package/dist/__tests__/security/reauth.test.d.ts +2 -0
- package/dist/__tests__/security/reauth.test.d.ts.map +1 -0
- package/dist/__tests__/security/reauth.test.js +30 -0
- package/dist/__tests__/security/reauth.test.js.map +1 -0
- package/dist/__tests__/security/sanitize.test.d.ts +2 -0
- package/dist/__tests__/security/sanitize.test.d.ts.map +1 -0
- package/dist/__tests__/security/sanitize.test.js +75 -0
- package/dist/__tests__/security/sanitize.test.js.map +1 -0
- package/dist/__tests__/webhooks/webhooks.test.d.ts +2 -0
- package/dist/__tests__/webhooks/webhooks.test.d.ts.map +1 -0
- package/dist/__tests__/webhooks/webhooks.test.js +96 -0
- package/dist/__tests__/webhooks/webhooks.test.js.map +1 -0
- package/dist/a11y/index.d.ts +25 -0
- package/dist/a11y/index.d.ts.map +1 -0
- package/dist/a11y/index.js +88 -0
- package/dist/a11y/index.js.map +1 -0
- package/dist/actions.d.ts +42 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +391 -0
- package/dist/actions.js.map +1 -0
- package/dist/api/handler-factory.d.ts +7 -0
- package/dist/api/handler-factory.d.ts.map +1 -0
- package/dist/api/handler-factory.js +120 -0
- package/dist/api/handler-factory.js.map +1 -0
- package/dist/api/handlers.d.ts +4 -0
- package/dist/api/handlers.d.ts.map +1 -0
- package/dist/api/handlers.js +2119 -0
- package/dist/api/handlers.js.map +1 -0
- package/dist/api/index.d.ts +23 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +57 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/openapi.d.ts +3 -0
- package/dist/api/openapi.d.ts.map +1 -0
- package/dist/api/openapi.js +348 -0
- package/dist/api/openapi.js.map +1 -0
- package/dist/auth/index.d.ts +11 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +9 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/oauth.d.ts +84 -0
- package/dist/auth/oauth.d.ts.map +1 -0
- package/dist/auth/oauth.js +201 -0
- package/dist/auth/oauth.js.map +1 -0
- package/dist/auth/password.d.ts +13 -0
- package/dist/auth/password.d.ts.map +1 -0
- package/dist/auth/password.js +47 -0
- package/dist/auth/password.js.map +1 -0
- package/dist/auth/providers/github.d.ts +9 -0
- package/dist/auth/providers/github.d.ts.map +1 -0
- package/dist/auth/providers/github.js +10 -0
- package/dist/auth/providers/github.js.map +1 -0
- package/dist/auth/providers/google.d.ts +9 -0
- package/dist/auth/providers/google.d.ts.map +1 -0
- package/dist/auth/providers/google.js +10 -0
- package/dist/auth/providers/google.js.map +1 -0
- package/dist/auth/providers/microsoft.d.ts +9 -0
- package/dist/auth/providers/microsoft.d.ts.map +1 -0
- package/dist/auth/providers/microsoft.js +11 -0
- package/dist/auth/providers/microsoft.js.map +1 -0
- package/dist/auth/session.d.ts +21 -0
- package/dist/auth/session.d.ts.map +1 -0
- package/dist/auth/session.js +35 -0
- package/dist/auth/session.js.map +1 -0
- package/dist/auth/totp.d.ts +5 -0
- package/dist/auth/totp.d.ts.map +1 -0
- package/dist/auth/totp.js +86 -0
- package/dist/auth/totp.js.map +1 -0
- package/dist/backup/index.d.ts +19 -0
- package/dist/backup/index.d.ts.map +1 -0
- package/dist/backup/index.js +22 -0
- package/dist/backup/index.js.map +1 -0
- package/dist/cache/index.d.ts +15 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +32 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/client.d.ts +30 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +50 -0
- package/dist/client.js.map +1 -0
- package/dist/codegen/index.d.ts +4 -0
- package/dist/codegen/index.d.ts.map +1 -0
- package/dist/codegen/index.js +370 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/collections/index.d.ts +17 -0
- package/dist/collections/index.d.ts.map +1 -0
- package/dist/collections/index.js +29 -0
- package/dist/collections/index.js.map +1 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +74 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/types.d.ts +307 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +3 -0
- package/dist/config/types.js.map +1 -0
- package/dist/content/ai-api.d.ts +21 -0
- package/dist/content/ai-api.d.ts.map +1 -0
- package/dist/content/ai-api.js +19 -0
- package/dist/content/ai-api.js.map +1 -0
- package/dist/content/content-graph.d.ts +25 -0
- package/dist/content/content-graph.d.ts.map +1 -0
- package/dist/content/content-graph.js +40 -0
- package/dist/content/content-graph.js.map +1 -0
- package/dist/content/extract.d.ts +7 -0
- package/dist/content/extract.d.ts.map +1 -0
- package/dist/content/extract.js +33 -0
- package/dist/content/extract.js.map +1 -0
- package/dist/content/index.d.ts +8 -0
- package/dist/content/index.d.ts.map +1 -0
- package/dist/content/index.js +5 -0
- package/dist/content/index.js.map +1 -0
- package/dist/content/structured-data.d.ts +80 -0
- package/dist/content/structured-data.d.ts.map +1 -0
- package/dist/content/structured-data.js +295 -0
- package/dist/content/structured-data.js.map +1 -0
- package/dist/db/adapters/mysql.d.ts +5 -0
- package/dist/db/adapters/mysql.d.ts.map +1 -0
- package/dist/db/adapters/mysql.js +18 -0
- package/dist/db/adapters/mysql.js.map +1 -0
- package/dist/db/adapters/postgres.d.ts +7 -0
- package/dist/db/adapters/postgres.d.ts.map +1 -0
- package/dist/db/adapters/postgres.js +20 -0
- package/dist/db/adapters/postgres.js.map +1 -0
- package/dist/db/adapters/sqlite.d.ts +5 -0
- package/dist/db/adapters/sqlite.d.ts.map +1 -0
- package/dist/db/adapters/sqlite.js +19 -0
- package/dist/db/adapters/sqlite.js.map +1 -0
- package/dist/db/create-adapter.d.ts +11 -0
- package/dist/db/create-adapter.d.ts.map +1 -0
- package/dist/db/create-adapter.js +43 -0
- package/dist/db/create-adapter.js.map +1 -0
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +5 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db.d.ts +20 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +35 -0
- package/dist/db.js.map +1 -0
- package/dist/fields/index.d.ts +15 -0
- package/dist/fields/index.d.ts.map +1 -0
- package/dist/fields/index.js +87 -0
- package/dist/fields/index.js.map +1 -0
- package/dist/forms/analytics.d.ts +62 -0
- package/dist/forms/analytics.d.ts.map +1 -0
- package/dist/forms/analytics.js +95 -0
- package/dist/forms/analytics.js.map +1 -0
- package/dist/forms/attribution.d.ts +29 -0
- package/dist/forms/attribution.d.ts.map +1 -0
- package/dist/forms/attribution.js +216 -0
- package/dist/forms/attribution.js.map +1 -0
- package/dist/forms/index.d.ts +5 -0
- package/dist/forms/index.d.ts.map +1 -0
- package/dist/forms/index.js +3 -0
- package/dist/forms/index.js.map +1 -0
- package/dist/graphql/index.d.ts +11 -0
- package/dist/graphql/index.d.ts.map +1 -0
- package/dist/graphql/index.js +58 -0
- package/dist/graphql/index.js.map +1 -0
- package/dist/graphql/resolvers.d.ts +8 -0
- package/dist/graphql/resolvers.d.ts.map +1 -0
- package/dist/graphql/resolvers.js +93 -0
- package/dist/graphql/resolvers.js.map +1 -0
- package/dist/graphql/schema-builder.d.ts +3 -0
- package/dist/graphql/schema-builder.d.ts.map +1 -0
- package/dist/graphql/schema-builder.js +103 -0
- package/dist/graphql/schema-builder.js.map +1 -0
- package/dist/health/index.d.ts +27 -0
- package/dist/health/index.d.ts.map +1 -0
- package/dist/health/index.js +43 -0
- package/dist/health/index.js.map +1 -0
- package/dist/i18n/index.d.ts +22 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +37 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +81 -0
- package/dist/index.js.map +1 -0
- package/dist/media/index.d.ts +3 -0
- package/dist/media/index.d.ts.map +1 -0
- package/dist/media/index.js +2 -0
- package/dist/media/index.js.map +1 -0
- package/dist/media/optimize.d.ts +40 -0
- package/dist/media/optimize.d.ts.map +1 -0
- package/dist/media/optimize.js +137 -0
- package/dist/media/optimize.js.map +1 -0
- package/dist/middleware.d.ts +7 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +86 -0
- package/dist/middleware.js.map +1 -0
- package/dist/multisite/index.d.ts +20 -0
- package/dist/multisite/index.d.ts.map +1 -0
- package/dist/multisite/index.js +26 -0
- package/dist/multisite/index.js.map +1 -0
- package/dist/next/preview.d.ts +10 -0
- package/dist/next/preview.d.ts.map +1 -0
- package/dist/next/preview.js +17 -0
- package/dist/next/preview.js.map +1 -0
- package/dist/next.d.ts +9 -0
- package/dist/next.d.ts.map +1 -0
- package/dist/next.js +35 -0
- package/dist/next.js.map +1 -0
- package/dist/notifications/index.d.ts +20 -0
- package/dist/notifications/index.d.ts.map +1 -0
- package/dist/notifications/index.js +22 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/presence/index.d.ts +24 -0
- package/dist/presence/index.d.ts.map +1 -0
- package/dist/presence/index.js +99 -0
- package/dist/presence/index.js.map +1 -0
- package/dist/preview/index.d.ts +14 -0
- package/dist/preview/index.d.ts.map +1 -0
- package/dist/preview/index.js +45 -0
- package/dist/preview/index.js.map +1 -0
- package/dist/privacy/index.d.ts +33 -0
- package/dist/privacy/index.d.ts.map +1 -0
- package/dist/privacy/index.js +15 -0
- package/dist/privacy/index.js.map +1 -0
- package/dist/relationships/index.d.ts +13 -0
- package/dist/relationships/index.d.ts.map +1 -0
- package/dist/relationships/index.js +12 -0
- package/dist/relationships/index.js.map +1 -0
- package/dist/scheduling/index.d.ts +44 -0
- package/dist/scheduling/index.d.ts.map +1 -0
- package/dist/scheduling/index.js +119 -0
- package/dist/scheduling/index.js.map +1 -0
- package/dist/search/index.d.ts +25 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +168 -0
- package/dist/search/index.js.map +1 -0
- package/dist/security/access.d.ts +26 -0
- package/dist/security/access.d.ts.map +1 -0
- package/dist/security/access.js +92 -0
- package/dist/security/access.js.map +1 -0
- package/dist/security/anomaly-detection.d.ts +17 -0
- package/dist/security/anomaly-detection.d.ts.map +1 -0
- package/dist/security/anomaly-detection.js +17 -0
- package/dist/security/anomaly-detection.js.map +1 -0
- package/dist/security/api-key-enhanced.d.ts +25 -0
- package/dist/security/api-key-enhanced.d.ts.map +1 -0
- package/dist/security/api-key-enhanced.js +25 -0
- package/dist/security/api-key-enhanced.js.map +1 -0
- package/dist/security/audit.d.ts +39 -0
- package/dist/security/audit.d.ts.map +1 -0
- package/dist/security/audit.js +40 -0
- package/dist/security/audit.js.map +1 -0
- package/dist/security/breach-check.d.ts +3 -0
- package/dist/security/breach-check.d.ts.map +1 -0
- package/dist/security/breach-check.js +27 -0
- package/dist/security/breach-check.js.map +1 -0
- package/dist/security/cors.d.ts +11 -0
- package/dist/security/cors.d.ts.map +1 -0
- package/dist/security/cors.js +33 -0
- package/dist/security/cors.js.map +1 -0
- package/dist/security/csp-nonces.d.ts +5 -0
- package/dist/security/csp-nonces.d.ts.map +1 -0
- package/dist/security/csp-nonces.js +24 -0
- package/dist/security/csp-nonces.js.map +1 -0
- package/dist/security/csrf.d.ts +5 -0
- package/dist/security/csrf.d.ts.map +1 -0
- package/dist/security/csrf.js +20 -0
- package/dist/security/csrf.js.map +1 -0
- package/dist/security/encrypted-fields.d.ts +5 -0
- package/dist/security/encrypted-fields.d.ts.map +1 -0
- package/dist/security/encrypted-fields.js +40 -0
- package/dist/security/encrypted-fields.js.map +1 -0
- package/dist/security/headers.d.ts +11 -0
- package/dist/security/headers.d.ts.map +1 -0
- package/dist/security/headers.js +32 -0
- package/dist/security/headers.js.map +1 -0
- package/dist/security/index.d.ts +31 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +20 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/ip-allowlist.d.ts +3 -0
- package/dist/security/ip-allowlist.d.ts.map +1 -0
- package/dist/security/ip-allowlist.js +35 -0
- package/dist/security/ip-allowlist.js.map +1 -0
- package/dist/security/middleware.d.ts +20 -0
- package/dist/security/middleware.d.ts.map +1 -0
- package/dist/security/middleware.js +45 -0
- package/dist/security/middleware.js.map +1 -0
- package/dist/security/rate-limit.d.ts +24 -0
- package/dist/security/rate-limit.d.ts.map +1 -0
- package/dist/security/rate-limit.js +84 -0
- package/dist/security/rate-limit.js.map +1 -0
- package/dist/security/reauth.d.ts +15 -0
- package/dist/security/reauth.d.ts.map +1 -0
- package/dist/security/reauth.js +38 -0
- package/dist/security/reauth.js.map +1 -0
- package/dist/security/sanitize.d.ts +13 -0
- package/dist/security/sanitize.d.ts.map +1 -0
- package/dist/security/sanitize.js +34 -0
- package/dist/security/sanitize.js.map +1 -0
- package/dist/security/security-txt.d.ts +12 -0
- package/dist/security/security-txt.d.ts.map +1 -0
- package/dist/security/security-txt.js +19 -0
- package/dist/security/security-txt.js.map +1 -0
- package/dist/security/session-limits.d.ts +17 -0
- package/dist/security/session-limits.d.ts.map +1 -0
- package/dist/security/session-limits.js +14 -0
- package/dist/security/session-limits.js.map +1 -0
- package/dist/security/upload.d.ts +13 -0
- package/dist/security/upload.d.ts.map +1 -0
- package/dist/security/upload.js +34 -0
- package/dist/security/upload.js.map +1 -0
- package/dist/security/webhook.d.ts +12 -0
- package/dist/security/webhook.d.ts.map +1 -0
- package/dist/security/webhook.js +38 -0
- package/dist/security/webhook.js.map +1 -0
- package/dist/seo/analysis.d.ts +66 -0
- package/dist/seo/analysis.d.ts.map +1 -0
- package/dist/seo/analysis.js +594 -0
- package/dist/seo/analysis.js.map +1 -0
- package/dist/seo/index.d.ts +9 -0
- package/dist/seo/index.d.ts.map +1 -0
- package/dist/seo/index.js +5 -0
- package/dist/seo/index.js.map +1 -0
- package/dist/seo/llms-txt.d.ts +16 -0
- package/dist/seo/llms-txt.d.ts.map +1 -0
- package/dist/seo/llms-txt.js +70 -0
- package/dist/seo/llms-txt.js.map +1 -0
- package/dist/seo/meta-tags.d.ts +33 -0
- package/dist/seo/meta-tags.d.ts.map +1 -0
- package/dist/seo/meta-tags.js +159 -0
- package/dist/seo/meta-tags.js.map +1 -0
- package/dist/seo/title-templates.d.ts +17 -0
- package/dist/seo/title-templates.d.ts.map +1 -0
- package/dist/seo/title-templates.js +28 -0
- package/dist/seo/title-templates.js.map +1 -0
- package/dist/setup/index.d.ts +38 -0
- package/dist/setup/index.d.ts.map +1 -0
- package/dist/setup/index.js +77 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/storage/index.d.ts +11 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +11 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/templates/index.d.ts +16 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +23 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/upgrade/changelog.d.ts +13 -0
- package/dist/upgrade/changelog.d.ts.map +1 -0
- package/dist/upgrade/changelog.js +54 -0
- package/dist/upgrade/changelog.js.map +1 -0
- package/dist/upgrade/index.d.ts +7 -0
- package/dist/upgrade/index.d.ts.map +1 -0
- package/dist/upgrade/index.js +4 -0
- package/dist/upgrade/index.js.map +1 -0
- package/dist/upgrade/upgrade-pr.d.ts +16 -0
- package/dist/upgrade/upgrade-pr.d.ts.map +1 -0
- package/dist/upgrade/upgrade-pr.js +38 -0
- package/dist/upgrade/upgrade-pr.js.map +1 -0
- package/dist/upgrade/version-check.d.ts +17 -0
- package/dist/upgrade/version-check.d.ts.map +1 -0
- package/dist/upgrade/version-check.js +30 -0
- package/dist/upgrade/version-check.js.map +1 -0
- package/dist/webhooks/index.d.ts +46 -0
- package/dist/webhooks/index.d.ts.map +1 -0
- package/dist/webhooks/index.js +245 -0
- package/dist/webhooks/index.js.map +1 -0
- package/dist/workflow/index.d.ts +8 -0
- package/dist/workflow/index.d.ts.map +1 -0
- package/dist/workflow/index.js +56 -0
- package/dist/workflow/index.js.map +1 -0
- package/dist/workflows/index.d.ts +30 -0
- package/dist/workflows/index.d.ts.map +1 -0
- package/dist/workflows/index.js +14 -0
- package/dist/workflows/index.js.map +1 -0
- package/generated/browser.ts +109 -0
- package/generated/client.ts +133 -0
- package/generated/commonInputTypes.ts +709 -0
- package/generated/enums.ts +125 -0
- package/generated/internal/class.ts +376 -0
- package/generated/internal/prismaNamespace.ts +2617 -0
- package/generated/internal/prismaNamespaceBrowser.ts +611 -0
- package/generated/models/ApiKey.ts +1550 -0
- package/generated/models/AuditLog.ts +1206 -0
- package/generated/models/BackupRecord.ts +1250 -0
- package/generated/models/ContentLock.ts +1472 -0
- package/generated/models/ContentTemplate.ts +1416 -0
- package/generated/models/Document.ts +3005 -0
- package/generated/models/Folder.ts +1904 -0
- package/generated/models/FormSubmission.ts +1200 -0
- package/generated/models/InAppNotification.ts +1457 -0
- package/generated/models/Media.ts +2340 -0
- package/generated/models/MediaUsage.ts +1472 -0
- package/generated/models/OAuthAccount.ts +1463 -0
- package/generated/models/Redirect.ts +1284 -0
- package/generated/models/Session.ts +1492 -0
- package/generated/models/Site.ts +1206 -0
- package/generated/models/User.ts +3513 -0
- package/generated/models/Version.ts +1511 -0
- package/generated/models/WorkflowState.ts +1514 -0
- package/generated/models.ts +29 -0
- package/package.json +83 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { createHmac } from 'crypto';
|
|
2
|
+
const TOTP_PERIOD = 30;
|
|
3
|
+
const TOTP_DIGITS = 6;
|
|
4
|
+
export function generateTOTPSecret() {
|
|
5
|
+
const bytes = new Uint8Array(20);
|
|
6
|
+
crypto.getRandomValues(bytes);
|
|
7
|
+
return base32Encode(bytes);
|
|
8
|
+
}
|
|
9
|
+
export function generateTOTPUri(secret, email, issuer = 'Actuate CMS') {
|
|
10
|
+
return `otpauth://totp/${encodeURIComponent(issuer)}:${encodeURIComponent(email)}?secret=${secret}&issuer=${encodeURIComponent(issuer)}&algorithm=SHA1&digits=${TOTP_DIGITS}&period=${TOTP_PERIOD}`;
|
|
11
|
+
}
|
|
12
|
+
export function verifyTOTP(token, secret, window = 1) {
|
|
13
|
+
const now = Math.floor(Date.now() / 1000);
|
|
14
|
+
for (let i = -window; i <= window; i++) {
|
|
15
|
+
const counter = Math.floor((now + i * TOTP_PERIOD) / TOTP_PERIOD);
|
|
16
|
+
const expected = generateHOTP(secret, counter);
|
|
17
|
+
if (timingSafeEqual(token, expected))
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
function generateHOTP(secret, counter) {
|
|
23
|
+
const decodedSecret = base32Decode(secret);
|
|
24
|
+
const buffer = Buffer.alloc(8);
|
|
25
|
+
for (let i = 7; i >= 0; i--) {
|
|
26
|
+
buffer[i] = counter & 0xff;
|
|
27
|
+
counter = counter >> 8;
|
|
28
|
+
}
|
|
29
|
+
const hmac = createHmac('sha1', decodedSecret);
|
|
30
|
+
hmac.update(buffer);
|
|
31
|
+
const digest = hmac.digest();
|
|
32
|
+
const offset = digest[digest.length - 1] & 0x0f;
|
|
33
|
+
const code = ((digest[offset] & 0x7f) << 24) | ((digest[offset + 1] & 0xff) << 16) | ((digest[offset + 2] & 0xff) << 8) | (digest[offset + 3] & 0xff);
|
|
34
|
+
return String(code % 10 ** TOTP_DIGITS).padStart(TOTP_DIGITS, '0');
|
|
35
|
+
}
|
|
36
|
+
function timingSafeEqual(a, b) {
|
|
37
|
+
if (a.length !== b.length)
|
|
38
|
+
return false;
|
|
39
|
+
let result = 0;
|
|
40
|
+
for (let i = 0; i < a.length; i++) {
|
|
41
|
+
result |= a.charCodeAt(i) ^ b.charCodeAt(i);
|
|
42
|
+
}
|
|
43
|
+
return result === 0;
|
|
44
|
+
}
|
|
45
|
+
const BASE32_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
|
|
46
|
+
function base32Encode(data) {
|
|
47
|
+
let bits = 0, value = 0, output = '';
|
|
48
|
+
for (const byte of data) {
|
|
49
|
+
value = (value << 8) | byte;
|
|
50
|
+
bits += 8;
|
|
51
|
+
while (bits >= 5) {
|
|
52
|
+
output += BASE32_CHARS[(value >>> (bits - 5)) & 31];
|
|
53
|
+
bits -= 5;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (bits > 0)
|
|
57
|
+
output += BASE32_CHARS[(value << (5 - bits)) & 31];
|
|
58
|
+
return output;
|
|
59
|
+
}
|
|
60
|
+
function base32Decode(encoded) {
|
|
61
|
+
const cleaned = encoded.replace(/=+$/, '').toUpperCase();
|
|
62
|
+
let bits = 0, value = 0;
|
|
63
|
+
const output = [];
|
|
64
|
+
for (const char of cleaned) {
|
|
65
|
+
const idx = BASE32_CHARS.indexOf(char);
|
|
66
|
+
if (idx === -1)
|
|
67
|
+
continue;
|
|
68
|
+
value = (value << 5) | idx;
|
|
69
|
+
bits += 5;
|
|
70
|
+
if (bits >= 8) {
|
|
71
|
+
output.push((value >>> (bits - 8)) & 0xff);
|
|
72
|
+
bits -= 8;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return Buffer.from(output);
|
|
76
|
+
}
|
|
77
|
+
export function generateBackupCodes(count = 8) {
|
|
78
|
+
const codes = [];
|
|
79
|
+
for (let i = 0; i < count; i++) {
|
|
80
|
+
const bytes = new Uint8Array(5);
|
|
81
|
+
crypto.getRandomValues(bytes);
|
|
82
|
+
codes.push(Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('').slice(0, 8));
|
|
83
|
+
}
|
|
84
|
+
return codes;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=totp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"totp.js","sourceRoot":"","sources":["../../src/auth/totp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface BackupMetadata {
|
|
2
|
+
id: string;
|
|
3
|
+
filename: string;
|
|
4
|
+
storageKey: string;
|
|
5
|
+
sizeBytes: number;
|
|
6
|
+
type: "full" | "incremental" | "media";
|
|
7
|
+
metadata?: Record<string, unknown>;
|
|
8
|
+
createdAt: Date;
|
|
9
|
+
}
|
|
10
|
+
export interface BackupProvider {
|
|
11
|
+
createBackup(type: BackupMetadata["type"]): Promise<BackupMetadata>;
|
|
12
|
+
restoreBackup(backupId: string): Promise<void>;
|
|
13
|
+
listBackups(): Promise<BackupMetadata[]>;
|
|
14
|
+
deleteBackup(backupId: string): Promise<void>;
|
|
15
|
+
getDownloadUrl(backupId: string): Promise<string>;
|
|
16
|
+
}
|
|
17
|
+
/** Create a database-backed backup provider. */
|
|
18
|
+
export declare function createBackupProvider(_db: unknown, _storageAdapter: unknown): BackupProvider;
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/backup/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACpE,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,WAAW,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACzC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACnD;AAED,gDAAgD;AAChD,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,OAAO,EACZ,eAAe,EAAE,OAAO,GACvB,cAAc,CAmBhB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** Create a database-backed backup provider. */
|
|
2
|
+
export function createBackupProvider(_db, _storageAdapter) {
|
|
3
|
+
return {
|
|
4
|
+
async createBackup(_type) {
|
|
5
|
+
// TODO: pg_dump or logical export, upload to storage, record in actuate_backup_records
|
|
6
|
+
throw new Error("Not implemented");
|
|
7
|
+
},
|
|
8
|
+
async restoreBackup(_backupId) {
|
|
9
|
+
throw new Error("Not implemented");
|
|
10
|
+
},
|
|
11
|
+
async listBackups() {
|
|
12
|
+
throw new Error("Not implemented");
|
|
13
|
+
},
|
|
14
|
+
async deleteBackup(_backupId) {
|
|
15
|
+
throw new Error("Not implemented");
|
|
16
|
+
},
|
|
17
|
+
async getDownloadUrl(_backupId) {
|
|
18
|
+
throw new Error("Not implemented");
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/backup/index.ts"],"names":[],"mappings":"AAkBA,gDAAgD;AAChD,MAAM,UAAU,oBAAoB,CAClC,GAAY,EACZ,eAAwB;IAExB,OAAO;QACL,KAAK,CAAC,YAAY,CAAC,KAAK;YACtB,uFAAuF;YACvF,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QACD,KAAK,CAAC,aAAa,CAAC,SAAS;YAC3B,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QACD,KAAK,CAAC,WAAW;YACf,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QACD,KAAK,CAAC,YAAY,CAAC,SAAS;YAC1B,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QACD,KAAK,CAAC,cAAc,CAAC,SAAS;YAC5B,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { CacheAdapter } from "../config/types";
|
|
2
|
+
export interface CacheEntry<T = unknown> {
|
|
3
|
+
value: T;
|
|
4
|
+
tags: string[];
|
|
5
|
+
expiresAt?: number;
|
|
6
|
+
}
|
|
7
|
+
/** Wrap a computation with tag-based caching. */
|
|
8
|
+
export declare function cached<T>(adapter: CacheAdapter, key: string, tags: string[], ttl: number, fn: () => Promise<T>): Promise<T>;
|
|
9
|
+
/** Invalidate all cache entries associated with a tag. */
|
|
10
|
+
export declare function revalidateTag(adapter: CacheAdapter, tag: string): Promise<void>;
|
|
11
|
+
/** Build a cache key from a collection, operation, and parameters. */
|
|
12
|
+
export declare function buildCacheKey(collection: string, operation: string, params?: Record<string, unknown>): string;
|
|
13
|
+
/** Get the standard cache tags for a document. */
|
|
14
|
+
export declare function getDocumentCacheTags(collection: string, documentId?: string): string[];
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,OAAO;IACrC,KAAK,EAAE,CAAC,CAAC;IACT,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iDAAiD;AACjD,wBAAsB,MAAM,CAAC,CAAC,EAC5B,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAOZ;AAED,0DAA0D;AAC1D,wBAAsB,aAAa,CACjC,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,sEAAsE;AACtE,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CAUR;AAED,kDAAkD;AAClD,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,EAAE,CAIV"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** Wrap a computation with tag-based caching. */
|
|
2
|
+
export async function cached(adapter, key, tags, ttl, fn) {
|
|
3
|
+
const existing = await adapter.get(key);
|
|
4
|
+
if (existing)
|
|
5
|
+
return existing.value;
|
|
6
|
+
const value = await fn();
|
|
7
|
+
await adapter.set(key, { value, tags, expiresAt: Date.now() + ttl }, ttl);
|
|
8
|
+
return value;
|
|
9
|
+
}
|
|
10
|
+
/** Invalidate all cache entries associated with a tag. */
|
|
11
|
+
export async function revalidateTag(adapter, tag) {
|
|
12
|
+
await adapter.invalidateTag(tag);
|
|
13
|
+
}
|
|
14
|
+
/** Build a cache key from a collection, operation, and parameters. */
|
|
15
|
+
export function buildCacheKey(collection, operation, params) {
|
|
16
|
+
const base = `actuate:${collection}:${operation}`;
|
|
17
|
+
if (!params)
|
|
18
|
+
return base;
|
|
19
|
+
const sorted = Object.entries(params)
|
|
20
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
21
|
+
.map(([k, v]) => `${k}=${JSON.stringify(v)}`)
|
|
22
|
+
.join("&");
|
|
23
|
+
return `${base}:${sorted}`;
|
|
24
|
+
}
|
|
25
|
+
/** Get the standard cache tags for a document. */
|
|
26
|
+
export function getDocumentCacheTags(collection, documentId) {
|
|
27
|
+
const tags = [`collection:${collection}`];
|
|
28
|
+
if (documentId)
|
|
29
|
+
tags.push(`doc:${documentId}`);
|
|
30
|
+
return tags;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAQA,iDAAiD;AACjD,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,OAAqB,EACrB,GAAW,EACX,IAAc,EACd,GAAW,EACX,EAAoB;IAEpB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAgB,GAAG,CAAC,CAAC;IACvD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC;IAEpC,MAAM,KAAK,GAAG,MAAM,EAAE,EAAE,CAAC;IACzB,MAAM,OAAO,CAAC,GAAG,CAAgB,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;IACzF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAqB,EACrB,GAAW;IAEX,MAAM,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,aAAa,CAC3B,UAAkB,EAClB,SAAiB,EACjB,MAAgC;IAEhC,MAAM,IAAI,GAAG,WAAW,UAAU,IAAI,SAAS,EAAE,CAAC;IAClD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SAClC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SACtC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC;AAC7B,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,oBAAoB,CAClC,UAAkB,EAClB,UAAmB;IAEnB,MAAM,IAAI,GAAG,CAAC,cAAc,UAAU,EAAE,CAAC,CAAC;IAC1C,IAAI,UAAU;QAAE,IAAI,CAAC,IAAI,CAAC,OAAO,UAAU,EAAE,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface FindOptions {
|
|
2
|
+
page?: number;
|
|
3
|
+
pageSize?: number;
|
|
4
|
+
sort?: string;
|
|
5
|
+
order?: "asc" | "desc";
|
|
6
|
+
where?: Record<string, unknown>;
|
|
7
|
+
locale?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface FindResult<T = Record<string, unknown>> {
|
|
10
|
+
docs: T[];
|
|
11
|
+
total: number;
|
|
12
|
+
page: number;
|
|
13
|
+
pageSize: number;
|
|
14
|
+
totalPages: number;
|
|
15
|
+
}
|
|
16
|
+
export interface CollectionClient<T = Record<string, unknown>> {
|
|
17
|
+
find(options?: FindOptions): Promise<FindResult<T>>;
|
|
18
|
+
findById(id: string): Promise<T | null>;
|
|
19
|
+
findBySlug(slug: string): Promise<T | null>;
|
|
20
|
+
}
|
|
21
|
+
export interface GlobalClient<T = Record<string, unknown>> {
|
|
22
|
+
get(): Promise<T | null>;
|
|
23
|
+
}
|
|
24
|
+
export interface CMSClient {
|
|
25
|
+
collection<T = Record<string, unknown>>(slug: string): CollectionClient<T>;
|
|
26
|
+
global<T = Record<string, unknown>>(slug: string): GlobalClient<T>;
|
|
27
|
+
}
|
|
28
|
+
/** Create a typed CMS client for frontend data access. */
|
|
29
|
+
export declare function createCMSClient(baseUrl: string, apiKey?: string): CMSClient;
|
|
30
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACrD,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC3D,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACxC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvD,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;CACpE;AAED,0DAA0D;AAC1D,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CA8C3E"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/** Create a typed CMS client for frontend data access. */
|
|
2
|
+
export function createCMSClient(baseUrl, apiKey) {
|
|
3
|
+
const headers = {
|
|
4
|
+
"Content-Type": "application/json",
|
|
5
|
+
};
|
|
6
|
+
if (apiKey)
|
|
7
|
+
headers["Authorization"] = `Bearer ${apiKey}`;
|
|
8
|
+
async function fetchApi(path) {
|
|
9
|
+
const response = await fetch(`${baseUrl}${path}`, { headers });
|
|
10
|
+
if (!response.ok) {
|
|
11
|
+
throw new Error(`CMS API error: ${response.status} ${response.statusText}`);
|
|
12
|
+
}
|
|
13
|
+
return response.json();
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
collection(slug) {
|
|
17
|
+
return {
|
|
18
|
+
async find(options) {
|
|
19
|
+
const params = new URLSearchParams();
|
|
20
|
+
if (options?.page)
|
|
21
|
+
params.set("page", String(options.page));
|
|
22
|
+
if (options?.pageSize)
|
|
23
|
+
params.set("pageSize", String(options.pageSize));
|
|
24
|
+
if (options?.sort)
|
|
25
|
+
params.set("sort", options.sort);
|
|
26
|
+
if (options?.order)
|
|
27
|
+
params.set("order", options.order);
|
|
28
|
+
if (options?.locale)
|
|
29
|
+
params.set("locale", options.locale);
|
|
30
|
+
const qs = params.toString();
|
|
31
|
+
return fetchApi(`/api/collections/${slug}${qs ? `?${qs}` : ""}`);
|
|
32
|
+
},
|
|
33
|
+
async findById(id) {
|
|
34
|
+
return fetchApi(`/api/collections/${slug}/${id}`);
|
|
35
|
+
},
|
|
36
|
+
async findBySlug(slugValue) {
|
|
37
|
+
return fetchApi(`/api/collections/${slug}/slug/${slugValue}`);
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
},
|
|
41
|
+
global(slug) {
|
|
42
|
+
return {
|
|
43
|
+
async get() {
|
|
44
|
+
return fetchApi(`/api/globals/${slug}`);
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAgCA,0DAA0D;AAC1D,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,MAAe;IAC9D,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IACF,IAAI,MAAM;QAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,EAAE,CAAC;IAE1D,KAAK,UAAU,QAAQ,CAAI,IAAY;QACrC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;IACvC,CAAC;IAED,OAAO;QACL,UAAU,CAA8B,IAAY;YAClD,OAAO;gBACL,KAAK,CAAC,IAAI,CAAC,OAAqB;oBAC9B,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;oBACrC,IAAI,OAAO,EAAE,IAAI;wBAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC5D,IAAI,OAAO,EAAE,QAAQ;wBAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACxE,IAAI,OAAO,EAAE,IAAI;wBAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;oBACpD,IAAI,OAAO,EAAE,KAAK;wBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;oBACvD,IAAI,OAAO,EAAE,MAAM;wBAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;oBAC1D,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;oBAC7B,OAAO,QAAQ,CAAgB,oBAAoB,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAClF,CAAC;gBAED,KAAK,CAAC,QAAQ,CAAC,EAAU;oBACvB,OAAO,QAAQ,CAAW,oBAAoB,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC9D,CAAC;gBAED,KAAK,CAAC,UAAU,CAAC,SAAiB;oBAChC,OAAO,QAAQ,CAAW,oBAAoB,IAAI,SAAS,SAAS,EAAE,CAAC,CAAC;gBAC1E,CAAC;aACF,CAAC;QACJ,CAAC;QAED,MAAM,CAA8B,IAAY;YAC9C,OAAO;gBACL,KAAK,CAAC,GAAG;oBACP,OAAO,QAAQ,CAAW,gBAAgB,IAAI,EAAE,CAAC,CAAC;gBACpD,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/codegen/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAIjB,MAAM,oBAAoB,CAAC;AAc5B,wBAAgB,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAkD9D;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAQhD"}
|