@robelest/convex-auth 0.0.2-preview.1 → 0.0.2

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 (145) hide show
  1. package/dist/bin.cjs +466 -63
  2. package/dist/client/index.d.ts +211 -30
  3. package/dist/client/index.d.ts.map +1 -1
  4. package/dist/client/index.js +673 -59
  5. package/dist/client/index.js.map +1 -1
  6. package/dist/component/_generated/api.d.ts +56 -1
  7. package/dist/component/_generated/api.d.ts.map +1 -1
  8. package/dist/component/_generated/api.js.map +1 -1
  9. package/dist/component/_generated/component.d.ts +93 -3
  10. package/dist/component/_generated/component.d.ts.map +1 -1
  11. package/dist/component/convex.config.d.ts.map +1 -1
  12. package/dist/component/convex.config.js +2 -0
  13. package/dist/component/convex.config.js.map +1 -1
  14. package/dist/component/index.d.ts +5 -3
  15. package/dist/component/index.d.ts.map +1 -1
  16. package/dist/component/index.js +5 -3
  17. package/dist/component/index.js.map +1 -1
  18. package/dist/component/portalBridge.d.ts +80 -0
  19. package/dist/component/portalBridge.d.ts.map +1 -0
  20. package/dist/component/portalBridge.js +102 -0
  21. package/dist/component/portalBridge.js.map +1 -0
  22. package/dist/component/public.d.ts +193 -9
  23. package/dist/component/public.d.ts.map +1 -1
  24. package/dist/component/public.js +204 -33
  25. package/dist/component/public.js.map +1 -1
  26. package/dist/component/schema.d.ts +89 -9
  27. package/dist/component/schema.d.ts.map +1 -1
  28. package/dist/component/schema.js +68 -7
  29. package/dist/component/schema.js.map +1 -1
  30. package/dist/providers/{Anonymous.d.ts → anonymous.d.ts} +8 -8
  31. package/dist/providers/{Anonymous.d.ts.map → anonymous.d.ts.map} +1 -1
  32. package/dist/providers/{Anonymous.js → anonymous.js} +9 -10
  33. package/dist/providers/anonymous.js.map +1 -0
  34. package/dist/providers/{ConvexCredentials.d.ts → credentials.d.ts} +11 -11
  35. package/dist/providers/credentials.d.ts.map +1 -0
  36. package/dist/providers/{ConvexCredentials.js → credentials.js} +8 -8
  37. package/dist/providers/credentials.js.map +1 -0
  38. package/dist/providers/{Email.d.ts → email.d.ts} +6 -6
  39. package/dist/providers/email.d.ts.map +1 -0
  40. package/dist/providers/{Email.js → email.js} +6 -6
  41. package/dist/providers/email.js.map +1 -0
  42. package/dist/providers/passkey.d.ts +20 -0
  43. package/dist/providers/passkey.d.ts.map +1 -0
  44. package/dist/providers/passkey.js +32 -0
  45. package/dist/providers/passkey.js.map +1 -0
  46. package/dist/providers/{Password.d.ts → password.d.ts} +10 -10
  47. package/dist/providers/{Password.d.ts.map → password.d.ts.map} +1 -1
  48. package/dist/providers/{Password.js → password.js} +19 -20
  49. package/dist/providers/password.js.map +1 -0
  50. package/dist/providers/{Phone.d.ts → phone.d.ts} +3 -3
  51. package/dist/providers/{Phone.d.ts.map → phone.d.ts.map} +1 -1
  52. package/dist/providers/{Phone.js → phone.js} +3 -3
  53. package/dist/providers/{Phone.js.map → phone.js.map} +1 -1
  54. package/dist/providers/totp.d.ts +14 -0
  55. package/dist/providers/totp.d.ts.map +1 -0
  56. package/dist/providers/totp.js +23 -0
  57. package/dist/providers/totp.js.map +1 -0
  58. package/dist/server/convex-auth.d.ts +243 -0
  59. package/dist/server/convex-auth.d.ts.map +1 -0
  60. package/dist/server/convex-auth.js +365 -0
  61. package/dist/server/convex-auth.js.map +1 -0
  62. package/dist/server/implementation/index.d.ts +153 -166
  63. package/dist/server/implementation/index.d.ts.map +1 -1
  64. package/dist/server/implementation/index.js +162 -105
  65. package/dist/server/implementation/index.js.map +1 -1
  66. package/dist/server/implementation/passkey.d.ts +33 -0
  67. package/dist/server/implementation/passkey.d.ts.map +1 -0
  68. package/dist/server/implementation/passkey.js +450 -0
  69. package/dist/server/implementation/passkey.js.map +1 -0
  70. package/dist/server/implementation/redirects.d.ts.map +1 -1
  71. package/dist/server/implementation/redirects.js +4 -9
  72. package/dist/server/implementation/redirects.js.map +1 -1
  73. package/dist/server/implementation/sessions.d.ts +2 -20
  74. package/dist/server/implementation/sessions.d.ts.map +1 -1
  75. package/dist/server/implementation/sessions.js +2 -20
  76. package/dist/server/implementation/sessions.js.map +1 -1
  77. package/dist/server/implementation/signIn.d.ts +13 -0
  78. package/dist/server/implementation/signIn.d.ts.map +1 -1
  79. package/dist/server/implementation/signIn.js +26 -1
  80. package/dist/server/implementation/signIn.js.map +1 -1
  81. package/dist/server/implementation/totp.d.ts +40 -0
  82. package/dist/server/implementation/totp.d.ts.map +1 -0
  83. package/dist/server/implementation/totp.js +211 -0
  84. package/dist/server/implementation/totp.js.map +1 -0
  85. package/dist/server/index.d.ts +18 -0
  86. package/dist/server/index.d.ts.map +1 -1
  87. package/dist/server/index.js +255 -0
  88. package/dist/server/index.js.map +1 -1
  89. package/dist/server/portal-email.d.ts +19 -0
  90. package/dist/server/portal-email.d.ts.map +1 -0
  91. package/dist/server/portal-email.js +89 -0
  92. package/dist/server/portal-email.js.map +1 -0
  93. package/dist/server/portal.d.ts +116 -0
  94. package/dist/server/portal.d.ts.map +1 -0
  95. package/dist/server/portal.js +294 -0
  96. package/dist/server/portal.js.map +1 -0
  97. package/dist/server/provider_utils.d.ts +1 -1
  98. package/dist/server/provider_utils.d.ts.map +1 -1
  99. package/dist/server/provider_utils.js +39 -1
  100. package/dist/server/provider_utils.js.map +1 -1
  101. package/dist/server/types.d.ts +128 -11
  102. package/dist/server/types.d.ts.map +1 -1
  103. package/package.json +7 -7
  104. package/src/cli/index.ts +48 -6
  105. package/src/cli/portal-link.ts +112 -0
  106. package/src/cli/portal-upload.ts +411 -0
  107. package/src/client/index.ts +823 -109
  108. package/src/component/_generated/api.ts +72 -1
  109. package/src/component/_generated/component.ts +180 -4
  110. package/src/component/convex.config.ts +3 -0
  111. package/src/component/index.ts +5 -10
  112. package/src/component/portalBridge.ts +116 -0
  113. package/src/component/public.ts +231 -37
  114. package/src/component/schema.ts +70 -7
  115. package/src/providers/{Anonymous.ts → anonymous.ts} +10 -11
  116. package/src/providers/{ConvexCredentials.ts → credentials.ts} +11 -11
  117. package/src/providers/{Email.ts → email.ts} +5 -5
  118. package/src/providers/passkey.ts +35 -0
  119. package/src/providers/{Password.ts → password.ts} +22 -27
  120. package/src/providers/{Phone.ts → phone.ts} +2 -2
  121. package/src/providers/totp.ts +26 -0
  122. package/src/server/convex-auth.ts +470 -0
  123. package/src/server/implementation/index.ts +228 -239
  124. package/src/server/implementation/passkey.ts +650 -0
  125. package/src/server/implementation/redirects.ts +4 -11
  126. package/src/server/implementation/sessions.ts +2 -20
  127. package/src/server/implementation/signIn.ts +39 -1
  128. package/src/server/implementation/totp.ts +366 -0
  129. package/src/server/index.ts +373 -0
  130. package/src/server/portal-email.ts +95 -0
  131. package/src/server/portal.ts +375 -0
  132. package/src/server/provider_utils.ts +42 -1
  133. package/src/server/types.ts +161 -10
  134. package/dist/providers/Anonymous.js.map +0 -1
  135. package/dist/providers/ConvexCredentials.d.ts.map +0 -1
  136. package/dist/providers/ConvexCredentials.js.map +0 -1
  137. package/dist/providers/Email.d.ts.map +0 -1
  138. package/dist/providers/Email.js.map +0 -1
  139. package/dist/providers/Password.js.map +0 -1
  140. package/providers/Anonymous/package.json +0 -6
  141. package/providers/ConvexCredentials/package.json +0 -6
  142. package/providers/Email/package.json +0 -6
  143. package/providers/Password/package.json +0 -6
  144. package/providers/Phone/package.json +0 -6
  145. package/server/package.json +0 -6
