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