@learncard/lca-api-service 1.3.2 → 1.5.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 (240) hide show
  1. package/.env.example +99 -2
  2. package/AGENTS.md +155 -44
  3. package/CHANGELOG.md +84 -0
  4. package/bootstrapLambda.test.ts +76 -0
  5. package/compose.env +5 -0
  6. package/config/config.dev.json +23 -0
  7. package/config/config.example.json +22 -0
  8. package/config/config.json +1 -0
  9. package/config/config.production.json +12 -0
  10. package/config/config.scouts.dev.json +11 -0
  11. package/config/config.scouts.production.json +11 -0
  12. package/dist/accesslayer/signing-authority/index.d.ts +8 -2
  13. package/dist/app.d.ts +361 -8
  14. package/dist/cache/challenges.d.ts +2 -0
  15. package/dist/cache/getDel.d.ts +2 -0
  16. package/dist/cache/getDel.test.d.ts +1 -0
  17. package/dist/cache/login-tickets.d.ts +12 -0
  18. package/dist/cache/recoverySessions.d.ts +42 -0
  19. package/dist/config/applyDockerStageConfig.d.ts +1 -0
  20. package/dist/config/cacheEnvironment.d.ts +16 -0
  21. package/dist/config/environment.d.ts +253 -2
  22. package/dist/config/environment.test.d.ts +1 -0
  23. package/dist/config/escrowBundleMode.test.d.ts +1 -0
  24. package/dist/config/escrowDeployment.test.d.ts +1 -0
  25. package/dist/config/oidcEnvironment.d.ts +74 -0
  26. package/dist/config/serverlessFunctionEnv.test.d.ts +1 -0
  27. package/dist/config/stageConfig.d.ts +62 -0
  28. package/dist/config/stageConfig.test.d.ts +1 -0
  29. package/dist/didkit_wasm_bg.wasm +0 -0
  30. package/dist/docker-entry.d.ts +1 -1
  31. package/dist/helpers/auth.helpers.d.ts +1 -1
  32. package/dist/helpers/escrowCancelLink.d.ts +7 -0
  33. package/dist/helpers/escrowCancelLink.test.d.ts +1 -0
  34. package/dist/helpers/escrowCancelToken.d.ts +4 -0
  35. package/dist/helpers/escrowCancelToken.test.d.ts +1 -0
  36. package/dist/helpers/keycloak.helpers.d.ts +23 -0
  37. package/dist/helpers/learnCard.signingAuthority.test.d.ts +1 -0
  38. package/dist/helpers/login-ticket.helpers.d.ts +31 -0
  39. package/dist/helpers/login-ticket.helpers.test.d.ts +1 -0
  40. package/dist/helpers/oidc.helpers.d.ts +47 -0
  41. package/dist/helpers/rate-limit.helpers.d.ts +6 -0
  42. package/dist/helpers/rate-limit.helpers.test.d.ts +1 -0
  43. package/dist/helpers/rateLimit.helpers.d.ts +4 -0
  44. package/dist/helpers/seedEncryption.helpers.d.ts +23 -0
  45. package/dist/helpers/seedEncryption.helpers.test.d.ts +1 -0
  46. package/dist/helpers/social-token.helpers.d.ts +19 -0
  47. package/dist/index.d.ts +1 -0
  48. package/dist/index.js +2 -2
  49. package/dist/jobs/escrowBlobRewrap.d.ts +9 -0
  50. package/dist/jobs/escrowHoldReminders.d.ts +12 -0
  51. package/dist/migrations/signingAuthoritySeeds.d.ts +13 -0
  52. package/dist/migrations/signingAuthoritySeedsCli.test.d.ts +1 -0
  53. package/dist/models/AuthSubject.d.ts +20 -0
  54. package/dist/models/EscrowHold.d.ts +153 -0
  55. package/dist/models/Notification.d.ts +5 -0
  56. package/dist/models/SigningAuthority.d.ts +7 -1
  57. package/dist/models/UserKey.d.ts +326 -3
  58. package/dist/models/UserKey.escrowPin.test.d.ts +1 -0
  59. package/dist/models/index.d.ts +2 -0
  60. package/dist/oidc.d.ts +5 -0
  61. package/dist/routes/auth.d.ts +31 -0
  62. package/dist/routes/escrow.d.ts +164 -0
  63. package/dist/routes/index.d.ts +6 -0
  64. package/dist/routes/keys.d.ts +182 -7
  65. package/dist/routes/notifications.d.ts +5 -0
  66. package/dist/routes/qr-login.d.ts +1 -1
  67. package/dist/routes/signing-authority.d.ts +14 -0
  68. package/dist/services/escrow-enclave/blobIdentity.d.ts +10 -0
  69. package/dist/services/escrow-enclave/blobIdentity.test.d.ts +1 -0
  70. package/dist/services/escrow-enclave/cancellation.d.ts +3 -0
  71. package/dist/services/escrow-enclave/enclaveTrustAnchors.d.ts +1 -0
  72. package/dist/services/escrow-enclave/index.d.ts +25 -0
  73. package/dist/services/escrow-enclave/notifications.d.ts +24 -0
  74. package/dist/services/escrow-enclave/notifications.test.d.ts +1 -0
  75. package/dist/services/escrow-enclave/production.test.d.ts +1 -0
  76. package/dist/services/escrow-enclave/remoteEnclave.contract.test.d.ts +1 -0
  77. package/dist/services/escrow-enclave/remoteEnclave.d.ts +20 -0
  78. package/dist/services/escrow-enclave/remoteEnclave.test.d.ts +1 -0
  79. package/dist/services/escrow-enclave/remoteEnclave.tls.test.d.ts +1 -0
  80. package/dist/services/escrow-enclave/softwareEnclave.d.ts +27 -0
  81. package/dist/services/escrow-enclave/softwareEnclave.test.d.ts +1 -0
  82. package/dist/services/escrow-enclave/types.d.ts +111 -0
  83. package/dist/types/notifications.d.ts +5 -0
  84. package/dist/types/seed-encryption.d.ts +31 -0
  85. package/dist/types/seed-migration.d.ts +49 -0
  86. package/esbuildPlugins.cjs +1 -0
  87. package/lambda.ts +27 -112
  88. package/lambdaApp.ts +146 -0
  89. package/oidcLambda.test.ts +38 -0
  90. package/oidcLambda.ts +18 -0
  91. package/oidcLambdaApp.ts +11 -0
  92. package/package.json +30 -14
  93. package/scripts/README.md +88 -0
  94. package/scripts/check-seed-encryption-infrastructure.mjs +139 -0
  95. package/scripts/check-signing-authority-redis.mjs +93 -0
  96. package/scripts/escrow-blob-mode-report.test.ts +227 -0
  97. package/scripts/escrow-blob-mode-report.ts +465 -0
  98. package/scripts/keycloak-admin.ts +108 -0
  99. package/scripts/keycloak-provider-links.ts +147 -0
  100. package/scripts/migrate-signing-authority-seeds-local.sh +51 -0
  101. package/scripts/migrate-signing-authority-seeds.mjs +105 -0
  102. package/scripts/print-seed-rollout-flags.ts +21 -0
  103. package/scripts/provision-keycloak-users.ts +419 -0
  104. package/seedMigrationApp.test.ts +145 -0
  105. package/seedMigrationApp.ts +50 -0
  106. package/seedMigrationLambda.test.ts +40 -0
  107. package/seedMigrationLambda.ts +19 -0
  108. package/serverless-local.yml +28 -1
  109. package/serverless.function-env.cjs +58 -0
  110. package/serverless.yml +294 -26
  111. package/src/accesslayer/notifications/index.ts +9 -2
  112. package/src/accesslayer/signing-authority/create.ts +11 -7
  113. package/src/accesslayer/signing-authority/index.ts +4 -1
  114. package/src/app.ts +4 -0
  115. package/src/cache/challenges.ts +12 -2
  116. package/src/cache/getDel.test.ts +34 -0
  117. package/src/cache/getDel.ts +32 -0
  118. package/src/cache/in-memory-lru.ts +1 -0
  119. package/src/cache/index.ts +1 -1
  120. package/src/cache/login-tickets.ts +26 -0
  121. package/src/cache/recoverySessions.ts +252 -0
  122. package/src/config/applyDockerStageConfig.ts +6 -0
  123. package/src/config/cacheEnvironment.ts +34 -0
  124. package/src/config/environment.test.ts +159 -0
  125. package/src/config/environment.ts +164 -0
  126. package/src/config/escrowBundleMode.test.ts +52 -0
  127. package/src/config/escrowDeployment.test.ts +114 -0
  128. package/src/config/oidcEnvironment.ts +59 -0
  129. package/src/config/serverlessFunctionEnv.test.ts +98 -0
  130. package/src/config/stageConfig.test.ts +26 -0
  131. package/src/config/stageConfig.ts +24 -0
  132. package/src/docker-entry.ts +13 -0
  133. package/src/helpers/auth.helpers.ts +68 -30
  134. package/src/helpers/escrowCancelLink.test.ts +60 -0
  135. package/src/helpers/escrowCancelLink.ts +38 -0
  136. package/src/helpers/escrowCancelToken.test.ts +105 -0
  137. package/src/helpers/escrowCancelToken.ts +47 -0
  138. package/src/helpers/keycloak.helpers.ts +120 -0
  139. package/src/helpers/learnCard.helpers.test.ts +11 -1
  140. package/src/helpers/learnCard.helpers.ts +57 -45
  141. package/src/helpers/learnCard.signingAuthority.test.ts +194 -0
  142. package/src/helpers/login-ticket.helpers.test.ts +45 -0
  143. package/src/helpers/login-ticket.helpers.ts +91 -0
  144. package/src/helpers/oidc.helpers.ts +354 -0
  145. package/src/helpers/rate-limit.helpers.test.ts +61 -0
  146. package/src/helpers/rate-limit.helpers.ts +73 -0
  147. package/src/helpers/rateLimit.helpers.ts +112 -0
  148. package/src/helpers/seedEncryption.helpers.test.ts +427 -0
  149. package/src/helpers/seedEncryption.helpers.ts +372 -0
  150. package/src/helpers/signingAuthority.helpers.ts +4 -1
  151. package/src/helpers/social-token.helpers.ts +144 -0
  152. package/src/index.ts +1 -0
  153. package/src/jobs/escrowBlobRewrap.ts +121 -0
  154. package/src/jobs/escrowHoldReminders.ts +177 -0
  155. package/src/migrations/signingAuthoritySeeds.ts +430 -0
  156. package/src/migrations/signingAuthoritySeedsCli.test.ts +70 -0
  157. package/src/models/AuthSubject.ts +147 -0
  158. package/src/models/EscrowHold.ts +541 -0
  159. package/src/models/SigningAuthority.ts +14 -3
  160. package/src/models/UserKey.escrowPin.test.ts +49 -0
  161. package/src/models/UserKey.ts +1109 -40
  162. package/src/models/index.ts +2 -0
  163. package/src/models/pruneOrphanedRecoveryMethods.ts +3 -1
  164. package/src/oidc.ts +371 -0
  165. package/src/routes/auth.ts +173 -0
  166. package/src/routes/credentials.ts +8 -0
  167. package/src/routes/escrow.ts +1073 -0
  168. package/src/routes/firebase.ts +90 -48
  169. package/src/routes/index.ts +98 -5
  170. package/src/routes/keys.ts +1022 -174
  171. package/src/routes/qr-login.ts +51 -53
  172. package/src/routes/signing-authority.ts +39 -1
  173. package/src/services/delivery/adapters/postmark.adapter.ts +48 -1
  174. package/src/services/escrow-enclave/README.md +122 -0
  175. package/src/services/escrow-enclave/__fixtures__/tls/pinned-ca.pem +11 -0
  176. package/src/services/escrow-enclave/__fixtures__/tls/pinned-leaf.key +5 -0
  177. package/src/services/escrow-enclave/__fixtures__/tls/pinned-leaf.pem +12 -0
  178. package/src/services/escrow-enclave/__fixtures__/tls/rogue-ca.pem +11 -0
  179. package/src/services/escrow-enclave/__fixtures__/tls/rogue-leaf.key +5 -0
  180. package/src/services/escrow-enclave/__fixtures__/tls/rogue-leaf.pem +12 -0
  181. package/src/services/escrow-enclave/blobIdentity.test.ts +42 -0
  182. package/src/services/escrow-enclave/blobIdentity.ts +55 -0
  183. package/src/services/escrow-enclave/cancellation.ts +59 -0
  184. package/src/services/escrow-enclave/enclaveTrustAnchors.ts +34 -0
  185. package/src/services/escrow-enclave/index.ts +174 -0
  186. package/src/services/escrow-enclave/notifications.test.ts +377 -0
  187. package/src/services/escrow-enclave/notifications.ts +348 -0
  188. package/src/services/escrow-enclave/production.test.ts +34 -0
  189. package/src/services/escrow-enclave/remoteEnclave.contract.test.ts +344 -0
  190. package/src/services/escrow-enclave/remoteEnclave.test.ts +490 -0
  191. package/src/services/escrow-enclave/remoteEnclave.tls.test.ts +62 -0
  192. package/src/services/escrow-enclave/remoteEnclave.ts +263 -0
  193. package/src/services/escrow-enclave/softwareEnclave.test.ts +450 -0
  194. package/src/services/escrow-enclave/softwareEnclave.ts +254 -0
  195. package/src/services/escrow-enclave/types.ts +122 -0
  196. package/src/types/seed-encryption.ts +51 -0
  197. package/src/types/seed-migration.ts +61 -0
  198. package/test/auth-tickets.spec.ts +480 -0
  199. package/test/credentials.spec.ts +2 -0
  200. package/test/helpers/keycloak-broker.ts +181 -0
  201. package/test/helpers/live-mongo.ts +9 -0
  202. package/test/jobs/escrowBlobRewrap.spec.ts +262 -0
  203. package/test/jobs/escrowHoldReminders.spec.ts +319 -0
  204. package/test/keycloak-admin.spec.ts +58 -0
  205. package/test/keycloak-broker-roundtrip.integration.spec.ts +40 -0
  206. package/test/keycloak-migration.integration.spec.ts +266 -0
  207. package/test/keycloak-provider-links.spec.ts +201 -0
  208. package/test/keycloak-social-broker.integration.spec.ts +228 -0
  209. package/test/keycloak-verify.integration.spec.ts +100 -0
  210. package/test/keycloak-verify.spec.ts +307 -0
  211. package/test/keys-escrow.spec.ts +2328 -0
  212. package/test/keys-identity-rebind.spec.ts +456 -0
  213. package/test/keys-lifecycle-invariants.spec.ts +785 -0
  214. package/test/keys-recovery-confirmation.spec.ts +586 -0
  215. package/test/keys-recovery-rate-limit.spec.ts +123 -0
  216. package/test/keys-secret-leakage.spec.ts +265 -0
  217. package/test/models/authSubjectIndexes.spec.ts +132 -0
  218. package/test/models/escrow.spec.ts +572 -0
  219. package/test/notifications.spec.ts +4 -0
  220. package/test/oidc-e2e/broker.spec.ts +116 -0
  221. package/test/oidc-e2e/compose.yaml +33 -0
  222. package/test/oidc-e2e/fixtures.ts +245 -0
  223. package/test/oidc-e2e/lock.test.mjs +73 -0
  224. package/test/oidc-e2e/playwright.config.ts +21 -0
  225. package/test/oidc-e2e/run.mjs +312 -0
  226. package/test/oidc-e2e/tsconfig.json +10 -0
  227. package/test/oidc-e2e/types.ts +21 -0
  228. package/test/oidc.integration.spec.ts +54 -0
  229. package/test/oidc.spec.ts +697 -0
  230. package/test/oidcLambdaApp.boot.spec.ts +105 -0
  231. package/test/provision-keycloak-users.spec.ts +299 -0
  232. package/test/signing-authority-http.spec.ts +161 -0
  233. package/test/signing-authority-seed-migration.spec.ts +414 -0
  234. package/test/signing-authority.spec.ts +90 -0
  235. package/tsconfig.build.json +1 -1
  236. package/tsconfig.json +1 -0
  237. package/vitest.config.ts +24 -1
  238. package/vitest.integration.config.ts +25 -3
  239. package/dist/cache/signing-authority.d.ts +0 -6
  240. package/src/cache/signing-authority.ts +0 -37
