@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,253 @@
1
+ import { ErrorCode } from "../../shared/codes.js";
2
+ import { emitAuthEvent } from "../events.js";
3
+ import { createScopeChecker, generateApiKey, hashApiKey } from "../keys.js";
4
+ import { ConvexError } from "convex/values";
5
+
6
+ //#region src/server/domains/key.ts
7
+ /**
8
+ * Sampling window for the `lastUsedAt` touch in {@link createKeyDomain}'s
9
+ * `verify`. Bearer verification runs on every authenticated API-key request, so
10
+ * writing `lastUsedAt` unconditionally turns read-only traffic into a
11
+ * per-request write on a single, potentially very hot `ApiKey` document — a
12
+ * classic OCC contention point when one shared key drives high QPS. `lastUsedAt`
13
+ * only needs coarse ("used ~this minute") accuracy, so the touch is coarsened:
14
+ * skipped unless the stored value is unset or older than this window.
15
+ */
16
+ const LAST_USED_COARSEN_MS = 6e4;
17
+ /**
18
+ * Public projection of a stored `ApiKey` document. Strips the sensitive
19
+ * `hashedKey` (the SHA-256 lookup hash) and the mutable `rateLimitState`
20
+ * (internal token-bucket counters) so `auth.key.get` / `auth.key.list` never
21
+ * leak them to callers — the returned shape matches {@link KeyRecord}.
22
+ * `auth.key.verify` reads the full component document directly and is
23
+ * unaffected.
24
+ */
25
+ function redactKeyRecord(doc) {
26
+ const { hashedKey: _hashedKey, rateLimitState: _rateLimitState, ...rest } = doc;
27
+ return rest;
28
+ }
29
+ function createKeyDomain(deps) {
30
+ const { config } = deps;
31
+ const emitCommittedKeyEvent = async (ctx, event) => {
32
+ try {
33
+ await emitAuthEvent(ctx, config, event);
34
+ } catch (err) {
35
+ console.error("[auth] API key committed but audit event emission failed", {
36
+ kind: event.kind,
37
+ err
38
+ });
39
+ }
40
+ };
41
+ return {
42
+ create: async (ctx, opts) => {
43
+ const data = opts.data;
44
+ const { raw, hashedKey, displayPrefix } = await generateApiKey("sk_");
45
+ const keyId = await ctx.runMutation(config.component.user.key.create, {
46
+ userId: data.userId,
47
+ prefix: displayPrefix,
48
+ hashedKey,
49
+ name: data.name,
50
+ scopes: data.scopes,
51
+ rateLimit: data.rateLimit,
52
+ expiresAt: data.expiresAt,
53
+ extend: data.extend
54
+ });
55
+ await emitCommittedKeyEvent(ctx, {
56
+ kind: "api_key.created",
57
+ actor: {
58
+ type: "user",
59
+ id: data.userId
60
+ },
61
+ subject: {
62
+ type: "user",
63
+ id: data.userId
64
+ },
65
+ targets: [{
66
+ kind: "user",
67
+ id: data.userId
68
+ }, {
69
+ kind: "api_key",
70
+ id: keyId
71
+ }],
72
+ outcome: "success",
73
+ data: {
74
+ keyId,
75
+ name: data.name,
76
+ prefix: displayPrefix
77
+ }
78
+ });
79
+ return {
80
+ id: keyId,
81
+ secret: raw
82
+ };
83
+ },
84
+ verify: async (ctx, opts) => {
85
+ const hashedKey = await hashApiKey(opts.secret);
86
+ const doc = await ctx.runQuery(config.component.user.key.get, { hashedKey });
87
+ if (!doc) throw new ConvexError({
88
+ code: ErrorCode.INVALID_API_KEY,
89
+ message: "Invalid API key."
90
+ });
91
+ const result = await ctx.runMutation(config.component.user.key.recordUse, {
92
+ id: doc._id,
93
+ now: Date.now(),
94
+ coarsenMs: LAST_USED_COARSEN_MS
95
+ });
96
+ switch (result.status) {
97
+ case "invalid": throw new ConvexError({
98
+ code: ErrorCode.INVALID_API_KEY,
99
+ message: "Invalid API key."
100
+ });
101
+ case "revoked": throw new ConvexError({
102
+ code: ErrorCode.API_KEY_REVOKED,
103
+ message: "This API key has been revoked."
104
+ });
105
+ case "expired": throw new ConvexError({
106
+ code: ErrorCode.API_KEY_EXPIRED,
107
+ message: "This API key has expired."
108
+ });
109
+ case "limited": throw new ConvexError({
110
+ code: ErrorCode.API_KEY_RATE_LIMITED,
111
+ message: "API key rate limit exceeded. Please try again later."
112
+ });
113
+ }
114
+ return {
115
+ userId: result.userId,
116
+ keyId: result.keyId,
117
+ scopes: createScopeChecker(result.scopes)
118
+ };
119
+ },
120
+ list: async (ctx, opts) => {
121
+ const result = await ctx.runQuery(config.component.user.key.list, {
122
+ where: opts?.where,
123
+ paginationOpts: opts?.paginationOpts ?? {
124
+ numItems: 50,
125
+ cursor: null
126
+ },
127
+ orderBy: opts?.orderBy,
128
+ order: opts?.order
129
+ });
130
+ return {
131
+ ...result,
132
+ page: result.page.map(redactKeyRecord)
133
+ };
134
+ },
135
+ get: async (ctx, opts) => {
136
+ const doc = await ctx.runQuery(config.component.user.key.get, { id: opts.id });
137
+ return doc === null ? null : redactKeyRecord(doc);
138
+ },
139
+ update: async (ctx, opts) => {
140
+ await ctx.runMutation(config.component.user.key.update, {
141
+ id: opts.id,
142
+ patch: opts.patch
143
+ });
144
+ return null;
145
+ },
146
+ revoke: async (ctx, opts) => {
147
+ const key = await ctx.runQuery(config.component.user.key.get, { id: opts.id });
148
+ await ctx.runMutation(config.component.user.key.update, {
149
+ id: opts.id,
150
+ patch: { revoked: true }
151
+ });
152
+ if (key !== null) await emitAuthEvent(ctx, config, {
153
+ kind: "api_key.revoked",
154
+ actor: {
155
+ type: "user",
156
+ id: key.userId
157
+ },
158
+ subject: {
159
+ type: "user",
160
+ id: key.userId
161
+ },
162
+ targets: [{
163
+ kind: "user",
164
+ id: key.userId
165
+ }, {
166
+ kind: "api_key",
167
+ id: opts.id
168
+ }],
169
+ outcome: "success",
170
+ data: { keyId: opts.id }
171
+ });
172
+ return null;
173
+ },
174
+ remove: async (ctx, opts) => {
175
+ await ctx.runMutation(config.component.user.key.remove, { id: opts.id });
176
+ return null;
177
+ },
178
+ rotate: async (ctx, opts) => {
179
+ const { raw, hashedKey, displayPrefix } = await generateApiKey("sk_");
180
+ const result = await ctx.runMutation(config.component.user.key.rotate, {
181
+ id: opts.id,
182
+ prefix: displayPrefix,
183
+ hashedKey,
184
+ name: opts.name,
185
+ expiresAt: opts.expiresAt
186
+ });
187
+ if (result.status === "invalid") throw new ConvexError({
188
+ code: ErrorCode.INVALID_PARAMETERS,
189
+ message: "The provided parameters are invalid."
190
+ });
191
+ if (result.status === "revoked") throw new ConvexError({
192
+ code: ErrorCode.API_KEY_REVOKED,
193
+ message: "This API key has been revoked."
194
+ });
195
+ if (result.status === "invalid_rate_limit") throw new ConvexError({
196
+ code: ErrorCode.INVALID_PARAMETERS,
197
+ message: "The API key has an invalid rate limit configuration."
198
+ });
199
+ await emitCommittedKeyEvent(ctx, {
200
+ kind: "api_key.revoked",
201
+ actor: {
202
+ type: "user",
203
+ id: result.userId
204
+ },
205
+ subject: {
206
+ type: "user",
207
+ id: result.userId
208
+ },
209
+ targets: [{
210
+ kind: "user",
211
+ id: result.userId
212
+ }, {
213
+ kind: "api_key",
214
+ id: opts.id
215
+ }],
216
+ outcome: "success",
217
+ data: { keyId: opts.id }
218
+ });
219
+ await emitCommittedKeyEvent(ctx, {
220
+ kind: "api_key.created",
221
+ actor: {
222
+ type: "user",
223
+ id: result.userId
224
+ },
225
+ subject: {
226
+ type: "user",
227
+ id: result.userId
228
+ },
229
+ targets: [{
230
+ kind: "user",
231
+ id: result.userId
232
+ }, {
233
+ kind: "api_key",
234
+ id: result.id
235
+ }],
236
+ outcome: "success",
237
+ data: {
238
+ keyId: result.id,
239
+ name: result.name,
240
+ prefix: displayPrefix
241
+ }
242
+ });
243
+ return {
244
+ id: result.id,
245
+ secret: raw
246
+ };
247
+ }
248
+ };
249
+ }
250
+
251
+ //#endregion
252
+ export { createKeyDomain };
253
+ //# sourceMappingURL=key.js.map
@@ -0,0 +1,149 @@
1
+ import { ErrorCode } from "../../shared/codes.js";
2
+ import { cached, ctxCacheHas, invalidateCtxCache } from "../cache/context.js";
3
+ import { capGrantsForCaller, resolveOAuthCaller } from "./access.js";
4
+ import { ConvexError } from "convex/values";
5
+
6
+ //#region src/server/domains/member.ts
7
+ function createMemberDomain(deps) {
8
+ const { config, normalizeRoleIds, resolveGrantedPermissions } = deps;
9
+ async function memberInspect(ctx, opts) {
10
+ const oauthCaller = await resolveOAuthCaller(ctx);
11
+ if ("groupIds" in opts) {
12
+ const { userId, groupIds } = opts;
13
+ if (groupIds.length === 0) return [];
14
+ const unique = Array.from(new Set(groupIds));
15
+ const toFetch = [];
16
+ for (const groupId of unique) if (!ctxCacheHas(ctx, `member-inspect:${userId}:${groupId}:n`)) toFetch.push(groupId);
17
+ if (toFetch.length > 0) {
18
+ const docs = await ctx.runQuery(config.component.group.member.get, {
19
+ userId,
20
+ groupIds: toFetch
21
+ });
22
+ for (let i = 0; i < toFetch.length; i += 1) {
23
+ const groupId = toFetch[i];
24
+ const value = docs[i] ?? null;
25
+ cached(ctx, `member-inspect:${userId}:${groupId}:n`, () => Promise.resolve(value));
26
+ }
27
+ }
28
+ return await Promise.all(groupIds.map(async (groupId) => {
29
+ const membership$1 = await cached(ctx, `member-inspect:${userId}:${groupId}:n`, () => ctx.runQuery(config.component.group.member.get, {
30
+ userId,
31
+ groupId
32
+ }));
33
+ if (membership$1 === null) return {
34
+ membership: null,
35
+ roleIds: [],
36
+ grants: []
37
+ };
38
+ const membershipRoleIds$1 = membership$1.roleIds ?? [];
39
+ return {
40
+ membership: membership$1,
41
+ roleIds: membershipRoleIds$1,
42
+ grants: capGrantsForCaller(oauthCaller, userId, resolveGrantedPermissions(membershipRoleIds$1))
43
+ };
44
+ }));
45
+ }
46
+ const membership = await cached(ctx, `member-inspect:${opts.userId}:${opts.groupId}:n`, () => ctx.runQuery(config.component.group.member.get, {
47
+ userId: opts.userId,
48
+ groupId: opts.groupId
49
+ }));
50
+ if (membership === null) return {
51
+ membership: null,
52
+ roleIds: [],
53
+ grants: []
54
+ };
55
+ const membershipRoleIds = membership.roleIds ?? [];
56
+ return {
57
+ membership,
58
+ roleIds: membershipRoleIds,
59
+ grants: capGrantsForCaller(oauthCaller, opts.userId, resolveGrantedPermissions(membershipRoleIds))
60
+ };
61
+ }
62
+ return {
63
+ create: async (ctx, opts) => {
64
+ const data = opts.data;
65
+ const roleIds = normalizeRoleIds(data.roleIds);
66
+ const memberId = await ctx.runMutation(config.component.group.member.create, {
67
+ ...data,
68
+ roleIds
69
+ });
70
+ invalidateCtxCache(ctx, `member-inspect:${data.userId}:${data.groupId}`);
71
+ return memberId;
72
+ },
73
+ list: async (ctx, opts) => {
74
+ return await ctx.runQuery(config.component.group.member.list, {
75
+ where: opts?.where,
76
+ paginationOpts: opts?.paginationOpts ?? {
77
+ numItems: 50,
78
+ cursor: null
79
+ },
80
+ orderBy: opts?.orderBy,
81
+ order: opts?.order
82
+ });
83
+ },
84
+ remove: async (ctx, opts) => {
85
+ await ctx.runMutation(config.component.group.member.remove, { id: opts.id });
86
+ invalidateCtxCache(ctx, "member");
87
+ invalidateCtxCache(ctx, "member-inspect");
88
+ return null;
89
+ },
90
+ update: async (ctx, opts) => {
91
+ const nextData = { ...opts.patch };
92
+ if ("roleIds" in nextData) nextData.roleIds = normalizeRoleIds(Array.isArray(nextData.roleIds) ? nextData.roleIds : void 0);
93
+ await ctx.runMutation(config.component.group.member.update, {
94
+ id: opts.id,
95
+ patch: nextData
96
+ });
97
+ invalidateCtxCache(ctx, `member:${opts.id}`);
98
+ invalidateCtxCache(ctx, "member-inspect");
99
+ return null;
100
+ },
101
+ get: memberInspect,
102
+ resolve: async (ctx, opts) => {
103
+ const maxDepth = Math.max(0, Math.floor(opts.maxDepth ?? 32));
104
+ const result = await ctx.runQuery(config.component.group.member.resolve, {
105
+ userId: opts.userId,
106
+ groupId: opts.groupId,
107
+ maxDepth
108
+ });
109
+ const roleIds = result.membership?.roleIds ?? [];
110
+ const caller = await resolveOAuthCaller(ctx);
111
+ return {
112
+ ...result,
113
+ roleIds,
114
+ grants: capGrantsForCaller(caller, opts.userId, resolveGrantedPermissions(roleIds))
115
+ };
116
+ },
117
+ assert: async (ctx, opts) => {
118
+ const validatedRoleIds = normalizeRoleIds(opts.roleIds);
119
+ const requiredGrants = Array.from(new Set(opts.grants ?? []));
120
+ const roleFilter = validatedRoleIds.length > 0 ? new Set(validatedRoleIds) : null;
121
+ const result = await memberInspect(ctx, {
122
+ userId: opts.userId,
123
+ groupId: opts.groupId
124
+ });
125
+ if (result.membership === null) throw new ConvexError({
126
+ code: ErrorCode.NOT_A_MEMBER,
127
+ message: "User is not a member of this group.",
128
+ groupId: opts.groupId
129
+ });
130
+ if (roleFilter !== null && !result.roleIds.some((roleId) => roleFilter.has(roleId))) throw new ConvexError({
131
+ code: ErrorCode.NOT_A_MEMBER,
132
+ message: "User is not a member of this group.",
133
+ groupId: opts.groupId
134
+ });
135
+ const missingGrants = requiredGrants.filter((grant) => !result.grants.includes(grant));
136
+ if (missingGrants.length > 0) throw new ConvexError({
137
+ code: ErrorCode.MISSING_GRANTS,
138
+ message: "User is missing required grants.",
139
+ groupId: opts.groupId,
140
+ missingGrants
141
+ });
142
+ return result;
143
+ }
144
+ };
145
+ }
146
+
147
+ //#endregion
148
+ export { createMemberDomain };
149
+ //# sourceMappingURL=member.js.map
@@ -0,0 +1,29 @@
1
+ import { cached } from "../cache/context.js";
2
+ import { getAuthSessionId } from "../session/lifecycle.js";
3
+
4
+ //#region src/server/domains/session.ts
5
+ function createSessionDomain(deps) {
6
+ const { config, callInvalidateSessions } = deps;
7
+ return {
8
+ revoke: async (ctx, args) => {
9
+ await callInvalidateSessions(ctx, args);
10
+ return {
11
+ userId: args.userId,
12
+ except: args.except ?? []
13
+ };
14
+ },
15
+ get: async (ctx, opts) => {
16
+ return await cached(ctx, `session:${opts.id}`, () => ctx.runQuery(config.component.session.get, { id: opts.id }));
17
+ },
18
+ id: async (ctx) => {
19
+ return await getAuthSessionId(ctx);
20
+ },
21
+ list: async (ctx, opts) => {
22
+ return await ctx.runQuery(config.component.session.list, { userId: opts.userId });
23
+ }
24
+ };
25
+ }
26
+
27
+ //#endregion
28
+ export { createSessionDomain };
29
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1,119 @@
1
+ import { ErrorCode } from "../../shared/codes.js";
2
+ import { getSessionUserId } from "../context.js";
3
+ import { cached, ctxCacheHas, invalidateCtxCache } from "../cache/context.js";
4
+ import { ConvexError } from "convex/values";
5
+
6
+ //#region src/server/domains/user.ts
7
+ function createUserDomain(deps) {
8
+ const { config } = deps;
9
+ async function userGet(ctx, opts) {
10
+ if ("id" in opts) return await cached(ctx, `user:${opts.id}`, () => ctx.runQuery(config.component.user.get, { id: opts.id }));
11
+ const userIds = opts.ids;
12
+ if (userIds.length === 0) return [];
13
+ const unique = Array.from(new Set(userIds));
14
+ const toFetch = [];
15
+ for (const id of unique) if (!ctxCacheHas(ctx, `user:${id}`)) toFetch.push(id);
16
+ if (toFetch.length > 0) {
17
+ const docs = await ctx.runQuery(config.component.user.get, { ids: toFetch });
18
+ for (let i = 0; i < toFetch.length; i += 1) {
19
+ const id = toFetch[i];
20
+ const value = docs[i] ?? null;
21
+ cached(ctx, `user:${id}`, () => Promise.resolve(value));
22
+ }
23
+ }
24
+ return await Promise.all(userIds.map((id) => cached(ctx, `user:${id}`, () => ctx.runQuery(config.component.user.get, { id }))));
25
+ }
26
+ async function emailPrimary(ctx, emailOrOpts, maybeOpts) {
27
+ const setting = typeof emailOrOpts === "string";
28
+ const userId = (setting ? maybeOpts : emailOrOpts)?.userId ?? await getSessionUserId(ctx);
29
+ if (userId === null || userId === void 0) {
30
+ if (setting) throw new ConvexError({
31
+ code: ErrorCode.NOT_SIGNED_IN,
32
+ message: "Authentication required."
33
+ });
34
+ return null;
35
+ }
36
+ if (setting) {
37
+ await ctx.runMutation(config.component.user.email.promote, {
38
+ userId,
39
+ email: emailOrOpts.toLowerCase()
40
+ });
41
+ return { email: emailOrOpts.toLowerCase() };
42
+ }
43
+ return (await ctx.runQuery(config.component.user.email.list, { userId })).find((r) => r.isPrimary) ?? null;
44
+ }
45
+ return {
46
+ get: userGet,
47
+ id: async (ctx) => {
48
+ return await getSessionUserId(ctx);
49
+ },
50
+ list: async (ctx, opts) => {
51
+ return await ctx.runQuery(config.component.user.list, {
52
+ where: opts.where,
53
+ paginationOpts: opts.paginationOpts,
54
+ orderBy: opts.orderBy,
55
+ order: opts.order
56
+ });
57
+ },
58
+ viewer: async (ctx) => {
59
+ const userId = await getSessionUserId(ctx);
60
+ if (userId === null) return null;
61
+ return await userGet(ctx, { id: userId });
62
+ },
63
+ email: {
64
+ list: async (ctx, opts) => {
65
+ const userId = opts?.userId ?? await getSessionUserId(ctx);
66
+ if (userId === null || userId === void 0) return [];
67
+ return await ctx.runQuery(config.component.user.email.list, { userId });
68
+ },
69
+ create: async (ctx, args) => {
70
+ const userId = args.userId ?? await getSessionUserId(ctx);
71
+ if (userId === null || userId === void 0) throw new ConvexError({
72
+ code: ErrorCode.NOT_SIGNED_IN,
73
+ message: "Authentication required."
74
+ });
75
+ const addr = args.email.toLowerCase();
76
+ await ctx.runMutation(config.component.user.email.upsert, {
77
+ userId,
78
+ email: addr,
79
+ verified: false,
80
+ isPrimary: false,
81
+ source: "password"
82
+ });
83
+ return { email: addr };
84
+ },
85
+ remove: async (ctx, args) => {
86
+ const userId = args.userId ?? await getSessionUserId(ctx);
87
+ if (userId === null || userId === void 0) throw new ConvexError({
88
+ code: ErrorCode.NOT_SIGNED_IN,
89
+ message: "Authentication required."
90
+ });
91
+ const addr = args.email.toLowerCase();
92
+ await ctx.runMutation(config.component.user.email.remove, {
93
+ userId,
94
+ email: addr
95
+ });
96
+ return { email: addr };
97
+ },
98
+ promote: (ctx, args) => emailPrimary(ctx, args.email, args.userId === void 0 ? void 0 : { userId: args.userId }),
99
+ primary: { get: (ctx, opts) => emailPrimary(ctx, opts) }
100
+ },
101
+ update: async (ctx, opts) => {
102
+ await ctx.runMutation(config.component.user.update, {
103
+ id: opts.id,
104
+ patch: opts.patch
105
+ });
106
+ invalidateCtxCache(ctx, `user:${opts.id}`);
107
+ return null;
108
+ },
109
+ remove: async (ctx, opts) => {
110
+ await ctx.runMutation(config.component.user.remove, { id: opts.id });
111
+ invalidateCtxCache(ctx);
112
+ return null;
113
+ }
114
+ };
115
+ }
116
+
117
+ //#endregion
118
+ export { createUserDomain };
119
+ //# sourceMappingURL=user.js.map
@@ -0,0 +1,46 @@
1
+ import * as convex_values1042 from "convex/values";
2
+ import { EnvFromDefinition } from "convex/server";
3
+
4
+ //#region src/server/env.d.ts
5
+ /**
6
+ * Convex app environment variables used by Convex Auth.
7
+ *
8
+ * Pass this to `defineApp({ env: authEnv })` to get Convex deployment-time
9
+ * validation and generated `env` typing in the parent app.
10
+ */
11
+ declare const authEnv: {
12
+ readonly ANDROID_APP_LINKS: convex_values1042.VString<string | undefined, "optional">;
13
+ readonly APP_URL: convex_values1042.VString<string | undefined, "optional">;
14
+ readonly AUTH_APPLE_ID: convex_values1042.VString<string | undefined, "optional">;
15
+ readonly AUTH_APPLE_KEY_ID: convex_values1042.VString<string | undefined, "optional">;
16
+ readonly AUTH_APPLE_PRIVATE_KEY: convex_values1042.VString<string | undefined, "optional">;
17
+ readonly AUTH_APPLE_TEAM_ID: convex_values1042.VString<string | undefined, "optional">;
18
+ readonly AUTH_EMAIL: convex_values1042.VString<string | undefined, "optional">;
19
+ readonly AUTH_GITHUB_ID: convex_values1042.VString<string | undefined, "optional">;
20
+ readonly AUTH_GITHUB_SECRET: convex_values1042.VString<string | undefined, "optional">;
21
+ readonly AUTH_GOOGLE_ID: convex_values1042.VString<string | undefined, "optional">;
22
+ readonly AUTH_GOOGLE_SECRET: convex_values1042.VString<string | undefined, "optional">;
23
+ readonly AUTH_LOG_LEVEL: convex_values1042.VUnion<"DEBUG" | "INFO" | "WARN" | "ERROR" | undefined, [convex_values1042.VLiteral<"DEBUG", "required">, convex_values1042.VLiteral<"INFO", "required">, convex_values1042.VLiteral<"WARN", "required">, convex_values1042.VLiteral<"ERROR", "required">], "optional", never>;
24
+ readonly AUTH_LOG_SECRETS: convex_values1042.VUnion<"true" | "false" | undefined, [convex_values1042.VLiteral<"true", "required">, convex_values1042.VLiteral<"false", "required">], "optional", never>;
25
+ readonly AUTH_MICROSOFT_ID: convex_values1042.VString<string | undefined, "optional">;
26
+ readonly AUTH_MICROSOFT_SECRET: convex_values1042.VString<string | undefined, "optional">;
27
+ readonly AUTH_MICROSOFT_TENANT_ID: convex_values1042.VString<string | undefined, "optional">;
28
+ readonly AUTH_PASSWORD_EMAIL_VERIFICATION: convex_values1042.VUnion<"true" | "false" | undefined, [convex_values1042.VLiteral<"true", "required">, convex_values1042.VLiteral<"false", "required">], "optional", never>;
29
+ readonly AUTH_SECRET_ENCRYPTION_KEY: convex_values1042.VString<string | undefined, "optional">;
30
+ readonly AUTH_SESSION_INACTIVE_DURATION_MS: convex_values1042.VString<string | undefined, "optional">;
31
+ readonly AUTH_SESSION_TOTAL_DURATION_MS: convex_values1042.VString<string | undefined, "optional">;
32
+ readonly CHANGE_PASSWORD_URL: convex_values1042.VString<string | undefined, "optional">;
33
+ readonly CONVEX_SITE_URL: convex_values1042.VString<string | undefined, "optional">;
34
+ readonly IOS_APP_IDS: convex_values1042.VString<string | undefined, "optional">;
35
+ readonly IOS_APPLINK_PATHS: convex_values1042.VString<string | undefined, "optional">;
36
+ readonly JWKS: convex_values1042.VString<string | undefined, "optional">;
37
+ readonly JWT_PRIVATE_KEY: convex_values1042.VString<string | undefined, "optional">;
38
+ readonly RESEND_API_KEY: convex_values1042.VString<string | undefined, "optional">;
39
+ readonly SECURITY_CONTACT: convex_values1042.VString<string | undefined, "optional">;
40
+ readonly SECURITY_TXT_EXPIRES_DAYS: convex_values1042.VString<string | undefined, "optional">;
41
+ };
42
+ /** Inferred type of the validated auth environment from {@link authEnv}. */
43
+ type AuthEnv = EnvFromDefinition<typeof authEnv>;
44
+ //#endregion
45
+ export { AuthEnv, authEnv };
46
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1,96 @@
1
+ import { ErrorCode } from "../shared/codes.js";
2
+ import { ConvexError, v } from "convex/values";
3
+
4
+ //#region src/server/env.ts
5
+ const vOptionalBooleanString = v.optional(v.union(v.literal("true"), v.literal("false")));
6
+ /**
7
+ * Convex app environment variables used by Convex Auth.
8
+ *
9
+ * Pass this to `defineApp({ env: authEnv })` to get Convex deployment-time
10
+ * validation and generated `env` typing in the parent app.
11
+ */
12
+ const authEnv = {
13
+ ANDROID_APP_LINKS: v.optional(v.string()),
14
+ APP_URL: v.optional(v.string()),
15
+ AUTH_APPLE_ID: v.optional(v.string()),
16
+ AUTH_APPLE_KEY_ID: v.optional(v.string()),
17
+ AUTH_APPLE_PRIVATE_KEY: v.optional(v.string()),
18
+ AUTH_APPLE_TEAM_ID: v.optional(v.string()),
19
+ AUTH_EMAIL: v.optional(v.string()),
20
+ AUTH_GITHUB_ID: v.optional(v.string()),
21
+ AUTH_GITHUB_SECRET: v.optional(v.string()),
22
+ AUTH_GOOGLE_ID: v.optional(v.string()),
23
+ AUTH_GOOGLE_SECRET: v.optional(v.string()),
24
+ AUTH_LOG_LEVEL: v.optional(v.union(v.literal("DEBUG"), v.literal("INFO"), v.literal("WARN"), v.literal("ERROR"))),
25
+ AUTH_LOG_SECRETS: vOptionalBooleanString,
26
+ AUTH_MICROSOFT_ID: v.optional(v.string()),
27
+ AUTH_MICROSOFT_SECRET: v.optional(v.string()),
28
+ AUTH_MICROSOFT_TENANT_ID: v.optional(v.string()),
29
+ AUTH_PASSWORD_EMAIL_VERIFICATION: vOptionalBooleanString,
30
+ AUTH_SECRET_ENCRYPTION_KEY: v.optional(v.string()),
31
+ AUTH_SESSION_INACTIVE_DURATION_MS: v.optional(v.string()),
32
+ AUTH_SESSION_TOTAL_DURATION_MS: v.optional(v.string()),
33
+ CHANGE_PASSWORD_URL: v.optional(v.string()),
34
+ CONVEX_SITE_URL: v.optional(v.string()),
35
+ IOS_APP_IDS: v.optional(v.string()),
36
+ IOS_APPLINK_PATHS: v.optional(v.string()),
37
+ JWKS: v.optional(v.string()),
38
+ JWT_PRIVATE_KEY: v.optional(v.string()),
39
+ RESEND_API_KEY: v.optional(v.string()),
40
+ SECURITY_CONTACT: v.optional(v.string()),
41
+ SECURITY_TXT_EXPIRES_DAYS: v.optional(v.string())
42
+ };
43
+ function readEnv(name) {
44
+ const value = typeof process === "undefined" ? void 0 : process.env?.[name];
45
+ return typeof value === "string" && value.length > 0 ? value : void 0;
46
+ }
47
+ /** Env vars whose absence points the user at the setup wizard rather than a bare miss. */
48
+ const SETUP_WIZARD_ENV = new Set([
49
+ "JWT_PRIVATE_KEY",
50
+ "JWKS",
51
+ "AUTH_SECRET_ENCRYPTION_KEY"
52
+ ]);
53
+ function missingEnvMessage(name) {
54
+ return SETUP_WIZARD_ENV.has(name) ? `Missing environment variable \`${name}\`. Run the convex-auth setup wizard to generate and configure auth keys.` : `Missing environment variable \`${name}\``;
55
+ }
56
+ /** @internal */
57
+ const readConfigSync = (value) => value;
58
+ /** @internal */
59
+ const envString = (name) => {
60
+ const value = readEnv(name);
61
+ if (value === void 0) throw new Error(missingEnvMessage(name));
62
+ return value;
63
+ };
64
+ /** @internal */
65
+ const envOptionalString = (name) => readEnv(name);
66
+ /** @internal */
67
+ const envOptionalNumber = (name) => {
68
+ const value = readEnv(name);
69
+ if (value === void 0) return;
70
+ const parsed = Number(value);
71
+ if (!Number.isFinite(parsed)) throw new Error(`Invalid numeric environment variable \`${name}\``);
72
+ return parsed;
73
+ };
74
+ /** @internal */
75
+ const envBoolean = (name) => {
76
+ const value = readEnv(name);
77
+ if (value === void 0) return;
78
+ if (value === "true") return true;
79
+ if (value === "false") return false;
80
+ throw new Error(`Invalid boolean environment variable \`${name}\``);
81
+ };
82
+ /** @internal */
83
+ function requireEnv(name) {
84
+ try {
85
+ return readConfigSync(envString(name));
86
+ } catch {
87
+ throw new ConvexError({
88
+ code: ErrorCode.MISSING_ENV_VAR,
89
+ message: missingEnvMessage(name)
90
+ });
91
+ }
92
+ }
93
+
94
+ //#endregion
95
+ export { authEnv, envBoolean, envOptionalNumber, envOptionalString, readConfigSync, requireEnv };
96
+ //# sourceMappingURL=env.js.map