@@ -0,0 +1,450 @@
1
+ /**
2
+ * Server-side WebAuthn ceremony logic for passkey authentication.
3
+ *
4
+ * Handles the four phases of the WebAuthn flow:
5
+ * 1. register-options — generate PublicKeyCredentialCreationOptions
6
+ * 2. register-verify — verify attestation and store credential
7
+ * 3. auth-options — generate PublicKeyCredentialRequestOptions
8
+ * 4. auth-verify — verify assertion signature and sign in
9
+ *
10
+ * Uses `@oslojs/webauthn` for attestation/assertion parsing and
11
+ * `@oslojs/crypto` for signature verification.
12
+ */
13
+ import { parseAttestationObject, parseClientDataJSON, parseAuthenticatorData, createAssertionSignatureMessage, ClientDataType, coseAlgorithmES256, coseAlgorithmRS256, COSEKeyType, } from "@oslojs/webauthn";
14
+ import { p256, verifyECDSASignature, decodeSEC1PublicKey, decodePKIXECDSASignature, } from "@oslojs/crypto/ecdsa";
15
+ import { RSAPublicKey, sha256ObjectIdentifier, verifyRSASSAPKCS1v15Signature, } from "@oslojs/crypto/rsa";
16
+ import { sha256 } from "@oslojs/crypto/sha2";
17
+ import { encodeBase64urlNoPadding, decodeBase64urlIgnorePadding, } from "@oslojs/encoding";
18
+ import { callSignIn, callVerifier } from "./mutations/index.js";
19
+ import { callVerifierSignature } from "./mutations/verifierSignature.js";
20
+ import { authDb } from "./db.js";
21
+ /**
22
+ * Resolve passkey relying party options from provider config and environment.
23
+ */
24
+ function resolveRpOptions(provider) {
25
+ // WebAuthn RP ID and origin must match the *frontend* domain, not the
26
+ // Convex backend. SITE_URL is the canonical frontend URL
27
+ // (e.g. "http://localhost:3000" in dev, "https://myapp.com" in prod).
28
+ // CONVEX_SITE_URL points to the Convex cloud HTTP actions endpoint and
29
+ // must NOT be used here — the browser would reject the credential
30
+ // because the RP ID wouldn't match the page origin.
31
+ const siteUrl = process.env.SITE_URL;
32
+ if (!siteUrl && !provider.options.rpId) {
33
+ throw new Error("Passkey provider requires SITE_URL env var (your frontend URL) " +
34
+ "or explicit rpId / origin in the provider config. " +
35
+ "CONVEX_SITE_URL cannot be used because WebAuthn RP ID must match the frontend domain.");
36
+ }
37
+ const siteHostname = siteUrl ? new URL(siteUrl).hostname : undefined;
38
+ return {
39
+ rpName: provider.options.rpName ?? siteHostname ?? "localhost",
40
+ rpId: provider.options.rpId ?? siteHostname ?? "localhost",
41
+ origin: provider.options.origin ?? siteUrl ?? "http://localhost",
42
+ attestation: provider.options.attestation ?? "none",
43
+ userVerification: provider.options.userVerification ?? "required",
44
+ residentKey: provider.options.residentKey ?? "preferred",
45
+ authenticatorAttachment: provider.options.authenticatorAttachment,
46
+ algorithms: provider.options.algorithms ?? [coseAlgorithmES256, coseAlgorithmRS256],
47
+ challengeExpirationMs: provider.options.challengeExpirationMs ?? 300_000,
48
+ };
49
+ }
50
+ /**
51
+ * Generate a cryptographically random challenge.
52
+ */
53
+ function generateChallenge() {
54
+ const challenge = new Uint8Array(32);
55
+ crypto.getRandomValues(challenge);
56
+ return challenge;
57
+ }
58
+ /**
59
+ * Hash a challenge for storage in the verifier table's `signature` field.
60
+ */
61
+ function hashChallenge(challenge) {
62
+ return encodeBase64urlNoPadding(new Uint8Array(sha256(challenge)));
63
+ }
64
+ // ============================================================================
65
+ // Registration flow
66
+ // ============================================================================
67
+ /**
68
+ * Phase 1: Generate registration options.
69
+ *
70
+ * Requires an authenticated user — passkey registration always adds a
71
+ * credential to an existing account. The userId is taken from the
72
+ * current session identity.
73
+ */
74
+ async function handleRegisterOptions(ctx, provider, params) {
75
+ // Passkey registration requires an authenticated user
76
+ const identity = await ctx.auth.getUserIdentity();
77
+ if (identity === null) {
78
+ throw new Error("Passkey registration requires an authenticated user. " +
79
+ "Sign in first, then add a passkey to your account.");
80
+ }
81
+ const [userId] = identity.subject.split("|");
82
+ const rp = resolveRpOptions(provider);
83
+ const challenge = generateChallenge();
84
+ const challengeHash = hashChallenge(challenge);
85
+ // Store the challenge hash in the verifier table
86
+ const verifier = await callVerifier(ctx);
87
+ await callVerifierSignature(ctx, {
88
+ verifier,
89
+ signature: challengeHash,
90
+ });
91
+ // Get the user's profile for credential metadata
92
+ const user = await ctx.runQuery(ctx.auth.config.component.public.userGetById, { userId: userId });
93
+ const userName = params.userName ?? user?.email ?? "user";
94
+ const userDisplayName = params.userDisplayName ?? user?.name ?? userName;
95
+ // Collect existing credentials to prevent re-registration
96
+ let excludeCredentials = [];
97
+ const existing = await ctx.runQuery(ctx.auth.config.component.public.passkeyListByUserId, { userId: userId });
98
+ if (existing) {
99
+ excludeCredentials = existing.map((pk) => ({
100
+ id: pk.credentialId,
101
+ transports: pk.transports,
102
+ }));
103
+ }
104
+ // User handle is derived from the Convex userId
105
+ const userHandle = encodeBase64urlNoPadding(new TextEncoder().encode(userId));
106
+ const options = {
107
+ rp: {
108
+ name: rp.rpName,
109
+ id: rp.rpId,
110
+ },
111
+ user: {
112
+ id: userHandle,
113
+ name: userName,
114
+ displayName: userDisplayName,
115
+ },
116
+ challenge: encodeBase64urlNoPadding(challenge),
117
+ pubKeyCredParams: rp.algorithms.map((alg) => ({
118
+ type: "public-key",
119
+ alg,
120
+ })),
121
+ timeout: rp.challengeExpirationMs,
122
+ attestation: rp.attestation,
123
+ authenticatorSelection: {
124
+ residentKey: rp.residentKey,
125
+ requireResidentKey: rp.residentKey === "required",
126
+ userVerification: rp.userVerification,
127
+ ...(rp.authenticatorAttachment
128
+ ? { authenticatorAttachment: rp.authenticatorAttachment }
129
+ : {}),
130
+ },
131
+ excludeCredentials,
132
+ };
133
+ return { kind: "passkeyOptions", options, verifier };
134
+ }
135
+ /**
136
+ * Phase 2: Verify registration attestation and store the credential.
137
+ *
138
+ * Requires an authenticated user. Parses the attestation, verifies the
139
+ * challenge, extracts the public key, creates an account + passkey record
140
+ * linked to the current user, and returns auth tokens.
141
+ */
142
+ async function handleRegisterVerify(ctx, provider, params, verifierValue) {
143
+ // Passkey registration requires an authenticated user
144
+ const identity = await ctx.auth.getUserIdentity();
145
+ if (identity === null) {
146
+ throw new Error("Passkey registration requires an authenticated user. " +
147
+ "Sign in first, then add a passkey to your account.");
148
+ }
149
+ const [userId] = identity.subject.split("|");
150
+ const rp = resolveRpOptions(provider);
151
+ if (!verifierValue) {
152
+ throw new Error("Missing verifier for passkey registration");
153
+ }
154
+ // Decode client data
155
+ const clientDataJSON = decodeBase64urlIgnorePadding(params.clientDataJSON);
156
+ const clientData = parseClientDataJSON(clientDataJSON);
157
+ // Verify client data type is "webauthn.create"
158
+ if (clientData.type !== ClientDataType.Create) {
159
+ throw new Error("Invalid client data type: expected webauthn.create");
160
+ }
161
+ // Verify origin
162
+ const allowedOrigins = Array.isArray(rp.origin) ? rp.origin : [rp.origin];
163
+ if (!allowedOrigins.includes(clientData.origin)) {
164
+ throw new Error(`Invalid origin: ${clientData.origin}, expected one of: ${allowedOrigins.join(", ")}`);
165
+ }
166
+ // Verify challenge matches the stored verifier
167
+ const challengeHash = encodeBase64urlNoPadding(new Uint8Array(sha256(clientData.challenge)));
168
+ const verifierDoc = await ctx.runQuery(ctx.auth.config.component.public.verifierGetById, { verifierId: verifierValue });
169
+ if (!verifierDoc || verifierDoc.signature !== challengeHash) {
170
+ throw new Error("Invalid or expired challenge");
171
+ }
172
+ // Clean up the verifier
173
+ await ctx.runMutation(ctx.auth.config.component.public.verifierDelete, { verifierId: verifierValue });
174
+ // Parse attestation object
175
+ const attestationObjectBytes = decodeBase64urlIgnorePadding(params.attestationObject);
176
+ const attestation = parseAttestationObject(attestationObjectBytes);
177
+ const authenticatorData = attestation.authenticatorData;
178
+ // Verify RP ID hash
179
+ if (!authenticatorData.verifyRelyingPartyIdHash(rp.rpId)) {
180
+ throw new Error("Relying party ID mismatch");
181
+ }
182
+ // Verify user presence and verification flags
183
+ if (!authenticatorData.userPresent) {
184
+ throw new Error("User presence flag not set");
185
+ }
186
+ if (rp.userVerification === "required" && !authenticatorData.userVerified) {
187
+ throw new Error("User verification required but not performed");
188
+ }
189
+ // Extract credential
190
+ const credential = authenticatorData.credential;
191
+ if (!credential) {
192
+ throw new Error("No credential in attestation");
193
+ }
194
+ const credentialId = encodeBase64urlNoPadding(credential.id);
195
+ const publicKey = credential.publicKey;
196
+ // Determine algorithm and encode the public key for storage
197
+ let algorithm;
198
+ let publicKeyBytes;
199
+ if (publicKey.isAlgorithmDefined()) {
200
+ algorithm = publicKey.algorithm();
201
+ }
202
+ else {
203
+ const keyType = publicKey.type();
204
+ algorithm =
205
+ keyType === COSEKeyType.EC2
206
+ ? coseAlgorithmES256
207
+ : keyType === COSEKeyType.RSA
208
+ ? coseAlgorithmRS256
209
+ : coseAlgorithmES256;
210
+ }
211
+ if (algorithm === coseAlgorithmES256) {
212
+ const ec2 = publicKey.ec2();
213
+ // Encode as SEC1 uncompressed point (0x04 || x || y)
214
+ const xBytes = bigintToBytes(ec2.x, 32);
215
+ const yBytes = bigintToBytes(ec2.y, 32);
216
+ publicKeyBytes = new Uint8Array(65);
217
+ publicKeyBytes[0] = 0x04;
218
+ publicKeyBytes.set(xBytes, 1);
219
+ publicKeyBytes.set(yBytes, 33);
220
+ }
221
+ else if (algorithm === coseAlgorithmRS256) {
222
+ const rsa = publicKey.rsa();
223
+ const rsaPubKey = new RSAPublicKey(rsa.n, rsa.e);
224
+ publicKeyBytes = rsaPubKey.encodePKCS1();
225
+ }
226
+ else {
227
+ throw new Error(`Unsupported algorithm: ${algorithm}`);
228
+ }
229
+ const deviceType = params.deviceType ?? "single-device";
230
+ const backedUp = params.backedUp ?? false;
231
+ // Create an account record linking the passkey to the current user.
232
+ // Unlike unauthenticated flows, we don't create a new user — we
233
+ // attach the passkey credential to the existing authenticated user.
234
+ const db = authDb(ctx, ctx.auth.config);
235
+ await db.accounts.create({
236
+ userId: userId,
237
+ provider: provider.id,
238
+ providerAccountId: credentialId,
239
+ });
240
+ // Store the passkey credential
241
+ await ctx.runMutation(ctx.auth.config.component.public.passkeyInsert, {
242
+ userId: userId,
243
+ credentialId,
244
+ publicKey: publicKeyBytes.buffer.slice(publicKeyBytes.byteOffset, publicKeyBytes.byteOffset + publicKeyBytes.byteLength),
245
+ algorithm,
246
+ counter: authenticatorData.signatureCounter,
247
+ transports: params.transports,
248
+ deviceType,
249
+ backedUp,
250
+ name: params.passkeyName,
251
+ createdAt: Date.now(),
252
+ });
253
+ // Return tokens for the existing session
254
+ const signInResult = await callSignIn(ctx, {
255
+ userId: userId,
256
+ generateTokens: true,
257
+ });
258
+ return { kind: "signedIn", signedIn: signInResult };
259
+ }
260
+ // ============================================================================
261
+ // Authentication flow
262
+ // ============================================================================
263
+ /**
264
+ * Phase 3: Generate authentication options.
265
+ *
266
+ * Creates a challenge and returns PublicKeyCredentialRequestOptions.
267
+ * If an email is provided, scopes allowCredentials to that user's passkeys.
268
+ */
269
+ async function handleAuthOptions(ctx, provider, params) {
270
+ const rp = resolveRpOptions(provider);
271
+ const challenge = generateChallenge();
272
+ const challengeHash = hashChallenge(challenge);
273
+ // Store the challenge hash in the verifier table
274
+ const verifier = await callVerifier(ctx);
275
+ await callVerifierSignature(ctx, {
276
+ verifier,
277
+ signature: challengeHash,
278
+ });
279
+ // Build allowCredentials if email is provided
280
+ let allowCredentials;
281
+ if (params.email) {
282
+ // Look up user by email, then find their passkeys
283
+ const user = await ctx.runQuery(ctx.auth.config.component.public.userFindByVerifiedEmail, { email: params.email });
284
+ if (user) {
285
+ const passkeys = await ctx.runQuery(ctx.auth.config.component.public.passkeyListByUserId, { userId: user._id });
286
+ if (passkeys && passkeys.length > 0) {
287
+ allowCredentials = passkeys.map((pk) => ({
288
+ type: "public-key",
289
+ id: pk.credentialId,
290
+ transports: pk.transports,
291
+ }));
292
+ }
293
+ }
294
+ }
295
+ const options = {
296
+ challenge: encodeBase64urlNoPadding(challenge),
297
+ timeout: rp.challengeExpirationMs,
298
+ rpId: rp.rpId,
299
+ userVerification: rp.userVerification,
300
+ };
301
+ if (allowCredentials) {
302
+ options.allowCredentials = allowCredentials;
303
+ }
304
+ return { kind: "passkeyOptions", options, verifier };
305
+ }
306
+ /**
307
+ * Phase 4: Verify authentication assertion and sign in.
308
+ *
309
+ * Verifies the signature against the stored public key, checks the counter,
310
+ * and creates a session.
311
+ */
312
+ async function handleAuthVerify(ctx, provider, params, verifierValue) {
313
+ const rp = resolveRpOptions(provider);
314
+ if (!verifierValue) {
315
+ throw new Error("Missing verifier for passkey authentication");
316
+ }
317
+ // Decode client data
318
+ const clientDataJSON = decodeBase64urlIgnorePadding(params.clientDataJSON);
319
+ const clientData = parseClientDataJSON(clientDataJSON);
320
+ // Verify client data type is "webauthn.get"
321
+ if (clientData.type !== ClientDataType.Get) {
322
+ throw new Error("Invalid client data type: expected webauthn.get");
323
+ }
324
+ // Verify origin
325
+ const allowedOrigins = Array.isArray(rp.origin) ? rp.origin : [rp.origin];
326
+ if (!allowedOrigins.includes(clientData.origin)) {
327
+ throw new Error(`Invalid origin: ${clientData.origin}, expected one of: ${allowedOrigins.join(", ")}`);
328
+ }
329
+ // Verify challenge matches the stored verifier
330
+ const challengeHash = encodeBase64urlNoPadding(new Uint8Array(sha256(clientData.challenge)));
331
+ const verifierDoc = await ctx.runQuery(ctx.auth.config.component.public.verifierGetById, { verifierId: verifierValue });
332
+ if (!verifierDoc || verifierDoc.signature !== challengeHash) {
333
+ throw new Error("Invalid or expired challenge");
334
+ }
335
+ // Clean up the verifier
336
+ await ctx.runMutation(ctx.auth.config.component.public.verifierDelete, { verifierId: verifierValue });
337
+ // Look up the credential
338
+ const credentialId = params.credentialId;
339
+ if (!credentialId) {
340
+ throw new Error("Missing credential ID");
341
+ }
342
+ const passkeyDoc = await ctx.runQuery(ctx.auth.config.component.public.passkeyGetByCredentialId, { credentialId });
343
+ if (!passkeyDoc) {
344
+ throw new Error("Unknown credential");
345
+ }
346
+ const passkey = passkeyDoc;
347
+ // Parse authenticator data
348
+ const authenticatorDataBytes = decodeBase64urlIgnorePadding(params.authenticatorData);
349
+ const authenticatorData = parseAuthenticatorData(authenticatorDataBytes);
350
+ // Verify RP ID hash
351
+ if (!authenticatorData.verifyRelyingPartyIdHash(rp.rpId)) {
352
+ throw new Error("Relying party ID mismatch");
353
+ }
354
+ // Verify user presence
355
+ if (!authenticatorData.userPresent) {
356
+ throw new Error("User presence flag not set");
357
+ }
358
+ if (rp.userVerification === "required" && !authenticatorData.userVerified) {
359
+ throw new Error("User verification required but not performed");
360
+ }
361
+ // Verify signature
362
+ const signature = decodeBase64urlIgnorePadding(params.signature);
363
+ const signatureMessage = createAssertionSignatureMessage(authenticatorDataBytes, clientDataJSON);
364
+ const messageHash = sha256(signatureMessage);
365
+ const storedPublicKeyBytes = new Uint8Array(passkey.publicKey);
366
+ if (passkey.algorithm === coseAlgorithmES256) {
367
+ // EC P-256 verification
368
+ const ecPublicKey = decodeSEC1PublicKey(p256, storedPublicKeyBytes);
369
+ // WebAuthn signatures for EC keys are DER/ASN.1 (PKIX) encoded
370
+ const ecdsaSignature = decodePKIXECDSASignature(signature);
371
+ const valid = verifyECDSASignature(ecPublicKey, messageHash, ecdsaSignature);
372
+ if (!valid) {
373
+ throw new Error("Invalid signature");
374
+ }
375
+ }
376
+ else if (passkey.algorithm === coseAlgorithmRS256) {
377
+ // RSA PKCS#1 v1.5 with SHA-256 verification
378
+ // Decode the stored PKCS#1 public key
379
+ const { decodePKCS1RSAPublicKey } = await import("@oslojs/crypto/rsa");
380
+ const rsaPublicKey = decodePKCS1RSAPublicKey(storedPublicKeyBytes);
381
+ const valid = verifyRSASSAPKCS1v15Signature(rsaPublicKey, sha256ObjectIdentifier, messageHash, signature);
382
+ if (!valid) {
383
+ throw new Error("Invalid signature");
384
+ }
385
+ }
386
+ else {
387
+ throw new Error(`Unsupported algorithm: ${passkey.algorithm}`);
388
+ }
389
+ // Verify counter (clone detection)
390
+ // Counter of 0 means the authenticator doesn't support counters
391
+ if (passkey.counter !== 0 &&
392
+ authenticatorData.signatureCounter !== 0 &&
393
+ authenticatorData.signatureCounter <= passkey.counter) {
394
+ throw new Error("Authenticator counter did not increase — possible credential cloning detected");
395
+ }
396
+ // Update counter and last used timestamp
397
+ await ctx.runMutation(ctx.auth.config.component.public.passkeyUpdateCounter, {
398
+ passkeyId: passkey._id,
399
+ counter: authenticatorData.signatureCounter,
400
+ lastUsedAt: Date.now(),
401
+ });
402
+ // Sign in the user
403
+ const signInResult = await callSignIn(ctx, {
404
+ userId: passkey.userId,
405
+ generateTokens: true,
406
+ });
407
+ return { kind: "signedIn", signedIn: signInResult };
408
+ }
409
+ // ============================================================================
410
+ // Main dispatch
411
+ // ============================================================================
412
+ /**
413
+ * Main passkey handler dispatched from signIn.ts.
414
+ *
415
+ * Routes to the appropriate phase based on `params.flow`.
416
+ */
417
+ export async function handlePasskey(ctx, provider, args) {
418
+ const flow = args.params?.flow;
419
+ if (!flow) {
420
+ throw new Error("Missing `flow` parameter. Expected one of: register-options, register-verify, auth-options, auth-verify");
421
+ }
422
+ switch (flow) {
423
+ case "register-options":
424
+ return handleRegisterOptions(ctx, provider, args.params ?? {});
425
+ case "register-verify":
426
+ return handleRegisterVerify(ctx, provider, args.params ?? {}, args.verifier);
427
+ case "auth-options":
428
+ return handleAuthOptions(ctx, provider, args.params ?? {});
429
+ case "auth-verify":
430
+ return handleAuthVerify(ctx, provider, args.params ?? {}, args.verifier);
431
+ default:
432
+ throw new Error(`Unknown passkey flow: ${flow}. Expected one of: register-options, register-verify, auth-options, auth-verify`);
433
+ }
434
+ }
435
+ // ============================================================================
436
+ // Helpers
437
+ // ============================================================================
438
+ /**
439
+ * Convert a bigint to a fixed-size big-endian byte array.
440
+ */
441
+ function bigintToBytes(value, length) {
442
+ const bytes = new Uint8Array(length);
443
+ let v = value;
444
+ for (let i = length - 1; i >= 0; i--) {
445
+ bytes[i] = Number(v & 0xffn);
446
+ v >>= 8n;
447
+ }
448
+ return bytes;
449
+ }
450
+ //# sourceMappingURL=passkey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passkey.js","sourceRoot":"","sources":["../../../src/server/implementation/passkey.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"redirects.d.ts","sourceRoot":"","sources":["../../../src/server/implementation/redirects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAG3D,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,4BAA4B,EACpC,MAAM,EAAE;IAAE,UAAU,EAAE,OAAO,CAAA;CAAE,mBAahC;AAoBD,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,UAYd"}
1
+ {"version":3,"file":"redirects.d.ts","sourceRoot":"","sources":["../../../src/server/implementation/redirects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAG3D,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,4BAA4B,EACpC,MAAM,EAAE;IAAE,UAAU,EAAE,OAAO,CAAA;CAAE,mBAahC;AAaD,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,UAYd"}
@@ -10,17 +10,12 @@ export async function redirectAbsoluteUrl(config, params) {
10
10
  return siteUrl();
11
11
  }
12
12
  async function defaultRedirectCallback({ redirectTo }) {
13
- const baseUrl = siteUrl();
13
+ // Resolve relative paths against SITE_URL; absolute URLs are passed through
14
+ // as-is. The developer is trusted to provide valid redirect targets.
14
15
  if (redirectTo.startsWith("?") || redirectTo.startsWith("/")) {
15
- return `${baseUrl}${redirectTo}`;
16
+ return `${siteUrl()}${redirectTo}`;
16
17
  }
17
- if (redirectTo.startsWith(baseUrl)) {
18
- const after = redirectTo[baseUrl.length];
19
- if (after === undefined || after === "?" || after === "/") {
20
- return redirectTo;
21
- }
22
- }
23
- throw new Error(`Invalid \`redirectTo\` ${redirectTo} for configured SITE_URL: ${baseUrl.toString()}`);
18
+ return redirectTo;
24
19
  }
25
20
  // Temporary work-around because Convex doesn't support
26
21
  // schemes other than http and https.
@@ -1 +1 @@
1
- {"version":3,"file":"redirects.js","sourceRoot":"","sources":["../../../src/server/implementation/redirects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAoC,EACpC,MAA+B;IAE/B,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACpC,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CACb,+CAA+C,MAAM,CAAC,UAAiB,EAAE,CAC1E,CAAC;QACJ,CAAC;QACD,MAAM,gBAAgB,GACpB,MAAM,CAAC,SAAS,EAAE,QAAQ,IAAI,uBAAuB,CAAC;QACxD,OAAO,MAAM,gBAAgB,CAAC,MAAgC,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,OAAO,EAAE,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,EAAE,UAAU,EAA0B;IAC3E,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC;IAC1B,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7D,OAAO,GAAG,OAAO,GAAG,UAAU,EAAE,CAAC;IACnC,CAAC;IACD,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAC1D,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CACb,0BAA0B,UAAU,6BAA6B,OAAO,CAAC,QAAQ,EAAE,EAAE,CACtF,CAAC;AACJ,CAAC;AAED,uDAAuD;AACvD,qCAAqC;AACrC,MAAM,UAAU,iBAAiB,CAC/B,WAAmB,EACnB,KAAa,EACb,KAAa;IAEb,MAAM,OAAO,GAAG,cAAc,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC;IACrD,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,QAAQ,WAAW,CAAC,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAC9D,CAAC;IACF,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,AAAD,EAAG,SAAS,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC;IACvD,OAAO,GAAG,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC3G,CAAC;AAED,SAAS,OAAO;IACd,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"redirects.js","sourceRoot":"","sources":["../../../src/server/implementation/redirects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAoC,EACpC,MAA+B;IAE/B,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACpC,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CACb,+CAA+C,MAAM,CAAC,UAAiB,EAAE,CAC1E,CAAC;QACJ,CAAC;QACD,MAAM,gBAAgB,GACpB,MAAM,CAAC,SAAS,EAAE,QAAQ,IAAI,uBAAuB,CAAC;QACxD,OAAO,MAAM,gBAAgB,CAAC,MAAgC,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,OAAO,EAAE,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,EAAE,UAAU,EAA0B;IAC3E,4EAA4E;IAC5E,qEAAqE;IACrE,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7D,OAAO,GAAG,OAAO,EAAE,GAAG,UAAU,EAAE,CAAC;IACrC,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,uDAAuD;AACvD,qCAAqC;AACrC,MAAM,UAAU,iBAAiB,CAC/B,WAAmB,EACnB,KAAa,EACb,KAAa;IAEb,MAAM,OAAO,GAAG,cAAc,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC;IACrD,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,QAAQ,WAAW,CAAC,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAC9D,CAAC;IACF,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,AAAD,EAAG,SAAS,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC;IACvD,OAAO,GAAG,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC3G,CAAC;AAED,SAAS,OAAO;IACd,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC"}
@@ -15,27 +15,9 @@ export declare function generateTokensForSession(ctx: MutationCtx, config: Conve
15
15
  }>;
16
16
  export declare function deleteSession(ctx: MutationCtx, session: Doc<"session">, config: ConvexAuthConfig): Promise<void>;
17
17
  /**
18
- * Return the current session ID.
18
+ * Return the current session ID from the auth identity subject.
19
19
  *
20
- * ```ts filename="convex/myFunctions.tsx"
21
- * import { mutation } from "./_generated/server";
22
- * import { getAuthSessionId } from "@robelest/convex-auth/component";
23
- *
24
- * export const doSomething = mutation({
25
- * args: {/* ... *\/},
26
- * handler: async (ctx, args) => {
27
- * const sessionId = await getAuthSessionId(ctx);
28
- * if (sessionId === null) {
29
- * throw new Error("Client is not authenticated!")
30
- * }
31
- * const session = await ctx.db.get(sessionId);
32
- * // ...
33
- * },
34
- * });
35
- * ```
36
- *
37
- * @param ctx query, mutation or action `ctx`
38
- * @returns the session ID or `null` if the client isn't authenticated
20
+ * Internal helper used by auth runtime internals and `auth.session.current`.
39
21
  */
40
22
  export declare function getAuthSessionId(ctx: {
41
23
  auth: Auth;
@@ -1 +1 @@
1
- {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../src/server/implementation/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAkBrC,wBAAsB,6BAA6B,CACjD,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,EACzB,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,EAC/B,cAAc,EAAE,OAAO,GACtB,OAAO,CAAC,WAAW,CAAC,CAatB;AAED,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,iCAW1B;AAED,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE;IACJ,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1B,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAChC,oBAAoB,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IAChD,oBAAoB,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;CACjD;;;GAoBF;AAgBD,wBAAsB,aAAa,CACjC,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,EACvB,MAAM,EAAE,gBAAgB,iBAIzB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,wCAOzD"}
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../src/server/implementation/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAkBrC,wBAAsB,6BAA6B,CACjD,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,EACzB,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,EAC/B,cAAc,EAAE,OAAO,GACtB,OAAO,CAAC,WAAW,CAAC,CAatB;AAED,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,iCAW1B;AAED,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE;IACJ,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1B,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAChC,oBAAoB,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IAChD,oBAAoB,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;CACjD;;;GAoBF;AAgBD,wBAAsB,aAAa,CACjC,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,EACvB,MAAM,EAAE,gBAAgB,iBAIzB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,wCAOzD"}
@@ -52,27 +52,9 @@ export async function deleteSession(ctx, session, config) {
52
52
  await deleteAllRefreshTokens(ctx, session._id, config);
53
53
  }
54
54
  /**
55
- * Return the current session ID.
55
+ * Return the current session ID from the auth identity subject.
56
56
  *
57
- * ```ts filename="convex/myFunctions.tsx"
58
- * import { mutation } from "./_generated/server";
59
- * import { getAuthSessionId } from "@robelest/convex-auth/component";
60
- *
61
- * export const doSomething = mutation({
62
- * args: {/* ... *\/},
63
- * handler: async (ctx, args) => {
64
- * const sessionId = await getAuthSessionId(ctx);
65
- * if (sessionId === null) {
66
- * throw new Error("Client is not authenticated!")
67
- * }
68
- * const session = await ctx.db.get(sessionId);
69
- * // ...
70
- * },
71
- * });
72
- * ```
73
- *
74
- * @param ctx query, mutation or action `ctx`
75
- * @returns the session ID or `null` if the client isn't authenticated
57
+ * Internal helper used by auth runtime internals and `auth.session.current`.
76
58
  */
77
59
  export async function getAuthSessionId(ctx) {
78
60
  const identity = await ctx.auth.getUserIdentity();
@@ -1 +1 @@
1
- {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../src/server/implementation/sessions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../src/server/implementation/sessions.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,UAAU,EACV,uBAAuB,EACvB,YAAY,EACZ,WAAW,EACX,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,MAAM,iCAAiC,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU;AAE9E,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,GAAgB,EAChB,MAAwB,EACxB,MAAyB,EACzB,SAA+B,EAC/B,cAAuB;IAEvB,OAAO;QACL,MAAM;QACN,SAAS;QACT,MAAM,EAAE,cAAc;YACpB,CAAC,CAAC,MAAM,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE;gBAC1C,MAAM;gBACN,SAAS;gBACT,oBAAoB,EAAE,IAAI;gBAC1B,oBAAoB,EAAE,IAAI;aAC3B,CAAC;YACJ,CAAC,CAAC,IAAI;KACT,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,GAAgB,EAChB,MAAwB,EACxB,MAAyB;IAEzB,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,iBAAiB,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACtD,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;QAC/B,MAAM,eAAe,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACrE,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;YAC7B,MAAM,aAAa,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IACD,OAAO,MAAM,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,GAAgB,EAChB,MAAwB,EACxB,IAKC;IAED,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IAC/D,MAAM,cAAc,GAClB,IAAI,CAAC,oBAAoB;QACzB,CAAC,MAAM,kBAAkB,CACvB,GAAG,EACH,MAAM,EACN,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,oBAAoB,CAC1B,CAAC,CAAC;IACL,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,MAAM,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC;QACvC,YAAY,EAAE,kBAAkB,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC;KACjE,CAAC;IACF,YAAY,CACV,UAAU,CAAC,KAAK,EAChB,mBAAmB,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,WAAW,CAAC,cAAc,CAAC,gBAAgB,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAC3I,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,GAAgB,EAChB,MAAyB,EACzB,MAAwB;IAExB,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,cAAc,GAClB,IAAI,CAAC,GAAG,EAAE;QACV,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe;YAC9B,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;YAC1D,iCAAiC,CAAC,CAAC;IACvC,OAAO,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAyB,CAAC;AACpF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAgB,EAChB,OAAuB,EACvB,MAAwB;IAExB,MAAM,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvD,MAAM,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACzD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAmB;IACxD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;IAClD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,CAAC,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACtE,OAAO,SAAiC,CAAC;AAC3C,CAAC"}
@@ -26,6 +26,19 @@ export declare function signInImpl(ctx: EnrichedActionCtx, provider: AuthProvide
26
26
  kind: "redirect";
27
27
  redirect: string;
28
28
  verifier: string;
29
+ } | {
30
+ kind: "passkeyOptions";
31
+ options: Record<string, any>;
32
+ verifier: string;
33
+ } | {
34
+ kind: "totpRequired";
35
+ verifier: string;
36
+ } | {
37
+ kind: "totpSetup";
38
+ uri: string;
39
+ secret: string;
40
+ verifier: string;
41
+ totpId: string;
29
42
  }>;
30
43
  export {};
31
44
  //# sourceMappingURL=signIn.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signIn.d.ts","sourceRoot":"","sources":["../../../src/server/implementation/signIn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EACL,8BAA8B,EAG9B,8BAA8B,EAE/B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,aAAa,EACb,WAAW,EAEX,MAAM,EACP,MAAM,YAAY,CAAC;AAepB,KAAK,iBAAiB,GAAG,8BAA8B,CAAC,aAAa,CAAC,CAAC;AAEvE,wBAAsB,UAAU,CAC9B,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,8BAA8B,GAAG,IAAI,EAC/C,IAAI,EAAE;IACJ,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,EACD,OAAO,EAAE;IACP,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,EAAE,OAAO,CAAC;CAC9B,GACA,OAAO,CACN;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,GAElD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAEvD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,GAElC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAC3D,CAsCA"}
1
+ {"version":3,"file":"signIn.d.ts","sourceRoot":"","sources":["../../../src/server/implementation/signIn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EACL,8BAA8B,EAG9B,8BAA8B,EAI/B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,aAAa,EACb,WAAW,EAEX,MAAM,EACP,MAAM,YAAY,CAAC;AAkBpB,KAAK,iBAAiB,GAAG,8BAA8B,CAAC,aAAa,CAAC,CAAC;AAEvE,wBAAsB,UAAU,CAC9B,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,8BAA8B,GAAG,IAAI,EAC/C,IAAI,EAAE;IACJ,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,EACD,OAAO,EAAE;IACP,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,EAAE,OAAO,CAAC;CAC9B,GACA,OAAO,CACN;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,GAElD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAEvD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,GAElC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAExD;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAE1E;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAE1C;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CACvF,CA4CA"}