@estifanos-sh/convex-auth 0.0.2 → 0.0.3
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/README.md +5 -5
- package/dist/_generated/component.d.ts +130 -61
- package/dist/_generated/component.d.ts.map +1 -1
- package/dist/_generated/dataModel.d.ts +28 -0
- package/dist/_generated/dataModel.d.ts.map +1 -0
- package/dist/bin.js +1 -2
- package/dist/browser/index.d.ts +2 -2
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/client/core/types.d.ts +40 -79
- package/dist/client/core/types.d.ts.map +1 -1
- package/dist/client/core/types.js.map +1 -1
- package/dist/client/errors.d.ts +15 -0
- package/dist/client/errors.d.ts.map +1 -0
- package/dist/client/errors.js +8 -1
- package/dist/client/errors.js.map +1 -1
- package/dist/client/index.d.ts +6 -3
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +3 -2
- package/dist/client/index.js.map +1 -1
- package/dist/component/_generated/component.d.ts +130 -61
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/_generated/dataModel.d.ts +1 -1
- package/dist/component/_generated/server.d.ts +1 -1
- package/dist/component/account.d.ts +43 -37
- package/dist/component/account.d.ts.map +1 -1
- package/dist/component/account.js +14 -16
- package/dist/component/account.js.map +1 -1
- package/dist/component/connection/audit.d.ts +29 -29
- package/dist/component/connection/audit.d.ts.map +1 -1
- package/dist/component/connection/audit.js +2 -1
- package/dist/component/connection/audit.js.map +1 -1
- package/dist/component/connection/cache.d.ts +6 -6
- package/dist/component/connection/domain/verification.d.ts +19 -19
- package/dist/component/connection/domain.d.ts +20 -20
- package/dist/component/connection/saml/assertion.d.ts +4 -4
- package/dist/component/connection/saml/request.d.ts +9 -9
- package/dist/component/connection/saml/request.d.ts.map +1 -1
- package/dist/component/connection/scim/config.d.ts +13 -13
- package/dist/component/connection/scim/identity.d.ts +102 -59
- package/dist/component/connection/scim/identity.d.ts.map +1 -1
- package/dist/component/connection/scim/identity.js +357 -56
- package/dist/component/connection/scim/identity.js.map +1 -1
- package/dist/component/connection/secret.d.ts +15 -15
- package/dist/component/connection/secret.d.ts.map +1 -1
- package/dist/component/connection/webhook/delivery.d.ts +69 -53
- package/dist/component/connection/webhook/delivery.d.ts.map +1 -1
- package/dist/component/connection/webhook/delivery.js +127 -170
- package/dist/component/connection/webhook/delivery.js.map +1 -1
- package/dist/component/connection/webhook/endpoint.d.ts +21 -21
- package/dist/component/connection/webhook/events.d.ts +26 -0
- package/dist/component/connection/webhook/events.d.ts.map +1 -0
- package/dist/component/connection/webhook/events.js +39 -0
- package/dist/component/connection/webhook/events.js.map +1 -0
- package/dist/component/connection.d.ts +38 -38
- package/dist/component/connection.d.ts.map +1 -1
- package/dist/component/context.d.ts +115 -0
- package/dist/component/context.d.ts.map +1 -0
- package/dist/component/context.js +50 -0
- package/dist/component/context.js.map +1 -0
- package/dist/component/convex.config.d.ts +2 -2
- package/dist/component/crons.d.ts +2 -2
- package/dist/component/event.d.ts +134 -138
- package/dist/component/event.d.ts.map +1 -1
- package/dist/component/event.js +88 -117
- package/dist/component/event.js.map +1 -1
- package/dist/component/eventstream.d.ts +30 -0
- package/dist/component/eventstream.d.ts.map +1 -0
- package/dist/component/eventstream.js +51 -0
- package/dist/component/eventstream.js.map +1 -0
- package/dist/component/factor/device.d.ts +25 -24
- package/dist/component/factor/device.d.ts.map +1 -1
- package/dist/component/factor/device.js +5 -2
- package/dist/component/factor/device.js.map +1 -1
- package/dist/component/factor/passkey.d.ts +84 -75
- package/dist/component/factor/passkey.d.ts.map +1 -1
- package/dist/component/factor/passkey.js +6 -6
- package/dist/component/factor/passkey.js.map +1 -1
- package/dist/component/factor/totp.d.ts +54 -49
- package/dist/component/factor/totp.d.ts.map +1 -1
- package/dist/component/factor/totp.js +3 -3
- package/dist/component/factor/totp.js.map +1 -1
- package/dist/component/group/active.d.ts +326 -22
- package/dist/component/group/active.d.ts.map +1 -1
- package/dist/component/group/active.js +21 -11
- package/dist/component/group/active.js.map +1 -1
- package/dist/component/group/invite.d.ts +28 -28
- package/dist/component/group/invite.d.ts.map +1 -1
- package/dist/component/group/member.d.ts +34 -34
- package/dist/component/group.d.ts +47 -62
- package/dist/component/group.d.ts.map +1 -1
- package/dist/component/http.d.ts +2 -2
- package/dist/component/limits.d.ts +4 -4
- package/dist/component/maintenance.d.ts +2 -2
- package/dist/component/model.d.ts +1362 -1027
- package/dist/component/model.d.ts.map +1 -1
- package/dist/component/model.js +23 -6
- package/dist/component/model.js.map +1 -1
- package/dist/component/modules.d.ts +8 -2
- package/dist/component/modules.d.ts.map +1 -1
- package/dist/component/modules.js +3 -0
- package/dist/component/modules.js.map +1 -1
- package/dist/component/oauth/client.d.ts +20 -20
- package/dist/component/oauth/code.d.ts +14 -14
- package/dist/component/oauth/refresh.d.ts +19 -19
- package/dist/component/schema.d.ts +1100 -611
- package/dist/component/schema.d.ts.map +1 -1
- package/dist/component/schema.js +17 -4
- package/dist/component/schema.js.map +1 -1
- package/dist/component/session.d.ts +72 -32
- package/dist/component/session.d.ts.map +1 -1
- package/dist/component/session.js +120 -32
- package/dist/component/session.js.map +1 -1
- package/dist/component/token/continuation.d.ts +40 -18
- package/dist/component/token/continuation.d.ts.map +1 -1
- package/dist/component/token/continuation.js +57 -11
- package/dist/component/token/continuation.js.map +1 -1
- package/dist/component/token/pkce.d.ts +22 -22
- package/dist/component/token/pkce.d.ts.map +1 -1
- package/dist/component/token/refresh.d.ts +39 -35
- package/dist/component/token/refresh.d.ts.map +1 -1
- package/dist/component/token/refresh.js +11 -6
- package/dist/component/token/refresh.js.map +1 -1
- package/dist/component/token/verification.d.ts +36 -32
- package/dist/component/token/verification.d.ts.map +1 -1
- package/dist/component/token/verification.js +3 -3
- package/dist/component/token/verification.js.map +1 -1
- package/dist/component/user/email.d.ts +21 -21
- package/dist/component/user/key.d.ts +35 -35
- package/dist/component/user/key.d.ts.map +1 -1
- package/dist/component/user.d.ts +51 -45
- package/dist/component/user.d.ts.map +1 -1
- package/dist/core/index.d.ts +54 -90
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -4
- package/dist/core/index.js.map +1 -1
- package/dist/expo/index.d.ts +3 -3
- package/dist/expo/index.d.ts.map +1 -1
- package/dist/expo/index.js.map +1 -1
- package/dist/model.js.map +1 -1
- package/dist/providers/anonymous.d.ts +11 -5
- package/dist/providers/anonymous.d.ts.map +1 -1
- package/dist/providers/anonymous.js +4 -1
- package/dist/providers/anonymous.js.map +1 -1
- package/dist/providers/apple.d.ts +1 -1
- package/dist/providers/credentials.d.ts +21 -13
- package/dist/providers/credentials.d.ts.map +1 -1
- package/dist/providers/credentials.js +2 -0
- package/dist/providers/credentials.js.map +1 -1
- package/dist/providers/custom.d.ts +3 -3
- package/dist/providers/custom.d.ts.map +1 -1
- package/dist/providers/custom.js.map +1 -1
- package/dist/providers/email.d.ts +3 -3
- package/dist/providers/email.d.ts.map +1 -1
- package/dist/providers/email.js.map +1 -1
- package/dist/providers/github.d.ts +1 -1
- package/dist/providers/google.d.ts +1 -1
- package/dist/providers/microsoft.d.ts +1 -1
- package/dist/providers/password.d.ts +103 -8
- package/dist/providers/password.d.ts.map +1 -1
- package/dist/providers/password.js +71 -26
- package/dist/providers/password.js.map +1 -1
- package/dist/providers/phone.d.ts +4 -3
- package/dist/providers/phone.d.ts.map +1 -1
- package/dist/providers/phone.js.map +1 -1
- package/dist/react/index.d.ts +40 -41
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +27 -52
- package/dist/react/index.js.map +1 -1
- package/dist/server/auth.d.ts +157 -117
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +41 -22
- package/dist/server/auth.js.map +1 -1
- package/dist/server/component/factor/db.js +4 -4
- package/dist/server/component/factor/db.js.map +1 -1
- package/dist/server/config.d.ts +2 -1
- package/dist/server/connection/domain.d.ts +4 -66
- package/dist/server/connection/domain.d.ts.map +1 -1
- package/dist/server/connection/domain.js +22 -4
- package/dist/server/connection/domain.js.map +1 -1
- package/dist/server/connection/group/service.js +6 -4
- package/dist/server/connection/group/service.js.map +1 -1
- package/dist/server/connection/http.js +94 -261
- package/dist/server/connection/http.js.map +1 -1
- package/dist/server/connection/oidc.js +8 -17
- package/dist/server/connection/oidc.js.map +1 -1
- package/dist/server/connection/policy/domain.js +4 -1
- package/dist/server/connection/policy/domain.js.map +1 -1
- package/dist/server/connection/policy.js +14 -13
- package/dist/server/connection/policy.js.map +1 -1
- package/dist/server/connection/provision.js +5 -19
- package/dist/server/connection/provision.js.map +1 -1
- package/dist/server/connection/webhook.js +4 -36
- package/dist/server/connection/webhook.js.map +1 -1
- package/dist/server/context.d.ts +2 -2
- package/dist/server/context.d.ts.map +1 -1
- package/dist/server/context.js +35 -24
- package/dist/server/context.js.map +1 -1
- package/dist/server/contract.d.ts.map +1 -1
- package/dist/server/contract.js +6 -14
- package/dist/server/contract.js.map +1 -1
- package/dist/server/core.js +6 -0
- package/dist/server/core.js.map +1 -1
- package/dist/server/cors.d.ts +2 -2
- package/dist/server/cors.d.ts.map +1 -1
- package/dist/server/crypto.js.map +1 -1
- package/dist/server/db.js +2 -1
- package/dist/server/db.js.map +1 -1
- package/dist/server/domains/context.js +34 -0
- package/dist/server/domains/context.js.map +1 -0
- package/dist/server/domains/factor.d.ts +3 -2
- package/dist/server/domains/factor.d.ts.map +1 -1
- package/dist/server/domains/factor.js.map +1 -1
- package/dist/server/domains/group.js.map +1 -1
- package/dist/server/domains/invite.js.map +1 -1
- package/dist/server/domains/key.js.map +1 -1
- package/dist/server/domains/member.js.map +1 -1
- package/dist/server/domains/session.js.map +1 -1
- package/dist/server/domains/user.js.map +1 -1
- package/dist/server/env.js +2 -22
- package/dist/server/env.js.map +1 -1
- package/dist/server/events.d.ts +0 -1
- package/dist/server/events.d.ts.map +1 -1
- package/dist/server/events.js +6 -6
- package/dist/server/events.js.map +1 -1
- package/dist/server/http.d.ts +1 -0
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +4 -4
- package/dist/server/http.js.map +1 -1
- package/dist/server/identity/claims.js +1 -1
- package/dist/server/identity/convex.d.ts +2 -0
- package/dist/server/identity/convex.d.ts.map +1 -1
- package/dist/server/index.d.ts +2 -3
- package/dist/server/index.js +1 -2
- package/dist/server/limits.js +21 -1
- package/dist/server/limits.js.map +1 -1
- package/dist/server/mutations/credentials/signin.js +6 -3
- package/dist/server/mutations/credentials/signin.js.map +1 -1
- package/dist/server/mutations/invalidate.js +5 -10
- package/dist/server/mutations/invalidate.js.map +1 -1
- package/dist/server/mutations/oauth.js +1 -1
- package/dist/server/mutations/oauth.js.map +1 -1
- package/dist/server/mutations/retrieve.js +4 -1
- package/dist/server/mutations/retrieve.js.map +1 -1
- package/dist/server/mutations/signin.js +2 -2
- package/dist/server/mutations/signin.js.map +1 -1
- package/dist/server/mutations/verify.js +4 -3
- package/dist/server/mutations/verify.js.map +1 -1
- package/dist/server/oauth/factory.js.map +1 -1
- package/dist/server/runtime.d.ts +107 -127
- package/dist/server/runtime.d.ts.map +1 -1
- package/dist/server/runtime.js +43 -28
- package/dist/server/runtime.js.map +1 -1
- package/dist/server/session/lifecycle.d.ts.map +1 -1
- package/dist/server/session/lifecycle.js +18 -3
- package/dist/server/session/lifecycle.js.map +1 -1
- package/dist/server/signin/flow.js +1 -1
- package/dist/server/signin/flow.js.map +1 -1
- package/dist/server/tokens.js +1 -0
- package/dist/server/tokens.js.map +1 -1
- package/dist/server/totp.js +3 -3
- package/dist/server/totp.js.map +1 -1
- package/dist/server/types.d.ts +63 -43
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/user/account.js +0 -1
- package/dist/server/user/account.js.map +1 -1
- package/dist/server/validators.d.ts +874 -917
- package/dist/server/validators.d.ts.map +1 -1
- package/dist/server/validators.js +33 -32
- package/dist/server/validators.js.map +1 -1
- package/dist/server/webauthn.js +4 -4
- package/dist/server/webauthn.js.map +1 -1
- package/dist/shared/brand.d.ts +3 -7
- package/dist/shared/brand.d.ts.map +1 -1
- package/dist/shared/params.d.ts +78 -0
- package/dist/shared/params.d.ts.map +1 -0
- package/dist/shared/results.d.ts +7 -1
- package/dist/shared/results.d.ts.map +1 -1
- package/dist/svelte/context.svelte.d.ts +23 -12
- package/dist/svelte/context.svelte.d.ts.map +1 -1
- package/dist/svelte/context.svelte.js +20 -13
- package/dist/svelte/index.d.ts +1 -4
- package/dist/svelte/index.d.ts.map +1 -1
- package/dist/svelte/index.js +1 -4
- package/dist/test.d.ts +1105 -611
- package/dist/test.d.ts.map +1 -1
- package/package.json +2 -1
- package/dist/server/env.d.ts +0 -28
- package/dist/server/env.d.ts.map +0 -1
- package/dist/svelte/AuthLoading.svelte +0 -13
- package/dist/svelte/AuthLoading.svelte.d.ts +0 -8
- package/dist/svelte/AuthLoading.svelte.d.ts.map +0 -1
- package/dist/svelte/SignedIn.svelte +0 -14
- package/dist/svelte/SignedIn.svelte.d.ts +0 -8
- package/dist/svelte/SignedIn.svelte.d.ts.map +0 -1
- package/dist/svelte/SignedOut.svelte +0 -13
- package/dist/svelte/SignedOut.svelte.d.ts +0 -8
- package/dist/svelte/SignedOut.svelte.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.d.ts","names":[],"sources":["../../src/server/validators.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"validators.d.ts","names":[],"sources":["../../src/server/validators.ts"],"mappings":"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"}
|
|
@@ -36,15 +36,15 @@ const vConnectionCheck = v.object({
|
|
|
36
36
|
ok: v.boolean(),
|
|
37
37
|
message: v.optional(v.string())
|
|
38
38
|
});
|
|
39
|
-
const vConnectionIdResult = v.object({ connectionId:
|
|
39
|
+
const vConnectionIdResult = v.object({ connectionId: vIdString("GroupConnection") });
|
|
40
40
|
const vConnectionGroupResult = v.object({
|
|
41
|
-
connectionId:
|
|
42
|
-
groupId:
|
|
41
|
+
connectionId: vIdString("GroupConnection"),
|
|
42
|
+
groupId: vIdString("Group")
|
|
43
43
|
});
|
|
44
44
|
const vConnectionDoc = v.object({
|
|
45
|
-
_id:
|
|
45
|
+
_id: vIdString("GroupConnection"),
|
|
46
46
|
_creationTime: v.number(),
|
|
47
|
-
groupId:
|
|
47
|
+
groupId: vIdString("Group"),
|
|
48
48
|
slug: v.optional(v.string()),
|
|
49
49
|
name: v.optional(v.string()),
|
|
50
50
|
protocol: vGroupConnectionProtocol,
|
|
@@ -53,10 +53,10 @@ const vConnectionDoc = v.object({
|
|
|
53
53
|
extend: v.optional(v.any())
|
|
54
54
|
});
|
|
55
55
|
const vConnectionDomainDoc = v.object({
|
|
56
|
-
_id:
|
|
56
|
+
_id: vIdString("GroupConnectionDomain"),
|
|
57
57
|
_creationTime: v.number(),
|
|
58
|
-
connectionId:
|
|
59
|
-
groupId:
|
|
58
|
+
connectionId: vIdString("GroupConnection"),
|
|
59
|
+
groupId: vIdString("Group"),
|
|
60
60
|
domain: v.string(),
|
|
61
61
|
isPrimary: v.boolean(),
|
|
62
62
|
verifiedAt: v.optional(v.number())
|
|
@@ -66,14 +66,14 @@ const vConnectionLookup = v.union(v.object({
|
|
|
66
66
|
domain: v.union(vConnectionDomainDoc, v.null())
|
|
67
67
|
}), v.null());
|
|
68
68
|
const vConnectionDomainSummary = v.object({
|
|
69
|
-
domainId:
|
|
69
|
+
domainId: vIdString("GroupConnectionDomain"),
|
|
70
70
|
domain: v.string(),
|
|
71
71
|
isPrimary: v.boolean(),
|
|
72
72
|
verified: v.boolean(),
|
|
73
73
|
verifiedAt: vNullableNumber
|
|
74
74
|
});
|
|
75
75
|
const vConnectionDomainValidation = v.object({
|
|
76
|
-
connectionId:
|
|
76
|
+
connectionId: vIdString("GroupConnection"),
|
|
77
77
|
ready: v.boolean(),
|
|
78
78
|
summary: v.object({
|
|
79
79
|
domainCount: v.number(),
|
|
@@ -84,11 +84,11 @@ const vConnectionDomainValidation = v.object({
|
|
|
84
84
|
warnings: v.array(v.string())
|
|
85
85
|
});
|
|
86
86
|
const vConnectionDomainSet = v.object({
|
|
87
|
-
connectionId:
|
|
87
|
+
connectionId: vIdString("GroupConnection"),
|
|
88
88
|
domains: v.array(vConnectionDomainSummary)
|
|
89
89
|
});
|
|
90
90
|
const vConnectionDomainVerificationRequest = v.object({
|
|
91
|
-
connectionId:
|
|
91
|
+
connectionId: vIdString("GroupConnection"),
|
|
92
92
|
domain: v.string(),
|
|
93
93
|
requestedAt: v.number(),
|
|
94
94
|
expiresAt: v.number(),
|
|
@@ -99,13 +99,13 @@ const vConnectionDomainVerificationRequest = v.object({
|
|
|
99
99
|
})
|
|
100
100
|
});
|
|
101
101
|
const vConnectionDomainVerificationConfirm = v.object({
|
|
102
|
-
connectionId:
|
|
102
|
+
connectionId: vIdString("GroupConnection"),
|
|
103
103
|
domain: v.string(),
|
|
104
104
|
verifiedAt: v.optional(v.number()),
|
|
105
105
|
checks: v.array(vConnectionCheck)
|
|
106
106
|
});
|
|
107
107
|
const vConnectionStatus = v.object({
|
|
108
|
-
connectionId:
|
|
108
|
+
connectionId: vIdString("GroupConnection"),
|
|
109
109
|
status: vGroupConnectionStatus,
|
|
110
110
|
ready: v.boolean(),
|
|
111
111
|
domainCount: v.number(),
|
|
@@ -140,20 +140,20 @@ const vConnectionOidcConfig = v.object({
|
|
|
140
140
|
});
|
|
141
141
|
const vConnectionValidation = v.object({
|
|
142
142
|
ok: v.boolean(),
|
|
143
|
-
connectionId:
|
|
143
|
+
connectionId: vIdString("GroupConnection"),
|
|
144
144
|
checks: v.array(vConnectionCheck)
|
|
145
145
|
});
|
|
146
146
|
const vConnectionPolicyValidation = v.object({
|
|
147
147
|
ok: v.boolean(),
|
|
148
|
-
groupId:
|
|
148
|
+
groupId: vIdString("Group"),
|
|
149
149
|
policy: v.optional(vGroupConnectionPolicy),
|
|
150
150
|
checks: v.array(vConnectionCheck)
|
|
151
151
|
});
|
|
152
152
|
const vConnectionScimConfig = v.object({
|
|
153
|
-
_id:
|
|
153
|
+
_id: vIdString("GroupConnectionScimConfig"),
|
|
154
154
|
_creationTime: v.number(),
|
|
155
|
-
connectionId:
|
|
156
|
-
groupId:
|
|
155
|
+
connectionId: vIdString("GroupConnection"),
|
|
156
|
+
groupId: vIdString("Group"),
|
|
157
157
|
status: vScimStatus,
|
|
158
158
|
basePath: v.string(),
|
|
159
159
|
lastRotatedAt: v.optional(v.number()),
|
|
@@ -163,14 +163,14 @@ const vConnectionScimConfig = v.object({
|
|
|
163
163
|
profile: v.optional(v.any())
|
|
164
164
|
});
|
|
165
165
|
const vConnectionScimSet = v.object({
|
|
166
|
-
connectionId:
|
|
167
|
-
configId:
|
|
166
|
+
connectionId: vIdString("GroupConnection"),
|
|
167
|
+
configId: vIdString("GroupConnectionScimConfig"),
|
|
168
168
|
basePath: v.string(),
|
|
169
169
|
token: v.string()
|
|
170
170
|
});
|
|
171
171
|
const vConnectionScimValidation = v.object({
|
|
172
172
|
ok: v.boolean(),
|
|
173
|
-
connectionId:
|
|
173
|
+
connectionId: vIdString("GroupConnection"),
|
|
174
174
|
basePath: v.optional(v.string()),
|
|
175
175
|
deprovisionMode: v.optional(v.union(v.literal("soft"), v.literal("hard"))),
|
|
176
176
|
capabilities: v.optional(v.object({
|
|
@@ -185,7 +185,7 @@ const vConnectionScimValidation = v.object({
|
|
|
185
185
|
checks: v.array(vConnectionCheck)
|
|
186
186
|
});
|
|
187
187
|
const vConnectionSignIn = v.object({
|
|
188
|
-
connectionId:
|
|
188
|
+
connectionId: vIdString("GroupConnection"),
|
|
189
189
|
providerId: v.string(),
|
|
190
190
|
protocol: vGroupConnectionProtocol,
|
|
191
191
|
signInPath: v.string(),
|
|
@@ -193,7 +193,7 @@ const vConnectionSignIn = v.object({
|
|
|
193
193
|
redirectTo: v.optional(v.string())
|
|
194
194
|
});
|
|
195
195
|
const vConnectionAuditEvent = v.object({
|
|
196
|
-
_id:
|
|
196
|
+
_id: vIdString("AuthEventProjection"),
|
|
197
197
|
_creationTime: v.number(),
|
|
198
198
|
eventId: v.string(),
|
|
199
199
|
targetKind: vAuthEventTargetKind,
|
|
@@ -212,24 +212,24 @@ const vConnectionAuditEvent = v.object({
|
|
|
212
212
|
data: v.optional(vAuthEventData)
|
|
213
213
|
});
|
|
214
214
|
const vConnectionWebhookEndpoint = v.object({
|
|
215
|
-
_id:
|
|
215
|
+
_id: vIdString("GroupWebhookEndpoint"),
|
|
216
216
|
_creationTime: v.number(),
|
|
217
|
-
connectionId:
|
|
218
|
-
groupId:
|
|
217
|
+
connectionId: vIdString("GroupConnection"),
|
|
218
|
+
groupId: vIdString("Group"),
|
|
219
219
|
url: v.string(),
|
|
220
220
|
status: vWebhookEndpointStatus,
|
|
221
221
|
subscriptions: v.array(vAuthEventKind),
|
|
222
|
-
createdByUserId: v.optional(
|
|
222
|
+
createdByUserId: v.optional(vIdString("User")),
|
|
223
223
|
lastSuccessAt: v.optional(v.number()),
|
|
224
224
|
lastFailureAt: v.optional(v.number()),
|
|
225
225
|
failureCount: v.number(),
|
|
226
226
|
extend: v.optional(v.any())
|
|
227
227
|
});
|
|
228
228
|
const vConnectionWebhookDelivery = v.object({
|
|
229
|
-
_id:
|
|
229
|
+
_id: vIdString("GroupWebhookDelivery"),
|
|
230
230
|
_creationTime: v.number(),
|
|
231
|
-
connectionId:
|
|
232
|
-
endpointId:
|
|
231
|
+
connectionId: vIdString("GroupConnection"),
|
|
232
|
+
endpointId: vIdString("GroupWebhookEndpoint"),
|
|
233
233
|
eventId: v.string(),
|
|
234
234
|
kind: vAuthEventKind,
|
|
235
235
|
status: vWebhookDeliveryStatus,
|
|
@@ -278,7 +278,7 @@ const connectionValidators = {
|
|
|
278
278
|
webhook: {
|
|
279
279
|
endpoint: vConnectionWebhookEndpoint,
|
|
280
280
|
delivery: vConnectionWebhookDelivery,
|
|
281
|
-
disabled: v.object({ endpointId:
|
|
281
|
+
disabled: v.object({ endpointId: vIdString("GroupWebhookEndpoint") })
|
|
282
282
|
}
|
|
283
283
|
};
|
|
284
284
|
/**
|
|
@@ -303,6 +303,7 @@ const connectionValidators = {
|
|
|
303
303
|
function createAuthValidators(extend = {}) {
|
|
304
304
|
const user = docWithExtend(userFieldsX, extend.User ?? v.any());
|
|
305
305
|
return {
|
|
306
|
+
id: vIdString,
|
|
306
307
|
user,
|
|
307
308
|
group: docWithExtend(groupFieldsX, extend.Group ?? v.any()),
|
|
308
309
|
member: docWithExtend(memberFieldsX, extend.GroupMember ?? v.any()),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.js","names":[],"sources":["../../src/server/validators.ts"],"sourcesContent":["/**\n * Public Convex `returns:` validators for the auth read surface.\n *\n * These back the `auth.v` namespace on the {@link defineAuth} result.\n * Consumers set them as their function `returns:` so client-side\n * `useQuery` inference flows end-to-end with zero hand-rolled validators\n * or DTO mappers. The `extend` field on User/Group/GroupMember is\n * replaced with the validator the consumer supplied via\n * `defineAuth({ extend: { ... } })`, so `viewer.extend.<field>` is fully\n * typed instead of `any`.\n *\n * @module\n */\n\nimport { type GenericId, type Infer, v, type VId, type Validator } from \"convex/values\";\n\nimport {\n vAuthEventActorType,\n vAuthEventCategory,\n vAuthEventData,\n vAuthEventKind,\n vAuthEventOutcome,\n vAuthEventSubjectType,\n vAuthEventTargetKind,\n emailFields,\n groupFields,\n type IdValidatorFn,\n inviteFields,\n memberFields,\n userFields,\n vGroupConnectionPolicy,\n vGroupConnectionProtocol,\n vGroupConnectionStatus,\n vPaginated,\n vScimStatus,\n vWebhookDeliveryStatus,\n vWebhookEndpointStatus,\n} from \"../component/model\";\n\n/**\n * `Id<T>` at the type level, `v.string()` at runtime — for cross-component\n * fields where the consumer's data model lacks the component's table tag.\n */\nconst vIdString: IdValidatorFn = <T extends string>(_table: T) =>\n v.string() as unknown as VId<GenericId<T>, \"required\">;\n\n/**\n * Validators a consumer may supply for the `extend` field of each table.\n *\n * Passed as `defineAuth({ extend })`. Every entry is optional; a missing\n * entry falls back to `v.any()`, preserving the untyped default.\n */\nexport type AuthExtendValidators = {\n /** Shape of `User.extend`. */\n User?: Validator<any, any, any>;\n /** Shape of `Group.extend`. */\n Group?: Validator<any, any, any>;\n /** Shape of `GroupMember.extend`. */\n GroupMember?: Validator<any, any, any>;\n};\n\ntype ExtendFor<TExtend extends AuthExtendValidators, K extends keyof AuthExtendValidators> =\n TExtend[K] extends Validator<any, any, any> ? TExtend[K] : ReturnType<typeof v.any>;\n\nconst docWithExtend = <\n Fields extends Record<string, Validator<any, any, any>>,\n E extends Validator<any, any, any>,\n>(\n fields: Fields,\n extend: E,\n) =>\n v.object({\n ...(fields as Omit<Fields, \"extend\">),\n extend: v.optional(extend),\n });\n\nconst userFieldsX = userFields(vIdString);\nconst groupFieldsX = groupFields(vIdString);\nconst memberFieldsX = memberFields(vIdString);\nconst inviteDocX = v.object(inviteFields(vIdString));\nconst emailDocX = v.object(emailFields(vIdString));\n\nconst vNullableString = v.union(v.string(), v.null());\nconst vNullableNumber = v.union(v.number(), v.null());\n\nconst vConnectionCheck = v.object({\n name: v.string(),\n ok: v.boolean(),\n message: v.optional(v.string()),\n});\n\nconst vConnectionIdResult = v.object({ connectionId: v.string() });\n\nconst vConnectionGroupResult = v.object({\n connectionId: v.string(),\n groupId: v.string(),\n});\n\nconst vConnectionDoc = v.object({\n _id: v.string(),\n _creationTime: v.number(),\n groupId: v.string(),\n slug: v.optional(v.string()),\n name: v.optional(v.string()),\n protocol: vGroupConnectionProtocol,\n status: vGroupConnectionStatus,\n config: v.optional(v.any()),\n extend: v.optional(v.any()),\n});\n\nconst vConnectionDomainDoc = v.object({\n _id: v.string(),\n _creationTime: v.number(),\n connectionId: v.string(),\n groupId: v.string(),\n domain: v.string(),\n isPrimary: v.boolean(),\n verifiedAt: v.optional(v.number()),\n});\n\nconst vConnectionLookup = v.union(\n v.object({\n connection: v.union(vConnectionDoc, v.null()),\n domain: v.union(vConnectionDomainDoc, v.null()),\n }),\n v.null(),\n);\n\nconst vConnectionDomainSummary = v.object({\n domainId: v.string(),\n domain: v.string(),\n isPrimary: v.boolean(),\n verified: v.boolean(),\n verifiedAt: vNullableNumber,\n});\n\nconst vConnectionDomainValidation = v.object({\n connectionId: v.string(),\n ready: v.boolean(),\n summary: v.object({\n domainCount: v.number(),\n primaryCount: v.number(),\n verifiedCount: v.number(),\n }),\n domains: v.array(vConnectionDomainSummary),\n warnings: v.array(v.string()),\n});\n\nconst vConnectionDomainSet = v.object({\n connectionId: v.string(),\n domains: v.array(vConnectionDomainSummary),\n});\n\nconst vConnectionDomainVerificationRequest = v.object({\n connectionId: v.string(),\n domain: v.string(),\n requestedAt: v.number(),\n expiresAt: v.number(),\n challenge: v.object({\n recordType: v.literal(\"TXT\"),\n recordName: v.string(),\n recordValue: v.string(),\n }),\n});\n\nconst vConnectionDomainVerificationConfirm = v.object({\n connectionId: v.string(),\n domain: v.string(),\n verifiedAt: v.optional(v.number()),\n checks: v.array(vConnectionCheck),\n});\n\nconst vConnectionStatus = v.object({\n connectionId: v.string(),\n status: vGroupConnectionStatus,\n ready: v.boolean(),\n domainCount: v.number(),\n protocols: v.object({\n oidc: v.object({\n configured: v.boolean(),\n ready: v.boolean(),\n clientId: vNullableString,\n issuer: vNullableString,\n }),\n saml: v.object({\n configured: v.boolean(),\n ready: v.boolean(),\n entityId: vNullableString,\n }),\n scim: v.object({\n configured: v.boolean(),\n ready: v.boolean(),\n basePath: vNullableString,\n deprovisionMode: v.union(v.literal(\"soft\"), v.literal(\"hard\")),\n }),\n }),\n});\n\nconst vConnectionOidcConfig = v.object({\n enabled: v.optional(v.boolean()),\n discovery: v.optional(v.any()),\n client: v.optional(v.any()),\n request: v.optional(v.any()),\n security: v.optional(v.any()),\n profile: v.optional(v.any()),\n hasClientSecret: v.optional(v.boolean()),\n});\n\nconst vConnectionValidation = v.object({\n ok: v.boolean(),\n connectionId: v.string(),\n checks: v.array(vConnectionCheck),\n});\n\nconst vConnectionPolicyValidation = v.object({\n ok: v.boolean(),\n groupId: v.string(),\n policy: v.optional(vGroupConnectionPolicy),\n checks: v.array(vConnectionCheck),\n});\n\nconst vConnectionScimConfig = v.object({\n _id: v.string(),\n _creationTime: v.number(),\n connectionId: v.string(),\n groupId: v.string(),\n status: vScimStatus,\n basePath: v.string(),\n lastRotatedAt: v.optional(v.number()),\n extend: v.optional(v.any()),\n hasToken: v.boolean(),\n security: v.optional(v.any()),\n profile: v.optional(v.any()),\n});\n\nconst vConnectionScimSet = v.object({\n connectionId: v.string(),\n configId: v.string(),\n basePath: v.string(),\n token: v.string(),\n});\n\nconst vConnectionScimValidation = v.object({\n ok: v.boolean(),\n connectionId: v.string(),\n basePath: v.optional(v.string()),\n deprovisionMode: v.optional(v.union(v.literal(\"soft\"), v.literal(\"hard\"))),\n capabilities: v.optional(\n v.object({\n users: v.boolean(),\n groups: v.boolean(),\n patch: v.boolean(),\n put: v.boolean(),\n filters: v.array(v.string()),\n bulk: v.boolean(),\n etag: v.boolean(),\n }),\n ),\n checks: v.array(vConnectionCheck),\n});\n\nconst vConnectionSignIn = v.object({\n connectionId: v.string(),\n providerId: v.string(),\n protocol: vGroupConnectionProtocol,\n signInPath: v.string(),\n callbackPath: v.string(),\n redirectTo: v.optional(v.string()),\n});\n\nconst vConnectionAuditEvent = v.object({\n _id: v.string(),\n _creationTime: v.number(),\n eventId: v.string(),\n targetKind: vAuthEventTargetKind,\n targetId: v.string(),\n kind: vAuthEventKind,\n category: vAuthEventCategory,\n occurredAt: v.number(),\n actorType: vAuthEventActorType,\n actorId: v.optional(v.string()),\n subjectType: vAuthEventSubjectType,\n subjectId: v.optional(v.string()),\n outcome: vAuthEventOutcome,\n errorCode: v.optional(v.string()),\n requestId: v.optional(v.string()),\n ip: v.optional(v.string()),\n data: v.optional(vAuthEventData),\n});\n\nconst vConnectionWebhookEndpoint = v.object({\n _id: v.string(),\n _creationTime: v.number(),\n connectionId: v.string(),\n groupId: v.string(),\n url: v.string(),\n status: vWebhookEndpointStatus,\n subscriptions: v.array(vAuthEventKind),\n createdByUserId: v.optional(v.string()),\n lastSuccessAt: v.optional(v.number()),\n lastFailureAt: v.optional(v.number()),\n failureCount: v.number(),\n extend: v.optional(v.any()),\n});\n\nconst vConnectionWebhookDelivery = v.object({\n _id: v.string(),\n _creationTime: v.number(),\n connectionId: v.string(),\n endpointId: v.string(),\n eventId: v.string(),\n kind: vAuthEventKind,\n status: vWebhookDeliveryStatus,\n attemptCount: v.number(),\n nextAttemptAt: v.number(),\n lastAttemptAt: v.optional(v.number()),\n lastResponseStatus: v.optional(v.number()),\n lastError: v.optional(v.string()),\n signedAt: v.number(),\n});\n\nconst connectionValidators = {\n protocol: vGroupConnectionProtocol,\n doc: vConnectionDoc,\n lookup: vConnectionLookup,\n id: vConnectionIdResult,\n created: vConnectionGroupResult,\n status: vConnectionStatus,\n validation: vConnectionValidation,\n signIn: vConnectionSignIn,\n domain: {\n doc: vConnectionDomainDoc,\n summary: vConnectionDomainSummary,\n validation: vConnectionDomainValidation,\n upsert: vConnectionDomainSet,\n verificationRequest: vConnectionDomainVerificationRequest,\n verificationConfirm: vConnectionDomainVerificationConfirm,\n },\n oidc: {\n config: vConnectionOidcConfig,\n validation: vConnectionValidation,\n },\n saml: {\n validation: vConnectionValidation,\n metadata: v.string(),\n },\n policy: {\n config: vGroupConnectionPolicy,\n validation: vConnectionPolicyValidation,\n },\n scim: {\n config: vConnectionScimConfig,\n upsert: vConnectionScimSet,\n validation: vConnectionScimValidation,\n },\n audit: {\n event: vConnectionAuditEvent,\n },\n webhook: {\n endpoint: vConnectionWebhookEndpoint,\n delivery: vConnectionWebhookDelivery,\n disabled: v.object({ endpointId: v.string() }),\n },\n};\n\n/**\n * Build the `auth.v.*` validator namespace from the consumer's `extend`\n * config. Each doc validator's `extend` field is rebuilt with the\n * supplied validator so the inferred type carries the real shape.\n *\n * @typeParam TExtend - The consumer's per-table `extend` validators.\n * @param extend - The `extend` map from `defineAuth` config. Defaults to\n * an empty object (all `extend` fields stay `v.any()`).\n * @returns The `auth.v` namespace: `user`, `group`, `member`, `invite`,\n * `viewer`, `viewerWithGroups`, and the `list` page-wrapper helper.\n *\n * @example\n * ```ts\n * const av = createAuthValidators({\n * User: v.object({ stripeCustomerId: v.optional(v.string()) }),\n * });\n * // Infer<typeof av.viewer> -> User document with typed `extend`\n * ```\n */\nexport function createAuthValidators<TExtend extends AuthExtendValidators>(\n extend: TExtend = {} as TExtend,\n) {\n const user = docWithExtend<typeof userFieldsX, ExtendFor<TExtend, \"User\">>(\n userFieldsX,\n (extend.User ?? v.any()) as ExtendFor<TExtend, \"User\">,\n );\n const group = docWithExtend<typeof groupFieldsX, ExtendFor<TExtend, \"Group\">>(\n groupFieldsX,\n (extend.Group ?? v.any()) as ExtendFor<TExtend, \"Group\">,\n );\n const member = docWithExtend<typeof memberFieldsX, ExtendFor<TExtend, \"GroupMember\">>(\n memberFieldsX,\n (extend.GroupMember ?? v.any()) as ExtendFor<TExtend, \"GroupMember\">,\n );\n const invite = inviteDocX;\n const email = emailDocX;\n const viewer = v.union(user, v.null());\n\n return {\n /** Single User document validator (extend-aware). */\n user,\n /** Single Group document validator (extend-aware). */\n group,\n /** Single GroupMember document validator (extend-aware). */\n member,\n /** Single GroupInvite document validator. */\n invite,\n /** Single UserEmail document validator. */\n email,\n /** `User | null` — for a `viewer`/current-user query. */\n viewer,\n /** Wrap any item validator in Convex's native pagination result shape. */\n list: vPaginated,\n /** Validators for the group connection admin facade. */\n connection: connectionValidators,\n };\n}\n\n/**\n * The `auth.v` namespace type, parameterized by the consumer's `extend`.\n *\n * @typeParam TExtend - The consumer's per-table `extend` validators.\n */\nexport type AuthValidators<TExtend extends AuthExtendValidators = {}> = ReturnType<\n typeof createAuthValidators<TExtend>\n>;\n\n/**\n * Inferred current-user document type (extend-aware).\n *\n * @typeParam TExtend - The consumer's per-table `extend` validators.\n */\nexport type Viewer<TExtend extends AuthExtendValidators = {}> = Infer<\n AuthValidators<TExtend>[\"user\"]\n>;\n/**\n * Inferred Group document type (extend-aware).\n *\n * @typeParam TExtend - The consumer's per-table `extend` validators.\n */\nexport type Group<TExtend extends AuthExtendValidators = {}> = Infer<\n AuthValidators<TExtend>[\"group\"]\n>;\n/**\n * Inferred GroupMember document type (extend-aware).\n *\n * @typeParam TExtend - The consumer's per-table `extend` validators.\n */\nexport type Membership<TExtend extends AuthExtendValidators = {}> = Infer<\n AuthValidators<TExtend>[\"member\"]\n>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validators.js","names":[],"sources":["../../src/server/validators.ts"],"sourcesContent":["/**\n * Public Convex `returns:` validators for the auth read surface.\n *\n * These back the `auth.v` namespace on the {@link defineAuth} result.\n * Consumers set them as their function `returns:` so client-side\n * `useQuery` inference flows end-to-end with zero hand-rolled validators\n * or DTO mappers. The `extend` field on User/Group/GroupMember is\n * replaced with the validator the consumer supplied via\n * `defineAuth({ extend: { ... } })`, so `viewer.extend.<field>` is fully\n * typed instead of `any`.\n *\n * @module\n */\n\nimport { type GenericId, type Infer, v, type VId, type Validator } from \"convex/values\";\n\nimport {\n vAuthEventActorType,\n vAuthEventCategory,\n vAuthEventData,\n vAuthEventKind,\n vAuthEventOutcome,\n vAuthEventSubjectType,\n vAuthEventTargetKind,\n emailFields,\n groupFields,\n type IdValidatorFn,\n inviteFields,\n memberFields,\n userFields,\n vGroupConnectionPolicy,\n vGroupConnectionProtocol,\n vGroupConnectionStatus,\n vPaginated,\n vScimStatus,\n vWebhookDeliveryStatus,\n vWebhookEndpointStatus,\n} from \"../component/model\";\n\n/**\n * `Id<T>` at the type level, `v.string()` at runtime — for cross-component\n * fields where the consumer's data model lacks the component's table tag.\n */\nconst vIdString: IdValidatorFn = <T extends string>(_table: T) =>\n v.string() as unknown as VId<GenericId<T>, \"required\">;\n\n/**\n * Validators a consumer may supply for the `extend` field of each table.\n *\n * Passed as `defineAuth({ extend })`. Every entry is optional; a missing\n * entry falls back to `v.any()`, preserving the untyped default.\n */\nexport type AuthExtendValidators = {\n /** Shape of `User.extend`. */\n User?: Validator<any, any, any>;\n /** Shape of `Group.extend`. */\n Group?: Validator<any, any, any>;\n /** Shape of `GroupMember.extend`. */\n GroupMember?: Validator<any, any, any>;\n};\n\ntype ExtendFor<TExtend extends AuthExtendValidators, K extends keyof AuthExtendValidators> =\n TExtend[K] extends Validator<any, any, any> ? TExtend[K] : ReturnType<typeof v.any>;\n\nconst docWithExtend = <\n Fields extends Record<string, Validator<any, any, any>>,\n E extends Validator<any, any, any>,\n>(\n fields: Fields,\n extend: E,\n) =>\n v.object({\n ...(fields as Omit<Fields, \"extend\">),\n extend: v.optional(extend),\n });\n\nconst userFieldsX = userFields(vIdString);\nconst groupFieldsX = groupFields(vIdString);\nconst memberFieldsX = memberFields(vIdString);\nconst inviteDocX = v.object(inviteFields(vIdString));\nconst emailDocX = v.object(emailFields(vIdString));\n\nconst vNullableString = v.union(v.string(), v.null());\nconst vNullableNumber = v.union(v.number(), v.null());\n\nconst vConnectionCheck = v.object({\n name: v.string(),\n ok: v.boolean(),\n message: v.optional(v.string()),\n});\n\nconst vConnectionIdResult = v.object({ connectionId: vIdString(\"GroupConnection\") });\n\nconst vConnectionGroupResult = v.object({\n connectionId: vIdString(\"GroupConnection\"),\n groupId: vIdString(\"Group\"),\n});\n\nconst vConnectionDoc = v.object({\n _id: vIdString(\"GroupConnection\"),\n _creationTime: v.number(),\n groupId: vIdString(\"Group\"),\n slug: v.optional(v.string()),\n name: v.optional(v.string()),\n protocol: vGroupConnectionProtocol,\n status: vGroupConnectionStatus,\n config: v.optional(v.any()),\n extend: v.optional(v.any()),\n});\n\nconst vConnectionDomainDoc = v.object({\n _id: vIdString(\"GroupConnectionDomain\"),\n _creationTime: v.number(),\n connectionId: vIdString(\"GroupConnection\"),\n groupId: vIdString(\"Group\"),\n domain: v.string(),\n isPrimary: v.boolean(),\n verifiedAt: v.optional(v.number()),\n});\n\nconst vConnectionLookup = v.union(\n v.object({\n connection: v.union(vConnectionDoc, v.null()),\n domain: v.union(vConnectionDomainDoc, v.null()),\n }),\n v.null(),\n);\n\nconst vConnectionDomainSummary = v.object({\n domainId: vIdString(\"GroupConnectionDomain\"),\n domain: v.string(),\n isPrimary: v.boolean(),\n verified: v.boolean(),\n verifiedAt: vNullableNumber,\n});\n\nconst vConnectionDomainValidation = v.object({\n connectionId: vIdString(\"GroupConnection\"),\n ready: v.boolean(),\n summary: v.object({\n domainCount: v.number(),\n primaryCount: v.number(),\n verifiedCount: v.number(),\n }),\n domains: v.array(vConnectionDomainSummary),\n warnings: v.array(v.string()),\n});\n\nconst vConnectionDomainSet = v.object({\n connectionId: vIdString(\"GroupConnection\"),\n domains: v.array(vConnectionDomainSummary),\n});\n\nconst vConnectionDomainVerificationRequest = v.object({\n connectionId: vIdString(\"GroupConnection\"),\n domain: v.string(),\n requestedAt: v.number(),\n expiresAt: v.number(),\n challenge: v.object({\n recordType: v.literal(\"TXT\"),\n recordName: v.string(),\n recordValue: v.string(),\n }),\n});\n\nconst vConnectionDomainVerificationConfirm = v.object({\n connectionId: vIdString(\"GroupConnection\"),\n domain: v.string(),\n verifiedAt: v.optional(v.number()),\n checks: v.array(vConnectionCheck),\n});\n\nconst vConnectionStatus = v.object({\n connectionId: vIdString(\"GroupConnection\"),\n status: vGroupConnectionStatus,\n ready: v.boolean(),\n domainCount: v.number(),\n protocols: v.object({\n oidc: v.object({\n configured: v.boolean(),\n ready: v.boolean(),\n clientId: vNullableString,\n issuer: vNullableString,\n }),\n saml: v.object({\n configured: v.boolean(),\n ready: v.boolean(),\n entityId: vNullableString,\n }),\n scim: v.object({\n configured: v.boolean(),\n ready: v.boolean(),\n basePath: vNullableString,\n deprovisionMode: v.union(v.literal(\"soft\"), v.literal(\"hard\")),\n }),\n }),\n});\n\nconst vConnectionOidcConfig = v.object({\n enabled: v.optional(v.boolean()),\n discovery: v.optional(v.any()),\n client: v.optional(v.any()),\n request: v.optional(v.any()),\n security: v.optional(v.any()),\n profile: v.optional(v.any()),\n hasClientSecret: v.optional(v.boolean()),\n});\n\nconst vConnectionValidation = v.object({\n ok: v.boolean(),\n connectionId: vIdString(\"GroupConnection\"),\n checks: v.array(vConnectionCheck),\n});\n\nconst vConnectionPolicyValidation = v.object({\n ok: v.boolean(),\n groupId: vIdString(\"Group\"),\n policy: v.optional(vGroupConnectionPolicy),\n checks: v.array(vConnectionCheck),\n});\n\nconst vConnectionScimConfig = v.object({\n _id: vIdString(\"GroupConnectionScimConfig\"),\n _creationTime: v.number(),\n connectionId: vIdString(\"GroupConnection\"),\n groupId: vIdString(\"Group\"),\n status: vScimStatus,\n basePath: v.string(),\n lastRotatedAt: v.optional(v.number()),\n extend: v.optional(v.any()),\n hasToken: v.boolean(),\n security: v.optional(v.any()),\n profile: v.optional(v.any()),\n});\n\nconst vConnectionScimSet = v.object({\n connectionId: vIdString(\"GroupConnection\"),\n configId: vIdString(\"GroupConnectionScimConfig\"),\n basePath: v.string(),\n token: v.string(),\n});\n\nconst vConnectionScimValidation = v.object({\n ok: v.boolean(),\n connectionId: vIdString(\"GroupConnection\"),\n basePath: v.optional(v.string()),\n deprovisionMode: v.optional(v.union(v.literal(\"soft\"), v.literal(\"hard\"))),\n capabilities: v.optional(\n v.object({\n users: v.boolean(),\n groups: v.boolean(),\n patch: v.boolean(),\n put: v.boolean(),\n filters: v.array(v.string()),\n bulk: v.boolean(),\n etag: v.boolean(),\n }),\n ),\n checks: v.array(vConnectionCheck),\n});\n\nconst vConnectionSignIn = v.object({\n connectionId: vIdString(\"GroupConnection\"),\n providerId: v.string(),\n protocol: vGroupConnectionProtocol,\n signInPath: v.string(),\n callbackPath: v.string(),\n redirectTo: v.optional(v.string()),\n});\n\nconst vConnectionAuditEvent = v.object({\n _id: vIdString(\"AuthEventProjection\"),\n _creationTime: v.number(),\n eventId: v.string(),\n targetKind: vAuthEventTargetKind,\n targetId: v.string(),\n kind: vAuthEventKind,\n category: vAuthEventCategory,\n occurredAt: v.number(),\n actorType: vAuthEventActorType,\n actorId: v.optional(v.string()),\n subjectType: vAuthEventSubjectType,\n subjectId: v.optional(v.string()),\n outcome: vAuthEventOutcome,\n errorCode: v.optional(v.string()),\n requestId: v.optional(v.string()),\n ip: v.optional(v.string()),\n data: v.optional(vAuthEventData),\n});\n\nconst vConnectionWebhookEndpoint = v.object({\n _id: vIdString(\"GroupWebhookEndpoint\"),\n _creationTime: v.number(),\n connectionId: vIdString(\"GroupConnection\"),\n groupId: vIdString(\"Group\"),\n url: v.string(),\n status: vWebhookEndpointStatus,\n subscriptions: v.array(vAuthEventKind),\n createdByUserId: v.optional(vIdString(\"User\")),\n lastSuccessAt: v.optional(v.number()),\n lastFailureAt: v.optional(v.number()),\n failureCount: v.number(),\n extend: v.optional(v.any()),\n});\n\nconst vConnectionWebhookDelivery = v.object({\n _id: vIdString(\"GroupWebhookDelivery\"),\n _creationTime: v.number(),\n connectionId: vIdString(\"GroupConnection\"),\n endpointId: vIdString(\"GroupWebhookEndpoint\"),\n eventId: v.string(),\n kind: vAuthEventKind,\n status: vWebhookDeliveryStatus,\n attemptCount: v.number(),\n nextAttemptAt: v.number(),\n lastAttemptAt: v.optional(v.number()),\n lastResponseStatus: v.optional(v.number()),\n lastError: v.optional(v.string()),\n signedAt: v.number(),\n});\n\nconst connectionValidators = {\n protocol: vGroupConnectionProtocol,\n doc: vConnectionDoc,\n lookup: vConnectionLookup,\n id: vConnectionIdResult,\n created: vConnectionGroupResult,\n status: vConnectionStatus,\n validation: vConnectionValidation,\n signIn: vConnectionSignIn,\n domain: {\n doc: vConnectionDomainDoc,\n summary: vConnectionDomainSummary,\n validation: vConnectionDomainValidation,\n upsert: vConnectionDomainSet,\n verificationRequest: vConnectionDomainVerificationRequest,\n verificationConfirm: vConnectionDomainVerificationConfirm,\n },\n oidc: {\n config: vConnectionOidcConfig,\n validation: vConnectionValidation,\n },\n saml: {\n validation: vConnectionValidation,\n metadata: v.string(),\n },\n policy: {\n config: vGroupConnectionPolicy,\n validation: vConnectionPolicyValidation,\n },\n scim: {\n config: vConnectionScimConfig,\n upsert: vConnectionScimSet,\n validation: vConnectionScimValidation,\n },\n audit: {\n event: vConnectionAuditEvent,\n },\n webhook: {\n endpoint: vConnectionWebhookEndpoint,\n delivery: vConnectionWebhookDelivery,\n disabled: v.object({ endpointId: vIdString(\"GroupWebhookEndpoint\") }),\n },\n};\n\n/**\n * Build the `auth.v.*` validator namespace from the consumer's `extend`\n * config. Each doc validator's `extend` field is rebuilt with the\n * supplied validator so the inferred type carries the real shape.\n *\n * @typeParam TExtend - The consumer's per-table `extend` validators.\n * @param extend - The `extend` map from `defineAuth` config. Defaults to\n * an empty object (all `extend` fields stay `v.any()`).\n * @returns The `auth.v` namespace: `user`, `group`, `member`, `invite`,\n * `viewer`, `viewerWithGroups`, and the `list` page-wrapper helper.\n *\n * @example\n * ```ts\n * const av = createAuthValidators({\n * User: v.object({ stripeCustomerId: v.optional(v.string()) }),\n * });\n * // Infer<typeof av.viewer> -> User document with typed `extend`\n * ```\n */\nexport function createAuthValidators<TExtend extends AuthExtendValidators>(\n extend: TExtend = {} as TExtend,\n) {\n const user = docWithExtend<typeof userFieldsX, ExtendFor<TExtend, \"User\">>(\n userFieldsX,\n (extend.User ?? v.any()) as ExtendFor<TExtend, \"User\">,\n );\n const group = docWithExtend<typeof groupFieldsX, ExtendFor<TExtend, \"Group\">>(\n groupFieldsX,\n (extend.Group ?? v.any()) as ExtendFor<TExtend, \"Group\">,\n );\n const member = docWithExtend<typeof memberFieldsX, ExtendFor<TExtend, \"GroupMember\">>(\n memberFieldsX,\n (extend.GroupMember ?? v.any()) as ExtendFor<TExtend, \"GroupMember\">,\n );\n const invite = inviteDocX;\n const email = emailDocX;\n const viewer = v.union(user, v.null());\n\n return {\n /**\n * Typed component document IDs. They validate as strings because this\n * application crosses a component boundary, while preserving the exact\n * component table identity in TypeScript.\n */\n id: vIdString,\n /** Single User document validator (extend-aware). */\n user,\n /** Single Group document validator (extend-aware). */\n group,\n /** Single GroupMember document validator (extend-aware). */\n member,\n /** Single GroupInvite document validator. */\n invite,\n /** Single UserEmail document validator. */\n email,\n /** `User | null` — for a `viewer`/current-user query. */\n viewer,\n /** Wrap any item validator in Convex's native pagination result shape. */\n list: vPaginated,\n /** Validators for the group connection admin facade. */\n connection: connectionValidators,\n };\n}\n\n/**\n * The `auth.v` namespace type, parameterized by the consumer's `extend`.\n *\n * @typeParam TExtend - The consumer's per-table `extend` validators.\n */\nexport type AuthValidators<TExtend extends AuthExtendValidators = {}> = ReturnType<\n typeof createAuthValidators<TExtend>\n>;\n\n/**\n * Inferred current-user document type (extend-aware).\n *\n * @typeParam TExtend - The consumer's per-table `extend` validators.\n */\nexport type Viewer<TExtend extends AuthExtendValidators = {}> = Infer<\n AuthValidators<TExtend>[\"user\"]\n>;\n/**\n * Inferred Group document type (extend-aware).\n *\n * @typeParam TExtend - The consumer's per-table `extend` validators.\n */\nexport type Group<TExtend extends AuthExtendValidators = {}> = Infer<\n AuthValidators<TExtend>[\"group\"]\n>;\n/**\n * Inferred GroupMember document type (extend-aware).\n *\n * @typeParam TExtend - The consumer's per-table `extend` validators.\n */\nexport type Membership<TExtend extends AuthExtendValidators = {}> = Infer<\n AuthValidators<TExtend>[\"member\"]\n>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA2CA,MAAM,aAA8C,WAClD,EAAE,QAAQ;AAoBZ,MAAM,iBAIJ,QACA,WAEA,EAAE,OAAO;CACP,GAAI;CACJ,QAAQ,EAAE,SAAS,OAAO;CAC3B,CAAC;AAEJ,MAAM,cAAc,WAAW,UAAU;AACzC,MAAM,eAAe,YAAY,UAAU;AAC3C,MAAM,gBAAgB,aAAa,UAAU;AAC7C,MAAM,aAAa,EAAE,OAAO,aAAa,UAAU,CAAC;AACpD,MAAM,YAAY,EAAE,OAAO,YAAY,UAAU,CAAC;AAElD,MAAM,kBAAkB,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,MAAM,CAAC;AACrD,MAAM,kBAAkB,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,MAAM,CAAC;AAErD,MAAM,mBAAmB,EAAE,OAAO;CAChC,MAAM,EAAE,QAAQ;CAChB,IAAI,EAAE,SAAS;CACf,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC;CAChC,CAAC;AAEF,MAAM,sBAAsB,EAAE,OAAO,EAAE,cAAc,UAAU,kBAAkB,EAAE,CAAC;AAEpF,MAAM,yBAAyB,EAAE,OAAO;CACtC,cAAc,UAAU,kBAAkB;CAC1C,SAAS,UAAU,QAAQ;CAC5B,CAAC;AAEF,MAAM,iBAAiB,EAAE,OAAO;CAC9B,KAAK,UAAU,kBAAkB;CACjC,eAAe,EAAE,QAAQ;CACzB,SAAS,UAAU,QAAQ;CAC3B,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC;CAC5B,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC;CAC5B,UAAU;CACV,QAAQ;CACR,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;CAC3B,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;CAC5B,CAAC;AAEF,MAAM,uBAAuB,EAAE,OAAO;CACpC,KAAK,UAAU,wBAAwB;CACvC,eAAe,EAAE,QAAQ;CACzB,cAAc,UAAU,kBAAkB;CAC1C,SAAS,UAAU,QAAQ;CAC3B,QAAQ,EAAE,QAAQ;CAClB,WAAW,EAAE,SAAS;CACtB,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC;CACnC,CAAC;AAEF,MAAM,oBAAoB,EAAE,MAC1B,EAAE,OAAO;CACP,YAAY,EAAE,MAAM,gBAAgB,EAAE,MAAM,CAAC;CAC7C,QAAQ,EAAE,MAAM,sBAAsB,EAAE,MAAM,CAAC;CAChD,CAAC,EACF,EAAE,MAAM,CACT;AAED,MAAM,2BAA2B,EAAE,OAAO;CACxC,UAAU,UAAU,wBAAwB;CAC5C,QAAQ,EAAE,QAAQ;CAClB,WAAW,EAAE,SAAS;CACtB,UAAU,EAAE,SAAS;CACrB,YAAY;CACb,CAAC;AAEF,MAAM,8BAA8B,EAAE,OAAO;CAC3C,cAAc,UAAU,kBAAkB;CAC1C,OAAO,EAAE,SAAS;CAClB,SAAS,EAAE,OAAO;EAChB,aAAa,EAAE,QAAQ;EACvB,cAAc,EAAE,QAAQ;EACxB,eAAe,EAAE,QAAQ;EAC1B,CAAC;CACF,SAAS,EAAE,MAAM,yBAAyB;CAC1C,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC;CAC9B,CAAC;AAEF,MAAM,uBAAuB,EAAE,OAAO;CACpC,cAAc,UAAU,kBAAkB;CAC1C,SAAS,EAAE,MAAM,yBAAyB;CAC3C,CAAC;AAEF,MAAM,uCAAuC,EAAE,OAAO;CACpD,cAAc,UAAU,kBAAkB;CAC1C,QAAQ,EAAE,QAAQ;CAClB,aAAa,EAAE,QAAQ;CACvB,WAAW,EAAE,QAAQ;CACrB,WAAW,EAAE,OAAO;EAClB,YAAY,EAAE,QAAQ,MAAM;EAC5B,YAAY,EAAE,QAAQ;EACtB,aAAa,EAAE,QAAQ;EACxB,CAAC;CACH,CAAC;AAEF,MAAM,uCAAuC,EAAE,OAAO;CACpD,cAAc,UAAU,kBAAkB;CAC1C,QAAQ,EAAE,QAAQ;CAClB,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC;CAClC,QAAQ,EAAE,MAAM,iBAAiB;CAClC,CAAC;AAEF,MAAM,oBAAoB,EAAE,OAAO;CACjC,cAAc,UAAU,kBAAkB;CAC1C,QAAQ;CACR,OAAO,EAAE,SAAS;CAClB,aAAa,EAAE,QAAQ;CACvB,WAAW,EAAE,OAAO;EAClB,MAAM,EAAE,OAAO;GACb,YAAY,EAAE,SAAS;GACvB,OAAO,EAAE,SAAS;GAClB,UAAU;GACV,QAAQ;GACT,CAAC;EACF,MAAM,EAAE,OAAO;GACb,YAAY,EAAE,SAAS;GACvB,OAAO,EAAE,SAAS;GAClB,UAAU;GACX,CAAC;EACF,MAAM,EAAE,OAAO;GACb,YAAY,EAAE,SAAS;GACvB,OAAO,EAAE,SAAS;GAClB,UAAU;GACV,iBAAiB,EAAE,MAAM,EAAE,QAAQ,OAAO,EAAE,EAAE,QAAQ,OAAO,CAAC;GAC/D,CAAC;EACH,CAAC;CACH,CAAC;AAEF,MAAM,wBAAwB,EAAE,OAAO;CACrC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;CAChC,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC;CAC9B,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;CAC3B,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC;CAC5B,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC;CAC7B,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC;CAC5B,iBAAiB,EAAE,SAAS,EAAE,SAAS,CAAC;CACzC,CAAC;AAEF,MAAM,wBAAwB,EAAE,OAAO;CACrC,IAAI,EAAE,SAAS;CACf,cAAc,UAAU,kBAAkB;CAC1C,QAAQ,EAAE,MAAM,iBAAiB;CAClC,CAAC;AAEF,MAAM,8BAA8B,EAAE,OAAO;CAC3C,IAAI,EAAE,SAAS;CACf,SAAS,UAAU,QAAQ;CAC3B,QAAQ,EAAE,SAAS,uBAAuB;CAC1C,QAAQ,EAAE,MAAM,iBAAiB;CAClC,CAAC;AAEF,MAAM,wBAAwB,EAAE,OAAO;CACrC,KAAK,UAAU,4BAA4B;CAC3C,eAAe,EAAE,QAAQ;CACzB,cAAc,UAAU,kBAAkB;CAC1C,SAAS,UAAU,QAAQ;CAC3B,QAAQ;CACR,UAAU,EAAE,QAAQ;CACpB,eAAe,EAAE,SAAS,EAAE,QAAQ,CAAC;CACrC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;CAC3B,UAAU,EAAE,SAAS;CACrB,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC;CAC7B,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC;CAC7B,CAAC;AAEF,MAAM,qBAAqB,EAAE,OAAO;CAClC,cAAc,UAAU,kBAAkB;CAC1C,UAAU,UAAU,4BAA4B;CAChD,UAAU,EAAE,QAAQ;CACpB,OAAO,EAAE,QAAQ;CAClB,CAAC;AAEF,MAAM,4BAA4B,EAAE,OAAO;CACzC,IAAI,EAAE,SAAS;CACf,cAAc,UAAU,kBAAkB;CAC1C,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC;CAChC,iBAAiB,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,OAAO,EAAE,EAAE,QAAQ,OAAO,CAAC,CAAC;CAC1E,cAAc,EAAE,SACd,EAAE,OAAO;EACP,OAAO,EAAE,SAAS;EAClB,QAAQ,EAAE,SAAS;EACnB,OAAO,EAAE,SAAS;EAClB,KAAK,EAAE,SAAS;EAChB,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC;EAC5B,MAAM,EAAE,SAAS;EACjB,MAAM,EAAE,SAAS;EAClB,CAAC,CACH;CACD,QAAQ,EAAE,MAAM,iBAAiB;CAClC,CAAC;AAEF,MAAM,oBAAoB,EAAE,OAAO;CACjC,cAAc,UAAU,kBAAkB;CAC1C,YAAY,EAAE,QAAQ;CACtB,UAAU;CACV,YAAY,EAAE,QAAQ;CACtB,cAAc,EAAE,QAAQ;CACxB,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC;CACnC,CAAC;AAEF,MAAM,wBAAwB,EAAE,OAAO;CACrC,KAAK,UAAU,sBAAsB;CACrC,eAAe,EAAE,QAAQ;CACzB,SAAS,EAAE,QAAQ;CACnB,YAAY;CACZ,UAAU,EAAE,QAAQ;CACpB,MAAM;CACN,UAAU;CACV,YAAY,EAAE,QAAQ;CACtB,WAAW;CACX,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC;CAC/B,aAAa;CACb,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC;CACjC,SAAS;CACT,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC;CACjC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC;CACjC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC;CAC1B,MAAM,EAAE,SAAS,eAAe;CACjC,CAAC;AAEF,MAAM,6BAA6B,EAAE,OAAO;CAC1C,KAAK,UAAU,uBAAuB;CACtC,eAAe,EAAE,QAAQ;CACzB,cAAc,UAAU,kBAAkB;CAC1C,SAAS,UAAU,QAAQ;CAC3B,KAAK,EAAE,QAAQ;CACf,QAAQ;CACR,eAAe,EAAE,MAAM,eAAe;CACtC,iBAAiB,EAAE,SAAS,UAAU,OAAO,CAAC;CAC9C,eAAe,EAAE,SAAS,EAAE,QAAQ,CAAC;CACrC,eAAe,EAAE,SAAS,EAAE,QAAQ,CAAC;CACrC,cAAc,EAAE,QAAQ;CACxB,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;CAC5B,CAAC;AAEF,MAAM,6BAA6B,EAAE,OAAO;CAC1C,KAAK,UAAU,uBAAuB;CACtC,eAAe,EAAE,QAAQ;CACzB,cAAc,UAAU,kBAAkB;CAC1C,YAAY,UAAU,uBAAuB;CAC7C,SAAS,EAAE,QAAQ;CACnB,MAAM;CACN,QAAQ;CACR,cAAc,EAAE,QAAQ;CACxB,eAAe,EAAE,QAAQ;CACzB,eAAe,EAAE,SAAS,EAAE,QAAQ,CAAC;CACrC,oBAAoB,EAAE,SAAS,EAAE,QAAQ,CAAC;CAC1C,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC;CACjC,UAAU,EAAE,QAAQ;CACrB,CAAC;AAEF,MAAM,uBAAuB;CAC3B,UAAU;CACV,KAAK;CACL,QAAQ;CACR,IAAI;CACJ,SAAS;CACT,QAAQ;CACR,YAAY;CACZ,QAAQ;CACR,QAAQ;EACN,KAAK;EACL,SAAS;EACT,YAAY;EACZ,QAAQ;EACR,qBAAqB;EACrB,qBAAqB;EACtB;CACD,MAAM;EACJ,QAAQ;EACR,YAAY;EACb;CACD,MAAM;EACJ,YAAY;EACZ,UAAU,EAAE,QAAQ;EACrB;CACD,QAAQ;EACN,QAAQ;EACR,YAAY;EACb;CACD,MAAM;EACJ,QAAQ;EACR,QAAQ;EACR,YAAY;EACb;CACD,OAAO,EACL,OAAO,uBACR;CACD,SAAS;EACP,UAAU;EACV,UAAU;EACV,UAAU,EAAE,OAAO,EAAE,YAAY,UAAU,uBAAuB,EAAE,CAAC;EACtE;CACF;;;;;;;;;;;;;;;;;;;;AAqBD,SAAgB,qBACd,SAAkB,EAAE,EACpB;CACA,MAAM,OAAO,cACX,aACC,OAAO,QAAQ,EAAE,KAAK,CACxB;AAaD,QAAO;EAML,IAAI;EAEJ;EAEA,OAtBY,cACZ,cACC,OAAO,SAAS,EAAE,KAAK,CACzB;EAqBC,QApBa,cACb,eACC,OAAO,eAAe,EAAE,KAAK,CAC/B;EAmBC,QAlBa;EAoBb,OAnBY;EAqBZ,QApBa,EAAE,MAAM,MAAM,EAAE,MAAM,CAAC;EAsBpC,MAAM;EAEN,YAAY;EACb"}
|
package/dist/server/webauthn.js
CHANGED
|
@@ -7,7 +7,7 @@ import { queueAuthEvent } from "./events.js";
|
|
|
7
7
|
import { log } from "./log.js";
|
|
8
8
|
import { encodeRefreshToken, refreshTokenExpirationTime } from "./token/refresh.js";
|
|
9
9
|
import { setActiveSpanAttributes } from "./utils/span.js";
|
|
10
|
-
import { buildSessionIdentity, finalizeSessionIssuance, getAuthSessionId, sessionExpirationTime } from "./session/lifecycle.js";
|
|
10
|
+
import { buildSessionIdentity, finalizeSessionIssuance, getAuthSessionId, getAuthSessionReplacement, sessionExpirationTime } from "./session/lifecycle.js";
|
|
11
11
|
import { authFlowError } from "../shared/errors.js";
|
|
12
12
|
import { toConvexError } from "./errors.js";
|
|
13
13
|
import { buildKnownSignInIdentityAttributes } from "./telemetry.js";
|
|
@@ -541,7 +541,7 @@ async function handleWebAuthn(ctx, provider, args) {
|
|
|
541
541
|
const data = registrationData(userId, credentialId, publicKeyBytes, algorithm, authData.signatureCounter, backupState, params, attestationEvidence, ctx);
|
|
542
542
|
if (continuationId === void 0) completed = await mutatePasskeyCompleteRegistration(ctx, {
|
|
543
543
|
...data,
|
|
544
|
-
|
|
544
|
+
replaceSession: await getAuthSessionReplacement(ctx)
|
|
545
545
|
});
|
|
546
546
|
else {
|
|
547
547
|
const rotation = await mutatePasskeyCompleteRotation(ctx, {
|
|
@@ -656,7 +656,7 @@ async function handleWebAuthn(ctx, provider, args) {
|
|
|
656
656
|
validateBackupEligibility(passkey.deviceType, backupState.deviceType);
|
|
657
657
|
if (rp.registration.attestation) await assertStoredAttestationTrusted(rp.registration.attestation, passkey.attestation);
|
|
658
658
|
if ((passkey.counter !== 0 || authenticatorData.signatureCounter !== 0) && authenticatorData.signatureCounter <= passkey.counter) throw convexError(ErrorCode.PASSKEY_COUNTER_ERROR, "Authenticator counter did not increase — possible credential cloning detected.");
|
|
659
|
-
const
|
|
659
|
+
const replaceSession = await getAuthSessionReplacement(ctx);
|
|
660
660
|
let completed;
|
|
661
661
|
try {
|
|
662
662
|
completed = await mutatePasskeyCompleteAssertion(ctx, {
|
|
@@ -664,7 +664,7 @@ async function handleWebAuthn(ctx, provider, args) {
|
|
|
664
664
|
counter: authenticatorData.signatureCounter,
|
|
665
665
|
lastUsedAt: Date.now(),
|
|
666
666
|
backedUp: backupState.backedUp,
|
|
667
|
-
|
|
667
|
+
replaceSession,
|
|
668
668
|
sessionExpirationTime: sessionExpirationTime(ctx.auth.config),
|
|
669
669
|
refreshTokenExpirationTime: refreshTokenExpirationTime(ctx.auth.config)
|
|
670
670
|
});
|