@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.
Files changed (387) hide show
  1. package/README.md +52 -0
  2. package/dist/_generated/component.d.ts +2981 -0
  3. package/dist/bin.js +7194 -0
  4. package/dist/browser/index.d.ts +22 -0
  5. package/dist/browser/index.js +61 -0
  6. package/dist/browser/locks.js +20 -0
  7. package/dist/browser/navigation.js +14 -0
  8. package/dist/browser/runtime.js +90 -0
  9. package/dist/browser/webauthn.js +99 -0
  10. package/dist/client/core/types.d.ts +615 -0
  11. package/dist/client/core/types.js +23 -0
  12. package/dist/client/errors.js +30 -0
  13. package/dist/client/factors/device.js +100 -0
  14. package/dist/client/factors/totp.js +111 -0
  15. package/dist/client/factors/webauthn.js +69 -0
  16. package/dist/client/index.d.ts +60 -0
  17. package/dist/client/index.js +976 -0
  18. package/dist/client/runtime/invite.js +50 -0
  19. package/dist/client/runtime/mutex.js +25 -0
  20. package/dist/client/runtime/proxy.js +75 -0
  21. package/dist/client/runtime/storage.js +65 -0
  22. package/dist/component/_generated/api.js +26 -0
  23. package/dist/component/_generated/component.d.ts +2981 -0
  24. package/dist/component/_generated/component.js +1 -0
  25. package/dist/component/_generated/dataModel.js +1 -0
  26. package/dist/component/_generated/server.js +74 -0
  27. package/dist/component/account.js +197 -0
  28. package/dist/component/connection/audit.js +152 -0
  29. package/dist/component/connection/cache.js +205 -0
  30. package/dist/component/connection/domain/verification.js +63 -0
  31. package/dist/component/connection/domain.js +108 -0
  32. package/dist/component/connection/saml/assertion.js +41 -0
  33. package/dist/component/connection/saml/request.js +61 -0
  34. package/dist/component/connection/scim/config.js +55 -0
  35. package/dist/component/connection/scim/identity.js +162 -0
  36. package/dist/component/connection/secret.js +65 -0
  37. package/dist/component/connection/webhook/delivery.js +396 -0
  38. package/dist/component/connection/webhook/endpoint.js +77 -0
  39. package/dist/component/connection.js +204 -0
  40. package/dist/component/convex.config.d.ts +7 -0
  41. package/dist/component/convex.config.js +15 -0
  42. package/dist/component/crons.js +27 -0
  43. package/dist/component/event.js +341 -0
  44. package/dist/component/factor/device.js +141 -0
  45. package/dist/component/factor/passkey.js +385 -0
  46. package/dist/component/factor/totp.js +253 -0
  47. package/dist/component/functions.js +3 -0
  48. package/dist/component/group/active.js +63 -0
  49. package/dist/component/group/invite.js +300 -0
  50. package/dist/component/group/member.js +188 -0
  51. package/dist/component/group.js +431 -0
  52. package/dist/component/http.js +9 -0
  53. package/dist/component/index.d.ts +5 -0
  54. package/dist/component/index.js +3 -0
  55. package/dist/component/limits.js +103 -0
  56. package/dist/component/maintenance.js +205 -0
  57. package/dist/component/migrations.js +277 -0
  58. package/dist/component/model.d.ts +384 -0
  59. package/dist/component/model.js +709 -0
  60. package/dist/component/modules.js +53 -0
  61. package/dist/component/oauth/client.js +196 -0
  62. package/dist/component/oauth/code.js +97 -0
  63. package/dist/component/oauth/refresh.js +230 -0
  64. package/dist/component/schema.d.ts +1530 -0
  65. package/dist/component/schema.js +401 -0
  66. package/dist/component/session.js +134 -0
  67. package/dist/component/token/pkce.js +121 -0
  68. package/dist/component/token/refresh.js +189 -0
  69. package/dist/component/token/verification.js +155 -0
  70. package/dist/component/user/email.js +147 -0
  71. package/dist/component/user/key.js +273 -0
  72. package/dist/component/user.js +173 -0
  73. package/dist/core/index.d.ts +531 -0
  74. package/dist/core/index.js +81 -0
  75. package/dist/expo/index.d.ts +43 -0
  76. package/dist/expo/index.js +131 -0
  77. package/dist/expo/webauthn.js +88 -0
  78. package/dist/node_modules/.pnpm/@opentelemetry_api-logs@0.214.0/node_modules/@opentelemetry/api-logs/build/src/NoopLogger.d.ts +2 -0
  79. package/dist/node_modules/.pnpm/@opentelemetry_api-logs@0.214.0/node_modules/@opentelemetry/api-logs/build/src/api/logs.d.ts +3 -0
  80. package/dist/node_modules/.pnpm/@opentelemetry_api-logs@0.214.0/node_modules/@opentelemetry/api-logs/build/src/index.d.ts +7 -0
  81. package/dist/node_modules/.pnpm/@opentelemetry_api-logs@0.214.0/node_modules/@opentelemetry/api-logs/build/src/types/AnyValue.d.ts +21 -0
  82. package/dist/node_modules/.pnpm/@opentelemetry_api-logs@0.214.0/node_modules/@opentelemetry/api-logs/build/src/types/LogRecord.d.ts +36 -0
  83. package/dist/node_modules/.pnpm/@opentelemetry_api-logs@0.214.0/node_modules/@opentelemetry/api-logs/build/src/types/Logger.d.ts +1 -0
  84. package/dist/node_modules/.pnpm/@opentelemetry_api-logs@0.214.0/node_modules/@opentelemetry/api-logs/build/src/types/LoggerOptions.d.ts +1 -0
  85. package/dist/node_modules/.pnpm/@opentelemetry_api-logs@0.214.0/node_modules/@opentelemetry/api-logs/build/src/types/LoggerProvider.d.ts +2 -0
  86. 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
  87. 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
  88. 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
  89. 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
  90. 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
  91. 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
  92. 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
  93. 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
  94. 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
  95. 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
  96. 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
  97. 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
  98. 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
  99. 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
  100. 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
  101. 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
  102. 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
  103. 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
  104. 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
  105. 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
  106. 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
  107. 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
  108. 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
  109. 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
  110. 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
  111. 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
  112. 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
  113. 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
  114. 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
  115. 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
  116. 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
  117. 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
  118. 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
  119. 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
  120. 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
  121. 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
  122. 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
  123. 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
  124. 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
  125. 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
  126. 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
  127. 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
  128. 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
  129. 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
  130. 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
  131. 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
  132. 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
  133. 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
  134. 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
  135. 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
  136. 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
  137. 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
  138. 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
  139. 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
  140. 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
  141. 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
  142. 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
  143. 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
  144. 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
  145. 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
  146. 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
  147. 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
  148. 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
  149. 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
  150. 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
  151. 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
  152. 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
  153. 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
  154. 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
  155. 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
  156. 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
  157. 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
  158. 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
  159. 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
  160. 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
  161. 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
  162. 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
  163. 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
  164. package/dist/otel.d.ts +73 -0
  165. package/dist/otel.js +82 -0
  166. package/dist/permissions/index.d.ts +81 -0
  167. package/dist/permissions/index.js +18 -0
  168. package/dist/providers/anonymous.d.ts +35 -0
  169. package/dist/providers/anonymous.js +40 -0
  170. package/dist/providers/apple.d.ts +61 -0
  171. package/dist/providers/apple.js +57 -0
  172. package/dist/providers/connection.d.ts +30 -0
  173. package/dist/providers/connection.js +33 -0
  174. package/dist/providers/credentials.d.ts +78 -0
  175. package/dist/providers/credentials.js +31 -0
  176. package/dist/providers/custom.d.ts +96 -0
  177. package/dist/providers/custom.js +108 -0
  178. package/dist/providers/device.d.ts +33 -0
  179. package/dist/providers/device.js +30 -0
  180. package/dist/providers/email.d.ts +45 -0
  181. package/dist/providers/email.js +52 -0
  182. package/dist/providers/github.d.ts +56 -0
  183. package/dist/providers/github.js +79 -0
  184. package/dist/providers/google.d.ts +56 -0
  185. package/dist/providers/google.js +59 -0
  186. package/dist/providers/index.d.ts +16 -0
  187. package/dist/providers/index.js +16 -0
  188. package/dist/providers/microsoft.d.ts +59 -0
  189. package/dist/providers/microsoft.js +98 -0
  190. package/dist/providers/password.d.ts +68 -0
  191. package/dist/providers/password.js +348 -0
  192. package/dist/providers/phone.d.ts +33 -0
  193. package/dist/providers/phone.js +35 -0
  194. package/dist/providers/redirect.d.ts +1 -0
  195. package/dist/providers/redirect.js +11 -0
  196. package/dist/providers/totp.d.ts +29 -0
  197. package/dist/providers/totp.js +29 -0
  198. package/dist/providers/webauthn/attestation.d.ts +42 -0
  199. package/dist/providers/webauthn/attestation.js +167 -0
  200. package/dist/providers/webauthn.d.ts +83 -0
  201. package/dist/providers/webauthn.js +57 -0
  202. package/dist/react/index.d.ts +55 -0
  203. package/dist/react/index.js +80 -0
  204. package/dist/server/auth.d.ts +443 -0
  205. package/dist/server/auth.js +178 -0
  206. package/dist/server/cache/context.js +94 -0
  207. package/dist/server/component/api.d.ts +14 -0
  208. package/dist/server/component/api.js +13 -0
  209. package/dist/server/component/context.d.ts +16 -0
  210. package/dist/server/component/context.js +1 -0
  211. package/dist/server/component/factor/db.js +71 -0
  212. package/dist/server/config.d.ts +3 -0
  213. package/dist/server/config.js +78 -0
  214. package/dist/server/connection/config.js +101 -0
  215. package/dist/server/connection/domain.d.ts +878 -0
  216. package/dist/server/connection/domain.js +1122 -0
  217. package/dist/server/connection/group/service.d.ts +25 -0
  218. package/dist/server/connection/group/service.js +250 -0
  219. package/dist/server/connection/http.js +1485 -0
  220. package/dist/server/connection/oidc.js +366 -0
  221. package/dist/server/connection/policy/domain.js +59 -0
  222. package/dist/server/connection/policy.d.ts +1 -0
  223. package/dist/server/connection/policy.js +163 -0
  224. package/dist/server/connection/profile.js +22 -0
  225. package/dist/server/connection/provision.js +182 -0
  226. package/dist/server/connection/saml/api.js +70 -0
  227. package/dist/server/connection/saml/binding/post.js +140 -0
  228. package/dist/server/connection/saml/binding/redirect.js +139 -0
  229. package/dist/server/connection/saml/binding/shared.js +18 -0
  230. package/dist/server/connection/saml/c14n.js +224 -0
  231. package/dist/server/connection/saml/constants.js +100 -0
  232. package/dist/server/connection/saml/crypto.js +170 -0
  233. package/dist/server/connection/saml/dom/select.js +299 -0
  234. package/dist/server/connection/saml/encoding.js +93 -0
  235. package/dist/server/connection/saml/encryption.js +34 -0
  236. package/dist/server/connection/saml/entity.js +24 -0
  237. package/dist/server/connection/saml/extractor.js +408 -0
  238. package/dist/server/connection/saml/flow.js +150 -0
  239. package/dist/server/connection/saml/identity/provider.js +66 -0
  240. package/dist/server/connection/saml/index.js +5 -0
  241. package/dist/server/connection/saml/metadata.js +294 -0
  242. package/dist/server/connection/saml/service/provider.js +117 -0
  243. package/dist/server/connection/saml/signature.js +214 -0
  244. package/dist/server/connection/saml/template.js +68 -0
  245. package/dist/server/connection/saml/types.js +1 -0
  246. package/dist/server/connection/saml/validator.js +32 -0
  247. package/dist/server/connection/saml/xml/builder.js +68 -0
  248. package/dist/server/connection/saml/xmldsig.js +598 -0
  249. package/dist/server/connection/saml/xmlenc.js +162 -0
  250. package/dist/server/connection/saml.d.ts +56 -0
  251. package/dist/server/connection/saml.js +762 -0
  252. package/dist/server/connection/scim.js +115 -0
  253. package/dist/server/connection/shared.js +74 -0
  254. package/dist/server/connection/webhook.js +163 -0
  255. package/dist/server/context.d.ts +137 -0
  256. package/dist/server/context.js +108 -0
  257. package/dist/server/contract.d.ts +48 -0
  258. package/dist/server/contract.js +107 -0
  259. package/dist/server/cookies.js +90 -0
  260. package/dist/server/core.js +163 -0
  261. package/dist/server/cors.d.ts +22 -0
  262. package/dist/server/cors.js +93 -0
  263. package/dist/server/crypto.js +43 -0
  264. package/dist/server/db.js +88 -0
  265. package/dist/server/device.js +140 -0
  266. package/dist/server/domains/access.js +29 -0
  267. package/dist/server/domains/account.d.ts +16 -0
  268. package/dist/server/domains/account.js +92 -0
  269. package/dist/server/domains/factor.d.ts +28 -0
  270. package/dist/server/domains/factor.js +115 -0
  271. package/dist/server/domains/group.js +87 -0
  272. package/dist/server/domains/invite.js +76 -0
  273. package/dist/server/domains/key.js +253 -0
  274. package/dist/server/domains/member.js +149 -0
  275. package/dist/server/domains/session.js +29 -0
  276. package/dist/server/domains/user.js +119 -0
  277. package/dist/server/env.d.ts +46 -0
  278. package/dist/server/env.js +96 -0
  279. package/dist/server/errors.js +38 -0
  280. package/dist/server/events.d.ts +880 -0
  281. package/dist/server/events.js +406 -0
  282. package/dist/server/facade.d.ts +83 -0
  283. package/dist/server/facade.js +124 -0
  284. package/dist/server/http.d.ts +125 -0
  285. package/dist/server/http.js +566 -0
  286. package/dist/server/identity/claims.js +58 -0
  287. package/dist/server/identity/convex.d.ts +15 -0
  288. package/dist/server/identity/convex.js +1 -0
  289. package/dist/server/index.d.ts +17 -0
  290. package/dist/server/index.js +11 -0
  291. package/dist/server/keys.js +60 -0
  292. package/dist/server/limits.js +41 -0
  293. package/dist/server/log.js +28 -0
  294. package/dist/server/mcp.d.ts +19 -0
  295. package/dist/server/mcp.js +250 -0
  296. package/dist/server/mutations/account.js +47 -0
  297. package/dist/server/mutations/calls.js +16 -0
  298. package/dist/server/mutations/code.js +91 -0
  299. package/dist/server/mutations/credentials/signin.js +210 -0
  300. package/dist/server/mutations/invalidate.js +60 -0
  301. package/dist/server/mutations/oauth.js +251 -0
  302. package/dist/server/mutations/refresh.js +152 -0
  303. package/dist/server/mutations/register.js +93 -0
  304. package/dist/server/mutations/retrieve.js +66 -0
  305. package/dist/server/mutations/signature.js +36 -0
  306. package/dist/server/mutations/signin.js +81 -0
  307. package/dist/server/mutations/signout.js +61 -0
  308. package/dist/server/mutations/store/refs.js +15 -0
  309. package/dist/server/mutations/store.js +82 -0
  310. package/dist/server/mutations/verifier.js +25 -0
  311. package/dist/server/mutations/verify.js +199 -0
  312. package/dist/server/oauth/authorize.js +98 -0
  313. package/dist/server/oauth/client.d.ts +93 -0
  314. package/dist/server/oauth/client.js +115 -0
  315. package/dist/server/oauth/code.d.ts +63 -0
  316. package/dist/server/oauth/code.js +124 -0
  317. package/dist/server/oauth/domain.d.ts +23 -0
  318. package/dist/server/oauth/domain.js +1 -0
  319. package/dist/server/oauth/factory.js +46 -0
  320. package/dist/server/oauth/grant.js +46 -0
  321. package/dist/server/oauth/handlers.js +108 -0
  322. package/dist/server/oauth/manage.js +121 -0
  323. package/dist/server/oauth/normalize.js +27 -0
  324. package/dist/server/oauth/refresh.d.ts +71 -0
  325. package/dist/server/oauth/refresh.js +132 -0
  326. package/dist/server/oauth/register.js +147 -0
  327. package/dist/server/oauth/runtime.js +280 -0
  328. package/dist/server/oauth/token.js +355 -0
  329. package/dist/server/payloads.d.ts +16 -0
  330. package/dist/server/payloads.js +30 -0
  331. package/dist/server/preload.d.ts +249 -0
  332. package/dist/server/preload.js +673 -0
  333. package/dist/server/random.js +25 -0
  334. package/dist/server/redirects.js +85 -0
  335. package/dist/server/runtime.d.ts +845 -0
  336. package/dist/server/runtime.js +387 -0
  337. package/dist/server/secret.js +46 -0
  338. package/dist/server/services/factors.js +117 -0
  339. package/dist/server/services/providers.js +23 -0
  340. package/dist/server/services/resolve.js +17 -0
  341. package/dist/server/session/lifecycle.d.ts +23 -0
  342. package/dist/server/session/lifecycle.js +139 -0
  343. package/dist/server/signin/flow.js +359 -0
  344. package/dist/server/telemetry.js +68 -0
  345. package/dist/server/templates.js +91 -0
  346. package/dist/server/token/refresh.js +35 -0
  347. package/dist/server/tokens.js +164 -0
  348. package/dist/server/totp.js +282 -0
  349. package/dist/server/types.d.ts +1154 -0
  350. package/dist/server/types.js +1 -0
  351. package/dist/server/url.js +43 -0
  352. package/dist/server/user/account.js +325 -0
  353. package/dist/server/utils/bearer.js +24 -0
  354. package/dist/server/utils/cache.js +51 -0
  355. package/dist/server/utils/retry.js +3 -0
  356. package/dist/server/utils/span.js +59 -0
  357. package/dist/server/validators.d.ts +2061 -0
  358. package/dist/server/validators.js +320 -0
  359. package/dist/server/webauthn.js +699 -0
  360. package/dist/server/wellknown.d.ts +74 -0
  361. package/dist/server/wellknown.js +195 -0
  362. package/dist/shared/brand.d.ts +28 -0
  363. package/dist/shared/brand.js +13 -0
  364. package/dist/shared/codes.d.ts +99 -0
  365. package/dist/shared/codes.js +98 -0
  366. package/dist/shared/compare.js +23 -0
  367. package/dist/shared/errors.js +24 -0
  368. package/dist/shared/event/kinds.d.ts +188 -0
  369. package/dist/shared/event/kinds.js +103 -0
  370. package/dist/shared/fetch/guard.js +189 -0
  371. package/dist/shared/log.js +62 -0
  372. package/dist/shared/results.d.ts +58 -0
  373. package/dist/shared/retry.js +27 -0
  374. package/dist/shared/webauthn.js +9 -0
  375. package/dist/svelte/AuthLoading.svelte +13 -0
  376. package/dist/svelte/AuthLoading.svelte.d.ts +8 -0
  377. package/dist/svelte/SignedIn.svelte +14 -0
  378. package/dist/svelte/SignedIn.svelte.d.ts +8 -0
  379. package/dist/svelte/SignedOut.svelte +13 -0
  380. package/dist/svelte/SignedOut.svelte.d.ts +8 -0
  381. package/dist/svelte/context.svelte.d.ts +26 -0
  382. package/dist/svelte/context.svelte.js +61 -0
  383. package/dist/svelte/index.d.ts +5 -0
  384. package/dist/svelte/index.js +4 -0
  385. package/dist/test.d.ts +48 -0
  386. package/dist/test.js +54 -0
  387. 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