@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,182 @@
|
|
|
1
|
+
import { ErrorCode } from "../../shared/codes.js";
|
|
2
|
+
import { convexError } from "../errors.js";
|
|
3
|
+
import { getGroupConnection, getScimConfigByConnection, getScimConfigByTokenHash, getScimIdentity, upsertScimConfig, upsertScimIdentity } from "../contract.js";
|
|
4
|
+
|
|
5
|
+
//#region src/server/connection/provision.ts
|
|
6
|
+
function getScimConfigShape(scimConfig) {
|
|
7
|
+
return typeof scimConfig?.extend === "object" && scimConfig.extend !== null ? scimConfig.extend : {};
|
|
8
|
+
}
|
|
9
|
+
function getPublicScimConfig(scimConfig) {
|
|
10
|
+
if (!scimConfig) return null;
|
|
11
|
+
const { tokenHash, ...rest } = scimConfig;
|
|
12
|
+
return {
|
|
13
|
+
...rest,
|
|
14
|
+
hasToken: typeof tokenHash === "string" && tokenHash.length > 0
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function createGroupScimDomain(deps) {
|
|
18
|
+
const { config, requireEnv, generateRandomString, INVITE_TOKEN_ALPHABET, sha256, loadGroupPolicyOrThrow, emitGroupAuthEvent } = deps;
|
|
19
|
+
const getScimBasePath = (connectionId) => `${requireEnv("CONVEX_SITE_URL")}/connections/${connectionId}/scim/v2`;
|
|
20
|
+
const validateScim = async (ctx, connectionId) => {
|
|
21
|
+
const checks = [];
|
|
22
|
+
const connection = await getGroupConnection(ctx, config.component.connection, connectionId);
|
|
23
|
+
if (!connection) return {
|
|
24
|
+
ok: false,
|
|
25
|
+
connectionId,
|
|
26
|
+
checks: [{
|
|
27
|
+
name: "group_connection_exists",
|
|
28
|
+
ok: false,
|
|
29
|
+
message: "Connection not found."
|
|
30
|
+
}]
|
|
31
|
+
};
|
|
32
|
+
const policy = await loadGroupPolicyOrThrow(ctx, connection.groupId);
|
|
33
|
+
const scimConfig = await getScimConfigByConnection(ctx, config.component.connection, connectionId);
|
|
34
|
+
const hasConfig = scimConfig !== null && scimConfig !== void 0;
|
|
35
|
+
checks.push({
|
|
36
|
+
name: "scim_config_exists",
|
|
37
|
+
ok: hasConfig,
|
|
38
|
+
message: hasConfig ? void 0 : "SCIM has not been configured."
|
|
39
|
+
});
|
|
40
|
+
const isActive = scimConfig?.status === "active";
|
|
41
|
+
checks.push({
|
|
42
|
+
name: "scim_config_active",
|
|
43
|
+
ok: isActive,
|
|
44
|
+
message: isActive ? void 0 : `SCIM config status is ${hasConfig ? scimConfig?.status : "unknown"}.`
|
|
45
|
+
});
|
|
46
|
+
const hasToken = typeof scimConfig?.tokenHash === "string" && scimConfig.tokenHash.length > 0;
|
|
47
|
+
checks.push({
|
|
48
|
+
name: "token_hash_set",
|
|
49
|
+
ok: hasToken,
|
|
50
|
+
message: hasToken ? void 0 : "SCIM bearer token has not been set."
|
|
51
|
+
});
|
|
52
|
+
const hasBasePath = typeof scimConfig?.basePath === "string" && scimConfig.basePath === getScimBasePath(connection._id);
|
|
53
|
+
checks.push({
|
|
54
|
+
name: "base_path_matches_route",
|
|
55
|
+
ok: hasBasePath,
|
|
56
|
+
message: hasBasePath ? void 0 : "SCIM basePath does not match the derived route."
|
|
57
|
+
});
|
|
58
|
+
const supportsIdempotentExternalId = policy.provisioning.scimReuse.user === "externalId";
|
|
59
|
+
checks.push({
|
|
60
|
+
name: "user_external_id_reuse_enabled",
|
|
61
|
+
ok: supportsIdempotentExternalId,
|
|
62
|
+
message: supportsIdempotentExternalId ? void 0 : "SCIM user retry-safe provisioning works best with scimReuse.user = externalId."
|
|
63
|
+
});
|
|
64
|
+
checks.push({
|
|
65
|
+
name: "filter_subset_supported",
|
|
66
|
+
ok: true,
|
|
67
|
+
message: "Supported filters: eq, co, sw, ew, pr on common user/group fields."
|
|
68
|
+
});
|
|
69
|
+
checks.push({
|
|
70
|
+
name: "protocol_capabilities_declared",
|
|
71
|
+
ok: true
|
|
72
|
+
});
|
|
73
|
+
return {
|
|
74
|
+
ok: checks.every((c) => c.ok),
|
|
75
|
+
connectionId: connection._id,
|
|
76
|
+
basePath: getScimBasePath(connection._id),
|
|
77
|
+
deprovisionMode: policy.provisioning.deprovision.mode,
|
|
78
|
+
capabilities: {
|
|
79
|
+
users: true,
|
|
80
|
+
groups: true,
|
|
81
|
+
patch: true,
|
|
82
|
+
put: true,
|
|
83
|
+
filters: [
|
|
84
|
+
"eq",
|
|
85
|
+
"co",
|
|
86
|
+
"sw",
|
|
87
|
+
"ew",
|
|
88
|
+
"pr"
|
|
89
|
+
],
|
|
90
|
+
bulk: false,
|
|
91
|
+
etag: false
|
|
92
|
+
},
|
|
93
|
+
checks
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
return {
|
|
97
|
+
upsert: async (ctx, data) => {
|
|
98
|
+
const connection = await getGroupConnection(ctx, config.component.connection, data.connectionId);
|
|
99
|
+
if (connection === null) throw convexError(ErrorCode.INVALID_PARAMETERS, "Connection not found.");
|
|
100
|
+
const rawToken = generateRandomString(48, INVITE_TOKEN_ALPHABET);
|
|
101
|
+
const tokenHash = await sha256(rawToken);
|
|
102
|
+
const basePath = getScimBasePath(connection._id);
|
|
103
|
+
const configId = await upsertScimConfig(ctx, config.component.connection, {
|
|
104
|
+
connectionId: connection._id,
|
|
105
|
+
groupId: connection.groupId,
|
|
106
|
+
status: data.status ?? "active",
|
|
107
|
+
basePath,
|
|
108
|
+
tokenHash,
|
|
109
|
+
lastRotatedAt: Date.now(),
|
|
110
|
+
extend: {
|
|
111
|
+
security: data.security,
|
|
112
|
+
profile: data.profile
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
await emitGroupAuthEvent(ctx, {
|
|
116
|
+
connectionId: connection._id,
|
|
117
|
+
groupId: connection.groupId,
|
|
118
|
+
kind: "connection.scim.set",
|
|
119
|
+
actor: { type: "system" },
|
|
120
|
+
subject: {
|
|
121
|
+
type: "connection",
|
|
122
|
+
id: connection._id
|
|
123
|
+
},
|
|
124
|
+
data: { scimConfigId: configId },
|
|
125
|
+
webhook: { payload: {
|
|
126
|
+
connectionId: connection._id,
|
|
127
|
+
scimConfigId: configId
|
|
128
|
+
} }
|
|
129
|
+
});
|
|
130
|
+
return {
|
|
131
|
+
connectionId: connection._id,
|
|
132
|
+
configId,
|
|
133
|
+
basePath,
|
|
134
|
+
token: rawToken
|
|
135
|
+
};
|
|
136
|
+
},
|
|
137
|
+
get: async (ctx, args) => {
|
|
138
|
+
const scimConfig = await getScimConfigByConnection(ctx, config.component.connection, args.connectionId);
|
|
139
|
+
if (!scimConfig) return null;
|
|
140
|
+
const shape = getScimConfigShape(scimConfig);
|
|
141
|
+
return {
|
|
142
|
+
...getPublicScimConfig(scimConfig),
|
|
143
|
+
security: shape.security,
|
|
144
|
+
profile: shape.profile
|
|
145
|
+
};
|
|
146
|
+
},
|
|
147
|
+
status: async (ctx, args) => {
|
|
148
|
+
const { connectionId } = args;
|
|
149
|
+
const currentConfig = await getScimConfigByConnection(ctx, config.component.connection, connectionId);
|
|
150
|
+
const result = await validateScim(ctx, connectionId);
|
|
151
|
+
return {
|
|
152
|
+
connectionId,
|
|
153
|
+
configured: currentConfig?.status !== void 0,
|
|
154
|
+
ready: result.ok,
|
|
155
|
+
config: getPublicScimConfig(currentConfig),
|
|
156
|
+
checks: result.checks,
|
|
157
|
+
capabilities: "capabilities" in result ? result.capabilities : void 0
|
|
158
|
+
};
|
|
159
|
+
},
|
|
160
|
+
getConfigByToken: async (ctx, args) => {
|
|
161
|
+
return await getScimConfigByTokenHash(ctx, config.component.connection, await sha256(args.token));
|
|
162
|
+
},
|
|
163
|
+
validate: async (ctx, args) => {
|
|
164
|
+
return await validateScim(ctx, args.connectionId);
|
|
165
|
+
},
|
|
166
|
+
identity: {
|
|
167
|
+
get: async (ctx, data) => {
|
|
168
|
+
return await getScimIdentity(ctx, config.component.connection, data);
|
|
169
|
+
},
|
|
170
|
+
upsert: async (ctx, data) => {
|
|
171
|
+
return await upsertScimIdentity(ctx, config.component.connection, {
|
|
172
|
+
...data,
|
|
173
|
+
lastProvisionedAt: Date.now()
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
//#endregion
|
|
181
|
+
export { createGroupScimDomain };
|
|
182
|
+
//# sourceMappingURL=provision.js.map
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { DOMParser } from "@xmldom/xmldom";
|
|
2
|
+
|
|
3
|
+
//#region src/server/connection/saml/api.ts
|
|
4
|
+
/**
|
|
5
|
+
* Resolve a DOMParser constructor: the platform global if present, else xmldom's.
|
|
6
|
+
* xmldom implements the standard DOM interfaces but its declared types don't unify
|
|
7
|
+
* with the global ones, so its constructor is bridged to {@link DomParserCtor}
|
|
8
|
+
* through the single typed assertion at that cross-package boundary.
|
|
9
|
+
*/
|
|
10
|
+
function loadDomParserCtor() {
|
|
11
|
+
const globalParser = globalThis.DOMParser;
|
|
12
|
+
if (typeof globalParser === "function") return globalParser;
|
|
13
|
+
if (typeof DOMParser === "function") return DOMParser;
|
|
14
|
+
throw new Error("ERR_DOM_PARSER_NOT_AVAILABLE");
|
|
15
|
+
}
|
|
16
|
+
const DOCTYPE_OR_ENTITY = /<!\s*(DOCTYPE|ENTITY)\b/i;
|
|
17
|
+
function rejectDoctypeOrEntity(xml) {
|
|
18
|
+
if (DOCTYPE_OR_ENTITY.test(xml)) throw new Error("ERR_XML_DOCTYPE_OR_ENTITY_FORBIDDEN");
|
|
19
|
+
}
|
|
20
|
+
function createDOMParser(options = {}) {
|
|
21
|
+
const parser = new (loadDomParserCtor())(options);
|
|
22
|
+
return { parseFromString: (xml, mimeType = "text/xml") => {
|
|
23
|
+
rejectDoctypeOrEntity(xml);
|
|
24
|
+
return parser.parseFromString(xml, mimeType);
|
|
25
|
+
} };
|
|
26
|
+
}
|
|
27
|
+
const context = {
|
|
28
|
+
validate: void 0,
|
|
29
|
+
dom: void 0,
|
|
30
|
+
readFile: void 0,
|
|
31
|
+
writeFile: void 0
|
|
32
|
+
};
|
|
33
|
+
/** Return the shared module context, lazily initializing a safe DOM parser. */
|
|
34
|
+
function getContext() {
|
|
35
|
+
if (context.dom === void 0) context.dom = createDOMParser();
|
|
36
|
+
return context;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Parse XML through the configured DOMParser, with DOCTYPE/ENTITY rejection.
|
|
40
|
+
* Use this for any XML coming from a network peer (IdP responses, signed
|
|
41
|
+
* payloads, encrypted assertions) instead of constructing a `DOMParser`
|
|
42
|
+
* directly — direct construction bypasses the doctype/entity guard.
|
|
43
|
+
*/
|
|
44
|
+
function safeParseXml(xml, mimeType = "text/xml") {
|
|
45
|
+
const { dom } = getContext();
|
|
46
|
+
return dom.parseFromString(xml, mimeType);
|
|
47
|
+
}
|
|
48
|
+
/** Register the XML schema validation callback used by {@link safeParseXml} consumers. */
|
|
49
|
+
function setSchemaValidator(params) {
|
|
50
|
+
if (typeof params.validate !== "function") throw new Error("validate must be a callback function having one argument as xml input");
|
|
51
|
+
context.validate = params.validate;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Check if the xml string is valid and bounded.
|
|
55
|
+
*
|
|
56
|
+
* Security: a validator must be registered (see {@link setSchemaValidator}).
|
|
57
|
+
* A user may supply a validate function that always resolves to deliberately
|
|
58
|
+
* skip validation, but then takes responsibility for the resulting exposure;
|
|
59
|
+
* when no validator is registered this rejects rather than passing untrusted
|
|
60
|
+
* XML through unchecked.
|
|
61
|
+
*/
|
|
62
|
+
async function isValidXml(input) {
|
|
63
|
+
const { validate } = getContext();
|
|
64
|
+
if (!validate) return Promise.reject("XML validation was requested but no validator is registered; refusing to process untrusted XML without validation. Register a schema validator before validating XML.");
|
|
65
|
+
return await validate(input);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
//#endregion
|
|
69
|
+
export { getContext, isValidXml, safeParseXml, setSchemaValidator };
|
|
70
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { SAML_STATUS_SUCCESS } from "../constants.js";
|
|
2
|
+
import { base64Encode, get } from "../encoding.js";
|
|
3
|
+
import { constructSamlSignature } from "../signature.js";
|
|
4
|
+
import { defaultLoginRequestTemplate, defaultLogoutResponseTemplate, replaceTagsByValue } from "../template.js";
|
|
5
|
+
import { getBindingField } from "./shared.js";
|
|
6
|
+
|
|
7
|
+
//#region src/server/connection/saml/binding/post.ts
|
|
8
|
+
/**
|
|
9
|
+
* Binding-level API for functions using POST binding.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Assemble the signing config from entity settings. The IdP signing path always
|
|
13
|
+
* carries a configured `privateKey` and algorithm, and the signing certificate
|
|
14
|
+
* resolves to a single PEM string. The signer declares these as `string` /
|
|
15
|
+
* `string | Uint8Array`; the boundary casts narrow the optional `BinaryLike`
|
|
16
|
+
* settings and the `string | string[] | null` certificate return to those
|
|
17
|
+
* established types with no runtime change.
|
|
18
|
+
*/
|
|
19
|
+
function buildSignatureConfig(privateKey, privateKeyPass, signatureAlgorithm, signingCert) {
|
|
20
|
+
return {
|
|
21
|
+
privateKey,
|
|
22
|
+
privateKeyPass,
|
|
23
|
+
signatureAlgorithm,
|
|
24
|
+
signingCert,
|
|
25
|
+
isBase64Output: false
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/** Generate a base64-encoded login request for the POST binding. */
|
|
29
|
+
async function base64LoginRequest(referenceTagXPath, entity, customTagReplacement) {
|
|
30
|
+
const metadata = {
|
|
31
|
+
idp: entity.idp.entityMeta,
|
|
32
|
+
sp: entity.sp.entityMeta
|
|
33
|
+
};
|
|
34
|
+
const spSetting = entity.sp.entitySetting;
|
|
35
|
+
let id = "";
|
|
36
|
+
if (metadata && metadata.idp && metadata.sp) {
|
|
37
|
+
const base = metadata.idp.getSingleSignOnService("post");
|
|
38
|
+
let rawSamlRequest;
|
|
39
|
+
if (spSetting.loginRequestTemplate && customTagReplacement) {
|
|
40
|
+
const info = customTagReplacement(spSetting.loginRequestTemplate.context);
|
|
41
|
+
id = getBindingField(info, "id");
|
|
42
|
+
rawSamlRequest = getBindingField(info, "context");
|
|
43
|
+
} else {
|
|
44
|
+
const nameIDFormat = spSetting.nameIDFormat;
|
|
45
|
+
const selectedNameIDFormat = Array.isArray(nameIDFormat) ? nameIDFormat[0] : nameIDFormat;
|
|
46
|
+
id = spSetting.generateID();
|
|
47
|
+
rawSamlRequest = replaceTagsByValue(defaultLoginRequestTemplate.context, {
|
|
48
|
+
ID: id,
|
|
49
|
+
Destination: base,
|
|
50
|
+
Issuer: metadata.sp.getEntityID(),
|
|
51
|
+
IssueInstant: (/* @__PURE__ */ new Date()).toISOString(),
|
|
52
|
+
AssertionConsumerServiceURL: metadata.sp.getAssertionConsumerService("post"),
|
|
53
|
+
EntityID: metadata.sp.getEntityID(),
|
|
54
|
+
AllowCreate: spSetting.allowCreate,
|
|
55
|
+
NameIDFormat: selectedNameIDFormat
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
if (metadata.idp.isWantAuthnRequestsSigned()) {
|
|
59
|
+
const { privateKey, privateKeyPass, requestSignatureAlgorithm: signatureAlgorithm, transformationAlgorithms } = spSetting;
|
|
60
|
+
return {
|
|
61
|
+
id,
|
|
62
|
+
context: await constructSamlSignature({
|
|
63
|
+
...buildSignatureConfig(privateKey, privateKeyPass, signatureAlgorithm, metadata.sp.getX509Certificate("signing")),
|
|
64
|
+
referenceTagXPath,
|
|
65
|
+
transformationAlgorithms,
|
|
66
|
+
rawSamlMessage: rawSamlRequest,
|
|
67
|
+
signatureConfig: spSetting.signatureConfig || {
|
|
68
|
+
prefix: "ds",
|
|
69
|
+
location: {
|
|
70
|
+
reference: "/*[local-name(.)='AuthnRequest']/*[local-name(.)='Issuer']",
|
|
71
|
+
action: "after"
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
})
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
id,
|
|
79
|
+
context: base64Encode(rawSamlRequest)
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
throw new Error("ERR_GENERATE_POST_LOGIN_REQUEST_MISSING_METADATA");
|
|
83
|
+
}
|
|
84
|
+
/** Generate a base64-encoded logout response for the POST binding. */
|
|
85
|
+
async function base64LogoutResponse(requestInfo, entity, customTagReplacement) {
|
|
86
|
+
const metadata = {
|
|
87
|
+
init: entity.init.entityMeta,
|
|
88
|
+
target: entity.target.entityMeta
|
|
89
|
+
};
|
|
90
|
+
let id = "";
|
|
91
|
+
const initSetting = entity.init.entitySetting;
|
|
92
|
+
if (metadata && metadata.init && metadata.target) {
|
|
93
|
+
let rawSamlResponse;
|
|
94
|
+
if (initSetting.logoutResponseTemplate) {
|
|
95
|
+
const template = customTagReplacement(initSetting.logoutResponseTemplate.context);
|
|
96
|
+
id = template.id;
|
|
97
|
+
rawSamlResponse = template.context;
|
|
98
|
+
} else {
|
|
99
|
+
id = initSetting.generateID();
|
|
100
|
+
const tvalue = {
|
|
101
|
+
ID: id,
|
|
102
|
+
Destination: metadata.target.getSingleLogoutService("post"),
|
|
103
|
+
EntityID: metadata.init.getEntityID(),
|
|
104
|
+
Issuer: metadata.init.getEntityID(),
|
|
105
|
+
IssueInstant: (/* @__PURE__ */ new Date()).toISOString(),
|
|
106
|
+
StatusCode: SAML_STATUS_SUCCESS,
|
|
107
|
+
InResponseTo: get(requestInfo, "extract.request.id", null)
|
|
108
|
+
};
|
|
109
|
+
rawSamlResponse = replaceTagsByValue(defaultLogoutResponseTemplate.context, tvalue);
|
|
110
|
+
}
|
|
111
|
+
if (entity.target.entitySetting.wantLogoutResponseSigned) {
|
|
112
|
+
const { privateKey, privateKeyPass, requestSignatureAlgorithm: signatureAlgorithm, transformationAlgorithms } = initSetting;
|
|
113
|
+
return {
|
|
114
|
+
id,
|
|
115
|
+
context: await constructSamlSignature({
|
|
116
|
+
...buildSignatureConfig(privateKey, privateKeyPass, signatureAlgorithm, metadata.init.getX509Certificate("signing")),
|
|
117
|
+
isMessageSigned: true,
|
|
118
|
+
transformationAlgorithms,
|
|
119
|
+
rawSamlMessage: rawSamlResponse,
|
|
120
|
+
signatureConfig: {
|
|
121
|
+
prefix: "ds",
|
|
122
|
+
location: {
|
|
123
|
+
reference: "/*[local-name(.)='LogoutResponse']/*[local-name(.)='Issuer']",
|
|
124
|
+
action: "after"
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
})
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
id,
|
|
132
|
+
context: base64Encode(rawSamlResponse)
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
throw new Error("ERR_GENERATE_POST_LOGOUT_RESPONSE_MISSING_METADATA");
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
//#endregion
|
|
139
|
+
export { base64LoginRequest, base64LogoutResponse };
|
|
140
|
+
//# sourceMappingURL=post.js.map
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { SAML_STATUS_SUCCESS, SamlQueryParam } from "../constants.js";
|
|
2
|
+
import { base64Encode, deflateString } from "../encoding.js";
|
|
3
|
+
import { constructMessageSignature } from "../signature.js";
|
|
4
|
+
import { defaultLoginRequestTemplate, defaultLogoutResponseTemplate, getQueryParamByType, replaceTagsByValue } from "../template.js";
|
|
5
|
+
import { getBindingField } from "./shared.js";
|
|
6
|
+
|
|
7
|
+
//#region src/server/connection/saml/binding/redirect.ts
|
|
8
|
+
/**
|
|
9
|
+
* Binding-level API for functions using Redirect binding.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* View the extractor's genuinely-open {@link ExtractedProperties} through the
|
|
13
|
+
* concrete request shape these response/logout builders read. The extract is
|
|
14
|
+
* dynamically assembled from inbound XML, so this is the single dynamic-shape
|
|
15
|
+
* boundary where the open record is narrowed to {@link ParsedRequestExtract}.
|
|
16
|
+
*/
|
|
17
|
+
function asParsedRequest(extract) {
|
|
18
|
+
return extract;
|
|
19
|
+
}
|
|
20
|
+
function pvPair(param, value, first) {
|
|
21
|
+
return (first === true ? "?" : "&") + param + "=" + value;
|
|
22
|
+
}
|
|
23
|
+
function hasNoQuery(baseUrl) {
|
|
24
|
+
const queryIndex = baseUrl.indexOf("?");
|
|
25
|
+
if (queryIndex < 0) return true;
|
|
26
|
+
return queryIndex === baseUrl.length - 1;
|
|
27
|
+
}
|
|
28
|
+
/** Build the redirect-binding URL, optionally appending a query-string signature. */
|
|
29
|
+
async function buildRedirectURL(opts) {
|
|
30
|
+
const { baseUrl, type, isSigned, context, entitySetting } = opts;
|
|
31
|
+
let { relayState = "" } = opts;
|
|
32
|
+
const noParams = hasNoQuery(baseUrl);
|
|
33
|
+
const queryParam = getQueryParamByType(type);
|
|
34
|
+
const samlRequest = encodeURIComponent(base64Encode(deflateString(context)));
|
|
35
|
+
if (relayState !== "") relayState = pvPair(SamlQueryParam.relayState, encodeURIComponent(relayState));
|
|
36
|
+
if (isSigned) {
|
|
37
|
+
/**
|
|
38
|
+
* The signed redirect path always runs with a configured algorithm and key
|
|
39
|
+
* (the entity defaults supply `requestSignatureAlgorithm`, and a signed
|
|
40
|
+
* request requires `privateKey`); the signer also declares `privateKey` as
|
|
41
|
+
* `string`. These two boundary casts narrow the optional/`BinaryLike`
|
|
42
|
+
* settings to what the signer consumes without runtime change.
|
|
43
|
+
*/
|
|
44
|
+
const sigAlg = pvPair(SamlQueryParam.sigAlg, encodeURIComponent(entitySetting.requestSignatureAlgorithm));
|
|
45
|
+
const octetString = samlRequest + relayState + sigAlg;
|
|
46
|
+
const signature = await constructMessageSignature(queryParam + "=" + octetString, entitySetting.privateKey, entitySetting.privateKeyPass, void 0, entitySetting.requestSignatureAlgorithm);
|
|
47
|
+
return baseUrl + pvPair(queryParam, octetString, noParams) + pvPair(SamlQueryParam.signature, encodeURIComponent(signature.toString()));
|
|
48
|
+
}
|
|
49
|
+
return baseUrl + pvPair(queryParam, samlRequest + relayState, noParams);
|
|
50
|
+
}
|
|
51
|
+
/** Build the redirect-binding URL for a login request. */
|
|
52
|
+
async function loginRequestRedirectURL(entity, customTagReplacement) {
|
|
53
|
+
const metadata = {
|
|
54
|
+
idp: entity.idp.entityMeta,
|
|
55
|
+
sp: entity.sp.entityMeta
|
|
56
|
+
};
|
|
57
|
+
const spSetting = entity.sp.entitySetting;
|
|
58
|
+
let id = "";
|
|
59
|
+
if (metadata && metadata.idp && metadata.sp) {
|
|
60
|
+
const base = metadata.idp.getSingleSignOnService("redirect");
|
|
61
|
+
let rawSamlRequest;
|
|
62
|
+
if (spSetting.loginRequestTemplate && customTagReplacement) {
|
|
63
|
+
const info = customTagReplacement(spSetting.loginRequestTemplate);
|
|
64
|
+
id = getBindingField(info, "id");
|
|
65
|
+
rawSamlRequest = getBindingField(info, "context");
|
|
66
|
+
} else {
|
|
67
|
+
const nameIDFormat = spSetting.nameIDFormat;
|
|
68
|
+
const selectedNameIDFormat = Array.isArray(nameIDFormat) ? nameIDFormat[0] : nameIDFormat;
|
|
69
|
+
id = spSetting.generateID();
|
|
70
|
+
rawSamlRequest = replaceTagsByValue(defaultLoginRequestTemplate.context, {
|
|
71
|
+
ID: id,
|
|
72
|
+
Destination: base,
|
|
73
|
+
Issuer: metadata.sp.getEntityID(),
|
|
74
|
+
IssueInstant: (/* @__PURE__ */ new Date()).toISOString(),
|
|
75
|
+
NameIDFormat: selectedNameIDFormat,
|
|
76
|
+
AssertionConsumerServiceURL: metadata.sp.getAssertionConsumerService("post"),
|
|
77
|
+
EntityID: metadata.sp.getEntityID(),
|
|
78
|
+
AllowCreate: spSetting.allowCreate
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
id,
|
|
83
|
+
context: await buildRedirectURL({
|
|
84
|
+
context: rawSamlRequest,
|
|
85
|
+
type: "SAMLRequest",
|
|
86
|
+
isSigned: metadata.sp.isAuthnRequestSigned(),
|
|
87
|
+
entitySetting: spSetting,
|
|
88
|
+
baseUrl: base,
|
|
89
|
+
relayState: spSetting.relayState
|
|
90
|
+
})
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
throw new Error("ERR_GENERATE_REDIRECT_LOGIN_REQUEST_MISSING_METADATA");
|
|
94
|
+
}
|
|
95
|
+
/** Build the redirect-binding URL for a logout response. */
|
|
96
|
+
async function logoutResponseRedirectURL(requestInfo, entity, relayState, customTagReplacement) {
|
|
97
|
+
const metadata = {
|
|
98
|
+
init: entity.init.entityMeta,
|
|
99
|
+
target: entity.target.entityMeta
|
|
100
|
+
};
|
|
101
|
+
const initSetting = entity.init.entitySetting;
|
|
102
|
+
let id = initSetting.generateID();
|
|
103
|
+
if (metadata && metadata.init && metadata.target) {
|
|
104
|
+
const base = metadata.target.getSingleLogoutService("redirect");
|
|
105
|
+
let rawSamlResponse;
|
|
106
|
+
if (initSetting.logoutResponseTemplate && customTagReplacement) {
|
|
107
|
+
const template = customTagReplacement(initSetting.logoutResponseTemplate);
|
|
108
|
+
id = getBindingField(template, "id");
|
|
109
|
+
rawSamlResponse = getBindingField(template, "context");
|
|
110
|
+
} else {
|
|
111
|
+
const tvalue = {
|
|
112
|
+
ID: id,
|
|
113
|
+
Destination: base,
|
|
114
|
+
Issuer: metadata.init.getEntityID(),
|
|
115
|
+
EntityID: metadata.init.getEntityID(),
|
|
116
|
+
IssueInstant: (/* @__PURE__ */ new Date()).toISOString(),
|
|
117
|
+
StatusCode: SAML_STATUS_SUCCESS
|
|
118
|
+
};
|
|
119
|
+
if (requestInfo && requestInfo.extract && asParsedRequest(requestInfo.extract).request) tvalue.InResponseTo = asParsedRequest(requestInfo.extract).request.id;
|
|
120
|
+
rawSamlResponse = replaceTagsByValue(defaultLogoutResponseTemplate.context, tvalue);
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
id,
|
|
124
|
+
context: await buildRedirectURL({
|
|
125
|
+
baseUrl: base,
|
|
126
|
+
type: "LogoutResponse",
|
|
127
|
+
isSigned: entity.target.entitySetting.wantLogoutResponseSigned,
|
|
128
|
+
context: rawSamlResponse,
|
|
129
|
+
entitySetting: initSetting,
|
|
130
|
+
relayState
|
|
131
|
+
})
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
throw new Error("ERR_GENERATE_REDIRECT_LOGOUT_RESPONSE_MISSING_METADATA");
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
//#endregion
|
|
138
|
+
export { loginRequestRedirectURL, logoutResponseRedirectURL };
|
|
139
|
+
//# sourceMappingURL=redirect.js.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { get } from "../encoding.js";
|
|
2
|
+
|
|
3
|
+
//#region src/server/connection/saml/binding/shared.ts
|
|
4
|
+
/**
|
|
5
|
+
* Helpers and entity types shared by the redirect and POST binding builders.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* `get` performs lodash-style traversal and returns `unknown`; a custom-tag
|
|
9
|
+
* replacement yields a {@link BindingContext}, so `id`/`context` are strings.
|
|
10
|
+
* The single boundary cast preserves `get`'s truthy-or-null runtime semantics.
|
|
11
|
+
*/
|
|
12
|
+
function getBindingField(source, field) {
|
|
13
|
+
return get(source, field, null);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
export { getBindingField };
|
|
18
|
+
//# sourceMappingURL=shared.js.map
|