@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,115 @@
|
|
|
1
|
+
import { SCIM_GROUP_SCHEMA_ID, SCIM_USER_SCHEMA_ID } from "./shared.js";
|
|
2
|
+
|
|
3
|
+
//#region src/server/connection/scim.ts
|
|
4
|
+
/** @internal */
|
|
5
|
+
function parseScimPath(pathname) {
|
|
6
|
+
const parts = pathname.split("/").filter(Boolean);
|
|
7
|
+
const connectionsIndex = parts.lastIndexOf("connections");
|
|
8
|
+
const [connectionId, protocol, version, ...rest] = connectionsIndex >= 0 ? parts.slice(connectionsIndex + 1) : [];
|
|
9
|
+
if (connectionsIndex < 0 || !connectionId || connectionId === "setup" || protocol !== "scim" || version !== "v2" || rest.length > 2) return {
|
|
10
|
+
connectionId: "",
|
|
11
|
+
resource: "",
|
|
12
|
+
resourceId: void 0
|
|
13
|
+
};
|
|
14
|
+
return {
|
|
15
|
+
connectionId,
|
|
16
|
+
resource: rest[0] ?? "",
|
|
17
|
+
resourceId: rest[1]
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/** @internal */
|
|
21
|
+
function parseScimListRequest(url) {
|
|
22
|
+
const rawStartIndex = url.searchParams.get("startIndex") ?? "1";
|
|
23
|
+
const rawCount = url.searchParams.get("count") ?? "100";
|
|
24
|
+
const parsedStartIndex = Number(rawStartIndex);
|
|
25
|
+
const parsedCount = Number(rawCount);
|
|
26
|
+
if (!Number.isInteger(parsedStartIndex) || parsedStartIndex < 1) throw new Error("Invalid SCIM pagination.");
|
|
27
|
+
if (!Number.isInteger(parsedCount) || parsedCount < 0) throw new Error("Invalid SCIM pagination.");
|
|
28
|
+
const startIndex = parsedStartIndex;
|
|
29
|
+
const count = Math.min(100, parsedCount);
|
|
30
|
+
const filterParam = url.searchParams.get("filter");
|
|
31
|
+
return {
|
|
32
|
+
startIndex,
|
|
33
|
+
count,
|
|
34
|
+
filter: filterParam ? (() => {
|
|
35
|
+
const presentMatch = filterParam.match(/^([A-Za-z0-9_.]+)\s+pr$/);
|
|
36
|
+
if (presentMatch) return {
|
|
37
|
+
attribute: presentMatch[1],
|
|
38
|
+
operator: "pr"
|
|
39
|
+
};
|
|
40
|
+
const match = filterParam.match(/^([A-Za-z0-9_.]+(?:\[value eq "[^"]+"\])?)\s+(eq|co|sw|ew)\s+"([^"]+)"$/);
|
|
41
|
+
if (!match) throw new Error("Unsupported SCIM filter.");
|
|
42
|
+
return {
|
|
43
|
+
attribute: match[1],
|
|
44
|
+
operator: match[2],
|
|
45
|
+
value: match[3]
|
|
46
|
+
};
|
|
47
|
+
})() : void 0
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/** @internal */
|
|
51
|
+
function scimJson(data, status = 200, headers) {
|
|
52
|
+
const responseHeaders = new Headers({ "Content-Type": "application/scim+json" });
|
|
53
|
+
if (headers) new Headers(headers).forEach((value, key) => {
|
|
54
|
+
responseHeaders.set(key, value);
|
|
55
|
+
});
|
|
56
|
+
return new Response(JSON.stringify(data), {
|
|
57
|
+
status,
|
|
58
|
+
headers: responseHeaders
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/** @internal */
|
|
62
|
+
function scimError(status, scimType, detail) {
|
|
63
|
+
return scimJson({
|
|
64
|
+
schemas: ["urn:ietf:params:scim:api:messages:2.0:Error"],
|
|
65
|
+
status: String(status),
|
|
66
|
+
scimType,
|
|
67
|
+
detail
|
|
68
|
+
}, status);
|
|
69
|
+
}
|
|
70
|
+
/** @internal */
|
|
71
|
+
function serializeScimUser(args) {
|
|
72
|
+
return {
|
|
73
|
+
schemas: [SCIM_USER_SCHEMA_ID],
|
|
74
|
+
id: args.id,
|
|
75
|
+
externalId: args.externalId,
|
|
76
|
+
meta: {
|
|
77
|
+
resourceType: "User",
|
|
78
|
+
location: args.location
|
|
79
|
+
},
|
|
80
|
+
userName: args.user.email ?? args.user.phone ?? args.user.name ?? args.id,
|
|
81
|
+
active: args.active ?? true,
|
|
82
|
+
name: args.user.name !== void 0 || args.user.firstName !== void 0 || args.user.lastName !== void 0 ? {
|
|
83
|
+
formatted: args.user.name,
|
|
84
|
+
givenName: args.user.firstName,
|
|
85
|
+
familyName: args.user.lastName
|
|
86
|
+
} : void 0,
|
|
87
|
+
emails: typeof args.user.email === "string" ? [{
|
|
88
|
+
value: args.user.email,
|
|
89
|
+
primary: true
|
|
90
|
+
}] : void 0,
|
|
91
|
+
phoneNumbers: typeof args.user.phone === "string" ? [{
|
|
92
|
+
value: args.user.phone,
|
|
93
|
+
primary: true
|
|
94
|
+
}] : void 0,
|
|
95
|
+
displayName: args.user.name
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/** @internal */
|
|
99
|
+
function serializeScimGroup(args) {
|
|
100
|
+
return {
|
|
101
|
+
schemas: [SCIM_GROUP_SCHEMA_ID],
|
|
102
|
+
id: args.id,
|
|
103
|
+
externalId: args.externalId,
|
|
104
|
+
meta: {
|
|
105
|
+
resourceType: "Group",
|
|
106
|
+
location: args.location
|
|
107
|
+
},
|
|
108
|
+
displayName: args.group.name ?? args.id,
|
|
109
|
+
members: args.members ?? []
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
//#endregion
|
|
114
|
+
export { parseScimListRequest, parseScimPath, scimError, scimJson, serializeScimGroup, serializeScimUser };
|
|
115
|
+
//# sourceMappingURL=scim.js.map
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
//#region src/server/connection/shared.ts
|
|
2
|
+
/** @internal */
|
|
3
|
+
const SCIM_USER_SCHEMA_ID = "urn:ietf:params:scim:schemas:core:2.0:User";
|
|
4
|
+
/** @internal */
|
|
5
|
+
const SCIM_GROUP_SCHEMA_ID = "urn:ietf:params:scim:schemas:core:2.0:Group";
|
|
6
|
+
/** @internal */
|
|
7
|
+
const GROUP_OIDC_PROVIDER_PREFIX = "group:oidc:";
|
|
8
|
+
/** @internal */
|
|
9
|
+
const GROUP_SAML_PROVIDER_PREFIX = "group:saml:";
|
|
10
|
+
/** @internal */
|
|
11
|
+
function normalizeDomain(domain) {
|
|
12
|
+
return domain.trim().toLowerCase().replace(/^@+/, "");
|
|
13
|
+
}
|
|
14
|
+
/** @internal */
|
|
15
|
+
function groupOidcProviderId(connectionId) {
|
|
16
|
+
return `${GROUP_OIDC_PROVIDER_PREFIX}${connectionId}`;
|
|
17
|
+
}
|
|
18
|
+
/** @internal */
|
|
19
|
+
function groupSamlProviderId(connectionId) {
|
|
20
|
+
return `${GROUP_SAML_PROVIDER_PREFIX}${connectionId}`;
|
|
21
|
+
}
|
|
22
|
+
/** @internal */
|
|
23
|
+
function getGroupSamlUrls(opts) {
|
|
24
|
+
const root = opts.rootUrl.replace(/\/$/, "");
|
|
25
|
+
return {
|
|
26
|
+
metadataUrl: `${root}/connections/${opts.source.id}/saml/metadata`,
|
|
27
|
+
acsUrl: `${root}/connections/${opts.source.id}/saml/acs`,
|
|
28
|
+
sloUrl: `${root}/connections/${opts.source.id}/saml/slo`
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/** @internal */
|
|
32
|
+
function getGroupOidcUrls(opts) {
|
|
33
|
+
const root = opts.rootUrl.replace(/\/$/, "");
|
|
34
|
+
const callbackUrl = (() => {
|
|
35
|
+
if (typeof opts.sharedRedirectURI !== "string") return `${root}/connections/${opts.connectionId}/oidc/callback`;
|
|
36
|
+
if (/^https?:\/\//.test(opts.sharedRedirectURI)) return opts.sharedRedirectURI;
|
|
37
|
+
return `${root}${opts.sharedRedirectURI.startsWith("/") ? "" : "/"}${opts.sharedRedirectURI}`;
|
|
38
|
+
})();
|
|
39
|
+
return {
|
|
40
|
+
signInUrl: `${root}/connections/${opts.connectionId}/oidc/signin`,
|
|
41
|
+
callbackUrl
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/** @internal */
|
|
45
|
+
function encodeGroupOidcState(opts) {
|
|
46
|
+
const json = JSON.stringify(opts);
|
|
47
|
+
return (typeof btoa === "function" ? btoa(json) : Buffer.from(json, "utf8").toString("base64")).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/g, "");
|
|
48
|
+
}
|
|
49
|
+
/** @internal */
|
|
50
|
+
function decodeGroupOidcState(value) {
|
|
51
|
+
if (!value) throw new Error("Missing OIDC state.");
|
|
52
|
+
const normalized = value.replace(/-/g, "+").replace(/_/g, "/");
|
|
53
|
+
const padded = normalized + "=".repeat((4 - normalized.length % 4) % 4);
|
|
54
|
+
const decoded = typeof atob === "function" ? atob(padded) : Buffer.from(padded, "base64").toString("utf8");
|
|
55
|
+
const parsed = JSON.parse(decoded);
|
|
56
|
+
if (typeof parsed.connectionId !== "string" || typeof parsed.state !== "string") throw new Error("Invalid OIDC state.");
|
|
57
|
+
return {
|
|
58
|
+
connectionId: parsed.connectionId,
|
|
59
|
+
state: parsed.state
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/** @internal */
|
|
63
|
+
function isGroupSamlSourceActive(source) {
|
|
64
|
+
return source.status === "active";
|
|
65
|
+
}
|
|
66
|
+
/** @internal */
|
|
67
|
+
function isGroupProviderId(providerId) {
|
|
68
|
+
return providerId.startsWith(GROUP_OIDC_PROVIDER_PREFIX) || providerId.startsWith(GROUP_SAML_PROVIDER_PREFIX);
|
|
69
|
+
}
|
|
70
|
+
const asRecord = (value) => typeof value === "object" && value !== null ? value : null;
|
|
71
|
+
|
|
72
|
+
//#endregion
|
|
73
|
+
export { GROUP_OIDC_PROVIDER_PREFIX, GROUP_SAML_PROVIDER_PREFIX, SCIM_GROUP_SCHEMA_ID, SCIM_USER_SCHEMA_ID, asRecord, decodeGroupOidcState, encodeGroupOidcState, getGroupOidcUrls, getGroupSamlUrls, groupOidcProviderId, groupSamlProviderId, isGroupProviderId, isGroupSamlSourceActive, normalizeDomain };
|
|
74
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { ErrorCode } from "../../shared/codes.js";
|
|
2
|
+
import { EVENT_KINDS } from "../../shared/event/kinds.js";
|
|
3
|
+
import { convexError } from "../errors.js";
|
|
4
|
+
import { createWebhookEndpoint, getWebhookEndpoint, listReadyWebhookDeliveries, listWebhookDeliveries, listWebhookEndpoints, updateWebhookDelivery, updateWebhookEndpoint } from "../contract.js";
|
|
5
|
+
import { unsafeFetchUrlReason } from "../../shared/fetch/guard.js";
|
|
6
|
+
|
|
7
|
+
//#region src/server/connection/webhook.ts
|
|
8
|
+
/**
|
|
9
|
+
* Validate an operator-supplied webhook target URL before it is persisted and
|
|
10
|
+
* later `fetch`ed server-side, rejecting requests that could be turned into SSRF
|
|
11
|
+
* probes of internal infrastructure. Webhook targets are customer endpoints that
|
|
12
|
+
* must always be publicly reachable, so — unlike the IdP discovery/metadata
|
|
13
|
+
* fetch guard — this is not subject to the self-hosted private-host opt-out.
|
|
14
|
+
*
|
|
15
|
+
* See {@link unsafeFetchUrlReason} for the scheme/hostname rules. This is
|
|
16
|
+
* scheme/hostname-level validation only — it does not defend against DNS
|
|
17
|
+
* rebinding, where a public hostname resolves to a private address at delivery
|
|
18
|
+
* time.
|
|
19
|
+
*
|
|
20
|
+
* @internal
|
|
21
|
+
*/
|
|
22
|
+
function assertSafeWebhookUrl(url) {
|
|
23
|
+
const reason = unsafeFetchUrlReason(url);
|
|
24
|
+
if (reason !== null) throw convexError(ErrorCode.INVALID_PARAMETERS, `Webhook ${reason}`);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Webhook endpoint doc with all stored credential material stripped for the
|
|
28
|
+
* public/admin read facade (`endpoint.get`/`endpoint.list`). The raw ciphertext
|
|
29
|
+
* stays internal to delivery signing, which reads the component doc directly.
|
|
30
|
+
* Hash-only legacy rows are reported as disabled until a new secret is stored.
|
|
31
|
+
*
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
34
|
+
function getPublicWebhookEndpoint(endpoint) {
|
|
35
|
+
if (!endpoint) return null;
|
|
36
|
+
const { secretCiphertext, secretHash: _secretHash, status, subscriptions, ...rest } = endpoint;
|
|
37
|
+
const hasSecret = typeof secretCiphertext === "string" && secretCiphertext.length > 0;
|
|
38
|
+
return {
|
|
39
|
+
...rest,
|
|
40
|
+
status: hasSecret ? status : "disabled",
|
|
41
|
+
subscriptions: subscriptions.filter((kind) => Object.prototype.hasOwnProperty.call(EVENT_KINDS, kind)),
|
|
42
|
+
hasSecret
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function createGroupWebhookDomain(deps) {
|
|
46
|
+
const { config, encryptSecret, loadConnectionOrThrow, emitGroupAuthEvent } = deps;
|
|
47
|
+
return {
|
|
48
|
+
endpoint: {
|
|
49
|
+
get: async (ctx, args) => {
|
|
50
|
+
return getPublicWebhookEndpoint(await getWebhookEndpoint(ctx, config.component.connection, args.id));
|
|
51
|
+
},
|
|
52
|
+
create: async (ctx, data) => {
|
|
53
|
+
assertSafeWebhookUrl(data.url);
|
|
54
|
+
if (data.secret.length === 0) throw convexError(ErrorCode.INVALID_PARAMETERS, "Webhook secret must not be empty.");
|
|
55
|
+
const connection = await loadConnectionOrThrow(ctx, data.connectionId);
|
|
56
|
+
if (connection === null) throw convexError(ErrorCode.INVALID_PARAMETERS, "Connection not found.");
|
|
57
|
+
const secretCiphertext = await encryptSecret(data.secret);
|
|
58
|
+
const endpointId = await createWebhookEndpoint(ctx, config.component.connection, {
|
|
59
|
+
connectionId: connection._id,
|
|
60
|
+
groupId: connection.groupId,
|
|
61
|
+
url: data.url,
|
|
62
|
+
secretCiphertext,
|
|
63
|
+
subscriptions: data.subscriptions,
|
|
64
|
+
createdByUserId: data.createdByUserId
|
|
65
|
+
});
|
|
66
|
+
await emitGroupAuthEvent(ctx, {
|
|
67
|
+
connectionId: connection._id,
|
|
68
|
+
groupId: connection.groupId,
|
|
69
|
+
kind: "webhook.endpoint.created",
|
|
70
|
+
actor: data.createdByUserId ? {
|
|
71
|
+
type: "user",
|
|
72
|
+
id: data.createdByUserId
|
|
73
|
+
} : { type: "system" },
|
|
74
|
+
subject: {
|
|
75
|
+
type: "webhook_endpoint",
|
|
76
|
+
id: endpointId
|
|
77
|
+
},
|
|
78
|
+
webhook: false
|
|
79
|
+
});
|
|
80
|
+
return { endpointId };
|
|
81
|
+
},
|
|
82
|
+
list: async (ctx, args) => {
|
|
83
|
+
return (await listWebhookEndpoints(ctx, config.component.connection, args.connectionId)).map((endpoint) => getPublicWebhookEndpoint(endpoint));
|
|
84
|
+
},
|
|
85
|
+
update: async (ctx, args) => {
|
|
86
|
+
const endpoint = await getWebhookEndpoint(ctx, config.component.connection, args.id);
|
|
87
|
+
if (!endpoint) throw convexError(ErrorCode.INVALID_PARAMETERS, "Webhook endpoint not found.");
|
|
88
|
+
if (args.patch.url !== void 0) assertSafeWebhookUrl(args.patch.url);
|
|
89
|
+
if (args.patch.secret !== void 0 && args.patch.secret.length === 0) throw convexError(ErrorCode.INVALID_PARAMETERS, "Webhook secret must not be empty.");
|
|
90
|
+
if (args.patch.status === "active" && args.patch.secret === void 0 && !endpoint.secretCiphertext) throw convexError(ErrorCode.INVALID_PARAMETERS, "A new webhook secret is required before this endpoint can be enabled.");
|
|
91
|
+
const secretCiphertext = args.patch.secret === void 0 ? void 0 : await encryptSecret(args.patch.secret);
|
|
92
|
+
await updateWebhookEndpoint(ctx, config.component.connection, {
|
|
93
|
+
endpointId: args.id,
|
|
94
|
+
patch: {
|
|
95
|
+
...args.patch.url === void 0 ? {} : { url: args.patch.url },
|
|
96
|
+
...args.patch.status === void 0 ? {} : { status: args.patch.status },
|
|
97
|
+
...args.patch.subscriptions === void 0 ? {} : { subscriptions: args.patch.subscriptions },
|
|
98
|
+
...secretCiphertext === void 0 ? {} : { secretCiphertext }
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
return { endpointId: args.id };
|
|
102
|
+
},
|
|
103
|
+
revoke: async (ctx, args) => {
|
|
104
|
+
const endpoint = await getWebhookEndpoint(ctx, config.component.connection, args.id);
|
|
105
|
+
await updateWebhookEndpoint(ctx, config.component.connection, {
|
|
106
|
+
endpointId: args.id,
|
|
107
|
+
patch: { status: "disabled" }
|
|
108
|
+
});
|
|
109
|
+
if (endpoint) await emitGroupAuthEvent(ctx, {
|
|
110
|
+
connectionId: endpoint.connectionId,
|
|
111
|
+
groupId: endpoint.groupId,
|
|
112
|
+
kind: "webhook.endpoint.disabled",
|
|
113
|
+
actor: { type: "system" },
|
|
114
|
+
subject: {
|
|
115
|
+
type: "webhook_endpoint",
|
|
116
|
+
id: args.id
|
|
117
|
+
},
|
|
118
|
+
webhook: false
|
|
119
|
+
});
|
|
120
|
+
return { endpointId: args.id };
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
delivery: {
|
|
124
|
+
list: async (ctx, data) => {
|
|
125
|
+
return await listWebhookDeliveries(ctx, config.component.connection, data);
|
|
126
|
+
},
|
|
127
|
+
listReady: async (ctx, args = {}) => {
|
|
128
|
+
return await listReadyWebhookDeliveries(ctx, config.component.connection, {
|
|
129
|
+
now: Date.now(),
|
|
130
|
+
limit: args.limit
|
|
131
|
+
});
|
|
132
|
+
},
|
|
133
|
+
markDelivered: async (ctx, args) => {
|
|
134
|
+
await updateWebhookDelivery(ctx, config.component.connection, {
|
|
135
|
+
deliveryId: args.id,
|
|
136
|
+
patch: {
|
|
137
|
+
status: "delivered",
|
|
138
|
+
attemptCount: 1,
|
|
139
|
+
lastAttemptAt: Date.now(),
|
|
140
|
+
lastResponseStatus: args.responseStatus
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
},
|
|
144
|
+
markFailed: async (ctx, args) => {
|
|
145
|
+
await updateWebhookDelivery(ctx, config.component.connection, {
|
|
146
|
+
deliveryId: args.id,
|
|
147
|
+
patch: {
|
|
148
|
+
status: args.data.retryAt ? "pending" : "failed",
|
|
149
|
+
attemptCount: args.data.attemptCount,
|
|
150
|
+
lastAttemptAt: Date.now(),
|
|
151
|
+
lastResponseStatus: args.data.responseStatus,
|
|
152
|
+
lastError: args.data.error,
|
|
153
|
+
nextAttemptAt: args.data.retryAt ?? Date.now()
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
//#endregion
|
|
162
|
+
export { createGroupWebhookDomain };
|
|
163
|
+
//# sourceMappingURL=webhook.js.map
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { Doc } from "./types.js";
|
|
2
|
+
import { GenericId } from "convex/values";
|
|
3
|
+
import { UserIdentity } from "convex/server";
|
|
4
|
+
|
|
5
|
+
//#region src/server/context.d.ts
|
|
6
|
+
/** Canonical user document type exposed by Convex Auth. */
|
|
7
|
+
type UserDoc = Doc<"User">;
|
|
8
|
+
type AuthIdentityCtx = {
|
|
9
|
+
auth: {
|
|
10
|
+
getUserIdentity: () => Promise<UserIdentity | null>;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Current request auth context injected into `ctx.auth` by `auth.ctx()`. This
|
|
15
|
+
* is the authenticated auth shape returned by {@link defineAuth().context}.
|
|
16
|
+
* Optional context builders may still surface nullable fields when
|
|
17
|
+
* `optional: true` is used.
|
|
18
|
+
*
|
|
19
|
+
* - `groupId` is `null` when the user has no active group set.
|
|
20
|
+
* - `role` is `null` when no active group or no membership is resolved.
|
|
21
|
+
* - `grants` is `[]` when no active group or no membership is resolved.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* import type { AuthContext } from "@estifanos-sh/convex-auth/server";
|
|
26
|
+
*
|
|
27
|
+
* const mockAuth: AuthContext = {
|
|
28
|
+
* userId: "user123" as Id<"User">,
|
|
29
|
+
* user: { _id: "user123", email: "test@example.com" },
|
|
30
|
+
* groupId: "group456",
|
|
31
|
+
* role: "admin",
|
|
32
|
+
* grants: ["read", "write"],
|
|
33
|
+
* };
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
type AuthContext = {
|
|
37
|
+
/** The authenticated user's document ID. */userId: GenericId<"User">; /** The authenticated user's full document. */
|
|
38
|
+
user: UserDoc; /** The user's active group ID, or `null` if none set. */
|
|
39
|
+
groupId: string | null; /** The user's primary role in the active group, or `null`. */
|
|
40
|
+
role: string | null; /** Resolved grant strings from the user's role definitions. */
|
|
41
|
+
grants: string[];
|
|
42
|
+
/**
|
|
43
|
+
* Assert the current user holds the given grant(s); throws
|
|
44
|
+
* `ConvexError({ code: ErrorCode.MISSING_GRANTS })` otherwise. Pass a
|
|
45
|
+
* group-owned document as the second argument to also assert the
|
|
46
|
+
* record belongs to the active group (`code: ErrorCode.FORBIDDEN` if not).
|
|
47
|
+
*
|
|
48
|
+
* For a boolean check, read `grants` directly:
|
|
49
|
+
* `ctx.auth.grants.includes("issues.read")`.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```ts
|
|
53
|
+
* ctx.auth.assert("members.manage");
|
|
54
|
+
* ctx.auth.assert(["issues.edit", "issues.move"]);
|
|
55
|
+
* ctx.auth.assert("issues.edit", issueDoc); // group-scoped
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
assert: (grant: string | readonly string[], doc?: {
|
|
59
|
+
groupId?: unknown;
|
|
60
|
+
}) => void;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Nullable auth context returned by `auth.context.optional(ctx)` and injected
|
|
64
|
+
* by `auth.ctx.optional()`.
|
|
65
|
+
*
|
|
66
|
+
* Use this when callers may be unauthenticated but you still want a stable
|
|
67
|
+
* auth-shaped object.
|
|
68
|
+
*
|
|
69
|
+
* - `userId` and `user` are `null` when unauthenticated.
|
|
70
|
+
* - `groupId` and `role` are `null` when no active group is resolved.
|
|
71
|
+
* - `grants` is `[]` when no membership is resolved.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```ts
|
|
75
|
+
* const authContext = await auth.context.optional(ctx);
|
|
76
|
+
* if (authContext.userId === null) {
|
|
77
|
+
* return null;
|
|
78
|
+
* }
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
type OptionalAuthContext = {
|
|
82
|
+
/** The authenticated user's document ID, or `null` when unauthenticated. */userId: GenericId<"User"> | null; /** The authenticated user's full document, or `null` when unauthenticated. */
|
|
83
|
+
user: UserDoc | null; /** The user's active group ID, or `null` if none is set. */
|
|
84
|
+
groupId: string | null; /** The user's primary role in the active group, or `null`. */
|
|
85
|
+
role: string | null; /** Resolved grant strings for the active membership, or `[]`. */
|
|
86
|
+
grants: string[];
|
|
87
|
+
/**
|
|
88
|
+
* Assert the current user holds the given grant(s); throws when
|
|
89
|
+
* missing (or, with a group-owned `doc`, when it is not in the active
|
|
90
|
+
* group). When unauthenticated this always throws. For a boolean
|
|
91
|
+
* check read `grants` directly.
|
|
92
|
+
*/
|
|
93
|
+
assert: (grant: string | readonly string[], doc?: {
|
|
94
|
+
groupId?: unknown;
|
|
95
|
+
}) => void;
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Configuration for {@link defineAuth().ctx} context enrichment.
|
|
99
|
+
*
|
|
100
|
+
* The same config shape is also used by {@link defineAuth().context}.
|
|
101
|
+
*
|
|
102
|
+
* @typeParam TResolve - Extra fields returned from `resolve()` and merged into
|
|
103
|
+
* the resulting `ctx.auth` object.
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```ts
|
|
107
|
+
* const authContext = await auth.context(ctx, {
|
|
108
|
+
* resolve: async (_ctx, user, authState) => ({
|
|
109
|
+
* email: user.email,
|
|
110
|
+
* canWrite: authState.grants.includes("posts.write"),
|
|
111
|
+
* }),
|
|
112
|
+
* });
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
type AuthContextConfig<TResolve extends Record<string, unknown> = Record<string, never>, TCtx extends AuthIdentityCtx = AuthIdentityCtx> = {
|
|
116
|
+
/**
|
|
117
|
+
* Enforce grant(s) inline — equivalent to calling `ctx.auth.assert(...)`
|
|
118
|
+
* at the top of every handler built with this customization. Throws
|
|
119
|
+
* `ConvexError({ code: ErrorCode.MISSING_GRANTS })` when missing.
|
|
120
|
+
*/
|
|
121
|
+
assert?: string | readonly string[];
|
|
122
|
+
/**
|
|
123
|
+
* Require an active group; throws `ConvexError({ code: ErrorCode.NO_ACTIVE_GROUP })`
|
|
124
|
+
* when the resolved context has no `groupId`. Reuses the `active` concept.
|
|
125
|
+
*/
|
|
126
|
+
active?: true;
|
|
127
|
+
/**
|
|
128
|
+
* Attach additional derived fields to the auth context after the base auth
|
|
129
|
+
* context is resolved.
|
|
130
|
+
*
|
|
131
|
+
* This callback runs only when an authenticated user context is available.
|
|
132
|
+
*/
|
|
133
|
+
resolve?: (ctx: TCtx, user: UserDoc, auth: AuthContext) => Promise<TResolve> | TResolve;
|
|
134
|
+
};
|
|
135
|
+
//#endregion
|
|
136
|
+
export { AuthContext, AuthContextConfig, OptionalAuthContext, UserDoc };
|
|
137
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { ErrorCode } from "../shared/codes.js";
|
|
2
|
+
import { getAuthenticatedUserIdOrNull, getUserIdentityOrNull, oauthScopesFromIdentity, userIdFromIdentity } from "./identity/claims.js";
|
|
3
|
+
import { ConvexError } from "convex/values";
|
|
4
|
+
|
|
5
|
+
//#region src/server/context.ts
|
|
6
|
+
/**
|
|
7
|
+
* Narrow the loose {@link AuthLike} compat surface to the precise
|
|
8
|
+
* {@link AuthContextResolverLike} the resolver body needs.
|
|
9
|
+
*
|
|
10
|
+
* `AuthLike`'s methods use `(...args: never[])` parameters so any concrete
|
|
11
|
+
* domain object is assignable to it; those bottom-typed parameters do not
|
|
12
|
+
* statically unify with the resolver's precise `(ctx, args)` signatures, so
|
|
13
|
+
* this is the single sanctioned assertion at that irreducible boundary. The
|
|
14
|
+
* concrete domains object (the only real value ever passed) satisfies both.
|
|
15
|
+
*/
|
|
16
|
+
function asResolver(auth) {
|
|
17
|
+
return auth;
|
|
18
|
+
}
|
|
19
|
+
/** @internal */
|
|
20
|
+
async function getSessionUserId(ctx) {
|
|
21
|
+
return await getAuthenticatedUserIdOrNull(ctx);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Build the `ctx.auth.assert` grant guard from the resolved grants and
|
|
25
|
+
* active group. `assert(grant)` throws when a grant is missing;
|
|
26
|
+
* `assert(grant, doc)` additionally asserts the group-owned `doc` belongs
|
|
27
|
+
* to the active group. Reuses `member.assert`'s `MISSING_GRANTS` code.
|
|
28
|
+
*
|
|
29
|
+
* @internal
|
|
30
|
+
*/
|
|
31
|
+
function makeAssert(groupId, grants) {
|
|
32
|
+
return (grant, doc) => {
|
|
33
|
+
if ((Array.isArray(grant) ? grant : [grant]).filter((g) => !grants.includes(g)).length > 0) throw new ConvexError({
|
|
34
|
+
code: ErrorCode.MISSING_GRANTS,
|
|
35
|
+
message: "User is missing required grants."
|
|
36
|
+
});
|
|
37
|
+
if (doc !== void 0) {
|
|
38
|
+
const docGroupId = doc.groupId;
|
|
39
|
+
if (groupId === null || String(docGroupId) !== groupId) throw new ConvexError({
|
|
40
|
+
code: ErrorCode.FORBIDDEN,
|
|
41
|
+
message: "Record is not in the active group."
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Resolve the caller's *effective* active group and its grants on the hot path.
|
|
48
|
+
*
|
|
49
|
+
* The active-group domain resolves the stored preference, membership fallback,
|
|
50
|
+
* and grants through one component transaction.
|
|
51
|
+
*
|
|
52
|
+
* @internal
|
|
53
|
+
*/
|
|
54
|
+
async function resolveActiveMembership(auth, ctx, userId) {
|
|
55
|
+
return await auth.active.get(ctx, { userId }) ?? {
|
|
56
|
+
groupId: null,
|
|
57
|
+
roleIds: [],
|
|
58
|
+
grants: []
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* @internal
|
|
63
|
+
*
|
|
64
|
+
* Resolve the caller's auth context. When `oauthScopes` is supplied (the request
|
|
65
|
+
* is authenticated by a scoped OAuth access token rather than a full session),
|
|
66
|
+
* the user's role grants are intersected with the token's scopes so the caller's
|
|
67
|
+
* effective grants — and therefore `assert` — can never exceed the granted
|
|
68
|
+
* scope. Scopes and grants share one vocabulary, so this is a set intersection.
|
|
69
|
+
* A session caller passes no scopes and keeps their full role grants.
|
|
70
|
+
*/
|
|
71
|
+
async function getAuthContextForUser(auth, ctx, userId, oauthScopes) {
|
|
72
|
+
const [user, resolved] = await Promise.all([auth.user.get(ctx, { id: userId }), resolveActiveMembership(auth, ctx, userId)]);
|
|
73
|
+
const groupId = resolved.groupId;
|
|
74
|
+
const role = groupId === null ? null : resolved.roleIds[0] ?? null;
|
|
75
|
+
const grants = groupId === null ? [] : resolved.grants;
|
|
76
|
+
const effectiveGrants = oauthScopes === void 0 ? grants : grants.filter((grant) => oauthScopes.includes(grant));
|
|
77
|
+
return {
|
|
78
|
+
userId,
|
|
79
|
+
user,
|
|
80
|
+
groupId,
|
|
81
|
+
role,
|
|
82
|
+
grants: effectiveGrants,
|
|
83
|
+
assert: makeAssert(groupId, effectiveGrants)
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/** @internal */
|
|
87
|
+
async function getAuthContext(auth, ctx) {
|
|
88
|
+
const identity = await getUserIdentityOrNull(ctx);
|
|
89
|
+
if (identity === null) return null;
|
|
90
|
+
const userId = userIdFromIdentity(identity);
|
|
91
|
+
const oauthScopes = oauthScopesFromIdentity(identity);
|
|
92
|
+
return await getAuthContextForUser(asResolver(auth), ctx, userId, oauthScopes ?? void 0);
|
|
93
|
+
}
|
|
94
|
+
/** @internal */
|
|
95
|
+
function createUnauthenticatedAuthContext() {
|
|
96
|
+
return {
|
|
97
|
+
userId: null,
|
|
98
|
+
user: null,
|
|
99
|
+
groupId: null,
|
|
100
|
+
role: null,
|
|
101
|
+
grants: [],
|
|
102
|
+
assert: makeAssert(null, [])
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
//#endregion
|
|
107
|
+
export { createUnauthenticatedAuthContext, getAuthContext, getAuthContextForUser, getSessionUserId };
|
|
108
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ComponentReadCtx } from "./component/context.js";
|
|
2
|
+
import "./events.js";
|
|
3
|
+
import { ConvexAuthMaterializedConfig } from "./types.js";
|
|
4
|
+
|
|
5
|
+
//#region src/server/contract.d.ts
|
|
6
|
+
type ComponentConnection = ConvexAuthMaterializedConfig["component"]["connection"];
|
|
7
|
+
type GroupConnectionRecord = {
|
|
8
|
+
_id: string;
|
|
9
|
+
_creationTime: number;
|
|
10
|
+
groupId: string;
|
|
11
|
+
slug?: string;
|
|
12
|
+
name?: string;
|
|
13
|
+
protocol: "oidc" | "saml";
|
|
14
|
+
status: "draft" | "active" | "disabled";
|
|
15
|
+
config?: unknown;
|
|
16
|
+
extend?: unknown;
|
|
17
|
+
};
|
|
18
|
+
type GroupConnectionDomainLookupRecord = {
|
|
19
|
+
connection: GroupConnectionRecord | null;
|
|
20
|
+
domain: ConnectionDomainRecord | null;
|
|
21
|
+
};
|
|
22
|
+
type ConnectionDomainRecord = {
|
|
23
|
+
_id: string;
|
|
24
|
+
_creationTime: number;
|
|
25
|
+
connectionId: string;
|
|
26
|
+
groupId: string;
|
|
27
|
+
domain: string;
|
|
28
|
+
isPrimary: boolean;
|
|
29
|
+
verifiedAt?: number;
|
|
30
|
+
};
|
|
31
|
+
type ScimIdentityRecord = {
|
|
32
|
+
_id: string;
|
|
33
|
+
_creationTime: number;
|
|
34
|
+
connectionId: string;
|
|
35
|
+
groupId: string;
|
|
36
|
+
resourceType: string;
|
|
37
|
+
externalId: string;
|
|
38
|
+
userId?: string;
|
|
39
|
+
mappedGroupId?: string;
|
|
40
|
+
active?: boolean;
|
|
41
|
+
raw?: Record<string, unknown>;
|
|
42
|
+
lastProvisionedAt?: number;
|
|
43
|
+
};
|
|
44
|
+
declare const getGroupConnection: (ctx: ComponentReadCtx, componentConnection: ComponentConnection, connectionId: string) => Promise<GroupConnectionRecord | null>;
|
|
45
|
+
declare const getGroupConnectionByDomain: (ctx: ComponentReadCtx, componentConnection: ComponentConnection, domain: string) => Promise<GroupConnectionDomainLookupRecord | null>;
|
|
46
|
+
//#endregion
|
|
47
|
+
export { ScimIdentityRecord, getGroupConnection, getGroupConnectionByDomain };
|
|
48
|
+
//# sourceMappingURL=contract.d.ts.map
|