@estifanos-sh/convex-auth 0.0.1-preview.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/README.md +52 -0
- package/dist/_generated/component.d.ts +2981 -0
- package/dist/bin.js +7194 -0
- package/dist/browser/index.d.ts +22 -0
- package/dist/browser/index.js +61 -0
- package/dist/browser/locks.js +20 -0
- package/dist/browser/navigation.js +14 -0
- package/dist/browser/runtime.js +90 -0
- package/dist/browser/webauthn.js +99 -0
- package/dist/client/core/types.d.ts +615 -0
- package/dist/client/core/types.js +23 -0
- package/dist/client/errors.js +30 -0
- package/dist/client/factors/device.js +100 -0
- package/dist/client/factors/totp.js +111 -0
- package/dist/client/factors/webauthn.js +69 -0
- package/dist/client/index.d.ts +60 -0
- package/dist/client/index.js +976 -0
- package/dist/client/runtime/invite.js +50 -0
- package/dist/client/runtime/mutex.js +25 -0
- package/dist/client/runtime/proxy.js +75 -0
- package/dist/client/runtime/storage.js +65 -0
- package/dist/component/_generated/api.js +26 -0
- package/dist/component/_generated/component.d.ts +2981 -0
- package/dist/component/_generated/component.js +1 -0
- package/dist/component/_generated/dataModel.js +1 -0
- package/dist/component/_generated/server.js +74 -0
- package/dist/component/account.js +197 -0
- package/dist/component/connection/audit.js +152 -0
- package/dist/component/connection/cache.js +205 -0
- package/dist/component/connection/domain/verification.js +63 -0
- package/dist/component/connection/domain.js +108 -0
- package/dist/component/connection/saml/assertion.js +41 -0
- package/dist/component/connection/saml/request.js +61 -0
- package/dist/component/connection/scim/config.js +55 -0
- package/dist/component/connection/scim/identity.js +162 -0
- package/dist/component/connection/secret.js +65 -0
- package/dist/component/connection/webhook/delivery.js +396 -0
- package/dist/component/connection/webhook/endpoint.js +77 -0
- package/dist/component/connection.js +204 -0
- package/dist/component/convex.config.d.ts +7 -0
- package/dist/component/convex.config.js +15 -0
- package/dist/component/crons.js +27 -0
- package/dist/component/event.js +341 -0
- package/dist/component/factor/device.js +141 -0
- package/dist/component/factor/passkey.js +385 -0
- package/dist/component/factor/totp.js +253 -0
- package/dist/component/functions.js +3 -0
- package/dist/component/group/active.js +63 -0
- package/dist/component/group/invite.js +300 -0
- package/dist/component/group/member.js +188 -0
- package/dist/component/group.js +431 -0
- package/dist/component/http.js +9 -0
- package/dist/component/index.d.ts +5 -0
- package/dist/component/index.js +3 -0
- package/dist/component/limits.js +103 -0
- package/dist/component/maintenance.js +205 -0
- package/dist/component/migrations.js +277 -0
- package/dist/component/model.d.ts +384 -0
- package/dist/component/model.js +709 -0
- package/dist/component/modules.js +53 -0
- package/dist/component/oauth/client.js +196 -0
- package/dist/component/oauth/code.js +97 -0
- package/dist/component/oauth/refresh.js +230 -0
- package/dist/component/schema.d.ts +1530 -0
- package/dist/component/schema.js +401 -0
- package/dist/component/session.js +134 -0
- package/dist/component/token/pkce.js +121 -0
- package/dist/component/token/refresh.js +189 -0
- package/dist/component/token/verification.js +155 -0
- package/dist/component/user/email.js +147 -0
- package/dist/component/user/key.js +273 -0
- package/dist/component/user.js +173 -0
- package/dist/core/index.d.ts +531 -0
- package/dist/core/index.js +81 -0
- package/dist/expo/index.d.ts +43 -0
- package/dist/expo/index.js +131 -0
- package/dist/expo/webauthn.js +88 -0
- package/dist/node_modules/.pnpm/@opentelemetry_api-logs@0.214.0/node_modules/@opentelemetry/api-logs/build/src/NoopLogger.d.ts +2 -0
- package/dist/node_modules/.pnpm/@opentelemetry_api-logs@0.214.0/node_modules/@opentelemetry/api-logs/build/src/api/logs.d.ts +3 -0
- package/dist/node_modules/.pnpm/@opentelemetry_api-logs@0.214.0/node_modules/@opentelemetry/api-logs/build/src/index.d.ts +7 -0
- package/dist/node_modules/.pnpm/@opentelemetry_api-logs@0.214.0/node_modules/@opentelemetry/api-logs/build/src/types/AnyValue.d.ts +21 -0
- package/dist/node_modules/.pnpm/@opentelemetry_api-logs@0.214.0/node_modules/@opentelemetry/api-logs/build/src/types/LogRecord.d.ts +36 -0
- package/dist/node_modules/.pnpm/@opentelemetry_api-logs@0.214.0/node_modules/@opentelemetry/api-logs/build/src/types/Logger.d.ts +1 -0
- package/dist/node_modules/.pnpm/@opentelemetry_api-logs@0.214.0/node_modules/@opentelemetry/api-logs/build/src/types/LoggerOptions.d.ts +1 -0
- package/dist/node_modules/.pnpm/@opentelemetry_api-logs@0.214.0/node_modules/@opentelemetry/api-logs/build/src/types/LoggerProvider.d.ts +2 -0
- package/dist/node_modules/.pnpm/@opentelemetry_core@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/core/build/src/baggage/propagation/W3CBaggagePropagator.d.ts +1 -0
- package/dist/node_modules/.pnpm/@opentelemetry_core@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/core/build/src/baggage/utils.d.ts +1 -0
- package/dist/node_modules/.pnpm/@opentelemetry_core@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/core/build/src/common/attributes.d.ts +1 -0
- package/dist/node_modules/.pnpm/@opentelemetry_core@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/core/build/src/common/global-error-handler.d.ts +2 -0
- package/dist/node_modules/.pnpm/@opentelemetry_core@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/core/build/src/common/logging-error-handler.d.ts +1 -0
- package/dist/node_modules/.pnpm/@opentelemetry_core@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/core/build/src/common/time.d.ts +1 -0
- package/dist/node_modules/.pnpm/@opentelemetry_core@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/core/build/src/common/types.d.ts +16 -0
- package/dist/node_modules/.pnpm/@opentelemetry_core@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/core/build/src/index.d.ts +13 -0
- package/dist/node_modules/.pnpm/@opentelemetry_core@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/core/build/src/propagation/composite.d.ts +1 -0
- package/dist/node_modules/.pnpm/@opentelemetry_core@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/core/build/src/trace/TraceState.d.ts +1 -0
- package/dist/node_modules/.pnpm/@opentelemetry_core@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/core/build/src/trace/W3CTraceContextPropagator.d.ts +1 -0
- package/dist/node_modules/.pnpm/@opentelemetry_core@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/core/build/src/trace/rpc-metadata.d.ts +1 -0
- package/dist/node_modules/.pnpm/@opentelemetry_core@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/core/build/src/trace/suppress-tracing.d.ts +1 -0
- package/dist/node_modules/.pnpm/@opentelemetry_core@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/core/build/src/utils/configuration.d.ts +1 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-logs@0.214.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-logs/build/src/LogRecordProcessor.d.ts +24 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-logs@0.214.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-logs/build/src/LoggerProvider.d.ts +2 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-logs@0.214.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-logs/build/src/config/LoggerConfigurators.d.ts +1 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-logs@0.214.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-logs/build/src/export/BatchLogRecordProcessorBase.d.ts +4 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-logs@0.214.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-logs/build/src/export/ConsoleLogRecordExporter.d.ts +3 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-logs@0.214.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-logs/build/src/export/InMemoryLogRecordExporter.d.ts +3 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-logs@0.214.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-logs/build/src/export/LogRecordExporter.d.ts +2 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-logs@0.214.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-logs/build/src/export/ReadableLogRecord.d.ts +4 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-logs@0.214.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-logs/build/src/export/SdkLogRecord.d.ts +71 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-logs@0.214.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-logs/build/src/export/SimpleLogRecordProcessor.d.ts +3 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-logs@0.214.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-logs/build/src/index.d.ts +11 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-logs@0.214.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-logs/build/src/platform/index.d.ts +1 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-logs@0.214.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-logs/build/src/platform/node/export/BatchLogRecordProcessor.d.ts +2 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-logs@0.214.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-logs/build/src/platform/node/index.d.ts +1 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-logs@0.214.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-logs/build/src/types.d.ts +4 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/InstrumentDescriptor.d.ts +3 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/MeterProvider.d.ts +4 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Drop.d.ts +4 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/ExponentialHistogram.d.ts +5 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Histogram.d.ts +5 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/LastValue.d.ts +5 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Sum.d.ts +5 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/index.d.ts +6 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/types.d.ts +53 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/export/AggregationSelector.d.ts +16 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/export/AggregationTemporality.d.ts +11 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/export/CardinalitySelector.d.ts +10 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/export/ConsoleMetricExporter.d.ts +4 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/export/InMemoryMetricExporter.d.ts +3 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricData.d.ts +148 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricExporter.d.ts +3 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricProducer.d.ts +27 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricReader.d.ts +138 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/export/PeriodicExportingMetricReader.d.ts +3 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/index.d.ts +15 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/types.d.ts +10 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/utils.d.ts +2 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/view/Aggregation.d.ts +4 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/view/AggregationOption.d.ts +41 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/view/AttributesProcessor.d.ts +1 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/view/InstrumentSelector.d.ts +1 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/view/View.d.ts +5 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/BasicTracerProvider.d.ts +2 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/IdGenerator.d.ts +11 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/Sampler.d.ts +74 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/Span.d.ts +17 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/SpanProcessor.d.ts +43 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/TimedEvent.d.ts +19 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/export/BatchSpanProcessorBase.d.ts +6 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/export/ConsoleSpanExporter.d.ts +3 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/export/InMemorySpanExporter.d.ts +3 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/export/NoopSpanProcessor.d.ts +4 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/export/ReadableSpan.d.ts +29 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/export/SimpleSpanProcessor.d.ts +5 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/export/SpanExporter.d.ts +2 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/index.d.ts +18 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/platform/index.d.ts +1 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/platform/node/export/BatchSpanProcessor.d.ts +2 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/platform/node/index.d.ts +1 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/sampler/AlwaysOffSampler.d.ts +1 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/sampler/AlwaysOnSampler.d.ts +1 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/sampler/ParentBasedSampler.d.ts +2 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/sampler/TraceIdRatioBasedSampler.d.ts +1 -0
- package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.6.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/types.d.ts +66 -0
- package/dist/otel.d.ts +73 -0
- package/dist/otel.js +82 -0
- package/dist/permissions/index.d.ts +81 -0
- package/dist/permissions/index.js +18 -0
- package/dist/providers/anonymous.d.ts +35 -0
- package/dist/providers/anonymous.js +40 -0
- package/dist/providers/apple.d.ts +61 -0
- package/dist/providers/apple.js +57 -0
- package/dist/providers/connection.d.ts +30 -0
- package/dist/providers/connection.js +33 -0
- package/dist/providers/credentials.d.ts +78 -0
- package/dist/providers/credentials.js +31 -0
- package/dist/providers/custom.d.ts +96 -0
- package/dist/providers/custom.js +108 -0
- package/dist/providers/device.d.ts +33 -0
- package/dist/providers/device.js +30 -0
- package/dist/providers/email.d.ts +45 -0
- package/dist/providers/email.js +52 -0
- package/dist/providers/github.d.ts +56 -0
- package/dist/providers/github.js +79 -0
- package/dist/providers/google.d.ts +56 -0
- package/dist/providers/google.js +59 -0
- package/dist/providers/index.d.ts +16 -0
- package/dist/providers/index.js +16 -0
- package/dist/providers/microsoft.d.ts +59 -0
- package/dist/providers/microsoft.js +98 -0
- package/dist/providers/password.d.ts +68 -0
- package/dist/providers/password.js +348 -0
- package/dist/providers/phone.d.ts +33 -0
- package/dist/providers/phone.js +35 -0
- package/dist/providers/redirect.d.ts +1 -0
- package/dist/providers/redirect.js +11 -0
- package/dist/providers/totp.d.ts +29 -0
- package/dist/providers/totp.js +29 -0
- package/dist/providers/webauthn/attestation.d.ts +42 -0
- package/dist/providers/webauthn/attestation.js +167 -0
- package/dist/providers/webauthn.d.ts +83 -0
- package/dist/providers/webauthn.js +57 -0
- package/dist/react/index.d.ts +55 -0
- package/dist/react/index.js +80 -0
- package/dist/server/auth.d.ts +443 -0
- package/dist/server/auth.js +178 -0
- package/dist/server/cache/context.js +94 -0
- package/dist/server/component/api.d.ts +14 -0
- package/dist/server/component/api.js +13 -0
- package/dist/server/component/context.d.ts +16 -0
- package/dist/server/component/context.js +1 -0
- package/dist/server/component/factor/db.js +71 -0
- package/dist/server/config.d.ts +3 -0
- package/dist/server/config.js +78 -0
- package/dist/server/connection/config.js +101 -0
- package/dist/server/connection/domain.d.ts +878 -0
- package/dist/server/connection/domain.js +1122 -0
- package/dist/server/connection/group/service.d.ts +25 -0
- package/dist/server/connection/group/service.js +250 -0
- package/dist/server/connection/http.js +1485 -0
- package/dist/server/connection/oidc.js +366 -0
- package/dist/server/connection/policy/domain.js +59 -0
- package/dist/server/connection/policy.d.ts +1 -0
- package/dist/server/connection/policy.js +163 -0
- package/dist/server/connection/profile.js +22 -0
- package/dist/server/connection/provision.js +182 -0
- package/dist/server/connection/saml/api.js +70 -0
- package/dist/server/connection/saml/binding/post.js +140 -0
- package/dist/server/connection/saml/binding/redirect.js +139 -0
- package/dist/server/connection/saml/binding/shared.js +18 -0
- package/dist/server/connection/saml/c14n.js +224 -0
- package/dist/server/connection/saml/constants.js +100 -0
- package/dist/server/connection/saml/crypto.js +170 -0
- package/dist/server/connection/saml/dom/select.js +299 -0
- package/dist/server/connection/saml/encoding.js +93 -0
- package/dist/server/connection/saml/encryption.js +34 -0
- package/dist/server/connection/saml/entity.js +24 -0
- package/dist/server/connection/saml/extractor.js +408 -0
- package/dist/server/connection/saml/flow.js +150 -0
- package/dist/server/connection/saml/identity/provider.js +66 -0
- package/dist/server/connection/saml/index.js +5 -0
- package/dist/server/connection/saml/metadata.js +294 -0
- package/dist/server/connection/saml/service/provider.js +117 -0
- package/dist/server/connection/saml/signature.js +214 -0
- package/dist/server/connection/saml/template.js +68 -0
- package/dist/server/connection/saml/types.js +1 -0
- package/dist/server/connection/saml/validator.js +32 -0
- package/dist/server/connection/saml/xml/builder.js +68 -0
- package/dist/server/connection/saml/xmldsig.js +598 -0
- package/dist/server/connection/saml/xmlenc.js +162 -0
- package/dist/server/connection/saml.d.ts +56 -0
- package/dist/server/connection/saml.js +762 -0
- package/dist/server/connection/scim.js +115 -0
- package/dist/server/connection/shared.js +74 -0
- package/dist/server/connection/webhook.js +163 -0
- package/dist/server/context.d.ts +137 -0
- package/dist/server/context.js +108 -0
- package/dist/server/contract.d.ts +48 -0
- package/dist/server/contract.js +107 -0
- package/dist/server/cookies.js +90 -0
- package/dist/server/core.js +163 -0
- package/dist/server/cors.d.ts +22 -0
- package/dist/server/cors.js +93 -0
- package/dist/server/crypto.js +43 -0
- package/dist/server/db.js +88 -0
- package/dist/server/device.js +140 -0
- package/dist/server/domains/access.js +29 -0
- package/dist/server/domains/account.d.ts +16 -0
- package/dist/server/domains/account.js +92 -0
- package/dist/server/domains/factor.d.ts +28 -0
- package/dist/server/domains/factor.js +115 -0
- package/dist/server/domains/group.js +87 -0
- package/dist/server/domains/invite.js +76 -0
- package/dist/server/domains/key.js +253 -0
- package/dist/server/domains/member.js +149 -0
- package/dist/server/domains/session.js +29 -0
- package/dist/server/domains/user.js +119 -0
- package/dist/server/env.d.ts +46 -0
- package/dist/server/env.js +96 -0
- package/dist/server/errors.js +38 -0
- package/dist/server/events.d.ts +880 -0
- package/dist/server/events.js +406 -0
- package/dist/server/facade.d.ts +83 -0
- package/dist/server/facade.js +124 -0
- package/dist/server/http.d.ts +125 -0
- package/dist/server/http.js +566 -0
- package/dist/server/identity/claims.js +58 -0
- package/dist/server/identity/convex.d.ts +15 -0
- package/dist/server/identity/convex.js +1 -0
- package/dist/server/index.d.ts +17 -0
- package/dist/server/index.js +11 -0
- package/dist/server/keys.js +60 -0
- package/dist/server/limits.js +41 -0
- package/dist/server/log.js +28 -0
- package/dist/server/mcp.d.ts +19 -0
- package/dist/server/mcp.js +250 -0
- package/dist/server/mutations/account.js +47 -0
- package/dist/server/mutations/calls.js +16 -0
- package/dist/server/mutations/code.js +91 -0
- package/dist/server/mutations/credentials/signin.js +210 -0
- package/dist/server/mutations/invalidate.js +60 -0
- package/dist/server/mutations/oauth.js +251 -0
- package/dist/server/mutations/refresh.js +152 -0
- package/dist/server/mutations/register.js +93 -0
- package/dist/server/mutations/retrieve.js +66 -0
- package/dist/server/mutations/signature.js +36 -0
- package/dist/server/mutations/signin.js +81 -0
- package/dist/server/mutations/signout.js +61 -0
- package/dist/server/mutations/store/refs.js +15 -0
- package/dist/server/mutations/store.js +82 -0
- package/dist/server/mutations/verifier.js +25 -0
- package/dist/server/mutations/verify.js +199 -0
- package/dist/server/oauth/authorize.js +98 -0
- package/dist/server/oauth/client.d.ts +93 -0
- package/dist/server/oauth/client.js +115 -0
- package/dist/server/oauth/code.d.ts +63 -0
- package/dist/server/oauth/code.js +124 -0
- package/dist/server/oauth/domain.d.ts +23 -0
- package/dist/server/oauth/domain.js +1 -0
- package/dist/server/oauth/factory.js +46 -0
- package/dist/server/oauth/grant.js +46 -0
- package/dist/server/oauth/handlers.js +108 -0
- package/dist/server/oauth/manage.js +121 -0
- package/dist/server/oauth/normalize.js +27 -0
- package/dist/server/oauth/refresh.d.ts +71 -0
- package/dist/server/oauth/refresh.js +132 -0
- package/dist/server/oauth/register.js +147 -0
- package/dist/server/oauth/runtime.js +280 -0
- package/dist/server/oauth/token.js +355 -0
- package/dist/server/payloads.d.ts +16 -0
- package/dist/server/payloads.js +30 -0
- package/dist/server/preload.d.ts +249 -0
- package/dist/server/preload.js +673 -0
- package/dist/server/random.js +25 -0
- package/dist/server/redirects.js +85 -0
- package/dist/server/runtime.d.ts +845 -0
- package/dist/server/runtime.js +387 -0
- package/dist/server/secret.js +46 -0
- package/dist/server/services/factors.js +117 -0
- package/dist/server/services/providers.js +23 -0
- package/dist/server/services/resolve.js +17 -0
- package/dist/server/session/lifecycle.d.ts +23 -0
- package/dist/server/session/lifecycle.js +139 -0
- package/dist/server/signin/flow.js +359 -0
- package/dist/server/telemetry.js +68 -0
- package/dist/server/templates.js +91 -0
- package/dist/server/token/refresh.js +35 -0
- package/dist/server/tokens.js +164 -0
- package/dist/server/totp.js +282 -0
- package/dist/server/types.d.ts +1154 -0
- package/dist/server/types.js +1 -0
- package/dist/server/url.js +43 -0
- package/dist/server/user/account.js +325 -0
- package/dist/server/utils/bearer.js +24 -0
- package/dist/server/utils/cache.js +51 -0
- package/dist/server/utils/retry.js +3 -0
- package/dist/server/utils/span.js +59 -0
- package/dist/server/validators.d.ts +2061 -0
- package/dist/server/validators.js +320 -0
- package/dist/server/webauthn.js +699 -0
- package/dist/server/wellknown.d.ts +74 -0
- package/dist/server/wellknown.js +195 -0
- package/dist/shared/brand.d.ts +28 -0
- package/dist/shared/brand.js +13 -0
- package/dist/shared/codes.d.ts +99 -0
- package/dist/shared/codes.js +98 -0
- package/dist/shared/compare.js +23 -0
- package/dist/shared/errors.js +24 -0
- package/dist/shared/event/kinds.d.ts +188 -0
- package/dist/shared/event/kinds.js +103 -0
- package/dist/shared/fetch/guard.js +189 -0
- package/dist/shared/log.js +62 -0
- package/dist/shared/results.d.ts +58 -0
- package/dist/shared/retry.js +27 -0
- package/dist/shared/webauthn.js +9 -0
- package/dist/svelte/AuthLoading.svelte +13 -0
- package/dist/svelte/AuthLoading.svelte.d.ts +8 -0
- package/dist/svelte/SignedIn.svelte +14 -0
- package/dist/svelte/SignedIn.svelte.d.ts +8 -0
- package/dist/svelte/SignedOut.svelte +13 -0
- package/dist/svelte/SignedOut.svelte.d.ts +8 -0
- package/dist/svelte/context.svelte.d.ts +26 -0
- package/dist/svelte/context.svelte.js +61 -0
- package/dist/svelte/index.d.ts +5 -0
- package/dist/svelte/index.js +4 -0
- package/dist/test.d.ts +48 -0
- package/dist/test.js +54 -0
- package/package.json +247 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
//#region src/shared/event/kinds.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Single source of truth for the auth event taxonomy.
|
|
4
|
+
*
|
|
5
|
+
* Every auth event kind and its category is declared once in {@link EVENT_KINDS}.
|
|
6
|
+
* The server ({@link file://../../server/events.ts}) derives the `AuthEventKind`
|
|
7
|
+
* TS union, the `EVENT_KIND_CATEGORY` map, and the compile-time-exhaustive
|
|
8
|
+
* handler selector table; the component ({@link file://../../component/model.ts})
|
|
9
|
+
* derives the `vAuthEventKind` / `vAuthEventCategory` validators. This module
|
|
10
|
+
* holds no Convex imports so both sides can import it without crossing the
|
|
11
|
+
* component/server boundary.
|
|
12
|
+
*
|
|
13
|
+
* @module
|
|
14
|
+
*/
|
|
15
|
+
declare const EVENT_CATEGORIES: readonly ["user", "session", "account", "password", "passkey", "totp", "email", "phone", "api_key", "oauth", "connection", "scim", "webhook", "security"];
|
|
16
|
+
/** High-level category grouping for an auth event. */
|
|
17
|
+
type AuthEventCategory = (typeof EVENT_CATEGORIES)[number];
|
|
18
|
+
/**
|
|
19
|
+
* The auth event taxonomy: every emitted kind mapped to its category.
|
|
20
|
+
*
|
|
21
|
+
* This is the one place kinds and their categories are declared. Do not change
|
|
22
|
+
* which kinds exist or their categories without intent; this is the
|
|
23
|
+
* load-bearing audit taxonomy consumed by the projection, webhook dispatch,
|
|
24
|
+
* and every event handler.
|
|
25
|
+
*/
|
|
26
|
+
declare const EVENT_KINDS: {
|
|
27
|
+
readonly "user.created": {
|
|
28
|
+
readonly category: "user";
|
|
29
|
+
};
|
|
30
|
+
readonly "user.updated": {
|
|
31
|
+
readonly category: "user";
|
|
32
|
+
};
|
|
33
|
+
readonly "session.signed_in": {
|
|
34
|
+
readonly category: "session";
|
|
35
|
+
};
|
|
36
|
+
readonly "session.signed_out": {
|
|
37
|
+
readonly category: "session";
|
|
38
|
+
};
|
|
39
|
+
readonly "session.invalidated": {
|
|
40
|
+
readonly category: "session";
|
|
41
|
+
};
|
|
42
|
+
readonly "session.refresh_exchanged": {
|
|
43
|
+
readonly category: "session";
|
|
44
|
+
};
|
|
45
|
+
readonly "session.refresh_reuse_detected": {
|
|
46
|
+
readonly category: "session";
|
|
47
|
+
};
|
|
48
|
+
readonly "account.linked": {
|
|
49
|
+
readonly category: "account";
|
|
50
|
+
};
|
|
51
|
+
readonly "account.unlinked": {
|
|
52
|
+
readonly category: "account";
|
|
53
|
+
};
|
|
54
|
+
readonly "password.changed": {
|
|
55
|
+
readonly category: "password";
|
|
56
|
+
};
|
|
57
|
+
readonly "passkey.added": {
|
|
58
|
+
readonly category: "passkey";
|
|
59
|
+
};
|
|
60
|
+
readonly "passkey.removed": {
|
|
61
|
+
readonly category: "passkey";
|
|
62
|
+
};
|
|
63
|
+
readonly "totp.enrolled": {
|
|
64
|
+
readonly category: "totp";
|
|
65
|
+
};
|
|
66
|
+
readonly "totp.removed": {
|
|
67
|
+
readonly category: "totp";
|
|
68
|
+
};
|
|
69
|
+
readonly "email.verified": {
|
|
70
|
+
readonly category: "email";
|
|
71
|
+
};
|
|
72
|
+
readonly "phone.verified": {
|
|
73
|
+
readonly category: "phone";
|
|
74
|
+
};
|
|
75
|
+
readonly "api_key.created": {
|
|
76
|
+
readonly category: "api_key";
|
|
77
|
+
};
|
|
78
|
+
readonly "api_key.revoked": {
|
|
79
|
+
readonly category: "api_key";
|
|
80
|
+
};
|
|
81
|
+
readonly "oauth.client.created": {
|
|
82
|
+
readonly category: "oauth";
|
|
83
|
+
};
|
|
84
|
+
readonly "oauth.client.revoked": {
|
|
85
|
+
readonly category: "oauth";
|
|
86
|
+
};
|
|
87
|
+
readonly "oauth.code.created": {
|
|
88
|
+
readonly category: "oauth";
|
|
89
|
+
};
|
|
90
|
+
readonly "oauth.token.created": {
|
|
91
|
+
readonly category: "oauth";
|
|
92
|
+
};
|
|
93
|
+
readonly "oauth.token.exchanged": {
|
|
94
|
+
readonly category: "oauth";
|
|
95
|
+
};
|
|
96
|
+
readonly "oauth.refresh.reuse_detected": {
|
|
97
|
+
readonly category: "oauth";
|
|
98
|
+
};
|
|
99
|
+
readonly "oauth.refresh.revoked": {
|
|
100
|
+
readonly category: "oauth";
|
|
101
|
+
};
|
|
102
|
+
readonly "connection.created": {
|
|
103
|
+
readonly category: "connection";
|
|
104
|
+
};
|
|
105
|
+
readonly "connection.updated": {
|
|
106
|
+
readonly category: "connection";
|
|
107
|
+
};
|
|
108
|
+
readonly "connection.removed": {
|
|
109
|
+
readonly category: "connection";
|
|
110
|
+
};
|
|
111
|
+
readonly "connection.login.succeeded": {
|
|
112
|
+
readonly category: "connection";
|
|
113
|
+
};
|
|
114
|
+
readonly "connection.login.failed": {
|
|
115
|
+
readonly category: "connection";
|
|
116
|
+
};
|
|
117
|
+
readonly "connection.domain.verification_requested": {
|
|
118
|
+
readonly category: "connection";
|
|
119
|
+
};
|
|
120
|
+
readonly "connection.domain.verified": {
|
|
121
|
+
readonly category: "connection";
|
|
122
|
+
};
|
|
123
|
+
readonly "connection.policy.updated": {
|
|
124
|
+
readonly category: "connection";
|
|
125
|
+
};
|
|
126
|
+
readonly "connection.saml.set": {
|
|
127
|
+
readonly category: "connection";
|
|
128
|
+
};
|
|
129
|
+
readonly "connection.saml.refreshed": {
|
|
130
|
+
readonly category: "connection";
|
|
131
|
+
};
|
|
132
|
+
readonly "connection.oidc.set": {
|
|
133
|
+
readonly category: "connection";
|
|
134
|
+
};
|
|
135
|
+
readonly "connection.scim.set": {
|
|
136
|
+
readonly category: "scim";
|
|
137
|
+
};
|
|
138
|
+
readonly "connection.scim.read": {
|
|
139
|
+
readonly category: "scim";
|
|
140
|
+
};
|
|
141
|
+
readonly "connection.scim.user.provisioned": {
|
|
142
|
+
readonly category: "scim";
|
|
143
|
+
};
|
|
144
|
+
readonly "connection.scim.user.updated": {
|
|
145
|
+
readonly category: "scim";
|
|
146
|
+
};
|
|
147
|
+
readonly "connection.scim.user.deactivated": {
|
|
148
|
+
readonly category: "scim";
|
|
149
|
+
};
|
|
150
|
+
readonly "connection.scim.user.reactivated": {
|
|
151
|
+
readonly category: "scim";
|
|
152
|
+
};
|
|
153
|
+
readonly "connection.scim.group.provisioned": {
|
|
154
|
+
readonly category: "scim";
|
|
155
|
+
};
|
|
156
|
+
readonly "connection.scim.group.updated": {
|
|
157
|
+
readonly category: "scim";
|
|
158
|
+
};
|
|
159
|
+
readonly "connection.scim.group.deactivated": {
|
|
160
|
+
readonly category: "scim";
|
|
161
|
+
};
|
|
162
|
+
readonly "connection.scim.group.reactivated": {
|
|
163
|
+
readonly category: "scim";
|
|
164
|
+
};
|
|
165
|
+
readonly "webhook.endpoint.created": {
|
|
166
|
+
readonly category: "webhook";
|
|
167
|
+
};
|
|
168
|
+
readonly "webhook.endpoint.disabled": {
|
|
169
|
+
readonly category: "webhook";
|
|
170
|
+
};
|
|
171
|
+
readonly "webhook.delivery.created": {
|
|
172
|
+
readonly category: "webhook";
|
|
173
|
+
};
|
|
174
|
+
readonly "webhook.delivery.attempted": {
|
|
175
|
+
readonly category: "webhook";
|
|
176
|
+
};
|
|
177
|
+
readonly "webhook.delivery.succeeded": {
|
|
178
|
+
readonly category: "webhook";
|
|
179
|
+
};
|
|
180
|
+
readonly "webhook.delivery.failed": {
|
|
181
|
+
readonly category: "webhook";
|
|
182
|
+
};
|
|
183
|
+
};
|
|
184
|
+
/** Discriminator naming the specific auth event that occurred. */
|
|
185
|
+
type AuthEventKind = keyof typeof EVENT_KINDS;
|
|
186
|
+
//#endregion
|
|
187
|
+
export { AuthEventCategory, AuthEventKind };
|
|
188
|
+
//# sourceMappingURL=kinds.d.ts.map
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
//#region src/shared/event/kinds.ts
|
|
2
|
+
/**
|
|
3
|
+
* Single source of truth for the auth event taxonomy.
|
|
4
|
+
*
|
|
5
|
+
* Every auth event kind and its category is declared once in {@link EVENT_KINDS}.
|
|
6
|
+
* The server ({@link file://../../server/events.ts}) derives the `AuthEventKind`
|
|
7
|
+
* TS union, the `EVENT_KIND_CATEGORY` map, and the compile-time-exhaustive
|
|
8
|
+
* handler selector table; the component ({@link file://../../component/model.ts})
|
|
9
|
+
* derives the `vAuthEventKind` / `vAuthEventCategory` validators. This module
|
|
10
|
+
* holds no Convex imports so both sides can import it without crossing the
|
|
11
|
+
* component/server boundary.
|
|
12
|
+
*
|
|
13
|
+
* @module
|
|
14
|
+
*/
|
|
15
|
+
const EVENT_CATEGORIES = [
|
|
16
|
+
"user",
|
|
17
|
+
"session",
|
|
18
|
+
"account",
|
|
19
|
+
"password",
|
|
20
|
+
"passkey",
|
|
21
|
+
"totp",
|
|
22
|
+
"email",
|
|
23
|
+
"phone",
|
|
24
|
+
"api_key",
|
|
25
|
+
"oauth",
|
|
26
|
+
"connection",
|
|
27
|
+
"scim",
|
|
28
|
+
"webhook",
|
|
29
|
+
"security"
|
|
30
|
+
];
|
|
31
|
+
/**
|
|
32
|
+
* The auth event taxonomy: every emitted kind mapped to its category.
|
|
33
|
+
*
|
|
34
|
+
* This is the one place kinds and their categories are declared. Do not change
|
|
35
|
+
* which kinds exist or their categories without intent; this is the
|
|
36
|
+
* load-bearing audit taxonomy consumed by the projection, webhook dispatch,
|
|
37
|
+
* and every event handler.
|
|
38
|
+
*/
|
|
39
|
+
const EVENT_KINDS = {
|
|
40
|
+
"user.created": { category: "user" },
|
|
41
|
+
"user.updated": { category: "user" },
|
|
42
|
+
"session.signed_in": { category: "session" },
|
|
43
|
+
"session.signed_out": { category: "session" },
|
|
44
|
+
"session.invalidated": { category: "session" },
|
|
45
|
+
"session.refresh_exchanged": { category: "session" },
|
|
46
|
+
"session.refresh_reuse_detected": { category: "session" },
|
|
47
|
+
"account.linked": { category: "account" },
|
|
48
|
+
"account.unlinked": { category: "account" },
|
|
49
|
+
"password.changed": { category: "password" },
|
|
50
|
+
"passkey.added": { category: "passkey" },
|
|
51
|
+
"passkey.removed": { category: "passkey" },
|
|
52
|
+
"totp.enrolled": { category: "totp" },
|
|
53
|
+
"totp.removed": { category: "totp" },
|
|
54
|
+
"email.verified": { category: "email" },
|
|
55
|
+
"phone.verified": { category: "phone" },
|
|
56
|
+
"api_key.created": { category: "api_key" },
|
|
57
|
+
"api_key.revoked": { category: "api_key" },
|
|
58
|
+
"oauth.client.created": { category: "oauth" },
|
|
59
|
+
"oauth.client.revoked": { category: "oauth" },
|
|
60
|
+
"oauth.code.created": { category: "oauth" },
|
|
61
|
+
"oauth.token.created": { category: "oauth" },
|
|
62
|
+
"oauth.token.exchanged": { category: "oauth" },
|
|
63
|
+
"oauth.refresh.reuse_detected": { category: "oauth" },
|
|
64
|
+
"oauth.refresh.revoked": { category: "oauth" },
|
|
65
|
+
"connection.created": { category: "connection" },
|
|
66
|
+
"connection.updated": { category: "connection" },
|
|
67
|
+
"connection.removed": { category: "connection" },
|
|
68
|
+
"connection.login.succeeded": { category: "connection" },
|
|
69
|
+
"connection.login.failed": { category: "connection" },
|
|
70
|
+
"connection.domain.verification_requested": { category: "connection" },
|
|
71
|
+
"connection.domain.verified": { category: "connection" },
|
|
72
|
+
"connection.policy.updated": { category: "connection" },
|
|
73
|
+
"connection.saml.set": { category: "connection" },
|
|
74
|
+
"connection.saml.refreshed": { category: "connection" },
|
|
75
|
+
"connection.oidc.set": { category: "connection" },
|
|
76
|
+
"connection.scim.set": { category: "scim" },
|
|
77
|
+
"connection.scim.read": { category: "scim" },
|
|
78
|
+
"connection.scim.user.provisioned": { category: "scim" },
|
|
79
|
+
"connection.scim.user.updated": { category: "scim" },
|
|
80
|
+
"connection.scim.user.deactivated": { category: "scim" },
|
|
81
|
+
"connection.scim.user.reactivated": { category: "scim" },
|
|
82
|
+
"connection.scim.group.provisioned": { category: "scim" },
|
|
83
|
+
"connection.scim.group.updated": { category: "scim" },
|
|
84
|
+
"connection.scim.group.deactivated": { category: "scim" },
|
|
85
|
+
"connection.scim.group.reactivated": { category: "scim" },
|
|
86
|
+
"webhook.endpoint.created": { category: "webhook" },
|
|
87
|
+
"webhook.endpoint.disabled": { category: "webhook" },
|
|
88
|
+
"webhook.delivery.created": { category: "webhook" },
|
|
89
|
+
"webhook.delivery.attempted": { category: "webhook" },
|
|
90
|
+
"webhook.delivery.succeeded": { category: "webhook" },
|
|
91
|
+
"webhook.delivery.failed": { category: "webhook" }
|
|
92
|
+
};
|
|
93
|
+
/** Ordered tuple of every {@link AuthEventKind}, for deriving validators. */
|
|
94
|
+
const AUTH_EVENT_KINDS = Object.keys(EVENT_KINDS);
|
|
95
|
+
/**
|
|
96
|
+
* Map from every {@link AuthEventKind} to its {@link AuthEventCategory},
|
|
97
|
+
* derived from {@link EVENT_KINDS}.
|
|
98
|
+
*/
|
|
99
|
+
const EVENT_KIND_CATEGORY = Object.fromEntries(AUTH_EVENT_KINDS.map((kind) => [kind, EVENT_KINDS[kind].category]));
|
|
100
|
+
|
|
101
|
+
//#endregion
|
|
102
|
+
export { AUTH_EVENT_KINDS, EVENT_CATEGORIES, EVENT_KINDS, EVENT_KIND_CATEGORY };
|
|
103
|
+
//# sourceMappingURL=kinds.js.map
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
//#region src/shared/fetch/guard.ts
|
|
2
|
+
/**
|
|
3
|
+
* Single canonical rejection reason for internal SSRF targets. Kept as one
|
|
4
|
+
* constant so every branch returns byte-identical text (callers and tests match
|
|
5
|
+
* on `/not allowed/`).
|
|
6
|
+
*/
|
|
7
|
+
const INTERNAL_TARGET_REASON = "URL host is not allowed (loopback, private, link-local, or internal target).";
|
|
8
|
+
function classifyIpv4(host) {
|
|
9
|
+
const parts = host.split(".");
|
|
10
|
+
if (parts.length !== 4) return null;
|
|
11
|
+
const octets = parts.map((part) => Number(part));
|
|
12
|
+
if (octets.some((octet) => !Number.isInteger(octet) || octet < 0 || octet > 255)) return null;
|
|
13
|
+
const [a, b, c] = octets;
|
|
14
|
+
if (a === 127 || a === 0) return "loopback";
|
|
15
|
+
if (a === 169 && b === 254) return "linkLocal";
|
|
16
|
+
if (a === 10) return "private";
|
|
17
|
+
if (a === 172 && b >= 16 && b <= 31) return "private";
|
|
18
|
+
if (a === 192 && b === 168) return "private";
|
|
19
|
+
if (a === 100 && b >= 64 && b <= 127) return "private";
|
|
20
|
+
if (a === 192 && b === 0 && (c === 0 || c === 2) || a === 192 && b === 88 && c === 99 || a === 198 && (b === 18 || b === 19) || a === 198 && b === 51 && c === 100 || a === 203 && b === 0 && c === 113 || a >= 224) return "nonRoutable";
|
|
21
|
+
return "public";
|
|
22
|
+
}
|
|
23
|
+
function ipv4KindFromMappedIpv6(inner) {
|
|
24
|
+
if (inner.includes(".")) return classifyIpv4(inner);
|
|
25
|
+
const hexGroups = inner.match(/^([0-9a-f]{1,4}):([0-9a-f]{1,4})$/);
|
|
26
|
+
if (!hexGroups) return null;
|
|
27
|
+
const high = parseInt(hexGroups[1], 16);
|
|
28
|
+
const low = parseInt(hexGroups[2], 16);
|
|
29
|
+
return classifyIpv4(`${high >> 8 & 255}.${high & 255}.${low >> 8 & 255}.${low & 255}`);
|
|
30
|
+
}
|
|
31
|
+
/** True when an IPv4 classification is a blocked (non-public) SSRF target. */
|
|
32
|
+
function isBlockedIpv4Kind(kind) {
|
|
33
|
+
return kind === "loopback" || kind === "linkLocal" || kind === "private" || kind === "nonRoutable";
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Best-effort detection of an IPv4 address embedded in a multi-label hostname,
|
|
37
|
+
* as produced by wildcard-DNS "IP-in-hostname" services (nip.io / sslip.io) that
|
|
38
|
+
* resolve a public-looking name to an operator-chosen A record — e.g.
|
|
39
|
+
* `169-254-169-254.nip.io` → `169.254.169.254`, `10.0.0.1.nip.io` → `10.0.0.1`,
|
|
40
|
+
* or the prefixed `www-10-0-0-1.sslip.io` form.
|
|
41
|
+
*
|
|
42
|
+
* This is a literal scan of the NAME, not DNS resolution. It matches only the
|
|
43
|
+
* two encodings these services use: four consecutive purely-numeric dot-labels
|
|
44
|
+
* (`10.0.0.1.nip.io`), or four consecutive purely-numeric dash-groups inside a
|
|
45
|
+
* single label (`169-254-169-254.nip.io`, `www-10-0-0-1.sslip.io`). Requiring
|
|
46
|
+
* purely-numeric, contiguous octets avoids false positives on public hostnames
|
|
47
|
+
* whose separate labels merely contain digits (e.g. `v10.node0.pool0.dc1.example
|
|
48
|
+
* .com`). Public-IP encodings (ordinary AWS/GCP public reverse DNS such as
|
|
49
|
+
* `ec2-52-1-2-3.compute-1.amazonaws.com`) classify as public and are allowed;
|
|
50
|
+
* only windows forming a private/loopback/link-local/CGNAT address are rejected
|
|
51
|
+
* (fail-closed on the rare collision). A name that resolves to a private address
|
|
52
|
+
* without encoding it in the label (ordinary DNS rebinding) is not detectable
|
|
53
|
+
* here — see the module note. Hex-encoded (`0a000801.nip.io`) and IPv6 wildcard
|
|
54
|
+
* forms are also out of scope.
|
|
55
|
+
*/
|
|
56
|
+
function embeddedInternalIpv4Reason(hostname) {
|
|
57
|
+
if (hostname.includes(":")) return null;
|
|
58
|
+
const isOctet = (part) => /^[0-9]{1,3}$/.test(part);
|
|
59
|
+
const labels = hostname.split(".");
|
|
60
|
+
for (let index = 0; index + 4 <= labels.length; index += 1) {
|
|
61
|
+
const quad = labels.slice(index, index + 4);
|
|
62
|
+
if (quad.every(isOctet) && isBlockedIpv4Kind(classifyIpv4(quad.join(".")))) return INTERNAL_TARGET_REASON;
|
|
63
|
+
}
|
|
64
|
+
for (const label of labels) {
|
|
65
|
+
const groups = label.split("-");
|
|
66
|
+
for (let index = 0; index + 4 <= groups.length; index += 1) {
|
|
67
|
+
const quad = groups.slice(index, index + 4);
|
|
68
|
+
if (quad.every(isOctet) && isBlockedIpv4Kind(classifyIpv4(quad.join(".")))) return INTERNAL_TARGET_REASON;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
function hasAsciiControlCharacter(value) {
|
|
74
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
75
|
+
const code = value.charCodeAt(index);
|
|
76
|
+
if (code <= 31 || code === 127) return true;
|
|
77
|
+
}
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
function unsafeHostValueReason(host) {
|
|
81
|
+
if (host.length === 0 || host.trim() !== host || hasAsciiControlCharacter(host) || host.includes("/") || host.includes("\\") || host.includes("@") || host.includes("://")) return "URL host must be a host value.";
|
|
82
|
+
let parsed;
|
|
83
|
+
try {
|
|
84
|
+
parsed = new URL(`http://${host}`);
|
|
85
|
+
} catch {
|
|
86
|
+
return "URL host must be a host value.";
|
|
87
|
+
}
|
|
88
|
+
if (parsed.hostname.length === 0 || parsed.pathname !== "/" || parsed.search !== "" || parsed.hash !== "" || parsed.username !== "" || parsed.password !== "") return "URL host must be a host value.";
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
function unsafeHostReason(host, policy) {
|
|
92
|
+
let hostname = host.toLowerCase();
|
|
93
|
+
if (hostname.startsWith("[") && hostname.endsWith("]")) hostname = hostname.slice(1, -1);
|
|
94
|
+
if (hostname.endsWith(".")) hostname = hostname.slice(0, -1);
|
|
95
|
+
if (hostname.length === 0) return "URL is missing a hostname.";
|
|
96
|
+
if (!policy.allowSingleLabelHosts && !hostname.includes(":") && !hostname.includes(".")) return INTERNAL_TARGET_REASON;
|
|
97
|
+
if (hostname === "localhost" || hostname.endsWith(".localhost")) return INTERNAL_TARGET_REASON;
|
|
98
|
+
if (hostname.endsWith(".internal") || hostname.endsWith(".local")) return INTERNAL_TARGET_REASON;
|
|
99
|
+
if (isBlockedIpv4Kind(classifyIpv4(hostname))) return INTERNAL_TARGET_REASON;
|
|
100
|
+
if (hostname === "::1" || hostname === "::" || hostname === "::0") return INTERNAL_TARGET_REASON;
|
|
101
|
+
const mapped = hostname.match(/^::ffff:(.+)$/);
|
|
102
|
+
if (mapped && isBlockedIpv4Kind(ipv4KindFromMappedIpv6(mapped[1]))) return INTERNAL_TARGET_REASON;
|
|
103
|
+
if (/^fe[89ab][0-9a-f]:/.test(hostname)) return INTERNAL_TARGET_REASON;
|
|
104
|
+
if (/^f[cd][0-9a-f]{2}:/.test(hostname)) return INTERNAL_TARGET_REASON;
|
|
105
|
+
if (/^fe[c-f][0-9a-f]:/.test(hostname) || /^ff[0-9a-f]{2}:/.test(hostname)) return INTERNAL_TARGET_REASON;
|
|
106
|
+
const embedded = embeddedInternalIpv4Reason(hostname);
|
|
107
|
+
if (embedded !== null) return embedded;
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
function unsafeFetchUrlReasonWithPolicy(url, policy) {
|
|
111
|
+
let parsed;
|
|
112
|
+
try {
|
|
113
|
+
parsed = new URL(url);
|
|
114
|
+
} catch {
|
|
115
|
+
return "URL is not a valid URL.";
|
|
116
|
+
}
|
|
117
|
+
if (parsed.protocol !== "https:" && !(policy.allowHttp && parsed.protocol === "http:")) return policy.allowHttp ? "URL must use the http: or https: scheme." : "URL must use the https: scheme.";
|
|
118
|
+
return unsafeHostReason(parsed.hostname, policy);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Reason an operator-supplied URL is rejected as an SSRF risk, or `null` when it
|
|
122
|
+
* is safe to fetch server-side. Requires the `https:` scheme and rejects
|
|
123
|
+
* single-label hosts plus hostnames that are obviously internal targets:
|
|
124
|
+
* `localhost` and `*.localhost`, `*.internal`, `*.local`, IP literals in
|
|
125
|
+
* loopback/private/link-local/CGNAT ranges (`127.0.0.0/8`, `0.0.0.0/8`, `10/8`,
|
|
126
|
+
* `172.16/12`, `192.168/16`, `100.64/10`, `169.254/16`, protocol/test,
|
|
127
|
+
* benchmarking, multicast, and reserved ranges including the
|
|
128
|
+
* `169.254.169.254` cloud-metadata address, `::1`, `fc00::/7`, `fe80::/10`, and
|
|
129
|
+
* `::ffff:`-mapped IPv4, site-local and multicast IPv6), and IPv4 addresses embedded in wildcard-DNS hostnames
|
|
130
|
+
* (e.g. `169-254-169-254.nip.io`).
|
|
131
|
+
*
|
|
132
|
+
* This is literal validation only; see the module note for the residual
|
|
133
|
+
* DNS-rebinding window it cannot close. Reasons begin with `"URL "` so callers
|
|
134
|
+
* can prefix a subject (e.g. `` `Webhook ${reason}` ``).
|
|
135
|
+
*/
|
|
136
|
+
function unsafeFetchUrlReason(url) {
|
|
137
|
+
return unsafeFetchUrlReasonWithPolicy(url, {
|
|
138
|
+
allowHttp: false,
|
|
139
|
+
allowSingleLabelHosts: false
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Reason an IdP discovery/metadata URL is rejected, or `null` when it is safe
|
|
144
|
+
* to fetch server-side.
|
|
145
|
+
*
|
|
146
|
+
* IdP metadata may be served over `http:` by self-hosted deployments, so the
|
|
147
|
+
* `http:` scheme is permitted here (unlike {@link unsafeFetchUrlReason}). Every
|
|
148
|
+
* internal-target host rule still applies, and — hardened for SSRF —
|
|
149
|
+
* single-label hosts are now REJECTED by default (`allowSingleLabelHosts:
|
|
150
|
+
* false`), matching the strict profile. They were previously allowed to support
|
|
151
|
+
* referencing a Dockerized IdP by bare service name (e.g. `http://zitadel:8080`);
|
|
152
|
+
* such deployments must now use a resolvable dotted hostname, because a bare
|
|
153
|
+
* single-label name is an SSRF vector this guard cannot vet without DNS
|
|
154
|
+
* resolution (it can point at internal infra, or via a search domain at a cloud
|
|
155
|
+
* metadata endpoint). `http:` is intentionally kept: it is a transport concern
|
|
156
|
+
* orthogonal to the host-based SSRF filtering above, and dropping it would break
|
|
157
|
+
* legitimate self-hosted-over-http IdPs without closing an SSRF hole. A
|
|
158
|
+
* deployment that wants to forbid `http:` should gate the scheme at its call
|
|
159
|
+
* site.
|
|
160
|
+
*/
|
|
161
|
+
function unsafeIdpFetchUrlReason(url) {
|
|
162
|
+
return unsafeFetchUrlReasonWithPolicy(url, {
|
|
163
|
+
allowHttp: true,
|
|
164
|
+
allowSingleLabelHosts: false
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Throw when `url` is an unsafe IdP discovery/metadata fetch target.
|
|
169
|
+
*/
|
|
170
|
+
function assertSafeIdpFetchUrl(url) {
|
|
171
|
+
const reason = unsafeIdpFetchUrlReason(url);
|
|
172
|
+
if (reason !== null) throw new Error(`Refusing to fetch ${reason}`);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Throw when `host` is unsafe to send as a proxy-mode IdP `Host` header. This is
|
|
176
|
+
* a header-value check (reject header injection / malformed values), not an SSRF
|
|
177
|
+
* target check: the Host header is metadata on a request whose actual target
|
|
178
|
+
* (the rewritten URL) is guarded separately by {@link assertSafeIdpFetchUrl}, so
|
|
179
|
+
* loopback/private host values (e.g. a self-hosted IdP issuer on `127.0.0.1`) are
|
|
180
|
+
* allowed — blocking them adds no SSRF protection and breaks self-hosted IdPs.
|
|
181
|
+
*/
|
|
182
|
+
function assertSafeIdpHost(host) {
|
|
183
|
+
const reason = unsafeHostValueReason(host);
|
|
184
|
+
if (reason !== null) throw new Error(`Refusing to fetch ${reason}`);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
//#endregion
|
|
188
|
+
export { assertSafeIdpFetchUrl, assertSafeIdpHost, unsafeFetchUrlReason };
|
|
189
|
+
//# sourceMappingURL=guard.js.map
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
//#region src/shared/log.ts
|
|
2
|
+
/**
|
|
3
|
+
* Leveled console logging shared across auth internals.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
/** Supported log severities, ordered from most to least severe. */
|
|
8
|
+
const LOG_LEVELS = {
|
|
9
|
+
ERROR: "ERROR",
|
|
10
|
+
WARN: "WARN",
|
|
11
|
+
INFO: "INFO",
|
|
12
|
+
DEBUG: "DEBUG"
|
|
13
|
+
};
|
|
14
|
+
function serialize(value) {
|
|
15
|
+
if (typeof value === "string") return value;
|
|
16
|
+
if (value instanceof Error) return `${value.message}${value.stack ? `\n${value.stack}` : ""}`;
|
|
17
|
+
try {
|
|
18
|
+
return JSON.stringify(value);
|
|
19
|
+
} catch {
|
|
20
|
+
return String(value);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const LEVEL_SEVERITY = {
|
|
24
|
+
ERROR: 0,
|
|
25
|
+
WARN: 1,
|
|
26
|
+
INFO: 2,
|
|
27
|
+
DEBUG: 3
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Format and emit a log line, suppressing anything below `configuredLogLevel`.
|
|
31
|
+
*
|
|
32
|
+
* The level gate is checked before {@link serialize} runs, so a message gated
|
|
33
|
+
* out by the configured level never pays the `JSON.stringify` cost of its args.
|
|
34
|
+
*
|
|
35
|
+
* @param module - Source module label included in the prefix.
|
|
36
|
+
* @param level - Severity of this message.
|
|
37
|
+
* @param args - Values to serialize and join into the message body.
|
|
38
|
+
* @param configuredLogLevel - Minimum level to emit. Defaults to `"INFO"`.
|
|
39
|
+
*/
|
|
40
|
+
function logMessage(module, level, args, configuredLogLevel = "INFO") {
|
|
41
|
+
if (LEVEL_SEVERITY[level] > LEVEL_SEVERITY[configuredLogLevel]) return;
|
|
42
|
+
const message = args.map(serialize).join(" ");
|
|
43
|
+
const prefix = `[${module}] [${level}]`;
|
|
44
|
+
switch (level) {
|
|
45
|
+
case "ERROR":
|
|
46
|
+
console.error(prefix, message);
|
|
47
|
+
return;
|
|
48
|
+
case "WARN":
|
|
49
|
+
console.warn(prefix, message);
|
|
50
|
+
return;
|
|
51
|
+
case "INFO":
|
|
52
|
+
console.info(prefix, message);
|
|
53
|
+
return;
|
|
54
|
+
case "DEBUG":
|
|
55
|
+
console.debug(prefix, message);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
//#endregion
|
|
61
|
+
export { LOG_LEVELS, logMessage };
|
|
62
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
//#region src/shared/results.d.ts
|
|
2
|
+
/** Data needed to provision a TOTP authenticator (otpauth URI + shared secret). */
|
|
3
|
+
type TotpSetupPayload = {
|
|
4
|
+
uri: string;
|
|
5
|
+
secret: string;
|
|
6
|
+
totpId: string;
|
|
7
|
+
};
|
|
8
|
+
/** Device authorization grant details returned to a polling device client. */
|
|
9
|
+
type DeviceCodePayload = {
|
|
10
|
+
deviceCode: string;
|
|
11
|
+
userCode: string;
|
|
12
|
+
verificationUri: string;
|
|
13
|
+
verificationUriComplete: string;
|
|
14
|
+
expiresIn: number;
|
|
15
|
+
interval: number;
|
|
16
|
+
};
|
|
17
|
+
/** Terminal sign-in result: the user is authenticated and a session exists. */
|
|
18
|
+
type SignInSessionResult<TSession> = {
|
|
19
|
+
kind: "signedIn";
|
|
20
|
+
session: TSession;
|
|
21
|
+
};
|
|
22
|
+
/** Sign-in result requiring the client to follow an OAuth redirect. */
|
|
23
|
+
type SignInRedirectResult<TRedirect = string> = {
|
|
24
|
+
kind: "redirect";
|
|
25
|
+
redirect: TRedirect;
|
|
26
|
+
verifier: string;
|
|
27
|
+
};
|
|
28
|
+
/** Sign-in result indicating a verification flow was started (e.g. OTP sent). */
|
|
29
|
+
type SignInStartResult = {
|
|
30
|
+
kind: "started";
|
|
31
|
+
};
|
|
32
|
+
/** Sign-in result carrying options for a WebAuthn ceremony. */
|
|
33
|
+
type SignInWebAuthnOptionsResult = {
|
|
34
|
+
kind: "webauthnOptions";
|
|
35
|
+
options: Record<string, unknown>;
|
|
36
|
+
verifier: string;
|
|
37
|
+
};
|
|
38
|
+
/** Sign-in result requesting a TOTP code to complete two-factor sign-in. */
|
|
39
|
+
type SignInTotpChallengeResult = {
|
|
40
|
+
kind: "totpRequired";
|
|
41
|
+
verifier: string;
|
|
42
|
+
};
|
|
43
|
+
/** Sign-in result requesting TOTP enrollment before sign-in can complete. */
|
|
44
|
+
type SignInTotpSetupResult<TTotpSetup = TotpSetupPayload> = {
|
|
45
|
+
kind: "totpSetup";
|
|
46
|
+
totpSetup: TTotpSetup;
|
|
47
|
+
verifier: string;
|
|
48
|
+
};
|
|
49
|
+
/** Sign-in result returning a device code for the device authorization flow. */
|
|
50
|
+
type SignInDeviceCodeResult<TDeviceCode = DeviceCodePayload> = {
|
|
51
|
+
kind: "deviceCode";
|
|
52
|
+
deviceCode: TDeviceCode;
|
|
53
|
+
};
|
|
54
|
+
/** Discriminated union of every possible sign-in flow outcome, keyed by `kind`. */
|
|
55
|
+
type SignInFlowResult<TSession, TRedirect = string> = SignInSessionResult<TSession> | SignInRedirectResult<TRedirect> | SignInStartResult | SignInWebAuthnOptionsResult | SignInTotpChallengeResult | SignInTotpSetupResult | SignInDeviceCodeResult;
|
|
56
|
+
//#endregion
|
|
57
|
+
export { DeviceCodePayload, SignInDeviceCodeResult, SignInFlowResult, SignInRedirectResult, SignInStartResult, SignInTotpChallengeResult, SignInTotpSetupResult, SignInWebAuthnOptionsResult, TotpSetupPayload };
|
|
58
|
+
//# sourceMappingURL=results.d.ts.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
//#region src/shared/retry.ts
|
|
2
|
+
/**
|
|
3
|
+
* Retry `fn` with exponential backoff until it succeeds or retries are
|
|
4
|
+
* exhausted. On final failure the last error is re-thrown.
|
|
5
|
+
*/
|
|
6
|
+
async function retryWithBackoff(fn, opts = {}) {
|
|
7
|
+
const { maxRetries = 2, baseMs = 200, jitter = true, jitterMode = "additive", shouldRetry } = opts;
|
|
8
|
+
let lastError;
|
|
9
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) try {
|
|
10
|
+
return await fn();
|
|
11
|
+
} catch (error) {
|
|
12
|
+
lastError = error;
|
|
13
|
+
if (attempt >= maxRetries) break;
|
|
14
|
+
if (shouldRetry && !shouldRetry(error)) throw error;
|
|
15
|
+
const base = baseMs * 2 ** attempt;
|
|
16
|
+
let delay;
|
|
17
|
+
if (!jitter) delay = base;
|
|
18
|
+
else if (jitterMode === "centered") delay = base * (.5 + Math.random());
|
|
19
|
+
else delay = base + Math.random() * base;
|
|
20
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
21
|
+
}
|
|
22
|
+
throw lastError;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
//#endregion
|
|
26
|
+
export { retryWithBackoff };
|
|
27
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
//#region src/shared/webauthn.ts
|
|
2
|
+
/** Maximum WebAuthn credentials stored for one user. */
|
|
3
|
+
const MAX_WEBAUTHN_CREDENTIALS_PER_USER = 16;
|
|
4
|
+
/** Maximum credential ID length accepted by WebAuthn Level 3. */
|
|
5
|
+
const MAX_WEBAUTHN_CREDENTIAL_ID_LENGTH = 1023;
|
|
6
|
+
|
|
7
|
+
//#endregion
|
|
8
|
+
export { MAX_WEBAUTHN_CREDENTIALS_PER_USER, MAX_WEBAUTHN_CREDENTIAL_ID_LENGTH };
|
|
9
|
+
//# sourceMappingURL=webauthn.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
|
+
|
|
4
|
+
import { useConvexAuth } from "./context.svelte.js";
|
|
5
|
+
|
|
6
|
+
let { children }: { children: Snippet } = $props();
|
|
7
|
+
|
|
8
|
+
const auth = useConvexAuth();
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
{#if auth.loading}
|
|
12
|
+
{@render children()}
|
|
13
|
+
{/if}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Snippet } from "svelte";
|
|
2
|
+
type $$ComponentProps = {
|
|
3
|
+
children: Snippet;
|
|
4
|
+
};
|
|
5
|
+
declare const AuthLoading: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
6
|
+
type AuthLoading = ReturnType<typeof AuthLoading>;
|
|
7
|
+
export default AuthLoading;
|
|
8
|
+
//# sourceMappingURL=AuthLoading.svelte.d.ts.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
|
+
|
|
4
|
+
import { useConvexAuth } from "./context.svelte.js";
|
|
5
|
+
|
|
6
|
+
let { children }: { children: Snippet<[string]> } = $props();
|
|
7
|
+
|
|
8
|
+
const auth = useConvexAuth();
|
|
9
|
+
const state = $derived(auth.state);
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
{#if state.status === "signedIn"}
|
|
13
|
+
{@render children(state.token)}
|
|
14
|
+
{/if}
|