@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,294 @@
1
+ import { BINDING_URI, ElementsOrder, NameIdFormat, SamlNamespace } from "./constants.js";
2
+ import { extract } from "./extractor.js";
3
+ import { castArrayOpt, isNonEmptyArray, isString } from "./encoding.js";
4
+ import { createKeySection } from "./signature.js";
5
+ import { buildXml } from "./xml/builder.js";
6
+
7
+ //#region src/server/connection/saml/metadata.ts
8
+ /**
9
+ * SAML metadata parsing — pure functions, no classes.
10
+ *
11
+ * Replaces the `Metadata` / `IdpMetadata` / `SpMetadata` class hierarchy with
12
+ * two factory functions and explicit interface contracts, matching the HOF
13
+ * pattern used throughout the rest of the library.
14
+ */
15
+ function isSloService(value) {
16
+ return typeof value === "object" && value !== null;
17
+ }
18
+ function isAcsService(value) {
19
+ return typeof value === "object" && value !== null;
20
+ }
21
+ /**
22
+ * Read a parsed-metadata field as a string. The extractor yields attribute and
23
+ * text values as strings; this preserves the original behavior of returning the
24
+ * raw value (which the accessor contracts type as `string`).
25
+ */
26
+ function metaString(meta, key) {
27
+ return meta[key];
28
+ }
29
+ /** Narrow an open metadata value to a record of attributes, or `undefined`. */
30
+ function readRecord(value) {
31
+ return typeof value === "object" && value !== null ? value : void 0;
32
+ }
33
+ function parseBaseFields(xml, extraParse) {
34
+ const xmlString = xml.toString();
35
+ const parsed = extract(xmlString, [
36
+ {
37
+ key: "entityDescriptor",
38
+ localPath: ["EntityDescriptor"],
39
+ attributes: [],
40
+ context: true
41
+ },
42
+ {
43
+ key: "entityID",
44
+ localPath: ["EntityDescriptor"],
45
+ attributes: ["entityID"]
46
+ },
47
+ {
48
+ key: "sharedCertificate",
49
+ localPath: [
50
+ "EntityDescriptor",
51
+ "~SSODescriptor",
52
+ "KeyDescriptor",
53
+ "KeyInfo",
54
+ "X509Data",
55
+ "X509Certificate"
56
+ ],
57
+ attributes: []
58
+ },
59
+ {
60
+ key: "certificate",
61
+ localPath: [
62
+ "EntityDescriptor",
63
+ "~SSODescriptor",
64
+ "KeyDescriptor"
65
+ ],
66
+ index: ["use"],
67
+ attributePath: [
68
+ "KeyInfo",
69
+ "X509Data",
70
+ "X509Certificate"
71
+ ],
72
+ attributes: []
73
+ },
74
+ {
75
+ key: "singleLogoutService",
76
+ localPath: [
77
+ "EntityDescriptor",
78
+ "~SSODescriptor",
79
+ "SingleLogoutService"
80
+ ],
81
+ attributes: ["Binding", "Location"]
82
+ },
83
+ {
84
+ key: "nameIDFormat",
85
+ localPath: [
86
+ "EntityDescriptor",
87
+ "~SSODescriptor",
88
+ "NameIDFormat"
89
+ ],
90
+ attributes: []
91
+ },
92
+ ...extraParse
93
+ ]);
94
+ if (typeof parsed.sharedCertificate === "string") {
95
+ parsed.certificate = {
96
+ signing: parsed.sharedCertificate,
97
+ encryption: parsed.sharedCertificate
98
+ };
99
+ delete parsed.sharedCertificate;
100
+ }
101
+ if (Array.isArray(parsed.entityDescriptor) && parsed.entityDescriptor.length > 1) throw new Error("ERR_MULTIPLE_METADATA_ENTITYDESCRIPTOR");
102
+ return {
103
+ xmlString,
104
+ meta: parsed
105
+ };
106
+ }
107
+ function getX509Certificate(meta, use) {
108
+ const certificate = meta.certificate;
109
+ if (typeof certificate === "object" && certificate !== null) return certificate[use] ?? null;
110
+ return null;
111
+ }
112
+ function getNameIDFormat(meta) {
113
+ return meta.nameIDFormat ?? [];
114
+ }
115
+ function getSingleLogoutService(meta, binding) {
116
+ if (binding && isString(binding)) {
117
+ const bindType = BINDING_URI[binding];
118
+ const raw = meta.singleLogoutService;
119
+ const service = (Array.isArray(raw) ? raw : raw ? [raw] : []).find((obj) => isSloService(obj) && obj.binding === bindType);
120
+ if (service) return service.location;
121
+ }
122
+ return meta.singleLogoutService;
123
+ }
124
+ /** Parse IdP metadata, or build it from {@link MetadataIdpOptions} when options are given. */
125
+ function parseIdpMetadata(input) {
126
+ let xmlInput;
127
+ if (isString(input) || input instanceof Uint8Array) xmlInput = input;
128
+ else {
129
+ const { entityID, signingCert, encryptCert, wantAuthnRequestsSigned = false, nameIDFormat = [], singleSignOnService = [], singleLogoutService = [] } = input;
130
+ const IDPSSODescriptor = [{ _attr: {
131
+ WantAuthnRequestsSigned: String(wantAuthnRequestsSigned),
132
+ protocolSupportEnumeration: SamlNamespace.protocol
133
+ } }];
134
+ for (const cert of castArrayOpt(signingCert)) IDPSSODescriptor.push({ KeyDescriptor: createKeySection("signing", cert).KeyDescriptor });
135
+ for (const cert of castArrayOpt(encryptCert)) IDPSSODescriptor.push({ KeyDescriptor: createKeySection("encryption", cert).KeyDescriptor });
136
+ if (isNonEmptyArray(nameIDFormat)) nameIDFormat.forEach((f) => IDPSSODescriptor.push({ NameIDFormat: f }));
137
+ if (isNonEmptyArray(singleSignOnService)) singleSignOnService.forEach((a) => {
138
+ const attr = {
139
+ Binding: a.Binding,
140
+ Location: a.Location
141
+ };
142
+ if (a.isDefault) attr.isDefault = true;
143
+ IDPSSODescriptor.push({ SingleSignOnService: [{ _attr: attr }] });
144
+ });
145
+ else throw new Error("ERR_IDP_METADATA_MISSING_SINGLE_SIGN_ON_SERVICE");
146
+ if (isNonEmptyArray(singleLogoutService)) singleLogoutService.forEach((a) => {
147
+ const attr = {
148
+ Binding: a.Binding,
149
+ Location: a.Location
150
+ };
151
+ if (a.isDefault) attr.isDefault = true;
152
+ IDPSSODescriptor.push({ SingleLogoutService: [{ _attr: attr }] });
153
+ });
154
+ else console.warn("Construct identity provider - missing endpoint of SingleLogoutService");
155
+ xmlInput = buildXml([{ EntityDescriptor: [{ _attr: {
156
+ xmlns: SamlNamespace.metadata,
157
+ "xmlns:assertion": SamlNamespace.assertion,
158
+ "xmlns:ds": "http://www.w3.org/2000/09/xmldsig#",
159
+ entityID
160
+ } }, { IDPSSODescriptor }] }]);
161
+ }
162
+ const { xmlString, meta } = parseBaseFields(xmlInput, [{
163
+ key: "wantAuthnRequestsSigned",
164
+ localPath: ["EntityDescriptor", "IDPSSODescriptor"],
165
+ attributes: ["WantAuthnRequestsSigned"]
166
+ }, {
167
+ key: "singleSignOnService",
168
+ localPath: [
169
+ "EntityDescriptor",
170
+ "IDPSSODescriptor",
171
+ "SingleSignOnService"
172
+ ],
173
+ index: ["Binding"],
174
+ attributePath: [],
175
+ attributes: ["Location"]
176
+ }]);
177
+ return {
178
+ xmlString,
179
+ getEntityID: () => metaString(meta, "entityID"),
180
+ getX509Certificate: (use) => getX509Certificate(meta, use),
181
+ getNameIDFormat: () => getNameIDFormat(meta),
182
+ getSingleLogoutService: (binding) => getSingleLogoutService(meta, binding),
183
+ isWantAuthnRequestsSigned: () => {
184
+ const v = meta.wantAuthnRequestsSigned;
185
+ return v === "true" || v === true;
186
+ },
187
+ getSingleSignOnService: (binding) => {
188
+ if (isString(binding)) {
189
+ const bindName = BINDING_URI[binding];
190
+ const map = meta.singleSignOnService;
191
+ if (typeof map === "object" && map !== null) {
192
+ const service = map[bindName];
193
+ if (service) return service;
194
+ }
195
+ }
196
+ return meta.singleSignOnService;
197
+ }
198
+ };
199
+ }
200
+ /** Parse SP metadata, or build it from {@link MetadataSpOptions} when options are given. */
201
+ function parseSpMetadata(input) {
202
+ let xmlInput;
203
+ if (isString(input) || input instanceof Uint8Array) xmlInput = input;
204
+ else {
205
+ const { elementsOrder = ElementsOrder.default, entityID, signingCert, encryptCert, authnRequestsSigned = false, wantAssertionsSigned = false, wantMessageSigned = false, signatureConfig, nameIDFormat = [], singleLogoutService = [], assertionConsumerService = [] } = input;
206
+ const descriptors = {
207
+ KeyDescriptor: [],
208
+ NameIDFormat: [],
209
+ SingleLogoutService: [],
210
+ AssertionConsumerService: [],
211
+ AttributeConsumingService: []
212
+ };
213
+ const SPSSODescriptor = [{ _attr: {
214
+ AuthnRequestsSigned: String(authnRequestsSigned),
215
+ WantAssertionsSigned: String(wantAssertionsSigned),
216
+ protocolSupportEnumeration: SamlNamespace.protocol
217
+ } }];
218
+ if (wantMessageSigned && signatureConfig === void 0) console.warn("Construct service provider - missing signatureConfig");
219
+ for (const cert of castArrayOpt(signingCert)) descriptors.KeyDescriptor.push(createKeySection("signing", cert).KeyDescriptor);
220
+ for (const cert of castArrayOpt(encryptCert)) descriptors.KeyDescriptor.push(createKeySection("encryption", cert).KeyDescriptor);
221
+ if (isNonEmptyArray(nameIDFormat)) nameIDFormat.forEach((f) => descriptors.NameIDFormat.push(f));
222
+ else descriptors.NameIDFormat.push(NameIdFormat.emailAddress);
223
+ if (isNonEmptyArray(singleLogoutService)) singleLogoutService.forEach((a) => {
224
+ const attr = {
225
+ Binding: a.Binding,
226
+ Location: a.Location
227
+ };
228
+ if (a.isDefault) attr.isDefault = true;
229
+ descriptors.SingleLogoutService.push([{ _attr: attr }]);
230
+ });
231
+ if (isNonEmptyArray(assertionConsumerService)) {
232
+ let indexCount = 0;
233
+ assertionConsumerService.forEach((a) => {
234
+ const attr = {
235
+ index: String(indexCount++),
236
+ Binding: a.Binding,
237
+ Location: a.Location
238
+ };
239
+ if (a.isDefault) attr.isDefault = true;
240
+ descriptors.AssertionConsumerService.push([{ _attr: attr }]);
241
+ });
242
+ }
243
+ elementsOrder.filter((name) => isNonEmptyArray(descriptors[name])).forEach((name) => {
244
+ descriptors[name].forEach((e) => SPSSODescriptor.push({ [name]: e }));
245
+ });
246
+ xmlInput = buildXml([{ EntityDescriptor: [{ _attr: {
247
+ entityID,
248
+ xmlns: SamlNamespace.metadata,
249
+ "xmlns:assertion": SamlNamespace.assertion,
250
+ "xmlns:ds": "http://www.w3.org/2000/09/xmldsig#"
251
+ } }, { SPSSODescriptor }] }]);
252
+ }
253
+ const { xmlString, meta } = parseBaseFields(xmlInput, [{
254
+ key: "spSSODescriptor",
255
+ localPath: ["EntityDescriptor", "SPSSODescriptor"],
256
+ attributes: ["WantAssertionsSigned", "AuthnRequestsSigned"]
257
+ }, {
258
+ key: "assertionConsumerService",
259
+ localPath: [
260
+ "EntityDescriptor",
261
+ "SPSSODescriptor",
262
+ "AssertionConsumerService"
263
+ ],
264
+ attributes: [
265
+ "Binding",
266
+ "Location",
267
+ "isDefault",
268
+ "index"
269
+ ]
270
+ }]);
271
+ return {
272
+ xmlString,
273
+ getMetadata: () => xmlString,
274
+ getEntityID: () => metaString(meta, "entityID"),
275
+ getX509Certificate: (use) => getX509Certificate(meta, use),
276
+ getNameIDFormat: () => getNameIDFormat(meta),
277
+ getSingleLogoutService: (binding) => getSingleLogoutService(meta, binding),
278
+ isWantAssertionsSigned: () => readRecord(meta.spSSODescriptor)?.wantAssertionsSigned === "true",
279
+ isAuthnRequestSigned: () => readRecord(meta.spSSODescriptor)?.authnRequestsSigned === "true",
280
+ getAssertionConsumerService: (binding) => {
281
+ if (isString(binding)) {
282
+ const bindName = BINDING_URI[binding];
283
+ const services = meta.assertionConsumerService;
284
+ if (Array.isArray(services)) return services.find((obj) => isAcsService(obj) && obj.binding === bindName)?.location;
285
+ if (isAcsService(services) && services.binding === bindName) return services.location;
286
+ }
287
+ return meta.assertionConsumerService;
288
+ }
289
+ };
290
+ }
291
+
292
+ //#endregion
293
+ export { parseIdpMetadata, parseSpMetadata };
294
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1,117 @@
1
+ import { BINDING_URI } from "../constants.js";
2
+ import { DEFAULT_ENTITY_SETTINGS } from "../entity.js";
3
+ import { parseSpMetadata } from "../metadata.js";
4
+ import { flow } from "../flow.js";
5
+ import { loginRequestRedirectURL, logoutResponseRedirectURL } from "../binding/redirect.js";
6
+ import { base64LoginRequest, base64LogoutResponse } from "../binding/post.js";
7
+
8
+ //#region src/server/connection/saml/service/provider.ts
9
+ /** Service-provider entity factory. */
10
+ /**
11
+ * The redirect bindings declare `customTagReplacement` over {@link SAMLDocumentTemplate}
12
+ * rather than `string`. The callback never inspects the parameter's nominal shape, so the
13
+ * bridge is type-only.
14
+ */
15
+ function asDocumentTemplateReplacement(replacement) {
16
+ return replacement;
17
+ }
18
+ function isBindingKey(binding) {
19
+ return Object.prototype.hasOwnProperty.call(BINDING_URI, binding);
20
+ }
21
+ function bindingProtocol(binding) {
22
+ return isBindingKey(binding) ? BINDING_URI[binding] : void 0;
23
+ }
24
+ /** Build an {@link ServiceProviderEntity} from service-provider settings or metadata. */
25
+ function createServiceProvider(settings) {
26
+ const entitySetting = Object.assign(
27
+ {},
28
+ DEFAULT_ENTITY_SETTINGS,
29
+ {
30
+ authnRequestsSigned: false,
31
+ wantAssertionsSigned: false,
32
+ wantMessageSigned: false
33
+ },
34
+ settings
35
+ /** `Object.assign` yields a structural intersection; widen to the named, mutable SamlEntitySettings. */
36
+ );
37
+ const entityMeta = parseSpMetadata(settings.metadata ?? settings);
38
+ entitySetting.authnRequestsSigned = entityMeta.isAuthnRequestSigned();
39
+ entitySetting.wantAssertionsSigned = entityMeta.isWantAssertionsSigned();
40
+ entitySetting.nameIDFormat = entityMeta.getNameIDFormat() || entitySetting.nameIDFormat;
41
+ let sp;
42
+ sp = {
43
+ entitySetting,
44
+ entityMeta,
45
+ getMetadata: () => entityMeta.getMetadata(),
46
+ createLoginRequest: async (idp, binding = "redirect", customTagReplacement) => {
47
+ const protocol = bindingProtocol(binding);
48
+ if (entityMeta.isAuthnRequestSigned() !== idp.entityMeta.isWantAuthnRequestsSigned()) throw new Error("ERR_METADATA_CONFLICT_REQUEST_SIGNED_FLAG");
49
+ if (protocol === BINDING_URI.redirect) return loginRequestRedirectURL({
50
+ idp,
51
+ sp
52
+ }, asDocumentTemplateReplacement(customTagReplacement));
53
+ if (protocol === BINDING_URI.post) return {
54
+ ...await base64LoginRequest("/*[local-name(.)='AuthnRequest']", {
55
+ idp,
56
+ sp
57
+ }, customTagReplacement),
58
+ relayState: entitySetting.relayState,
59
+ entityEndpoint: idp.entityMeta.getSingleSignOnService(binding),
60
+ type: "SAMLRequest"
61
+ };
62
+ throw new Error("ERR_SP_LOGIN_REQUEST_UNDEFINED_BINDING");
63
+ },
64
+ parseLoginResponse: (idp, binding, request) => flow({
65
+ from: idp,
66
+ self: sp,
67
+ checkSignature: true,
68
+ parserType: "SAMLResponse",
69
+ binding,
70
+ request
71
+ }),
72
+ parseLogoutRequest: (idp, binding, request) => flow({
73
+ from: idp,
74
+ self: sp,
75
+ parserType: "LogoutRequest",
76
+ checkSignature: entitySetting.wantLogoutRequestSigned,
77
+ binding,
78
+ request
79
+ }),
80
+ parseLogoutResponse: (idp, binding, request) => flow({
81
+ from: idp,
82
+ self: sp,
83
+ parserType: "LogoutResponse",
84
+ checkSignature: entitySetting.wantLogoutResponseSigned,
85
+ binding,
86
+ request
87
+ }),
88
+ createLogoutResponse: async (target, requestInfo, binding, relayState = "", customTagReplacement) => {
89
+ const protocol = bindingProtocol(binding);
90
+ if (protocol === BINDING_URI.redirect) return logoutResponseRedirectURL(requestInfo, {
91
+ init: sp,
92
+ target
93
+ }, relayState, asDocumentTemplateReplacement(customTagReplacement));
94
+ if (protocol === BINDING_URI.post) return {
95
+ ...await base64LogoutResponse(
96
+ requestInfo,
97
+ {
98
+ init: sp,
99
+ target
100
+ },
101
+ /** The binding declares this parameter required; the SP contract has always
102
+ * forwarded it optionally, preserving the prior pass-through behavior. */
103
+ customTagReplacement
104
+ ),
105
+ relayState,
106
+ entityEndpoint: target.entityMeta.getSingleLogoutService(binding),
107
+ type: "SAMLResponse"
108
+ };
109
+ throw new Error("ERR_CREATE_LOGOUT_RESPONSE_UNDEFINED_BINDING");
110
+ }
111
+ };
112
+ return sp;
113
+ }
114
+
115
+ //#endregion
116
+ export { createServiceProvider };
117
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1,214 @@
1
+ import { DIGEST_BY_SIGNATURE, SignatureAlgorithm } from "./constants.js";
2
+ import { getContext } from "./api.js";
3
+ import { isElementNode, isTextNode, selectXPath, serializeXmlNode } from "./dom/select.js";
4
+ import { base64Encode, flattenDeep, normalizeCerString, readPrivateKey, toUtf8String } from "./encoding.js";
5
+ import { getPublicKeyPemFromCert, rsaSign, rsaVerify } from "./crypto.js";
6
+ import { constructMessageSignature as constructMessageSignature$1, constructSamlSignature as constructSamlSignature$1, createSignedXml, schemeToHash, verifyMessageSignature as verifyMessageSignature$1 } from "./xmldsig.js";
7
+ import { decodeBase64, encodeBase64 } from "@oslojs/encoding";
8
+
9
+ //#region src/server/connection/saml/signature.ts
10
+ /** Map XML-dsig signature algorithm URIs to node-rsa signing-scheme aliases. */
11
+ const nrsaAliasMapping = {
12
+ "http://www.w3.org/2000/09/xmldsig#rsa-sha1": "pkcs1-sha1",
13
+ "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256": "pkcs1-sha256",
14
+ "http://www.w3.org/2001/04/xmldsig-more#rsa-sha512": "pkcs1-sha512"
15
+ };
16
+ const signatureAlgorithms = SignatureAlgorithm;
17
+ const digestAlgorithms = DIGEST_BY_SIGNATURE;
18
+ function getDigestMethod(sigAlg) {
19
+ return digestAlgorithms[sigAlg];
20
+ }
21
+ /**
22
+ * Read the text data of an `<X509Certificate>`'s first child, narrowing the
23
+ * XPath result to an element/text node. Mirrors the prior `node.firstChild.data`
24
+ * access; a non-text or missing child yields an empty certificate string, which
25
+ * downstream certificate matching rejects.
26
+ */
27
+ function certificateNodeData(node) {
28
+ if (isElementNode(node)) {
29
+ const child = node.firstChild;
30
+ if (child !== null && isTextNode(child) && child.data !== null) return child.data;
31
+ }
32
+ return "";
33
+ }
34
+ function toPemCertificate(certificate) {
35
+ if (certificate.indexOf("BEGIN CERTIFICATE") >= 0) return certificate;
36
+ return `-----BEGIN CERTIFICATE-----\n${certificate}\n-----END CERTIFICATE-----`;
37
+ }
38
+ function bytesToBinaryString(input) {
39
+ let output = "";
40
+ for (const byte of input) output += String.fromCodePoint(byte);
41
+ return output;
42
+ }
43
+ /** Construct the XML signature for POST binding, returning a base64-encoded string. */
44
+ async function constructSamlSignature(opts) {
45
+ return constructSamlSignature$1({
46
+ ...opts,
47
+ signatureAlgorithm: opts.signatureAlgorithm || signatureAlgorithms.RSA_SHA256,
48
+ getDigestMethod,
49
+ getKeyInfo,
50
+ readPrivateKey: (keyString, passphrase, isOutputString) => readPrivateKey(keyString, passphrase, isOutputString),
51
+ base64Encode
52
+ });
53
+ }
54
+ /**
55
+ * Verify the XML signature.
56
+ *
57
+ * Hardened against XML Signature Wrapping (XSW): signatures are located with
58
+ * absolute XPaths rather than by naively fetching the first `Signature`
59
+ * element, and any signature/assertion smuggled inside
60
+ * `SubjectConfirmationData` is rejected as a potential wrapping attack.
61
+ *
62
+ * Per SAML core 5.4.2 (References): a SAML assertion or protocol message
63
+ * being signed MUST carry an ID on its root element, and the signature MUST
64
+ * contain a single `<ds:Reference>` whose URI is a same-document reference
65
+ * to that ID (e.g. `#foo` for ID `foo`). Only references that actually
66
+ * passed verification are returned, so the assertion handed back is
67
+ * cryptographically authenticated rather than merely present in the document.
68
+ *
69
+ * Fails closed: a failed assertion signature aborts immediately rather than
70
+ * falling through to another candidate. When `opts.metadata` is supplied,
71
+ * the response's X509 certificate is pinned to one declared in metadata
72
+ * (supporting rolling certificate usage). If metadata declares no signing
73
+ * certificate, verification is rejected (`NO_SELECTED_CERTIFICATE`) rather than
74
+ * trusting a certificate embedded in the assertion itself — a self-signed forgery
75
+ * must never be allowed to verify against its own bundled certificate.
76
+ *
77
+ * Returns a tuple where the first element is `true` if the signature is valid,
78
+ * and the second is the cryptographically authenticated assertion node as a
79
+ * string, or `null` if not found.
80
+ */
81
+ async function verifySignature(xml, opts) {
82
+ const { dom } = getContext();
83
+ const doc = dom.parseFromString(xml);
84
+ const { dom: docParser } = getContext();
85
+ const messageSignatureXpath = "/*[contains(local-name(), 'Response') or contains(local-name(), 'Request')]/*[local-name(.)='Signature']";
86
+ const assertionSignatureXpath = "/*[contains(local-name(), 'Response') or contains(local-name(), 'Request')]/*[local-name(.)='Assertion']/*[local-name(.)='Signature']";
87
+ const wrappingElementsXPath = "/*[contains(local-name(), 'Response')]/*[local-name(.)='Assertion']/*[local-name(.)='Subject']/*[local-name(.)='SubjectConfirmation']/*[local-name(.)='SubjectConfirmationData']//*[local-name(.)='Assertion' or local-name(.)='Signature']";
88
+ let selection = [];
89
+ const messageSignatureNode = selectXPath(messageSignatureXpath, doc);
90
+ const assertionSignatureNode = selectXPath(assertionSignatureXpath, doc);
91
+ const wrappingElementNode = selectXPath(wrappingElementsXPath, doc);
92
+ selection = selection.concat(assertionSignatureNode);
93
+ selection = selection.concat(messageSignatureNode);
94
+ if (wrappingElementNode.length !== 0) throw new Error("ERR_POTENTIAL_WRAPPING_ATTACK");
95
+ if (selection.length === 0) return [false, null];
96
+ for (const signatureNode of selection) {
97
+ if (!isElementNode(signatureNode)) continue;
98
+ const isAssertionSignature = assertionSignatureNode.includes(signatureNode);
99
+ const sig = createSignedXml();
100
+ let verified = false;
101
+ sig.signatureAlgorithm = opts.signatureAlgorithm;
102
+ if (!opts.keyFile && !opts.metadata) throw new Error("ERR_UNDEFINED_SIGNATURE_VERIFIER_OPTIONS");
103
+ if (opts.keyFile) {
104
+ const { readFile } = getContext();
105
+ if (!readFile) throw new Error("ERR_FILE_IO_NOT_AVAILABLE");
106
+ sig.publicCert = toUtf8String(readFile(opts.keyFile));
107
+ }
108
+ if (opts.metadata) {
109
+ const certificateNode = selectXPath(".//*[local-name(.)='X509Certificate']", signatureNode);
110
+ let metadataCertList = opts.metadata.getX509Certificate("signing");
111
+ if (Array.isArray(metadataCertList)) metadataCertList = flattenDeep(metadataCertList);
112
+ else if (typeof metadataCertList === "string") metadataCertList = [metadataCertList];
113
+ else metadataCertList = [];
114
+ /**
115
+ * `flattenDeep` is deliberately loose (`unknown[]`); IdP metadata only ever
116
+ * yields PEM strings here, which `normalizeCerString` accepts. A missing
117
+ * (`null`) or empty list is normalized to `[]` above so the fail-closed
118
+ * guard below throws a clean `NO_SELECTED_CERTIFICATE` instead of a raw
119
+ * `TypeError`.
120
+ */
121
+ const metadataCert = metadataCertList.map(normalizeCerString);
122
+ /**
123
+ * Fail CLOSED: without at least one pinned signing certificate from IdP
124
+ * metadata there is no trust anchor. NEVER fall back to an
125
+ * `<X509Certificate>` embedded in the assertion — trusting the assertion's
126
+ * own certificate lets a self-signed forgery verify against itself (auth
127
+ * bypass). Reject whether or not the assertion carries an embedded cert.
128
+ */
129
+ if (metadataCert.length === 0) throw new Error("NO_SELECTED_CERTIFICATE");
130
+ if (certificateNode.length !== 0) {
131
+ const x509Certificate = normalizeCerString(certificateNodeData(certificateNode[0]));
132
+ if (!metadataCert.find((cert) => cert.trim() === x509Certificate.trim())) throw new Error("ERROR_UNMATCH_CERTIFICATE_DECLARATION_IN_METADATA");
133
+ sig.publicCert = getKeyInfo(x509Certificate).getKey();
134
+ } else sig.publicCert = getKeyInfo(metadataCert[0]).getKey();
135
+ }
136
+ sig.loadSignature(signatureNode);
137
+ verified = await sig.checkSignature(serializeXmlNode(doc));
138
+ if (!verified) {
139
+ if (isAssertionSignature) throw new Error("ERR_FAILED_TO_VERIFY_ASSERTION_SIGNATURE");
140
+ continue;
141
+ }
142
+ if (!(sig.getSignedReferences().length >= 1)) throw new Error("NO_SIGNATURE_REFERENCES");
143
+ const signedVerifiedXML = sig.getSignedReferences()[0];
144
+ const rootNode = docParser.parseFromString(signedVerifiedXML).documentElement;
145
+ if (rootNode.localName === "Response") {
146
+ const assertions = selectXPath("./*[local-name()='Assertion']", rootNode);
147
+ const encryptedAssertions = selectXPath("./*[local-name()='EncryptedAssertion']", rootNode);
148
+ if (assertions.length === 1) return [true, serializeXmlNode(assertions[0])];
149
+ else if (encryptedAssertions.length >= 1) return [true, serializeXmlNode(rootNode)];
150
+ else return [true, null];
151
+ } else if (rootNode.localName === "Assertion") return [true, serializeXmlNode(rootNode)];
152
+ else return [true, null];
153
+ }
154
+ return [false, null];
155
+ }
156
+ /** Create the key section in metadata (an abstraction shared by signing and encryption use). */
157
+ function createKeySection(use, certString) {
158
+ return { ["KeyDescriptor"]: [{ _attr: { use } }, { ["ds:KeyInfo"]: [{ _attr: { "xmlns:ds": "http://www.w3.org/2000/09/xmldsig#" } }, { ["ds:X509Data"]: [{ "ds:X509Certificate": normalizeCerString(certString) }] }] }] };
159
+ }
160
+ /** Construct the message signature (octet-string signature) used by the redirect binding. */
161
+ async function constructMessageSignature(octetString, key, passphrase, isBase64, signingAlgorithm) {
162
+ return constructMessageSignature$1({
163
+ octetString,
164
+ key,
165
+ passphrase,
166
+ isBase64,
167
+ signingAlgorithm,
168
+ nrsaAliasMapping,
169
+ defaultSignatureAlgorithm: signatureAlgorithms.RSA_SHA1,
170
+ readPrivateKey: (keyString, keyPassphrase, isOutputString) => readPrivateKey(keyString, keyPassphrase, isOutputString),
171
+ signMessage: async ({ octetString: source, privateKey, signingScheme, isBase64Output }) => {
172
+ const sigB64 = await rsaSign(typeof privateKey === "string" ? privateKey : new TextDecoder().decode(privateKey), source, schemeToHash(signingScheme));
173
+ if (isBase64Output) return sigB64;
174
+ return bytesToBinaryString(decodeBase64(sigB64));
175
+ }
176
+ });
177
+ }
178
+ /** Verify a message signature against the identity/service provider's signing certificate. */
179
+ async function verifyMessageSignature(metadata, octetString, signature, verifyAlgorithm) {
180
+ return verifyMessageSignature$1({
181
+ octetString,
182
+ signature,
183
+ signCert: metadata.getX509Certificate("signing"),
184
+ verifyAlgorithm,
185
+ nrsaAliasMapping,
186
+ defaultSignatureAlgorithm: signatureAlgorithms.RSA_SHA1,
187
+ getPublicKeyPemFromCertificate: getPublicKeyPemFromCert,
188
+ verifyMessage: async ({ octetString: source, signature: incomingSignature, publicKey, signingScheme }) => {
189
+ const hash = schemeToHash(signingScheme);
190
+ let sigBase64;
191
+ if (typeof incomingSignature === "string") sigBase64 = incomingSignature;
192
+ else sigBase64 = encodeBase64(incomingSignature);
193
+ let certOrKey = publicKey;
194
+ if (publicKey.indexOf("BEGIN CERTIFICATE") < 0 && publicKey.indexOf("BEGIN PUBLIC KEY") < 0) certOrKey = toPemCertificate(publicKey);
195
+ return rsaVerify(certOrKey, source, sigBase64, hash);
196
+ }
197
+ });
198
+ }
199
+ /** Build the `<KeyInfo>`/public-key accessors for an X509 certificate string. */
200
+ function getKeyInfo(x509Certificate, signatureConfig = {}) {
201
+ const prefix = signatureConfig.prefix ? `${signatureConfig.prefix}:` : "";
202
+ return {
203
+ getKeyInfo: () => {
204
+ return `<${prefix}X509Data><${prefix}X509Certificate>${x509Certificate}</${prefix}X509Certificate></${prefix}X509Data>`;
205
+ },
206
+ getKey: () => {
207
+ return getPublicKeyPemFromCert(x509Certificate).toString();
208
+ }
209
+ };
210
+ }
211
+
212
+ //#endregion
213
+ export { constructMessageSignature, constructSamlSignature, createKeySection, verifyMessageSignature, verifySignature };
214
+ //# sourceMappingURL=signature.js.map