@@ -33,8 +33,14 @@ export declare const RecoveryMethodValidator: z.ZodObject<{
33
33
  passkey: "passkey";
34
34
  backup: "backup";
35
35
  phrase: "phrase";
36
+ escrow: "escrow";
36
37
  }>;
37
38
  createdAt: z.ZodDate;
39
+ confirmationStatus: z.ZodOptional<z.ZodEnum<{
40
+ pending: "pending";
41
+ confirmed: "confirmed";
42
+ }>>;
43
+ confirmedAt: z.ZodOptional<z.ZodDate>;
38
44
  credentialId: z.ZodOptional<z.ZodString>;
39
45
  encryptedShare: z.ZodOptional<z.ZodObject<{
40
46
  encryptedData: z.ZodString;
@@ -42,6 +48,10 @@ export declare const RecoveryMethodValidator: z.ZodObject<{
42
48
  salt: z.ZodOptional<z.ZodString>;
43
49
  }, z.core.$strip>>;
44
50
  shareVersion: z.ZodOptional<z.ZodNumber>;
51
+ confirmationCodeHash: z.ZodOptional<z.ZodString>;
52
+ confirmationCodeExpiresAt: z.ZodOptional<z.ZodDate>;
53
+ confirmationAttempts: z.ZodOptional<z.ZodNumber>;
54
+ confirmationEmail: z.ZodOptional<z.ZodString>;
45
55
  }, z.core.$strip>;
