@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 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { requireEnv } from "./env.js";
|
|
2
|
+
|
|
3
|
+
//#region src/server/url.ts
|
|
4
|
+
const DEFAULT_AUTH_PATH = "/auth";
|
|
5
|
+
/** @internal */
|
|
6
|
+
function normalizeUrl(url) {
|
|
7
|
+
return url.replace(/\/$/, "");
|
|
8
|
+
}
|
|
9
|
+
/** @internal */
|
|
10
|
+
function normalizeAuthPath(path) {
|
|
11
|
+
if (path === void 0 || path.trim() === "") return DEFAULT_AUTH_PATH;
|
|
12
|
+
const trimmed = path.trim();
|
|
13
|
+
if (trimmed === "/") return "";
|
|
14
|
+
return `/${trimmed.replace(/^\/+|\/+$/g, "")}`;
|
|
15
|
+
}
|
|
16
|
+
/** @internal */
|
|
17
|
+
function authUrl(siteUrl, path) {
|
|
18
|
+
return `${normalizeUrl(siteUrl)}${normalizeAuthPath(path)}`;
|
|
19
|
+
}
|
|
20
|
+
/** @internal */
|
|
21
|
+
function authUrlFromEnv(path) {
|
|
22
|
+
return authUrl(requireEnv("CONVEX_SITE_URL"), path);
|
|
23
|
+
}
|
|
24
|
+
/** @internal */
|
|
25
|
+
function appUrlFromEnv() {
|
|
26
|
+
return normalizeUrl(requireEnv("APP_URL"));
|
|
27
|
+
}
|
|
28
|
+
/** @internal */
|
|
29
|
+
function isLocalHost(host) {
|
|
30
|
+
if (host === void 0) return false;
|
|
31
|
+
const raw = host.includes("://") ? host : `http://${host}`;
|
|
32
|
+
let url;
|
|
33
|
+
try {
|
|
34
|
+
url = new URL(raw);
|
|
35
|
+
} catch {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
return url.hostname === "localhost" || url.hostname === "127.0.0.1" || url.hostname === "::1";
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
//#endregion
|
|
42
|
+
export { appUrlFromEnv, authUrlFromEnv, isLocalHost, normalizeAuthPath, normalizeUrl };
|
|
43
|
+
//# sourceMappingURL=url.js.map
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
import { LOG_LEVELS } from "../../shared/log.js";
|
|
2
|
+
import { ErrorCode } from "../../shared/codes.js";
|
|
3
|
+
import { queueAuthEvent } from "../events.js";
|
|
4
|
+
import { authDb } from "../db.js";
|
|
5
|
+
import { log } from "../log.js";
|
|
6
|
+
import { ConvexError } from "convex/values";
|
|
7
|
+
|
|
8
|
+
//#region src/server/user/account.ts
|
|
9
|
+
function mergeExtend(existing, incoming) {
|
|
10
|
+
if (!incoming) return;
|
|
11
|
+
const existingRecord = typeof existing === "object" && existing !== null && !Array.isArray(existing) ? existing : void 0;
|
|
12
|
+
return existingRecord ? {
|
|
13
|
+
...existingRecord,
|
|
14
|
+
...incoming
|
|
15
|
+
} : incoming;
|
|
16
|
+
}
|
|
17
|
+
function effectiveUserUpdateMode(source, policy, providerUpdateProfileOnLogin) {
|
|
18
|
+
const authority = policy?.authority ?? "app";
|
|
19
|
+
let mode = source === "login" ? policy?.updateProfileOnLogin ?? "missing" : policy?.updateProfileFromScim ?? "always";
|
|
20
|
+
if (source === "login" && policy === void 0 && providerUpdateProfileOnLogin !== void 0) mode = providerUpdateProfileOnLogin === false ? "never" : "always";
|
|
21
|
+
if (authority === "app") return mode === "never" ? "never" : "missing";
|
|
22
|
+
if (authority === "connection" && source === "scim") return mode === "never" ? "never" : "missing";
|
|
23
|
+
if (authority === "scim" && source === "login") return mode === "never" ? "never" : "missing";
|
|
24
|
+
return mode;
|
|
25
|
+
}
|
|
26
|
+
function isUserFieldMissing(value) {
|
|
27
|
+
return value === void 0 || value === null || value === "";
|
|
28
|
+
}
|
|
29
|
+
function buildUserPatchData(args) {
|
|
30
|
+
if (args.mode === "never") return {};
|
|
31
|
+
if (args.mode === "always") return args.nextUser;
|
|
32
|
+
return Object.fromEntries(Object.entries(args.nextUser).filter(([key, value]) => {
|
|
33
|
+
if (value === void 0) return false;
|
|
34
|
+
return isUserFieldMissing(args.currentUser[key]);
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Resolve (create, link, or update) the user for a sign-in and ensure the
|
|
39
|
+
* provider account row exists, returning both IDs.
|
|
40
|
+
*
|
|
41
|
+
* Security: an OAuth provider whose `accountLinking` is `"sameConnection"`
|
|
42
|
+
* (the default for Connection connections) never globally merges users by
|
|
43
|
+
* email across IdPs/tenants. Such a connection may only link to a user it
|
|
44
|
+
* already owns via its own account/externalId (resolved upstream as
|
|
45
|
+
* `existingAccount`/`opts.existingUserId`); the email is still recorded as
|
|
46
|
+
* verified on the resolved user, but cross-user email linking is disabled.
|
|
47
|
+
*
|
|
48
|
+
* @param account - Either an already-resolved existing account, or the
|
|
49
|
+
* `providerAccountId` (and optional secret) to create/link one.
|
|
50
|
+
* @param opts.existingUserId - Pre-resolved user (e.g. from SCIM externalId).
|
|
51
|
+
* @param opts.source - Provisioning source (`"login"` or `"scim"`), affecting
|
|
52
|
+
* the profile-update policy.
|
|
53
|
+
* @internal
|
|
54
|
+
*/
|
|
55
|
+
async function upsertUserAndAccount(ctx, sessionId, account, args, config, opts) {
|
|
56
|
+
const userId = await defaultCreateOrUpdateUser(ctx, sessionId, "existingAccount" in account ? account.existingAccount : null, args, config, opts?.existingUserId ?? null, opts?.provisioningUser, opts?.source ?? "login");
|
|
57
|
+
return {
|
|
58
|
+
userId,
|
|
59
|
+
accountId: await createOrUpdateAccount(ctx, userId, account, args, config)
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
async function resolveUserIdByLinking(ctx, args, profile, shouldLinkViaEmail, shouldLinkViaPhone, existingUserIdOverride, config) {
|
|
63
|
+
const [emailLookup, phoneLookup] = await Promise.all([typeof profile.email === "string" && shouldLinkViaEmail ? uniqueUserWithVerifiedEmail(ctx, profile.email, config) : Promise.resolve(null), typeof profile.phone === "string" && shouldLinkViaPhone ? uniqueUserWithVerifiedPhone(ctx, profile.phone, config) : Promise.resolve(null)]);
|
|
64
|
+
const emailUserId = emailLookup?._id ?? null;
|
|
65
|
+
const phoneUserId = phoneLookup?._id ?? null;
|
|
66
|
+
if (emailUserId !== null && phoneUserId !== null) {
|
|
67
|
+
if (emailUserId === phoneUserId) {
|
|
68
|
+
log(LOG_LEVELS.DEBUG, `Email and phone resolve to same user, linking: ${emailUserId}`);
|
|
69
|
+
return emailUserId;
|
|
70
|
+
}
|
|
71
|
+
throw new ConvexError({
|
|
72
|
+
code: ErrorCode.AMBIGUOUS_USER_LINK,
|
|
73
|
+
message: "Verified email and phone resolve to different users; cannot safely link."
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
if (emailUserId !== null) {
|
|
77
|
+
log(LOG_LEVELS.DEBUG, `Found existing email verified user, linking: ${emailUserId}`);
|
|
78
|
+
return emailUserId;
|
|
79
|
+
}
|
|
80
|
+
if (phoneUserId !== null) {
|
|
81
|
+
log(LOG_LEVELS.DEBUG, `Found existing phone verified user, linking: ${phoneUserId}`);
|
|
82
|
+
return phoneUserId;
|
|
83
|
+
}
|
|
84
|
+
log(LOG_LEVELS.DEBUG, "No existing verified users found, creating new user");
|
|
85
|
+
return existingUserIdOverride;
|
|
86
|
+
}
|
|
87
|
+
async function checkAllowLink(args, config, userId) {
|
|
88
|
+
const isConnectionLink = args.provider.type === "oauth" || args.provider.type === "connection";
|
|
89
|
+
const isCredentialsLink = args.provider.type === "credentials";
|
|
90
|
+
if (config.connection?.hooks?.allowLink === void 0 || !isConnectionLink && !isCredentialsLink) return true;
|
|
91
|
+
return await config.connection.hooks.allowLink({
|
|
92
|
+
protocol: isCredentialsLink ? "credentials" : args.provider.type === "oauth" && typeof args.accountExtend?.identity?.protocol === "string" ? args.accountExtend.identity.protocol : "oidc",
|
|
93
|
+
connectionId: typeof args.accountExtend?.identity?.connectionId === "string" ? args.accountExtend.identity.connectionId : void 0,
|
|
94
|
+
profile: args.profile,
|
|
95
|
+
userId
|
|
96
|
+
}) !== false;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Persist the emails this sign-in asserts onto the resolved user.
|
|
100
|
+
*
|
|
101
|
+
* The profile's primary email is recorded as the primary `UserEmail`
|
|
102
|
+
* row; any provider-reported secondaries (e.g. GitHub `/user/emails`)
|
|
103
|
+
* are recorded non-primary, each keeping its own verified state.
|
|
104
|
+
* Provenance (`source`, `provider`, `connectionId`) is captured so Connection
|
|
105
|
+
* linking can stay connection-scoped.
|
|
106
|
+
*
|
|
107
|
+
* @param db - The component-backed auth DB facade.
|
|
108
|
+
* @param userId - The resolved (created or linked) user.
|
|
109
|
+
* @param args - The create-or-update args (provider, accountExtend, emails).
|
|
110
|
+
* @param profile - The provisioned profile (already destructured).
|
|
111
|
+
* @param emailVerified - Whether the primary email is verified.
|
|
112
|
+
*/
|
|
113
|
+
async function recordOwnedEmails(db, userId, args, profile, emailVerified) {
|
|
114
|
+
const identity = args.accountExtend?.identity;
|
|
115
|
+
const protocol = typeof identity?.protocol === "string" ? identity.protocol : void 0;
|
|
116
|
+
const source = protocol === "saml" ? "saml" : protocol === "oidc" ? "oidc" : args.provider.type === "oauth" ? "oauth" : "password";
|
|
117
|
+
const provider = typeof args.provider.id === "string" ? args.provider.id : void 0;
|
|
118
|
+
const connectionId = typeof identity?.connectionId === "string" ? identity.connectionId : void 0;
|
|
119
|
+
const primaryEmail = typeof profile.email === "string" ? profile.email.toLowerCase() : null;
|
|
120
|
+
if (primaryEmail !== null) await db.emails.upsert({
|
|
121
|
+
userId,
|
|
122
|
+
email: primaryEmail,
|
|
123
|
+
verified: emailVerified,
|
|
124
|
+
isPrimary: true,
|
|
125
|
+
source,
|
|
126
|
+
provider,
|
|
127
|
+
connectionId
|
|
128
|
+
});
|
|
129
|
+
for (const entry of args.emails ?? []) {
|
|
130
|
+
const addr = entry.email.toLowerCase();
|
|
131
|
+
if (addr === primaryEmail) continue;
|
|
132
|
+
await db.emails.upsert({
|
|
133
|
+
userId,
|
|
134
|
+
email: addr,
|
|
135
|
+
verified: entry.verified === true,
|
|
136
|
+
isPrimary: false,
|
|
137
|
+
source,
|
|
138
|
+
provider,
|
|
139
|
+
connectionId
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
async function updateExistingUser(db, userId, userData, source, provisioningUser, providerUpdateProfileOnLogin) {
|
|
144
|
+
const currentUser = await db.users.get({ id: userId });
|
|
145
|
+
const mode = effectiveUserUpdateMode(source, provisioningUser, providerUpdateProfileOnLogin);
|
|
146
|
+
const patchData = buildUserPatchData({
|
|
147
|
+
currentUser: currentUser ?? {},
|
|
148
|
+
nextUser: userData,
|
|
149
|
+
mode
|
|
150
|
+
});
|
|
151
|
+
if (Object.keys(patchData).length === 0) return;
|
|
152
|
+
try {
|
|
153
|
+
await db.users.update(userId, patchData);
|
|
154
|
+
} catch (error) {
|
|
155
|
+
throw new ConvexError({
|
|
156
|
+
code: ErrorCode.USER_UPDATE_FAILED,
|
|
157
|
+
message: `Could not update user document with ID \`${userId}\`, either the user has been deleted but their account has not, or the profile data doesn't match the \`users\` table schema: ${error instanceof Error ? error.message : String(error)}`
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
async function defaultCreateOrUpdateUser(ctx, existingSessionId, existingAccount, args, config, existingUserIdOverride, provisioningUser, source) {
|
|
162
|
+
log(LOG_LEVELS.DEBUG, "defaultCreateOrUpdateUser args:", {
|
|
163
|
+
existingAccountId: existingAccount?._id,
|
|
164
|
+
existingSessionId,
|
|
165
|
+
args: {
|
|
166
|
+
...args,
|
|
167
|
+
provider: {
|
|
168
|
+
id: args.provider.id,
|
|
169
|
+
type: args.provider.type
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
const existingUserId = existingAccount?.userId ?? null;
|
|
174
|
+
const db = authDb(ctx, config);
|
|
175
|
+
const { provider, profile: { id: _profileId, emailVerified: profileEmailVerified, phoneVerified: profilePhoneVerified, ...profile } } = args;
|
|
176
|
+
const emailVerified = profileEmailVerified === true;
|
|
177
|
+
const phoneVerified = profilePhoneVerified ?? false;
|
|
178
|
+
const connectionScopedLinking = provider.type === "oauth" && provider.accountLinking === "sameConnection";
|
|
179
|
+
const shouldLinkViaEmail = !connectionScopedLinking && (args.shouldLinkViaEmail || emailVerified || provider.type === "email");
|
|
180
|
+
const shouldLinkViaPhone = !connectionScopedLinking && (args.shouldLinkViaPhone || phoneVerified || provider.type === "phone");
|
|
181
|
+
let userId = existingUserId ?? existingUserIdOverride;
|
|
182
|
+
if (existingUserId === null) {
|
|
183
|
+
userId = await resolveUserIdByLinking(ctx, args, profile, shouldLinkViaEmail, shouldLinkViaPhone, existingUserIdOverride, config);
|
|
184
|
+
if (userId !== null && !await checkAllowLink(args, config, userId)) userId = null;
|
|
185
|
+
}
|
|
186
|
+
const userData = {
|
|
187
|
+
...emailVerified ? { emailVerificationTime: Date.now() } : null,
|
|
188
|
+
...phoneVerified ? { phoneVerificationTime: Date.now() } : null,
|
|
189
|
+
...profile
|
|
190
|
+
};
|
|
191
|
+
const existingOrLinkedUserId = userId;
|
|
192
|
+
if (userId !== null) {
|
|
193
|
+
const providerUpdateProfileOnLogin = args.provider.type === "oauth" ? args.provider.updateProfileOnLogin ?? true : void 0;
|
|
194
|
+
await updateExistingUser(db, userId, userData, source, provisioningUser, providerUpdateProfileOnLogin);
|
|
195
|
+
} else {
|
|
196
|
+
if (source === "login" && provisioningUser?.createOnSignIn === false) throw new ConvexError({
|
|
197
|
+
code: ErrorCode.NOT_AUTHORIZED,
|
|
198
|
+
message: "This Connection connection does not allow creating users on sign-in."
|
|
199
|
+
});
|
|
200
|
+
userId = await db.users.create(userData);
|
|
201
|
+
}
|
|
202
|
+
await recordOwnedEmails(db, userId, args, profile, emailVerified === true);
|
|
203
|
+
log(LOG_LEVELS.DEBUG, "Emitting auth event for user lifecycle change");
|
|
204
|
+
if (existingOrLinkedUserId === null) await queueAuthEvent(ctx, config, {
|
|
205
|
+
kind: "user.created",
|
|
206
|
+
actor: { type: "system" },
|
|
207
|
+
subject: {
|
|
208
|
+
type: "user",
|
|
209
|
+
id: userId
|
|
210
|
+
},
|
|
211
|
+
targets: [{
|
|
212
|
+
kind: "user",
|
|
213
|
+
id: userId
|
|
214
|
+
}],
|
|
215
|
+
outcome: "success",
|
|
216
|
+
data: {
|
|
217
|
+
type: args.type,
|
|
218
|
+
provider: args.provider.id,
|
|
219
|
+
profile: args.profile
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
else await queueAuthEvent(ctx, config, {
|
|
223
|
+
kind: "user.updated",
|
|
224
|
+
actor: { type: "system" },
|
|
225
|
+
subject: {
|
|
226
|
+
type: "user",
|
|
227
|
+
id: userId
|
|
228
|
+
},
|
|
229
|
+
targets: [{
|
|
230
|
+
kind: "user",
|
|
231
|
+
id: userId
|
|
232
|
+
}],
|
|
233
|
+
outcome: "success",
|
|
234
|
+
data: {
|
|
235
|
+
existingUserId: existingOrLinkedUserId,
|
|
236
|
+
type: args.type,
|
|
237
|
+
provider: args.provider.id,
|
|
238
|
+
profile: args.profile
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
if (emailVerified && typeof args.profile.email === "string") await queueAuthEvent(ctx, config, {
|
|
242
|
+
kind: "email.verified",
|
|
243
|
+
actor: { type: "system" },
|
|
244
|
+
subject: {
|
|
245
|
+
type: "email",
|
|
246
|
+
id: args.profile.email
|
|
247
|
+
},
|
|
248
|
+
targets: [{
|
|
249
|
+
kind: "user",
|
|
250
|
+
id: userId
|
|
251
|
+
}],
|
|
252
|
+
outcome: "success",
|
|
253
|
+
data: {
|
|
254
|
+
userId,
|
|
255
|
+
email: args.profile.email
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
if (phoneVerified && typeof args.profile.phone === "string") await queueAuthEvent(ctx, config, {
|
|
259
|
+
kind: "phone.verified",
|
|
260
|
+
actor: { type: "system" },
|
|
261
|
+
subject: {
|
|
262
|
+
type: "phone",
|
|
263
|
+
id: args.profile.phone
|
|
264
|
+
},
|
|
265
|
+
targets: [{
|
|
266
|
+
kind: "user",
|
|
267
|
+
id: userId
|
|
268
|
+
}],
|
|
269
|
+
outcome: "success",
|
|
270
|
+
data: {
|
|
271
|
+
userId,
|
|
272
|
+
phone: args.profile.phone
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
return userId;
|
|
276
|
+
}
|
|
277
|
+
async function uniqueUserWithVerifiedEmail(ctx, email, config) {
|
|
278
|
+
return await authDb(ctx, config).users.get({ verifiedEmail: email });
|
|
279
|
+
}
|
|
280
|
+
async function uniqueUserWithVerifiedPhone(ctx, phone, config) {
|
|
281
|
+
return await authDb(ctx, config).users.get({ verifiedPhone: phone });
|
|
282
|
+
}
|
|
283
|
+
async function createOrUpdateAccount(ctx, userId, account, args, config) {
|
|
284
|
+
const db = authDb(ctx, config);
|
|
285
|
+
const mergedExtend = "existingAccount" in account ? mergeExtend(account.existingAccount.extend, args.accountExtend) : args.accountExtend;
|
|
286
|
+
const isNewAccount = !("existingAccount" in account);
|
|
287
|
+
const accountId = "existingAccount" in account ? account.existingAccount._id : await db.accounts.create({
|
|
288
|
+
userId,
|
|
289
|
+
provider: args.provider.id,
|
|
290
|
+
providerAccountId: account.providerAccountId,
|
|
291
|
+
secret: account.secret,
|
|
292
|
+
extend: mergedExtend
|
|
293
|
+
});
|
|
294
|
+
if (isNewAccount) await queueAuthEvent(ctx, config, {
|
|
295
|
+
kind: "account.linked",
|
|
296
|
+
actor: {
|
|
297
|
+
type: "user",
|
|
298
|
+
id: userId
|
|
299
|
+
},
|
|
300
|
+
subject: {
|
|
301
|
+
type: "account",
|
|
302
|
+
id: accountId
|
|
303
|
+
},
|
|
304
|
+
targets: [{
|
|
305
|
+
kind: "user",
|
|
306
|
+
id: userId
|
|
307
|
+
}],
|
|
308
|
+
outcome: "success",
|
|
309
|
+
data: {
|
|
310
|
+
provider: args.provider.id,
|
|
311
|
+
providerAccountId: account.providerAccountId
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
if ("existingAccount" in account && account.existingAccount.userId !== userId) await db.accounts.update(accountId, { userId });
|
|
315
|
+
const accountPatchData = {};
|
|
316
|
+
if (mergedExtend) accountPatchData.extend = mergedExtend;
|
|
317
|
+
if (args.profile.emailVerified) accountPatchData.emailVerified = args.profile.email;
|
|
318
|
+
if (args.profile.phoneVerified) accountPatchData.phoneVerified = args.profile.phone;
|
|
319
|
+
if (Object.keys(accountPatchData).length > 0) await db.accounts.update(accountId, accountPatchData);
|
|
320
|
+
return accountId;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
//#endregion
|
|
324
|
+
export { upsertUserAndAccount };
|
|
325
|
+
//# sourceMappingURL=account.js.map
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//#region src/server/utils/bearer.ts
|
|
2
|
+
/**
|
|
3
|
+
* Extract a bearer token from an HTTP `Authorization` header.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
const BEARER_PATTERN = /^Bearer\s+(.+)$/i;
|
|
8
|
+
/**
|
|
9
|
+
* Return the bearer token carried in a request's `Authorization` header, or
|
|
10
|
+
* `null` when the header is absent or does not use the `Bearer` scheme.
|
|
11
|
+
*
|
|
12
|
+
* The scheme is matched case-insensitively per RFC 6750, and the captured
|
|
13
|
+
* token is trimmed of surrounding whitespace.
|
|
14
|
+
*/
|
|
15
|
+
function extractBearerToken(request) {
|
|
16
|
+
const header = request.headers.get("Authorization");
|
|
17
|
+
if (header === null) return null;
|
|
18
|
+
const match = BEARER_PATTERN.exec(header);
|
|
19
|
+
return match ? match[1].trim() : null;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
//#endregion
|
|
23
|
+
export { extractBearerToken };
|
|
24
|
+
//# sourceMappingURL=bearer.js.map
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
//#region src/server/utils/cache.ts
|
|
2
|
+
/**
|
|
3
|
+
* Create a synchronous TTL cache.
|
|
4
|
+
*
|
|
5
|
+
* ```ts
|
|
6
|
+
* const jwksCache = createCache({
|
|
7
|
+
* capacity: 128,
|
|
8
|
+
* timeToLiveMs: 60 * 60 * 1000,
|
|
9
|
+
* lookup: (url) => createRemoteJWKSet(new URL(url)),
|
|
10
|
+
* });
|
|
11
|
+
* const jwks = jwksCache.get(url);
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
function createCache(opts) {
|
|
15
|
+
const { capacity, timeToLiveMs, lookup } = opts;
|
|
16
|
+
const store = /* @__PURE__ */ new Map();
|
|
17
|
+
function evictExpired() {
|
|
18
|
+
const now = Date.now();
|
|
19
|
+
for (const [key, entry] of store) if (entry.expiresAt <= now) store.delete(key);
|
|
20
|
+
}
|
|
21
|
+
function evictOldest() {
|
|
22
|
+
if (store.size < capacity) return;
|
|
23
|
+
const firstKey = store.keys().next().value;
|
|
24
|
+
if (firstKey !== void 0) store.delete(firstKey);
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
get(key) {
|
|
28
|
+
const existing = store.get(key);
|
|
29
|
+
if (existing && existing.expiresAt > Date.now()) return existing.value;
|
|
30
|
+
if (existing) store.delete(key);
|
|
31
|
+
evictExpired();
|
|
32
|
+
evictOldest();
|
|
33
|
+
const value = lookup(key);
|
|
34
|
+
store.set(key, {
|
|
35
|
+
value,
|
|
36
|
+
expiresAt: Date.now() + timeToLiveMs
|
|
37
|
+
});
|
|
38
|
+
return value;
|
|
39
|
+
},
|
|
40
|
+
invalidate(key) {
|
|
41
|
+
store.delete(key);
|
|
42
|
+
},
|
|
43
|
+
clear() {
|
|
44
|
+
store.clear();
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
//#endregion
|
|
50
|
+
export { createCache };
|
|
51
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { SpanStatusCode, trace } from "@opentelemetry/api";
|
|
2
|
+
|
|
3
|
+
//#region src/server/utils/span.ts
|
|
4
|
+
/**
|
|
5
|
+
* Thin wrapper around `@opentelemetry/api` tracing.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
const tracer = trace.getTracer("convex-auth");
|
|
10
|
+
const INVALID_TRACE_ID = "00000000000000000000000000000000";
|
|
11
|
+
const ACTIVE_CHECK_INTERVAL_MS = 5e3;
|
|
12
|
+
let cachedActiveAt = 0;
|
|
13
|
+
let cachedActive = false;
|
|
14
|
+
function isTracingActive() {
|
|
15
|
+
const now = Date.now();
|
|
16
|
+
if (now - cachedActiveAt < ACTIVE_CHECK_INTERVAL_MS) return cachedActive;
|
|
17
|
+
const probe = tracer.startSpan("__convex-auth.probe");
|
|
18
|
+
const active = probe.isRecording() || probe.spanContext().traceId !== INVALID_TRACE_ID;
|
|
19
|
+
probe.end();
|
|
20
|
+
cachedActive = active;
|
|
21
|
+
cachedActiveAt = now;
|
|
22
|
+
return active;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Run `fn` inside an OpenTelemetry span.
|
|
26
|
+
*
|
|
27
|
+
* If `fn` throws, the span is marked as errored and the exception is
|
|
28
|
+
* recorded before re-throwing.
|
|
29
|
+
*
|
|
30
|
+
* When no tracer provider is registered, this is a cheap passthrough that
|
|
31
|
+
* skips span creation altogether.
|
|
32
|
+
*/
|
|
33
|
+
async function withSpan(name, attributes, fn) {
|
|
34
|
+
if (!isTracingActive()) return fn();
|
|
35
|
+
return tracer.startActiveSpan(name, { attributes }, async (span) => {
|
|
36
|
+
try {
|
|
37
|
+
return await fn();
|
|
38
|
+
} catch (error) {
|
|
39
|
+
span.setStatus({ code: SpanStatusCode.ERROR });
|
|
40
|
+
if (error instanceof Error) span.recordException(error);
|
|
41
|
+
throw error;
|
|
42
|
+
} finally {
|
|
43
|
+
span.end();
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Attach attributes to the current active span when tracing is enabled.
|
|
49
|
+
*/
|
|
50
|
+
function setActiveSpanAttributes(attributes) {
|
|
51
|
+
if (!isTracingActive()) return;
|
|
52
|
+
const span = trace.getActiveSpan();
|
|
53
|
+
if (!span) return;
|
|
54
|
+
for (const [key, value] of Object.entries(attributes)) if (value !== void 0) span.setAttribute(key, value);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
//#endregion
|
|
58
|
+
export { setActiveSpanAttributes, withSpan };
|
|
59
|
+
//# sourceMappingURL=span.js.map
|