@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.
- package/dist/bin.cjs +466 -63
- package/dist/client/index.d.ts +211 -30
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +673 -59
- package/dist/client/index.js.map +1 -1
- package/dist/component/_generated/api.d.ts +56 -1
- package/dist/component/_generated/api.d.ts.map +1 -1
- package/dist/component/_generated/api.js.map +1 -1
- package/dist/component/_generated/component.d.ts +93 -3
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/convex.config.d.ts.map +1 -1
- package/dist/component/convex.config.js +2 -0
- package/dist/component/convex.config.js.map +1 -1
- package/dist/component/index.d.ts +5 -3
- package/dist/component/index.d.ts.map +1 -1
- package/dist/component/index.js +5 -3
- package/dist/component/index.js.map +1 -1
- package/dist/component/portalBridge.d.ts +80 -0
- package/dist/component/portalBridge.d.ts.map +1 -0
- package/dist/component/portalBridge.js +102 -0
- package/dist/component/portalBridge.js.map +1 -0
- package/dist/component/public.d.ts +193 -9
- package/dist/component/public.d.ts.map +1 -1
- package/dist/component/public.js +204 -33
- package/dist/component/public.js.map +1 -1
- package/dist/component/schema.d.ts +89 -9
- package/dist/component/schema.d.ts.map +1 -1
- package/dist/component/schema.js +68 -7
- package/dist/component/schema.js.map +1 -1
- package/dist/providers/{Anonymous.d.ts → anonymous.d.ts} +8 -8
- package/dist/providers/{Anonymous.d.ts.map → anonymous.d.ts.map} +1 -1
- package/dist/providers/{Anonymous.js → anonymous.js} +9 -10
- package/dist/providers/anonymous.js.map +1 -0
- package/dist/providers/{ConvexCredentials.d.ts → credentials.d.ts} +11 -11
- package/dist/providers/credentials.d.ts.map +1 -0
- package/dist/providers/{ConvexCredentials.js → credentials.js} +8 -8
- package/dist/providers/credentials.js.map +1 -0
- package/dist/providers/{Email.d.ts → email.d.ts} +6 -6
- package/dist/providers/email.d.ts.map +1 -0
- package/dist/providers/{Email.js → email.js} +6 -6
- package/dist/providers/email.js.map +1 -0
- package/dist/providers/passkey.d.ts +20 -0
- package/dist/providers/passkey.d.ts.map +1 -0
- package/dist/providers/passkey.js +32 -0
- package/dist/providers/passkey.js.map +1 -0
- package/dist/providers/{Password.d.ts → password.d.ts} +10 -10
- package/dist/providers/{Password.d.ts.map → password.d.ts.map} +1 -1
- package/dist/providers/{Password.js → password.js} +19 -20
- package/dist/providers/password.js.map +1 -0
- package/dist/providers/{Phone.d.ts → phone.d.ts} +3 -3
- package/dist/providers/{Phone.d.ts.map → phone.d.ts.map} +1 -1
- package/dist/providers/{Phone.js → phone.js} +3 -3
- package/dist/providers/{Phone.js.map → phone.js.map} +1 -1
- package/dist/providers/totp.d.ts +14 -0
- package/dist/providers/totp.d.ts.map +1 -0
- package/dist/providers/totp.js +23 -0
- package/dist/providers/totp.js.map +1 -0
- package/dist/server/convex-auth.d.ts +243 -0
- package/dist/server/convex-auth.d.ts.map +1 -0
- package/dist/server/convex-auth.js +365 -0
- package/dist/server/convex-auth.js.map +1 -0
- package/dist/server/implementation/index.d.ts +153 -166
- package/dist/server/implementation/index.d.ts.map +1 -1
- package/dist/server/implementation/index.js +162 -105
- package/dist/server/implementation/index.js.map +1 -1
- package/dist/server/implementation/passkey.d.ts +33 -0
- package/dist/server/implementation/passkey.d.ts.map +1 -0
- package/dist/server/implementation/passkey.js +450 -0
- package/dist/server/implementation/passkey.js.map +1 -0
- package/dist/server/implementation/redirects.d.ts.map +1 -1
- package/dist/server/implementation/redirects.js +4 -9
- package/dist/server/implementation/redirects.js.map +1 -1
- package/dist/server/implementation/sessions.d.ts +2 -20
- package/dist/server/implementation/sessions.d.ts.map +1 -1
- package/dist/server/implementation/sessions.js +2 -20
- package/dist/server/implementation/sessions.js.map +1 -1
- package/dist/server/implementation/signIn.d.ts +13 -0
- package/dist/server/implementation/signIn.d.ts.map +1 -1
- package/dist/server/implementation/signIn.js +26 -1
- package/dist/server/implementation/signIn.js.map +1 -1
- package/dist/server/implementation/totp.d.ts +40 -0
- package/dist/server/implementation/totp.d.ts.map +1 -0
- package/dist/server/implementation/totp.js +211 -0
- package/dist/server/implementation/totp.js.map +1 -0
- package/dist/server/index.d.ts +18 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +255 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/portal-email.d.ts +19 -0
- package/dist/server/portal-email.d.ts.map +1 -0
- package/dist/server/portal-email.js +89 -0
- package/dist/server/portal-email.js.map +1 -0
- package/dist/server/portal.d.ts +116 -0
- package/dist/server/portal.d.ts.map +1 -0
- package/dist/server/portal.js +294 -0
- package/dist/server/portal.js.map +1 -0
- package/dist/server/provider_utils.d.ts +1 -1
- package/dist/server/provider_utils.d.ts.map +1 -1
- package/dist/server/provider_utils.js +39 -1
- package/dist/server/provider_utils.js.map +1 -1
- package/dist/server/types.d.ts +128 -11
- package/dist/server/types.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/cli/index.ts +48 -6
- package/src/cli/portal-link.ts +112 -0
- package/src/cli/portal-upload.ts +411 -0
- package/src/client/index.ts +823 -109
- package/src/component/_generated/api.ts +72 -1
- package/src/component/_generated/component.ts +180 -4
- package/src/component/convex.config.ts +3 -0
- package/src/component/index.ts +5 -10
- package/src/component/portalBridge.ts +116 -0
- package/src/component/public.ts +231 -37
- package/src/component/schema.ts +70 -7
- package/src/providers/{Anonymous.ts → anonymous.ts} +10 -11
- package/src/providers/{ConvexCredentials.ts → credentials.ts} +11 -11
- package/src/providers/{Email.ts → email.ts} +5 -5
- package/src/providers/passkey.ts +35 -0
- package/src/providers/{Password.ts → password.ts} +22 -27
- package/src/providers/{Phone.ts → phone.ts} +2 -2
- package/src/providers/totp.ts +26 -0
- package/src/server/convex-auth.ts +470 -0
- package/src/server/implementation/index.ts +228 -239
- package/src/server/implementation/passkey.ts +650 -0
- package/src/server/implementation/redirects.ts +4 -11
- package/src/server/implementation/sessions.ts +2 -20
- package/src/server/implementation/signIn.ts +39 -1
- package/src/server/implementation/totp.ts +366 -0
- package/src/server/index.ts +373 -0
- package/src/server/portal-email.ts +95 -0
- package/src/server/portal.ts +375 -0
- package/src/server/provider_utils.ts +42 -1
- package/src/server/types.ts +161 -10
- package/dist/providers/Anonymous.js.map +0 -1
- package/dist/providers/ConvexCredentials.d.ts.map +0 -1
- package/dist/providers/ConvexCredentials.js.map +0 -1
- package/dist/providers/Email.d.ts.map +0 -1
- package/dist/providers/Email.js.map +0 -1
- package/dist/providers/Password.js.map +0 -1
- package/providers/Anonymous/package.json +0 -6
- package/providers/ConvexCredentials/package.json +0 -6
- package/providers/Email/package.json +0 -6
- package/providers/Password/package.json +0 -6
- package/providers/Phone/package.json +0 -6
- 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":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,+BAA+B,EAC/B,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAEL,IAAI,EACJ,oBAAoB,EACpB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EACL,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,kBAAkB,CAAC;AAM1B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAKjC;;GAEG;AACH,SAAS,gBAAgB,CAAC,QAA+B;IACvD,sEAAsE;IACtE,0DAA0D;IAC1D,sEAAsE;IACtE,uEAAuE;IACvE,kEAAkE;IAClE,oDAAoD;IACpD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IACrC,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CACb,iEAAiE;YACjE,oDAAoD;YACpD,uFAAuF,CACxF,CAAC;IACJ,CAAC;IACD,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAErE,OAAO;QACL,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,IAAI,YAAY,IAAI,WAAW;QAC9D,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,YAAY,IAAI,WAAW;QAC1D,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,IAAI,kBAAkB;QAChE,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,WAAW,IAAI,MAAM;QACnD,gBAAgB,EAAE,QAAQ,CAAC,OAAO,CAAC,gBAAgB,IAAI,UAAU;QACjE,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,WAAW,IAAI,WAAW;QACxD,uBAAuB,EAAE,QAAQ,CAAC,OAAO,CAAC,uBAAuB;QACjE,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;QACnF,qBAAqB,EAAE,QAAQ,CAAC,OAAO,CAAC,qBAAqB,IAAI,OAAO;KACzE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB;IACxB,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAClC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,SAAqB;IAC1C,OAAO,wBAAwB,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;;;;;GAMG;AACH,KAAK,UAAU,qBAAqB,CAClC,GAAsB,EACtB,QAA+B,EAC/B,MAA2B;IAM3B,sDAAsD;IACtD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;IAClD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,uDAAuD;YACvD,oDAAoD,CACrD,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE7C,MAAM,EAAE,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;IACtC,MAAM,aAAa,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAE/C,iDAAiD;IACjD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,qBAAqB,CAAC,GAAG,EAAE;QAC/B,QAAQ;QACR,SAAS,EAAE,aAAa;KACzB,CAAC,CAAC;IAEH,iDAAiD;IACjD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,QAAQ,CAC7B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAC5C,EAAE,MAAM,EAAE,MAAO,EAAE,CACpB,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAK,IAAY,EAAE,KAAK,IAAI,MAAM,CAAC;IACnE,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAK,IAAY,EAAE,IAAI,IAAI,QAAQ,CAAC;IAElF,0DAA0D;IAC1D,IAAI,kBAAkB,GAAiD,EAAE,CAAC;IAC1E,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,QAAQ,CACjC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,EACpD,EAAE,MAAM,EAAE,MAAO,EAAE,CACpB,CAAC;IACF,IAAI,QAAQ,EAAE,CAAC;QACb,kBAAkB,GAAI,QAAkB,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,CAAC;YACzD,EAAE,EAAE,EAAE,CAAC,YAAY;YACnB,UAAU,EAAE,EAAE,CAAC,UAAU;SAC1B,CAAC,CAAC,CAAC;IACN,CAAC;IAED,gDAAgD;IAChD,MAAM,UAAU,GAAG,wBAAwB,CACzC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAO,CAAC,CAClC,CAAC;IAEF,MAAM,OAAO,GAAG;QACd,EAAE,EAAE;YACF,IAAI,EAAE,EAAE,CAAC,MAAM;YACf,EAAE,EAAE,EAAE,CAAC,IAAI;SACZ;QACD,IAAI,EAAE;YACJ,EAAE,EAAE,UAAU;YACd,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,eAAe;SAC7B;QACD,SAAS,EAAE,wBAAwB,CAAC,SAAS,CAAC;QAC9C,gBAAgB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC5C,IAAI,EAAE,YAAqB;YAC3B,GAAG;SACJ,CAAC,CAAC;QACH,OAAO,EAAE,EAAE,CAAC,qBAAqB;QACjC,WAAW,EAAE,EAAE,CAAC,WAAW;QAC3B,sBAAsB,EAAE;YACtB,WAAW,EAAE,EAAE,CAAC,WAAW;YAC3B,kBAAkB,EAAE,EAAE,CAAC,WAAW,KAAK,UAAU;YACjD,gBAAgB,EAAE,EAAE,CAAC,gBAAgB;YACrC,GAAG,CAAC,EAAE,CAAC,uBAAuB;gBAC5B,CAAC,CAAC,EAAE,uBAAuB,EAAE,EAAE,CAAC,uBAAuB,EAAE;gBACzD,CAAC,CAAC,EAAE,CAAC;SACR;QACD,kBAAkB;KACnB,CAAC;IAEF,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AACvD,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,oBAAoB,CACjC,GAAsB,EACtB,QAA+B,EAC/B,MAA2B,EAC3B,aAAiC;IAEjC,sDAAsD;IACtD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;IAClD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,uDAAuD;YACvD,oDAAoD,CACrD,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE7C,MAAM,EAAE,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAEtC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,qBAAqB;IACrB,MAAM,cAAc,GAAG,4BAA4B,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAEvD,+CAA+C;IAC/C,IAAI,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,MAAM,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IAED,gBAAgB;IAChB,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAC1E,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CACb,mBAAmB,UAAU,CAAC,MAAM,sBAAsB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtF,CAAC;IACJ,CAAC;IAED,+CAA+C;IAC/C,MAAM,aAAa,GAAG,wBAAwB,CAC5C,IAAI,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAC7C,CAAC;IACF,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,QAAQ,CACpC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,EAChD,EAAE,UAAU,EAAE,aAAa,EAAE,CAC9B,CAAC;IACF,IAAI,CAAC,WAAW,IAAK,WAAmB,CAAC,SAAS,KAAK,aAAa,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,wBAAwB;IACxB,MAAM,GAAG,CAAC,WAAW,CACnB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,EAC/C,EAAE,UAAU,EAAE,aAAa,EAAE,CAC9B,CAAC;IAEF,2BAA2B;IAC3B,MAAM,sBAAsB,GAAG,4BAA4B,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACtF,MAAM,WAAW,GAAG,sBAAsB,CAAC,sBAAsB,CAAC,CAAC;IACnE,MAAM,iBAAiB,GAAG,WAAW,CAAC,iBAAiB,CAAC;IAExD,oBAAoB;IACpB,IAAI,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,8CAA8C;IAC9C,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,EAAE,CAAC,gBAAgB,KAAK,UAAU,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,qBAAqB;IACrB,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC;IAChD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,YAAY,GAAG,wBAAwB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;IAEvC,4DAA4D;IAC5D,IAAI,SAAiB,CAAC;IACtB,IAAI,cAA0B,CAAC;IAE/B,IAAI,SAAS,CAAC,kBAAkB,EAAE,EAAE,CAAC;QACnC,SAAS,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;QACjC,SAAS;YACP,OAAO,KAAK,WAAW,CAAC,GAAG;gBACzB,CAAC,CAAC,kBAAkB;gBACpB,CAAC,CAAC,OAAO,KAAK,WAAW,CAAC,GAAG;oBAC3B,CAAC,CAAC,kBAAkB;oBACpB,CAAC,CAAC,kBAAkB,CAAC;IAC7B,CAAC;IAED,IAAI,SAAS,KAAK,kBAAkB,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC;QAC5B,qDAAqD;QACrD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,cAAc,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QACpC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACzB,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC9B,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjC,CAAC;SAAM,IAAI,SAAS,KAAK,kBAAkB,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACjD,cAAc,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,0BAA0B,SAAS,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,eAAe,CAAC;IACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC;IAE1C,oEAAoE;IACpE,gEAAgE;IAChE,oEAAoE;IACpE,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACvB,MAAM,EAAE,MAAO;QACf,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,iBAAiB,EAAE,YAAY;KAChC,CAAC,CAAC;IAEH,+BAA+B;IAC/B,MAAM,GAAG,CAAC,WAAW,CACnB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,EAC9C;QACE,MAAM,EAAE,MAAO;QACf,YAAY;QACZ,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,KAAK,CACpC,cAAc,CAAC,UAAU,EACzB,cAAc,CAAC,UAAU,GAAG,cAAc,CAAC,UAAU,CACtD;QACD,SAAS;QACT,OAAO,EAAE,iBAAiB,CAAC,gBAAgB;QAC3C,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU;QACV,QAAQ;QACR,IAAI,EAAE,MAAM,CAAC,WAAW;QACxB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CACF,CAAC;IAEF,yCAAyC;IACzC,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE;QACzC,MAAM,EAAE,MAAO;QACf,cAAc,EAAE,IAAI;KACrB,CAAC,CAAC;IAEH,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AACtD,CAAC;AAED,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E;;;;;GAKG;AACH,KAAK,UAAU,iBAAiB,CAC9B,GAAsB,EACtB,QAA+B,EAC/B,MAA2B;IAM3B,MAAM,EAAE,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;IACtC,MAAM,aAAa,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAE/C,iDAAiD;IACjD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,qBAAqB,CAAC,GAAG,EAAE;QAC/B,QAAQ;QACR,SAAS,EAAE,aAAa;KACzB,CAAC,CAAC;IAEH,8CAA8C;IAC9C,IAAI,gBAAwF,CAAC;IAC7F,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,kDAAkD;QAClD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,QAAQ,CAC7B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,uBAAuB,EACxD,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CACxB,CAAC;QACF,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,QAAQ,CACjC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,EACpD,EAAE,MAAM,EAAG,IAAY,CAAC,GAAG,EAAE,CAC9B,CAAC;YACF,IAAI,QAAQ,IAAK,QAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/C,gBAAgB,GAAI,QAAkB,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,CAAC;oBACvD,IAAI,EAAE,YAAY;oBAClB,EAAE,EAAE,EAAE,CAAC,YAAY;oBACnB,UAAU,EAAE,EAAE,CAAC,UAAU;iBAC1B,CAAC,CAAC,CAAC;YACN,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAwB;QACnC,SAAS,EAAE,wBAAwB,CAAC,SAAS,CAAC;QAC9C,OAAO,EAAE,EAAE,CAAC,qBAAqB;QACjC,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,gBAAgB,EAAE,EAAE,CAAC,gBAAgB;KACtC,CAAC;IAEF,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC9C,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AACvD,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,gBAAgB,CAC7B,GAAsB,EACtB,QAA+B,EAC/B,MAA2B,EAC3B,aAAiC;IAEjC,MAAM,EAAE,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAEtC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,qBAAqB;IACrB,MAAM,cAAc,GAAG,4BAA4B,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAEvD,4CAA4C;IAC5C,IAAI,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,GAAG,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAED,gBAAgB;IAChB,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAC1E,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CACb,mBAAmB,UAAU,CAAC,MAAM,sBAAsB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtF,CAAC;IACJ,CAAC;IAED,+CAA+C;IAC/C,MAAM,aAAa,GAAG,wBAAwB,CAC5C,IAAI,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAC7C,CAAC;IACF,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,QAAQ,CACpC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,EAChD,EAAE,UAAU,EAAE,aAAa,EAAE,CAC9B,CAAC;IACF,IAAI,CAAC,WAAW,IAAK,WAAmB,CAAC,SAAS,KAAK,aAAa,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,wBAAwB;IACxB,MAAM,GAAG,CAAC,WAAW,CACnB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,EAC/C,EAAE,UAAU,EAAE,aAAa,EAAE,CAC9B,CAAC;IAEF,yBAAyB;IACzB,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IACzC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,QAAQ,CACnC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,EACzD,EAAE,YAAY,EAAE,CACjB,CAAC;IACF,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IACD,MAAM,OAAO,GAAG,UAAiB,CAAC;IAElC,2BAA2B;IAC3B,MAAM,sBAAsB,GAAG,4BAA4B,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACtF,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,sBAAsB,CAAC,CAAC;IAEzE,oBAAoB;IACpB,IAAI,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,uBAAuB;IACvB,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,EAAE,CAAC,gBAAgB,KAAK,UAAU,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,mBAAmB;IACnB,MAAM,SAAS,GAAG,4BAA4B,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACjE,MAAM,gBAAgB,GAAG,+BAA+B,CACtD,sBAAsB,EACtB,cAAc,CACf,CAAC;IACF,MAAM,WAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAE7C,MAAM,oBAAoB,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAE/D,IAAI,OAAO,CAAC,SAAS,KAAK,kBAAkB,EAAE,CAAC;QAC7C,wBAAwB;QACxB,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;QACpE,+DAA+D;QAC/D,MAAM,cAAc,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,oBAAoB,CAChC,WAAW,EACX,WAAW,EACX,cAAc,CACf,CAAC;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,CAAC,SAAS,KAAK,kBAAkB,EAAE,CAAC;QACpD,4CAA4C;QAC5C,sCAAsC;QACtC,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACvE,MAAM,YAAY,GAAG,uBAAuB,CAAC,oBAAoB,CAAC,CAAC;QACnE,MAAM,KAAK,GAAG,6BAA6B,CACzC,YAAY,EACZ,sBAAsB,EACtB,WAAW,EACX,SAAS,CACV,CAAC;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,0BAA0B,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,mCAAmC;IACnC,gEAAgE;IAChE,IACE,OAAO,CAAC,OAAO,KAAK,CAAC;QACrB,iBAAiB,CAAC,gBAAgB,KAAK,CAAC;QACxC,iBAAiB,CAAC,gBAAgB,IAAI,OAAO,CAAC,OAAO,EACrD,CAAC;QACD,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;IACJ,CAAC;IAED,yCAAyC;IACzC,MAAM,GAAG,CAAC,WAAW,CACnB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,oBAAoB,EACrD;QACE,SAAS,EAAE,OAAO,CAAC,GAAG;QACtB,OAAO,EAAE,iBAAiB,CAAC,gBAAgB;QAC3C,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;KACvB,CACF,CAAC;IAEF,mBAAmB;IACnB,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE;QACzC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,cAAc,EAAE,IAAI;KACrB,CAAC,CAAC;IAEH,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AACtD,CAAC;AAED,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAsB,EACtB,QAA+B,EAC/B,IAGC;IAKD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;IAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,yGAAyG,CAC1G,CAAC;IACJ,CAAC;IAED,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,kBAAkB;YACrB,OAAO,qBAAqB,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACjE,KAAK,iBAAiB;YACpB,OAAO,oBAAoB,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/E,KAAK,cAAc;YACjB,OAAO,iBAAiB,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAC7D,KAAK,aAAa;YAChB,OAAO,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3E;YACE,MAAM,IAAI,KAAK,CACb,yBAAyB,IAAI,iFAAiF,CAC/G,CAAC;IACN,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;GAEG;AACH,SAAS,aAAa,CAAC,KAAa,EAAE,MAAc;IAClD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,CAAC,GAAG,KAAK,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QAC7B,CAAC,KAAK,EAAE,CAAC;IACX,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -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;
|
|
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
|
-
|
|
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 `${
|
|
16
|
+
return `${siteUrl()}${redirectTo}`;
|
|
16
17
|
}
|
|
17
|
-
|
|
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,
|
|
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
|
-
*
|
|
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
|
|
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
|
-
*
|
|
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":"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"}
|
|
@@ -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,
|
|
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"}
|