46
56
  export declare const PreviousAuthShareValidator: z.ZodObject<{
47
57
  authShare: z.ZodObject<{
@@ -52,7 +62,99 @@ export declare const PreviousAuthShareValidator: z.ZodObject<{
52
62
  shareVersion: z.ZodNumber;
53
63
  createdAt: z.ZodDate;
54
64
  }, z.core.$strip>;
55
- export declare const MongoUserKeyValidator: z.ZodObject<{
65
+ export declare const EscrowEnvelopeValidator: z.ZodObject<{
66
+ version: z.ZodLiteral<1>;
67
+ algorithm: z.ZodLiteral<"P-256-HKDF-SHA256-AES-256-GCM">;
68
+ keyId: z.ZodString;
69
+ ephemeralPublicKey: z.ZodString;
70
+ salt: z.ZodString;
71
+ iv: z.ZodString;
72
+ ciphertext: z.ZodString;
73
+ }, z.core.$strict>;
74
+ export declare const EscrowBlobValidator: z.ZodObject<{
75
+ enrollmentEpoch: z.ZodNumber;
76
+ blobHash: z.ZodString;
77
+ envelope: z.ZodObject<{
78
+ version: z.ZodLiteral<1>;
79
+ algorithm: z.ZodLiteral<"P-256-HKDF-SHA256-AES-256-GCM">;
80
+ keyId: z.ZodString;
81
+ ephemeralPublicKey: z.ZodString;
82
+ salt: z.ZodString;
83
+ iv: z.ZodString;
84
+ ciphertext: z.ZodString;
85
+ }, z.core.$strict>;
86
+ enclaveKeyId: z.ZodString;
87
+ enclaveMode: z.ZodEnum<{
88
+ software: "software";
89
+ nitro: "nitro";
90
+ }>;
91
+ measurements: z.ZodObject<{
92
+ imageSha384: z.ZodOptional<z.ZodString>;
93
+ pcr0: z.ZodOptional<z.ZodString>;
94
+ pcr1: z.ZodOptional<z.ZodString>;
95
+ pcr2: z.ZodOptional<z.ZodString>;
96
+ }, z.core.$strip>;
97
+ shareVersion: z.ZodNumber;
98
+ createdAt: z.ZodDate;
99
+ }, z.core.$strip>;
100
+ export type EscrowBlob = z.infer<typeof EscrowBlobValidator>;
101
+ export declare const EscrowPinSaltValidator: z.ZodString;
102
+ export declare const EscrowPinValidator: z.ZodObject<{
103
+ salt: z.ZodString;
104
+ failedAttempts: z.ZodNumber;
105
+ verifiedFailedAttempts: z.ZodOptional<z.ZodNumber>;
106
+ enabledAt: z.ZodDate;
107
+ disabledAt: z.ZodOptional<z.ZodDate>;
108
+ shareVersion: z.ZodNumber;
109
+ }, z.core.$strip>;
110
+ export declare const EscrowPinStatusValidator: z.ZodObject<{
111
+ state: z.ZodEnum<{
112
+ none: "none";
113
+ enabled: "enabled";
114
+ locked: "locked";
115
+ stale: "stale";
116
+ }>;
117
+ enabled: z.ZodBoolean;
118
+ attemptsRemaining: z.ZodNumber;
119
+ salt: z.ZodOptional<z.ZodString>;
120
+ }, z.core.$strip>;
121
+ export declare const getEscrowPinStatus: (userKey: MongoUserKeyType) => z.infer<typeof EscrowPinStatusValidator>;
122
+ declare const MongoUserKeyBaseValidator: z.ZodObject<{
123
+ escrowBlob: z.ZodOptional<z.ZodObject<{
124
+ enrollmentEpoch: z.ZodNumber;
125
+ blobHash: z.ZodString;
126
+ envelope: z.ZodObject<{
127
+ version: z.ZodLiteral<1>;
128
+ algorithm: z.ZodLiteral<"P-256-HKDF-SHA256-AES-256-GCM">;
129
+ keyId: z.ZodString;
130
+ ephemeralPublicKey: z.ZodString;
131
+ salt: z.ZodString;
132
+ iv: z.ZodString;
133
+ ciphertext: z.ZodString;
134
+ }, z.core.$strict>;
135
+ enclaveKeyId: z.ZodString;
136
+ enclaveMode: z.ZodEnum<{
137
+ software: "software";
138
+ nitro: "nitro";
139
+ }>;
140
+ measurements: z.ZodObject<{
141
+ imageSha384: z.ZodOptional<z.ZodString>;
142
+ pcr0: z.ZodOptional<z.ZodString>;
143
+ pcr1: z.ZodOptional<z.ZodString>;
144
+ pcr2: z.ZodOptional<z.ZodString>;
145
+ }, z.core.$strip>;
146
+ shareVersion: z.ZodNumber;
147
+ createdAt: z.ZodDate;
148
+ }, z.core.$strip>>;
149
+ escrowPin: z.ZodOptional<z.ZodObject<{
150
+ salt: z.ZodString;
151
+ failedAttempts: z.ZodNumber;
152
+ verifiedFailedAttempts: z.ZodOptional<z.ZodNumber>;
153
+ enabledAt: z.ZodDate;
154
+ disabledAt: z.ZodOptional<z.ZodDate>;
155
+ shareVersion: z.ZodNumber;
156
+ }, z.core.$strip>>;
157
+ escrowOptedOutAt: z.ZodOptional<z.ZodDate>;
56
158
  _id: z.ZodOptional<z.ZodString>;
57
159
  contactMethod: z.ZodObject<{
58
160
  type: z.ZodEnum<{
@@ -103,8 +205,14 @@ export declare const MongoUserKeyValidator: z.ZodObject<{
103
205
  passkey: "passkey";
104
206
  backup: "backup";
105
207
  phrase: "phrase";
208
+ escrow: "escrow";
106
209
  }>;
107
210
  createdAt: z.ZodDate;
211
+ confirmationStatus: z.ZodOptional<z.ZodEnum<{
212
+ pending: "pending";
213
+ confirmed: "confirmed";
214
+ }>>;
215
+ confirmedAt: z.ZodOptional<z.ZodDate>;
108
216
  credentialId: z.ZodOptional<z.ZodString>;
109
217
  encryptedShare: z.ZodOptional<z.ZodObject<{
110
218
  encryptedData: z.ZodString;
@@ -112,15 +220,142 @@ export declare const MongoUserKeyValidator: z.ZodObject<{
112
220
  salt: z.ZodOptional<z.ZodString>;
113
221
  }, z.core.$strip>>;
114
222
  shareVersion: z.ZodOptional<z.ZodNumber>;
223
+ confirmationCodeHash: z.ZodOptional<z.ZodString>;
224
+ confirmationCodeExpiresAt: z.ZodOptional<z.ZodDate>;
225
+ confirmationAttempts: z.ZodOptional<z.ZodNumber>;
226
+ confirmationEmail: z.ZodOptional<z.ZodString>;
115
227
  }, z.core.$strip>>>;
116
228
  recoveryEmail: z.ZodOptional<z.ZodString>;
117
229
  recoveryEmailVerifiedAt: z.ZodOptional<z.ZodDate>;
118
230
  migratedFromWeb3Auth: z.ZodDefault<z.ZodBoolean>;
119
231
  migratedAt: z.ZodOptional<z.ZodDate>;
232
+ sssActivationState: z.ZodOptional<z.ZodEnum<{
233
+ provisional: "provisional";
234
+ active: "active";
235
+ }>>;
236
+ provisionalCreatedAt: z.ZodOptional<z.ZodDate>;
120
237
  createdAt: z.ZodDate;
121
238
  updatedAt: z.ZodDate;
122
239
  }, z.core.$strip>;
123
- export type MongoUserKeyType = z.infer<typeof MongoUserKeyValidator>;
240
+ export declare const MongoUserKeyValidator: z.ZodObject<{
241
+ escrowBlob: z.ZodOptional<z.ZodObject<{
242
+ enrollmentEpoch: z.ZodNumber;
243
+ blobHash: z.ZodString;
244
+ envelope: z.ZodObject<{
245
+ version: z.ZodLiteral<1>;
246
+ algorithm: z.ZodLiteral<"P-256-HKDF-SHA256-AES-256-GCM">;
247
+ keyId: z.ZodString;
248
+ ephemeralPublicKey: z.ZodString;
249
+ salt: z.ZodString;
250
+ iv: z.ZodString;
251
+ ciphertext: z.ZodString;
252
+ }, z.core.$strict>;
253
+ enclaveKeyId: z.ZodString;
254
+ enclaveMode: z.ZodEnum<{
255
+ software: "software";
256
+ nitro: "nitro";
257
+ }>;
258
+ measurements: z.ZodObject<{
259
+ imageSha384: z.ZodOptional<z.ZodString>;
260
+ pcr0: z.ZodOptional<z.ZodString>;
261
+ pcr1: z.ZodOptional<z.ZodString>;
262
+ pcr2: z.ZodOptional<z.ZodString>;
263
+ }, z.core.$strip>;
264
+ shareVersion: z.ZodNumber;
265
+ createdAt: z.ZodDate;
266
+ }, z.core.$strip>>;
267
+ escrowPin: z.ZodOptional<z.ZodObject<{
268
+ salt: z.ZodString;
269
+ failedAttempts: z.ZodNumber;
270
+ verifiedFailedAttempts: z.ZodOptional<z.ZodNumber>;
271
+ enabledAt: z.ZodDate;
272
+ disabledAt: z.ZodOptional<z.ZodDate>;
273
+ shareVersion: z.ZodNumber;
274
+ }, z.core.$strip>>;
275
+ escrowOptedOutAt: z.ZodOptional<z.ZodDate>;
276
+ _id: z.ZodOptional<z.ZodString>;
277
+ contactMethod: z.ZodObject<{
278
+ type: z.ZodEnum<{
279
+ email: "email";
280
+ phone: "phone";
281
+ }>;
282
+ value: z.ZodString;
283
+ }, z.core.$strip>;
284
+ authProviders: z.ZodDefault<z.ZodArray<z.ZodObject<{
285
+ type: z.ZodEnum<{
286
+ firebase: "firebase";
287
+ supertokens: "supertokens";
288
+ keycloak: "keycloak";
289
+ oidc: "oidc";
290
+ }>;
291
+ id: z.ZodString;
292
+ }, z.core.$strip>>>;
293
+ primaryDid: z.ZodString;
294
+ linkedDids: z.ZodDefault<z.ZodArray<z.ZodString>>;
295
+ keyProvider: z.ZodDefault<z.ZodEnum<{
296
+ web3auth: "web3auth";
297
+ sss: "sss";
298
+ }>>;
299
+ authShare: z.ZodOptional<z.ZodObject<{
300
+ encryptedData: z.ZodString;
301
+ encryptedDek: z.ZodString;
302
+ iv: z.ZodString;
303
+ }, z.core.$strip>>;
304
+ shareVersion: z.ZodDefault<z.ZodNumber>;
305
+ shareUpdatedAt: z.ZodOptional<z.ZodDate>;
306
+ previousAuthShares: z.ZodDefault<z.ZodArray<z.ZodObject<{
307
+ authShare: z.ZodObject<{
308
+ encryptedData: z.ZodString;
309
+ encryptedDek: z.ZodString;
310
+ iv: z.ZodString;
311
+ }, z.core.$strip>;
312
+ shareVersion: z.ZodNumber;
313
+ createdAt: z.ZodDate;
314
+ }, z.core.$strip>>>;
315
+ securityLevel: z.ZodDefault<z.ZodEnum<{
316
+ basic: "basic";
317
+ enhanced: "enhanced";
318
+ advanced: "advanced";
319
+ }>>;
320
+ recoveryMethods: z.ZodDefault<z.ZodArray<z.ZodObject<{
321
+ type: z.ZodEnum<{
322
+ email: "email";
323
+ passkey: "passkey";
324
+ backup: "backup";
325
+ phrase: "phrase";
326
+ escrow: "escrow";
327
+ }>;
328
+ createdAt: z.ZodDate;
329
+ confirmationStatus: z.ZodOptional<z.ZodEnum<{
330
+ pending: "pending";
331
+ confirmed: "confirmed";
332
+ }>>;
333
+ confirmedAt: z.ZodOptional<z.ZodDate>;
334
+ credentialId: z.ZodOptional<z.ZodString>;
335
+ encryptedShare: z.ZodOptional<z.ZodObject<{
336
+ encryptedData: z.ZodString;
337
+ iv: z.ZodString;
338
+ salt: z.ZodOptional<z.ZodString>;
339
+ }, z.core.$strip>>;
340
+ shareVersion: z.ZodOptional<z.ZodNumber>;
341
+ confirmationCodeHash: z.ZodOptional<z.ZodString>;
342
+ confirmationCodeExpiresAt: z.ZodOptional<z.ZodDate>;
343
+ confirmationAttempts: z.ZodOptional<z.ZodNumber>;
344
+ confirmationEmail: z.ZodOptional<z.ZodString>;
345
+ }, z.core.$strip>>>;
346
+ recoveryEmail: z.ZodOptional<z.ZodString>;
347
+ recoveryEmailVerifiedAt: z.ZodOptional<z.ZodDate>;
348
+ migratedFromWeb3Auth: z.ZodDefault<z.ZodBoolean>;
349
+ migratedAt: z.ZodOptional<z.ZodDate>;
350
+ sssActivationState: z.ZodOptional<z.ZodEnum<{
351
+ provisional: "provisional";
352
+ active: "active";
353
+ }>>;
354
+ provisionalCreatedAt: z.ZodOptional<z.ZodDate>;
355
+ createdAt: z.ZodDate;
356
+ updatedAt: z.ZodDate;
357
+ }, z.core.$loose>;
358
+ export type MongoUserKeyType = z.infer<typeof MongoUserKeyBaseValidator>;
124
359
  export type ContactMethod = z.infer<typeof ContactMethodValidator>;
125
360
  export type AuthProviderMapping = z.infer<typeof AuthProviderMappingValidator>;
126
361
  export type ServerEncryptedShare = z.infer<typeof ServerEncryptedShareValidator>;
@@ -128,6 +363,13 @@ export type EncryptedShare = z.infer<typeof EncryptedShareValidator>;
128
363
  export type RecoveryMethod = z.infer<typeof RecoveryMethodValidator>;
129
364
  export type PreviousAuthShare = z.infer<typeof PreviousAuthShareValidator>;
130
365
  export declare const MAX_PREVIOUS_AUTH_SHARES = 5;
366
+ export declare const PROVISIONAL_MIGRATION_TTL_MS: number;
367
+ export declare class UserKeyVersionConflictError extends Error {
368
+ constructor();
369
+ }
370
+ export declare const getSssActivationState: (userKey: MongoUserKeyType) => "provisional" | "active";
371
+ export declare const isRecoveryMethodConfirmed: (userKey: MongoUserKeyType, method: RecoveryMethod) => boolean;
372
+ export declare const hasActivatableRecoveryMethod: (userKey: MongoUserKeyType) => boolean;
131
373
  export { pruneOrphanedRecoveryMethods };
132
374
  export declare const getUserKeysCollection: () => import("mongodb").Collection<{
133
375
  contactMethod: {
@@ -153,8 +395,10 @@ export declare const getUserKeysCollection: () => import("mongodb").Collection<{
153
395
  }[];
154
396
  securityLevel: "basic" | "enhanced" | "advanced";
155
397
  recoveryMethods: {
156
- type: "email" | "passkey" | "backup" | "phrase";
398
+ type: "email" | "passkey" | "backup" | "phrase" | "escrow";
157
399
  createdAt: Date;
400
+ confirmationStatus?: "pending" | "confirmed" | undefined;
401
+ confirmedAt?: Date | undefined;
158
402
  credentialId?: string | undefined;
159
403
  encryptedShare?: {
160
404
  encryptedData: string;
@@ -162,10 +406,46 @@ export declare const getUserKeysCollection: () => import("mongodb").Collection<{
162
406
  salt?: string | undefined;
163
407
  } | undefined;
164
408
  shareVersion?: number | undefined;
409
+ confirmationCodeHash?: string | undefined;
410
+ confirmationCodeExpiresAt?: Date | undefined;
411
+ confirmationAttempts?: number | undefined;
412
+ confirmationEmail?: string | undefined;
165
413
  }[];
166
414
  migratedFromWeb3Auth: boolean;
167
415
  createdAt: Date;
168
416
  updatedAt: Date;
417
+ escrowBlob?: {
418
+ enrollmentEpoch: number;
419
+ blobHash: string;
420
+ envelope: {
421
+ version: 1;
422
+ algorithm: "P-256-HKDF-SHA256-AES-256-GCM";
423
+ keyId: string;
424
+ ephemeralPublicKey: string;
425
+ salt: string;
426
+ iv: string;
427
+ ciphertext: string;
428
+ };
429
+ enclaveKeyId: string;
430
+ enclaveMode: "software" | "nitro";
431
+ measurements: {
432
+ imageSha384?: string | undefined;
433
+ pcr0?: string | undefined;
434
+ pcr1?: string | undefined;
435
+ pcr2?: string | undefined;
436
+ };
437
+ shareVersion: number;
438
+ createdAt: Date;
439
+ } | undefined;
440
+ escrowPin?: {
441
+ salt: string;
442
+ failedAttempts: number;
443
+ enabledAt: Date;
444
+ shareVersion: number;
445
+ verifiedFailedAttempts?: number | undefined;
446
+ disabledAt?: Date | undefined;
447
+ } | undefined;
448
+ escrowOptedOutAt?: Date | undefined;
169
449
  _id?: string | undefined;
170
450
  authShare?: {
171
451
  encryptedData: string;
@@ -176,16 +456,59 @@ export declare const getUserKeysCollection: () => import("mongodb").Collection<{
176
456
  recoveryEmail?: string | undefined;
177
457
  recoveryEmailVerifiedAt?: Date | undefined;
178
458
  migratedAt?: Date | undefined;
459
+ sssActivationState?: "provisional" | "active" | undefined;
460
+ provisionalCreatedAt?: Date | undefined;
179
461
  }>;
180
462
  export declare const createUserKeysIndexes: () => Promise<void>;
463
+ export declare const ensureUserKeysIndexes: () => Promise<void>;
181
464
  export declare const findUserKeyByContactMethod: (contactMethod: ContactMethod) => Promise<MongoUserKeyType | null>;
182
465
  export declare const findUserKeyByAuthProvider: (providerType: string, providerId: string) => Promise<MongoUserKeyType | null>;
183
466
  export declare const findUserKeyByDid: (did: string) => Promise<MongoUserKeyType | null>;
467
+ export declare const findUniqueUserKeyByVerifiedRecoveryEmail: (email: string) => Promise<MongoUserKeyType | null>;
184
468
  export declare const findAuthShareByVersion: (userKey: MongoUserKeyType, version: number) => ServerEncryptedShare | null;
185
469
  export declare const upsertUserKey: (contactMethod: ContactMethod, data: Partial<Omit<MongoUserKeyType, "_id" | "contactMethod" | "createdAt">>) => Promise<MongoUserKeyType>;
470
+ export declare const upsertUserKeyByAuthProvider: (contactMethod: ContactMethod, authProvider: AuthProviderMapping, data: Partial<Omit<MongoUserKeyType, "_id" | "contactMethod" | "createdAt" | "authProviders">>, expectedVersion?: number) => Promise<MongoUserKeyType>;
186
471
  export declare const addAuthProviderToUserKey: (contactMethod: ContactMethod, authProvider: AuthProviderMapping) => Promise<void>;
187
472
  export declare const addRecoveryMethodToUserKey: (contactMethod: ContactMethod, recoveryMethod: RecoveryMethod) => Promise<void>;
473
+ export declare const setEscrowBlobByAuthProvider: (authProvider: AuthProviderMapping, blob: Omit<EscrowBlob, "enrollmentEpoch" | "blobHash">, expectedShareVersion: number, pin?: {
474
+ salt: string;
475
+ }, carryFrom?: {
476
+ blob: EscrowBlob;
477
+ pin: NonNullable<MongoUserKeyType["escrowPin"]>;
478
+ }) => Promise<MongoUserKeyType | null>;
479
+ export declare const rewrapEscrowBlobByAuthProvider: (authProvider: AuthProviderMapping, oldBlob: EscrowBlob, oldPin: MongoUserKeyType["escrowPin"], newEnvelope: EscrowBlob["envelope"], identity: Pick<EscrowBlob, "enclaveKeyId" | "enclaveMode" | "measurements">) => Promise<MongoUserKeyType | null>;
480
+ export declare const findUserKeysWithEscrowBlobKeyId: (keyIds: string[], limit: number) => Promise<MongoUserKeyType[]>;
481
+ export declare const clearEscrowByAuthProvider: (authProvider: AuthProviderMapping, { optOut }: {
482
+ optOut: boolean;
483
+ }) => Promise<MongoUserKeyType | null>;
484
+ export declare const setEscrowOptInByAuthProvider: (authProvider: AuthProviderMapping) => Promise<MongoUserKeyType | null>;
485
+ export declare const reserveEscrowPinAttempt: (authProvider: AuthProviderMapping, shareVersion: number, expectedCiphertext?: string) => Promise<MongoUserKeyType | null>;
486
+ export declare const refundEscrowPinAttempt: (authProvider: AuthProviderMapping, shareVersion: number, expectedCiphertext: string) => Promise<void>;
487
+ export declare const recordEscrowPinFailure: (authProvider: AuthProviderMapping, shareVersion: number, expectedCiphertext: string) => Promise<MongoUserKeyType | null>;
488
+ export declare const disableEscrowPin: (authProvider: AuthProviderMapping, shareVersion?: number, expectedCiphertext?: string) => Promise<boolean>;
489
+ export declare const addRecoveryMethodToUserKeyByAuthProvider: (authProvider: AuthProviderMapping, recoveryMethod: RecoveryMethod) => Promise<void>;
490
+ export declare const removeRecoveryMethodFromUserKeyByAuthProvider: (authProvider: AuthProviderMapping, type: RecoveryMethod["type"], credentialId?: string) => Promise<void>;
491
+ export declare const incrementRecoveryConfirmationAttemptsByAuthProvider: (authProvider: AuthProviderMapping, shareVersion: number) => Promise<boolean>;
492
+ export declare const confirmRecoveryMethodByAuthProvider: (authProvider: AuthProviderMapping, type: RecoveryMethod["type"], shareVersion: number, credentialId?: string) => Promise<boolean>;
188
493
  export declare const markUserKeyMigrated: (contactMethod: ContactMethod) => Promise<void>;
494
+ export declare const markUserKeyMigratedByAuthProvider: (authProvider: AuthProviderMapping) => Promise<void>;
495
+ export declare const markUserKeyMigrationProvisionalByAuthProvider: (authProvider: AuthProviderMapping, provisionalCreatedAt: Date) => Promise<boolean>;
496
+ export declare const activateUserKeyByAuthProvider: (authProvider: AuthProviderMapping, shareVersion: number, isMigration: boolean) => Promise<boolean>;
497
+ export declare const purgeExpiredProvisionalMigrationByAuthProvider: (authProvider: AuthProviderMapping, now?: Date) => Promise<boolean>;
189
498
  export declare const setRecoveryEmail: (contactMethod: ContactMethod, email: string) => Promise<void>;
499
+ export declare const setRecoveryEmailByAuthProvider: (authProvider: AuthProviderMapping, email: string) => Promise<void>;
190
500
  export declare const upgradeContactMethod: (oldContactMethod: ContactMethod, newContactMethod: ContactMethod) => Promise<boolean>;
501
+ export declare const upgradeContactMethodByAuthProvider: (authProvider: AuthProviderMapping, expectedOldContactMethod: ContactMethod, newContactMethod: ContactMethod) => Promise<boolean>;
191
502
  export declare const deleteUserKey: (contactMethod: ContactMethod) => Promise<void>;
503
+ export declare const deleteUserKeyByAuthProvider: (authProvider: AuthProviderMapping) => Promise<void>;
504
+ export interface CompleteIdentityRebindInput {
505
+ oldAuthProvider: AuthProviderMapping;
506
+ newAuthProvider: AuthProviderMapping;
507
+ newContactMethod: ContactMethod;
508
+ primaryDid: string;
509
+ authShare: ServerEncryptedShare;
510
+ }
511
+ export declare const completeIdentityRebind: (input: CompleteIdentityRebindInput) => Promise<{
512
+ shareVersion: number;
513
+ methodsRequiringConfirmation: RecoveryMethod["type"][];
514
+ } | null>;
@@ -0,0 +1 @@
1
+ export {};
@@ -5,3 +5,5 @@ export * from './SigningAuthority';
5
5
  export * from './Pins';
6
6
  export * from './Preferences';
7
7
  export * from './UserKey';
8
+ export * from './EscrowHold';
9
+ export * from './AuthSubject';
package/dist/oidc.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import { type FastifyPluginAsync } from 'fastify';
2
+ export declare const oidcFastifyPlugin: FastifyPluginAsync;
3
+ export declare const app: import("fastify").FastifyInstance<import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>, import("http").IncomingMessage, import("http").ServerResponse<import("http").IncomingMessage>, import("fastify").FastifyBaseLogger, import("fastify").FastifyTypeProviderDefault> & PromiseLike<import("fastify").FastifyInstance<import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>, import("http").IncomingMessage, import("http").ServerResponse<import("http").IncomingMessage>, import("fastify").FastifyBaseLogger, import("fastify").FastifyTypeProviderDefault>> & {
4
+ __linterBrands: "SafePromiseLike";
5
+ };
@@ -0,0 +1,31 @@
1
+ export declare const authRouter: import("@trpc/server").TRPCBuiltRouter<{
2
+ ctx: import("@routes").Context;
3
+ meta: import("trpc-to-openapi").OpenApiMeta;
4
+ errorShape: import("@trpc/server").TRPCDefaultErrorShape;
5
+ transformer: false;
6
+ }, import("@trpc/server").TRPCDecorateCreateRouterOptions<{
7
+ requestLoginTicket: import("@trpc/server").TRPCMutationProcedure<{
8
+ input: {
9
+ email: string;
10
+ code: string;
11
+ };
12
+ output: {
13
+ success: boolean;
14
+ ticket?: string | undefined;
15
+ error?: string | undefined;
16
+ };
17
+ meta: import("trpc-to-openapi").OpenApiMeta;
18
+ }>;
19
+ requestSocialLoginTicket: import("@trpc/server").TRPCMutationProcedure<{
20
+ input: {
21
+ provider: "google" | "apple";
22
+ idToken: string;
23
+ };
24
+ output: {
25
+ success: boolean;
26
+ ticket?: string | undefined;
27
+ error?: string | undefined;
28
+ };
29
+ meta: import("trpc-to-openapi").OpenApiMeta;
30
+ }>;
31
+ }>>;
@@ -0,0 +1,164 @@
1
+ import { type Context } from '@routes';
2
+ export declare const escrowRouter: import("@trpc/server").TRPCBuiltRouter<{
3
+ ctx: Context;
4
+ meta: import("trpc-to-openapi").OpenApiMeta;
5
+ errorShape: import("@trpc/server").TRPCDefaultErrorShape;
6
+ transformer: false;
7
+ }, import("@trpc/server").TRPCDecorateCreateRouterOptions<{
8
+ getAttestation: import("@trpc/server").TRPCQueryProcedure<{
9
+ input: {
10
+ nonce?: string | undefined;
11
+ };
12
+ output: {
13
+ attestation: {
14
+ mode: "software" | "nitro";
15
+ keyId: string;
16
+ publicKey: string;
17
+ measurements: {
18
+ imageSha384?: string | undefined;
19
+ pcr0?: string | undefined;
20
+ pcr1?: string | undefined;
21
+ pcr2?: string | undefined;
22
+ };
23
+ document: string;
24
+ issuedAt: string;
25
+ previousKeyIds?: string[] | undefined;
26
+ };
27
+ holdDurationMs: number;
28
+ };
29
+ meta: import("trpc-to-openapi").OpenApiMeta;
30
+ }>;
31
+ enroll: import("@trpc/server").TRPCMutationProcedure<{
32
+ input: {
33
+ authToken: string;
34
+ providerType: "firebase" | "supertokens" | "keycloak" | "oidc";
35
+ envelope: {
36
+ version: 1;
37
+ algorithm: "P-256-HKDF-SHA256-AES-256-GCM";
38
+ keyId: string;
39
+ ephemeralPublicKey: string;
40
+ salt: string;
41
+ iv: string;
42
+ ciphertext: string;
43
+ };
44
+ shareVersion: number;
45
+ enclaveKeyId: string;
46
+ pinSalt?: string | undefined;
47
+ clearPin?: boolean | undefined;
48
+ };
49
+ output: {
50
+ success: true;
51
+ shareVersion: number;
52
+ };
53
+ meta: import("trpc-to-openapi").OpenApiMeta;
54
+ }>;
55
+ remove: import("@trpc/server").TRPCMutationProcedure<{
56
+ input: {
57
+ authToken: string;
58
+ providerType: "firebase" | "supertokens" | "keycloak" | "oidc";
59
+ optOut: boolean;
60
+ };
61
+ output: {
62
+ success: true;
63
+ };
64
+ meta: import("trpc-to-openapi").OpenApiMeta;
65
+ }>;
66
+ optIn: import("@trpc/server").TRPCMutationProcedure<{
67
+ input: {
68
+ authToken: string;
69
+ providerType: "firebase" | "supertokens" | "keycloak" | "oidc";
70
+ };
71
+ output: {
72
+ success: true;
73
+ };
74
+ meta: import("trpc-to-openapi").OpenApiMeta;
75
+ }>;
76
+ startRecovery: import("@trpc/server").TRPCMutationProcedure<{
77
+ input: {
78
+ clientEphemeralPublicKey: string;
79
+ releasePolicy?: "pin" | "hold" | undefined;
80
+ restart?: boolean | undefined;
81
+ authToken?: string | undefined;
82
+ providerType?: "firebase" | "supertokens" | "keycloak" | "oidc" | undefined;
83
+ recoverySessionToken?: string | undefined;
84
+ };
85
+ output: {
86
+ holdId: string;
87
+ releasePolicy: "pin" | "hold";
88
+ requestedAt: string;
89
+ releaseAfter: string;
90
+ status: "pending";
91
+ resumeToken: string | null;
92
+ pinSalt?: string | undefined;
93
+ };
94
+ meta: import("trpc-to-openapi").OpenApiMeta;
95
+ }>;
96
+ getStatus: import("@trpc/server").TRPCQueryProcedure<{
97
+ input: {
98
+ holdId?: string | undefined;
99
+ resumeToken?: string | undefined;
100
+ authToken?: string | undefined;
101
+ providerType?: "firebase" | "supertokens" | "keycloak" | "oidc" | undefined;
102
+ };
103
+ output: {
104
+ hold: {
105
+ holdId: string;
106
+ status: "pending" | "cancelled" | "completed" | "expired";
107
+ requestedAt: string;
108
+ releaseAfter: string;
109
+ releasePolicy: "pin" | "hold";
110
+ cancelledAt?: string | undefined;
111
+ completedAt?: string | undefined;
112
+ } | null;
113
+ };
114
+ meta: import("trpc-to-openapi").OpenApiMeta;
115
+ }>;
116
+ cancelRecovery: import("@trpc/server").TRPCMutationProcedure<{
117
+ input: {
118
+ authToken: string;
119
+ providerType: "firebase" | "supertokens" | "keycloak" | "oidc";
120
+ };
121
+ output: {
122
+ success: true;
123
+ cancelled: boolean;
124
+ };
125
+ meta: import("trpc-to-openapi").OpenApiMeta;
126
+ }>;
127
+ cancelRecoveryByLink: import("@trpc/server").TRPCMutationProcedure<{
128
+ input: {
129
+ holdId: string;
130
+ token: string;
131
+ };
132
+ output: {
133
+ cancelled: boolean;
134
+ };
135
+ meta: import("trpc-to-openapi").OpenApiMeta;
136
+ }>;
137
+ completeRecovery: import("@trpc/server").TRPCMutationProcedure<{
138
+ input: {
139
+ holdId: string;
140
+ resumeToken: string;
141
+ pinProof?: string | undefined;
142
+ };
143
+ output: {
144
+ sealedShare: {
145
+ version: 1;
146
+ algorithm: "P-256-HKDF-SHA256-AES-256-GCM";
147
+ keyId: string;
148
+ ephemeralPublicKey: string;
149
+ salt: string;
150
+ iv: string;
151
+ ciphertext: string;
152
+ };
153
+ authShare: {
154
+ encryptedData: string;
155
+ encryptedDek: string;
156
+ iv: string;
157
+ };
158
+ primaryDid: string;
159
+ shareVersion: number;
160
+ rebindSessionToken: string;
161
+ };
162
+ meta: import("trpc-to-openapi").OpenApiMeta;
163
+ }>;
164
+ }>>;
@@ -24,6 +24,7 @@ export type Context = {
24
24
  tenant: ResolvedTenant;
25
25
  debug?: boolean;
26
26
  clientIp?: string;
27
+ providerToken?: string;
27
28
  };
28
29
  export declare const t: import("@trpc/server").TRPCRootObject<Context, OpenApiMeta, import("@trpc/server").TRPCRuntimeConfigOptions<Context, OpenApiMeta>, {
29
30
  ctx: Context;
@@ -32,6 +33,7 @@ export declare const t: import("@trpc/server").TRPCRootObject<Context, OpenApiMe
32
33
  transformer: false;
33
34
  }>;
34
35
  export declare const createContext: (options: CreateAWSLambdaContextOptions<APIGatewayProxyEventV2> | CreateFastifyContextOptions | NodeHTTPCreateContextFnOptions<IncomingMessage, ServerResponse>) => Promise<Context>;
36
+ export declare const redactSecretFields: (value: unknown, depth?: number, seen?: Set<object>) => unknown;
35
37
  export declare const openRoute: import("@trpc/server").TRPCProcedureBuilder<Context, OpenApiMeta, {
36
38
  debug: boolean | undefined;
37
39
  user: {
@@ -42,6 +44,7 @@ export declare const openRoute: import("@trpc/server").TRPCProcedureBuilder<Cont
42
44
  domain: string;
43
45
  tenant: ResolvedTenant;
44
46
  clientIp: string | undefined;
47
+ providerToken: string | undefined;
45
48
  }, import("@trpc/server").TRPCUnsetMarker, import("@trpc/server").TRPCUnsetMarker, import("@trpc/server").TRPCUnsetMarker, import("@trpc/server").TRPCUnsetMarker, false>;
46
49
  export declare const didRoute: import("@trpc/server").TRPCProcedureBuilder<Context, OpenApiMeta, {
47
50
  debug: boolean | undefined;
@@ -53,6 +56,7 @@ export declare const didRoute: import("@trpc/server").TRPCProcedureBuilder<Conte
53
56
  domain: string;
54
57
  tenant: ResolvedTenant;
55
58
  clientIp: string | undefined;
59
+ providerToken: string | undefined;
56
60
  }, import("@trpc/server").TRPCUnsetMarker, import("@trpc/server").TRPCUnsetMarker, import("@trpc/server").TRPCUnsetMarker, import("@trpc/server").TRPCUnsetMarker, false>;
57
61
  export declare const authorizedDidRoute: import("@trpc/server").TRPCProcedureBuilder<Context, OpenApiMeta, {
58
62
  debug: boolean | undefined;
@@ -64,6 +68,7 @@ export declare const authorizedDidRoute: import("@trpc/server").TRPCProcedureBui
64
68
  domain: string;
65
69
  tenant: ResolvedTenant;
66
70
  clientIp: string | undefined;
71
+ providerToken: string | undefined;
67
72
  }, import("@trpc/server").TRPCUnsetMarker, import("@trpc/server").TRPCUnsetMarker, import("@trpc/server").TRPCUnsetMarker, import("@trpc/server").TRPCUnsetMarker, false>;
68
73
  export declare const didAndChallengeRoute: import("@trpc/server").TRPCProcedureBuilder<Context, OpenApiMeta, {
69
74
  debug: boolean | undefined;
@@ -75,4 +80,5 @@ export declare const didAndChallengeRoute: import("@trpc/server").TRPCProcedureB
75
80
  domain: string;
76
81
  tenant: ResolvedTenant;
77
82
  clientIp: string | undefined;
83
+ providerToken: string | undefined;
78
84
  }, import("@trpc/server").TRPCUnsetMarker, import("@trpc/server").TRPCUnsetMarker, import("@trpc/server").TRPCUnsetMarker, import("@trpc/server").TRPCUnsetMarker, false>;