@robelest/convex-auth 0.0.4-preview.13 → 0.0.4-preview.15
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 +140 -9
- package/dist/bin.cjs +5957 -5478
- package/dist/client/index.d.ts +3 -7
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +27 -26
- package/dist/client/index.js.map +1 -1
- package/dist/component/_generated/api.d.ts +14 -0
- 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 +1513 -3
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/convex.config.d.ts +2 -2
- package/dist/component/convex.config.d.ts.map +1 -1
- package/dist/component/model.d.ts +153 -0
- package/dist/component/model.d.ts.map +1 -0
- package/dist/component/model.js +327 -0
- package/dist/component/model.js.map +1 -0
- package/dist/component/providers/sso.d.ts +1 -1
- package/dist/component/public/enterprise.d.ts +49 -0
- package/dist/component/public/enterprise.d.ts.map +1 -0
- package/dist/component/public/enterprise.js +450 -0
- package/dist/component/public/enterprise.js.map +1 -0
- package/dist/component/public/factors.d.ts +52 -0
- package/dist/component/public/factors.d.ts.map +1 -0
- package/dist/component/public/factors.js +285 -0
- package/dist/component/public/factors.js.map +1 -0
- package/dist/component/public/groups.d.ts +118 -0
- package/dist/component/public/groups.d.ts.map +1 -0
- package/dist/component/public/groups.js +599 -0
- package/dist/component/public/groups.js.map +1 -0
- package/dist/component/public/identity.d.ts +93 -0
- package/dist/component/public/identity.d.ts.map +1 -0
- package/dist/component/public/identity.js +426 -0
- package/dist/component/public/identity.js.map +1 -0
- package/dist/component/public/keys.d.ts +41 -0
- package/dist/component/public/keys.d.ts.map +1 -0
- package/dist/component/public/keys.js +157 -0
- package/dist/component/public/keys.js.map +1 -0
- package/dist/component/public/shared.d.ts +26 -0
- package/dist/component/public/shared.d.ts.map +1 -0
- package/dist/component/public/shared.js +32 -0
- package/dist/component/public/shared.js.map +1 -0
- package/dist/component/public.d.ts +9 -321
- package/dist/component/public.d.ts.map +1 -1
- package/dist/component/public.js +6 -2145
- package/dist/component/schema.d.ts +368 -258
- package/dist/component/schema.js +23 -27
- package/dist/component/schema.js.map +1 -1
- package/dist/component/server/auth.d.ts +42 -7
- package/dist/component/server/auth.d.ts.map +1 -1
- package/dist/component/server/auth.js +70 -6
- package/dist/component/server/auth.js.map +1 -1
- package/dist/component/server/cookies.js +3 -0
- package/dist/component/server/cookies.js.map +1 -1
- package/dist/component/server/db.js +1 -0
- package/dist/component/server/db.js.map +1 -1
- package/dist/component/server/device.js +3 -1
- package/dist/component/server/device.js.map +1 -1
- package/dist/component/server/domains/core.js +466 -0
- package/dist/component/server/domains/core.js.map +1 -0
- package/dist/component/server/domains/sso.js +689 -0
- package/dist/component/server/domains/sso.js.map +1 -0
- package/dist/component/server/factory.d.ts +136 -0
- package/dist/component/server/factory.d.ts.map +1 -0
- package/dist/component/server/factory.js +1128 -0
- package/dist/component/server/factory.js.map +1 -0
- package/dist/component/server/fx.js +2 -1
- package/dist/component/server/fx.js.map +1 -1
- package/dist/component/server/http.js +287 -0
- package/dist/component/server/http.js.map +1 -0
- package/dist/component/server/identity.js +13 -0
- package/dist/component/server/identity.js.map +1 -0
- package/dist/component/server/keys.js +4 -0
- package/dist/component/server/keys.js.map +1 -1
- package/dist/component/server/mutations/account.js +1 -1
- package/dist/component/server/mutations/index.js +2 -2
- package/dist/component/server/mutations/index.js.map +1 -1
- package/dist/component/server/mutations/invalidate.js +1 -1
- package/dist/component/server/mutations/oauth.js +10 -7
- package/dist/component/server/mutations/oauth.js.map +1 -1
- package/dist/component/server/mutations/refresh.js +1 -1
- package/dist/component/server/mutations/register.js +1 -1
- package/dist/component/server/mutations/retrieve.js +1 -1
- package/dist/component/server/mutations/signature.js +1 -1
- package/dist/component/server/mutations/store.js +6 -3
- package/dist/component/server/mutations/store.js.map +1 -1
- package/dist/component/server/mutations/verify.js +1 -1
- package/dist/component/server/oauth.js +3 -0
- package/dist/component/server/oauth.js.map +1 -1
- package/dist/component/server/passkey.js +3 -2
- package/dist/component/server/passkey.js.map +1 -1
- package/dist/component/server/provider.js +2 -0
- package/dist/component/server/provider.js.map +1 -1
- package/dist/component/server/providers.js +3 -0
- package/dist/component/server/providers.js.map +1 -1
- package/dist/component/server/ratelimit.js +3 -0
- package/dist/component/server/ratelimit.js.map +1 -1
- package/dist/component/server/redirects.js +2 -0
- package/dist/component/server/redirects.js.map +1 -1
- package/dist/component/server/refresh.js +5 -0
- package/dist/component/server/refresh.js.map +1 -1
- package/dist/component/server/sessions.js +5 -0
- package/dist/component/server/sessions.js.map +1 -1
- package/dist/component/server/signin.js +2 -1
- package/dist/component/server/signin.js.map +1 -1
- package/dist/component/server/sso.js +166 -19
- package/dist/component/server/sso.js.map +1 -1
- package/dist/component/server/tokens.js +1 -0
- package/dist/component/server/tokens.js.map +1 -1
- package/dist/component/server/totp.js +4 -2
- package/dist/component/server/totp.js.map +1 -1
- package/dist/component/server/types.d.ts +50 -35
- package/dist/component/server/types.d.ts.map +1 -1
- package/dist/component/server/types.js.map +1 -1
- package/dist/component/server/users.js +1 -0
- package/dist/component/server/users.js.map +1 -1
- package/dist/component/server/utils.js +44 -2
- package/dist/component/server/utils.js.map +1 -1
- package/dist/providers/anonymous.d.ts +1 -1
- package/dist/providers/credentials.d.ts +1 -1
- package/dist/providers/password.d.ts +1 -1
- package/dist/providers/sso.d.ts +1 -1
- package/dist/providers/sso.js.map +1 -1
- package/dist/server/auth.d.ts +44 -9
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +70 -6
- package/dist/server/auth.js.map +1 -1
- package/dist/server/cookies.d.ts +1 -38
- package/dist/server/cookies.js +3 -0
- package/dist/server/cookies.js.map +1 -1
- package/dist/server/db.d.ts +1 -125
- package/dist/server/db.js +1 -0
- package/dist/server/db.js.map +1 -1
- package/dist/server/device.d.ts +1 -24
- package/dist/server/device.js +3 -1
- package/dist/server/device.js.map +1 -1
- package/dist/server/domains/core.d.ts +320 -0
- package/dist/server/domains/core.d.ts.map +1 -0
- package/dist/server/domains/core.js +466 -0
- package/dist/server/domains/core.js.map +1 -0
- package/dist/server/domains/sso.d.ts +340 -0
- package/dist/server/domains/sso.d.ts.map +1 -0
- package/dist/server/domains/sso.js +689 -0
- package/dist/server/domains/sso.js.map +1 -0
- package/dist/server/enterpriseValidators.d.ts +1 -0
- package/dist/server/enterpriseValidators.js +56 -0
- package/dist/server/enterpriseValidators.js.map +1 -0
- package/dist/server/factory.d.ts +136 -0
- package/dist/server/factory.d.ts.map +1 -0
- package/dist/server/factory.js +1128 -0
- package/dist/server/factory.js.map +1 -0
- package/dist/server/fx.d.ts +1 -16
- package/dist/server/fx.d.ts.map +1 -1
- package/dist/server/fx.js +1 -0
- package/dist/server/fx.js.map +1 -1
- package/dist/server/http.d.ts +59 -0
- package/dist/server/http.d.ts.map +1 -0
- package/dist/server/http.js +287 -0
- package/dist/server/http.js.map +1 -0
- package/dist/server/identity.d.ts +1 -0
- package/dist/server/identity.js +13 -0
- package/dist/server/identity.js.map +1 -0
- package/dist/server/index.d.ts +432 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +486 -36
- package/dist/server/index.js.map +1 -1
- package/dist/server/keys.d.ts +1 -57
- package/dist/server/keys.js +4 -0
- package/dist/server/keys.js.map +1 -1
- package/dist/server/mutations/account.d.ts +7 -7
- package/dist/server/mutations/account.d.ts.map +1 -1
- package/dist/server/mutations/code.d.ts +13 -13
- package/dist/server/mutations/index.d.ts +107 -107
- package/dist/server/mutations/index.d.ts.map +1 -1
- package/dist/server/mutations/index.js +1 -1
- package/dist/server/mutations/index.js.map +1 -1
- package/dist/server/mutations/invalidate.d.ts +5 -5
- package/dist/server/mutations/oauth.d.ts +10 -10
- package/dist/server/mutations/oauth.d.ts.map +1 -1
- package/dist/server/mutations/oauth.js +9 -6
- package/dist/server/mutations/oauth.js.map +1 -1
- package/dist/server/mutations/refresh.d.ts +4 -4
- package/dist/server/mutations/register.d.ts +12 -12
- package/dist/server/mutations/register.d.ts.map +1 -1
- package/dist/server/mutations/retrieve.d.ts +1 -1
- package/dist/server/mutations/signature.d.ts +5 -5
- package/dist/server/mutations/signature.d.ts.map +1 -1
- package/dist/server/mutations/signin.d.ts +1 -1
- package/dist/server/mutations/signout.d.ts +1 -1
- package/dist/server/mutations/store.d.ts +3 -2
- package/dist/server/mutations/store.d.ts.map +1 -1
- package/dist/server/mutations/store.js +6 -3
- package/dist/server/mutations/store.js.map +1 -1
- package/dist/server/mutations/verifier.d.ts +1 -1
- package/dist/server/mutations/verify.d.ts +4 -4
- package/dist/server/oauth.d.ts +1 -59
- package/dist/server/oauth.js +3 -0
- package/dist/server/oauth.js.map +1 -1
- package/dist/server/passkey.d.ts.map +1 -1
- package/dist/server/passkey.js +3 -2
- package/dist/server/passkey.js.map +1 -1
- package/dist/server/provider.d.ts +1 -14
- package/dist/server/provider.d.ts.map +1 -1
- package/dist/server/provider.js +2 -0
- package/dist/server/provider.js.map +1 -1
- package/dist/server/providers.js +3 -0
- package/dist/server/providers.js.map +1 -1
- package/dist/server/ratelimit.d.ts +1 -22
- package/dist/server/ratelimit.js +3 -0
- package/dist/server/ratelimit.js.map +1 -1
- package/dist/server/redirects.d.ts +1 -10
- package/dist/server/redirects.js +2 -0
- package/dist/server/redirects.js.map +1 -1
- package/dist/server/refresh.d.ts +1 -37
- package/dist/server/refresh.js +5 -0
- package/dist/server/refresh.js.map +1 -1
- package/dist/server/sessions.d.ts +1 -28
- package/dist/server/sessions.js +5 -0
- package/dist/server/sessions.js.map +1 -1
- package/dist/server/signin.d.ts +1 -55
- package/dist/server/signin.js +2 -1
- package/dist/server/signin.js.map +1 -1
- package/dist/server/sso.d.ts +1 -348
- package/dist/server/sso.js +165 -18
- package/dist/server/sso.js.map +1 -1
- package/dist/server/templates.d.ts +1 -21
- package/dist/server/templates.js +1 -0
- package/dist/server/templates.js.map +1 -1
- package/dist/server/tokens.d.ts +1 -11
- package/dist/server/tokens.js +1 -0
- package/dist/server/tokens.js.map +1 -1
- package/dist/server/totp.d.ts +1 -23
- package/dist/server/totp.js +4 -2
- package/dist/server/totp.js.map +1 -1
- package/dist/server/types.d.ts +55 -71
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js.map +1 -1
- package/dist/server/users.d.ts +1 -31
- package/dist/server/users.js +1 -0
- package/dist/server/users.js.map +1 -1
- package/dist/server/utils.d.ts +1 -27
- package/dist/server/utils.js +44 -2
- package/dist/server/utils.js.map +1 -1
- package/dist/server/version.d.ts +1 -1
- package/dist/server/version.js +1 -1
- package/dist/server/version.js.map +1 -1
- package/package.json +4 -5
- package/src/cli/bin.ts +5 -0
- package/src/cli/index.ts +22 -9
- package/src/cli/keys.ts +3 -0
- package/src/client/index.ts +36 -37
- package/src/component/_generated/api.ts +14 -0
- package/src/component/_generated/component.ts +1920 -3
- package/src/component/index.ts +2 -0
- package/src/component/model.ts +424 -0
- package/src/component/public/enterprise.ts +654 -0
- package/src/component/public/factors.ts +332 -0
- package/src/component/public/groups.ts +951 -0
- package/src/component/public/identity.ts +566 -0
- package/src/component/public/keys.ts +209 -0
- package/src/component/public/shared.ts +117 -0
- package/src/component/public.ts +5 -2965
- package/src/component/schema.ts +47 -57
- package/src/providers/sso.ts +1 -1
- package/src/server/auth.ts +192 -9
- package/src/server/cookies.ts +3 -0
- package/src/server/db.ts +3 -0
- package/src/server/device.ts +3 -1
- package/src/server/domains/core.ts +916 -0
- package/src/server/domains/sso.ts +1462 -0
- package/src/server/enterpriseValidators.ts +88 -0
- package/src/server/factory.ts +2168 -0
- package/src/server/fx.ts +1 -0
- package/src/server/http.ts +529 -0
- package/src/server/identity.ts +18 -0
- package/src/server/index.ts +712 -40
- package/src/server/keys.ts +4 -0
- package/src/server/mutations/index.ts +1 -1
- package/src/server/mutations/oauth.ts +36 -8
- package/src/server/mutations/store.ts +6 -3
- package/src/server/oauth.ts +6 -0
- package/src/server/passkey.ts +3 -2
- package/src/server/provider.ts +2 -0
- package/src/server/providers.ts +3 -0
- package/src/server/ratelimit.ts +3 -0
- package/src/server/redirects.ts +2 -0
- package/src/server/refresh.ts +5 -0
- package/src/server/sessions.ts +5 -0
- package/src/server/signin.ts +1 -0
- package/src/server/sso.ts +251 -17
- package/src/server/templates.ts +1 -0
- package/src/server/tokens.ts +1 -0
- package/src/server/totp.ts +4 -2
- package/src/server/types.ts +85 -77
- package/src/server/users.ts +1 -0
- package/src/server/utils.ts +71 -1
- package/src/server/version.ts +1 -1
- package/dist/component/public.js.map +0 -1
- package/dist/component/server/implementation.d.ts +0 -1264
- package/dist/component/server/implementation.d.ts.map +0 -1
- package/dist/component/server/implementation.js +0 -2365
- package/dist/component/server/implementation.js.map +0 -1
- package/dist/server/cookies.d.ts.map +0 -1
- package/dist/server/db.d.ts.map +0 -1
- package/dist/server/device.d.ts.map +0 -1
- package/dist/server/implementation.d.ts +0 -1264
- package/dist/server/implementation.d.ts.map +0 -1
- package/dist/server/implementation.js +0 -2365
- package/dist/server/implementation.js.map +0 -1
- package/dist/server/keys.d.ts.map +0 -1
- package/dist/server/oauth.d.ts.map +0 -1
- package/dist/server/ratelimit.d.ts.map +0 -1
- package/dist/server/redirects.d.ts.map +0 -1
- package/dist/server/refresh.d.ts.map +0 -1
- package/dist/server/sessions.d.ts.map +0 -1
- package/dist/server/signin.d.ts.map +0 -1
- package/dist/server/sso.d.ts.map +0 -1
- package/dist/server/templates.d.ts.map +0 -1
- package/dist/server/tokens.d.ts.map +0 -1
- package/dist/server/totp.d.ts.map +0 -1
- package/dist/server/users.d.ts.map +0 -1
- package/dist/server/utils.d.ts.map +0 -1
- package/src/server/implementation.ts +0 -5336
package/src/server/types.ts
CHANGED
|
@@ -12,8 +12,17 @@ import {
|
|
|
12
12
|
RegisteredQuery,
|
|
13
13
|
TableNamesInDataModel,
|
|
14
14
|
} from "convex/server";
|
|
15
|
+
import type { Infer } from "convex/values";
|
|
15
16
|
import { GenericId, Value } from "convex/values";
|
|
16
17
|
|
|
18
|
+
import {
|
|
19
|
+
vApiKeyDoc,
|
|
20
|
+
vAuthVerifierDoc,
|
|
21
|
+
vDeviceCodeDoc,
|
|
22
|
+
vPasskeyDoc,
|
|
23
|
+
vTotpFactorDoc,
|
|
24
|
+
vUserDoc,
|
|
25
|
+
} from "../component/model";
|
|
17
26
|
import schema from "../component/schema";
|
|
18
27
|
import { CredentialsUserConfig } from "../providers/credentials";
|
|
19
28
|
|
|
@@ -282,6 +291,62 @@ export interface SSOProviderConfig {
|
|
|
282
291
|
type: "sso";
|
|
283
292
|
}
|
|
284
293
|
|
|
294
|
+
export type EnterpriseAccountLinkingPolicy = "verifiedEmail" | "none";
|
|
295
|
+
|
|
296
|
+
export type EnterpriseScimReuseUserPolicy = "externalId" | "none";
|
|
297
|
+
|
|
298
|
+
export type EnterpriseJitProvisioningMode =
|
|
299
|
+
| "off"
|
|
300
|
+
| "createUser"
|
|
301
|
+
| "createUserAndMembership";
|
|
302
|
+
|
|
303
|
+
export type EnterpriseDeprovisionMode = "soft" | "hard";
|
|
304
|
+
|
|
305
|
+
export interface EnterprisePolicy {
|
|
306
|
+
version: 1;
|
|
307
|
+
identity: {
|
|
308
|
+
accountLinking: {
|
|
309
|
+
oidc: EnterpriseAccountLinkingPolicy;
|
|
310
|
+
saml: EnterpriseAccountLinkingPolicy;
|
|
311
|
+
};
|
|
312
|
+
};
|
|
313
|
+
provisioning: {
|
|
314
|
+
scimReuse: {
|
|
315
|
+
user: EnterpriseScimReuseUserPolicy;
|
|
316
|
+
};
|
|
317
|
+
jit: {
|
|
318
|
+
mode: EnterpriseJitProvisioningMode;
|
|
319
|
+
defaultRole: string;
|
|
320
|
+
};
|
|
321
|
+
deprovision: {
|
|
322
|
+
mode: EnterpriseDeprovisionMode;
|
|
323
|
+
};
|
|
324
|
+
};
|
|
325
|
+
extend?: Record<string, unknown>;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
export interface EnterprisePolicyPatch {
|
|
329
|
+
identity?: {
|
|
330
|
+
accountLinking?: {
|
|
331
|
+
oidc?: EnterpriseAccountLinkingPolicy;
|
|
332
|
+
saml?: EnterpriseAccountLinkingPolicy;
|
|
333
|
+
};
|
|
334
|
+
};
|
|
335
|
+
provisioning?: {
|
|
336
|
+
scimReuse?: {
|
|
337
|
+
user?: EnterpriseScimReuseUserPolicy;
|
|
338
|
+
};
|
|
339
|
+
jit?: {
|
|
340
|
+
mode?: EnterpriseJitProvisioningMode;
|
|
341
|
+
defaultRole?: string;
|
|
342
|
+
};
|
|
343
|
+
deprovision?: {
|
|
344
|
+
mode?: EnterpriseDeprovisionMode;
|
|
345
|
+
};
|
|
346
|
+
};
|
|
347
|
+
extend?: Record<string, unknown>;
|
|
348
|
+
}
|
|
349
|
+
|
|
285
350
|
/**
|
|
286
351
|
* Email provider config for magic link / OTP sign-in.
|
|
287
352
|
*/
|
|
@@ -1055,6 +1120,9 @@ export type AuthComponentApi = {
|
|
|
1055
1120
|
enterpriseDomainAdd: FunctionReference<"mutation", "internal", any, any>;
|
|
1056
1121
|
enterpriseDomainList: FunctionReference<"query", "internal", any, any>;
|
|
1057
1122
|
enterpriseDomainDelete: FunctionReference<"mutation", "internal", any, any>;
|
|
1123
|
+
enterpriseSecretUpsert: FunctionReference<"mutation", "internal", any, any>;
|
|
1124
|
+
enterpriseSecretGet: FunctionReference<"query", "internal", any, any>;
|
|
1125
|
+
enterpriseSecretDelete: FunctionReference<"mutation", "internal", any, any>;
|
|
1058
1126
|
enterpriseScimConfigUpsert: FunctionReference<
|
|
1059
1127
|
"mutation",
|
|
1060
1128
|
"internal",
|
|
@@ -1080,6 +1148,12 @@ export type AuthComponentApi = {
|
|
|
1080
1148
|
any,
|
|
1081
1149
|
any
|
|
1082
1150
|
>;
|
|
1151
|
+
enterpriseScimIdentityGetByEnterpriseAndUser: FunctionReference<
|
|
1152
|
+
"query",
|
|
1153
|
+
"internal",
|
|
1154
|
+
any,
|
|
1155
|
+
any
|
|
1156
|
+
>;
|
|
1083
1157
|
enterpriseScimIdentityGetByMappedGroup: FunctionReference<
|
|
1084
1158
|
"query",
|
|
1085
1159
|
"internal",
|
|
@@ -1243,80 +1317,25 @@ export type SessionInfoWithTokens = {
|
|
|
1243
1317
|
// code can work with typed results from cross-component queries/mutations
|
|
1244
1318
|
// instead of casting to `any` at every field access.
|
|
1245
1319
|
|
|
1246
|
-
export
|
|
1247
|
-
_id: string;
|
|
1248
|
-
_creationTime: number;
|
|
1249
|
-
userId: string;
|
|
1250
|
-
secret: ArrayBuffer;
|
|
1251
|
-
digits: number;
|
|
1252
|
-
period: number;
|
|
1253
|
-
verified: boolean;
|
|
1254
|
-
name?: string;
|
|
1255
|
-
createdAt: number;
|
|
1256
|
-
lastUsedAt?: number;
|
|
1257
|
-
}
|
|
1320
|
+
export type TotpDoc = Infer<typeof vTotpFactorDoc>;
|
|
1258
1321
|
|
|
1259
|
-
export
|
|
1260
|
-
_id: string;
|
|
1261
|
-
_creationTime: number;
|
|
1262
|
-
userId: string;
|
|
1263
|
-
credentialId: string;
|
|
1264
|
-
publicKey: ArrayBuffer;
|
|
1265
|
-
algorithm: number;
|
|
1266
|
-
counter: number;
|
|
1267
|
-
transports?: string[];
|
|
1268
|
-
deviceType: string;
|
|
1269
|
-
backedUp: boolean;
|
|
1270
|
-
name?: string;
|
|
1271
|
-
createdAt: number;
|
|
1272
|
-
lastUsedAt?: number;
|
|
1273
|
-
}
|
|
1322
|
+
export type PasskeyDoc = Infer<typeof vPasskeyDoc>;
|
|
1274
1323
|
|
|
1275
|
-
export
|
|
1276
|
-
_id: string;
|
|
1277
|
-
_creationTime: number;
|
|
1278
|
-
signature?: string;
|
|
1279
|
-
sessionId?: string;
|
|
1280
|
-
}
|
|
1324
|
+
export type VerifierDoc = Infer<typeof vAuthVerifierDoc>;
|
|
1281
1325
|
|
|
1282
1326
|
/**
|
|
1283
|
-
*
|
|
1327
|
+
* Cross-component user document shape inferred from the component validator.
|
|
1284
1328
|
*
|
|
1285
|
-
* Used by internal typed wrappers (`queryUserById`, etc.)
|
|
1286
|
-
*
|
|
1287
|
-
*
|
|
1288
|
-
*
|
|
1289
|
-
* which preserves typed `Id<"User">`.
|
|
1329
|
+
* Used by internal typed wrappers (`queryUserById`, etc.) so server code stays
|
|
1330
|
+
* aligned with the component runtime contract. Not intended for consumer use —
|
|
1331
|
+
* consumers should use `UserDoc` (exported from
|
|
1332
|
+
* `@robelest/convex-auth/component`).
|
|
1290
1333
|
*
|
|
1291
1334
|
* @internal
|
|
1292
1335
|
*/
|
|
1293
|
-
export
|
|
1294
|
-
_id: string;
|
|
1295
|
-
_creationTime: number;
|
|
1296
|
-
email?: string;
|
|
1297
|
-
emailVerificationTime?: number;
|
|
1298
|
-
phone?: string;
|
|
1299
|
-
phoneVerificationTime?: number;
|
|
1300
|
-
name?: string;
|
|
1301
|
-
image?: string;
|
|
1302
|
-
isAnonymous?: boolean;
|
|
1303
|
-
}
|
|
1336
|
+
export type CrossComponentUserDoc = Infer<typeof vUserDoc>;
|
|
1304
1337
|
|
|
1305
|
-
export
|
|
1306
|
-
_id: string;
|
|
1307
|
-
_creationTime: number;
|
|
1308
|
-
userId: string;
|
|
1309
|
-
prefix: string;
|
|
1310
|
-
hashedKey: string;
|
|
1311
|
-
name: string;
|
|
1312
|
-
scopes: Array<{ resource: string; actions: string[] }>;
|
|
1313
|
-
rateLimit?: { maxRequests: number; windowMs: number };
|
|
1314
|
-
rateLimitState?: { attemptsLeft: number; lastAttemptTime: number };
|
|
1315
|
-
expiresAt?: number;
|
|
1316
|
-
lastUsedAt?: number;
|
|
1317
|
-
createdAt: number;
|
|
1318
|
-
revoked: boolean;
|
|
1319
|
-
}
|
|
1338
|
+
export type KeyDoc = Infer<typeof vApiKeyDoc>;
|
|
1320
1339
|
|
|
1321
1340
|
// ---------------------------------------------------------------------------
|
|
1322
1341
|
// Cross-component wrapper context
|
|
@@ -1555,18 +1574,7 @@ export async function mutateKeyDelete(
|
|
|
1555
1574
|
|
|
1556
1575
|
// -- Device authorization queries / mutations --
|
|
1557
1576
|
|
|
1558
|
-
export
|
|
1559
|
-
_id: string;
|
|
1560
|
-
_creationTime: number;
|
|
1561
|
-
deviceCodeHash: string;
|
|
1562
|
-
userCode: string;
|
|
1563
|
-
expiresAt: number;
|
|
1564
|
-
interval: number;
|
|
1565
|
-
status: "pending" | "authorized" | "denied";
|
|
1566
|
-
userId?: string;
|
|
1567
|
-
sessionId?: string;
|
|
1568
|
-
lastPolledAt?: number;
|
|
1569
|
-
}
|
|
1577
|
+
export type DeviceDoc = Infer<typeof vDeviceCodeDoc>;
|
|
1570
1578
|
|
|
1571
1579
|
export async function mutateDeviceInsert(
|
|
1572
1580
|
ctx: ComponentCallCtx,
|
package/src/server/users.ts
CHANGED
package/src/server/utils.ts
CHANGED
|
@@ -3,7 +3,11 @@ import {
|
|
|
3
3
|
generateRandomString as osloGenerateRandomString,
|
|
4
4
|
} from "@oslojs/crypto/random";
|
|
5
5
|
import { sha256 as rawSha256 } from "@oslojs/crypto/sha2";
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
decodeBase64urlIgnorePadding,
|
|
8
|
+
encodeBase64urlNoPadding,
|
|
9
|
+
encodeHexLowerCase,
|
|
10
|
+
} from "@oslojs/encoding";
|
|
7
11
|
|
|
8
12
|
import { AuthError } from "./fx";
|
|
9
13
|
|
|
@@ -13,6 +17,7 @@ import { AuthError } from "./fx";
|
|
|
13
17
|
* Uses `AuthError.toConvexError()` directly since this is a synchronous guard
|
|
14
18
|
* called inline in many expressions — not suitable for Fx pipeline wrapping.
|
|
15
19
|
*/
|
|
20
|
+
/** @internal */
|
|
16
21
|
export function requireEnv(name: string) {
|
|
17
22
|
const value = process.env[name];
|
|
18
23
|
if (value === undefined) {
|
|
@@ -25,6 +30,7 @@ export function requireEnv(name: string) {
|
|
|
25
30
|
return value;
|
|
26
31
|
}
|
|
27
32
|
|
|
33
|
+
/** @internal */
|
|
28
34
|
export function isLocalHost(host?: string) {
|
|
29
35
|
if (host === undefined) {
|
|
30
36
|
return false;
|
|
@@ -45,13 +51,17 @@ export function isLocalHost(host?: string) {
|
|
|
45
51
|
|
|
46
52
|
// Internal server utilities (merged from former internalUtils.ts)
|
|
47
53
|
|
|
54
|
+
/** @internal */
|
|
48
55
|
export const TOKEN_SUB_CLAIM_DIVIDER = "|";
|
|
56
|
+
/** @internal */
|
|
49
57
|
export const REFRESH_TOKEN_DIVIDER = "|";
|
|
50
58
|
|
|
59
|
+
/** @internal */
|
|
51
60
|
export async function sha256(input: string) {
|
|
52
61
|
return encodeHexLowerCase(rawSha256(new TextEncoder().encode(input)));
|
|
53
62
|
}
|
|
54
63
|
|
|
64
|
+
/** @internal */
|
|
55
65
|
export function generateRandomString(length: number, alphabet: string) {
|
|
56
66
|
const random: RandomReader = {
|
|
57
67
|
read(bytes) {
|
|
@@ -62,10 +72,12 @@ export function generateRandomString(length: number, alphabet: string) {
|
|
|
62
72
|
return osloGenerateRandomString(random, alphabet, length);
|
|
63
73
|
}
|
|
64
74
|
|
|
75
|
+
/** @internal */
|
|
65
76
|
export function errorMessage(error: unknown) {
|
|
66
77
|
return error instanceof Error ? error.message : String(error);
|
|
67
78
|
}
|
|
68
79
|
|
|
80
|
+
/** @internal */
|
|
69
81
|
export function logError(error: unknown) {
|
|
70
82
|
logWithLevel(
|
|
71
83
|
LOG_LEVELS.ERROR,
|
|
@@ -75,6 +87,7 @@ export function logError(error: unknown) {
|
|
|
75
87
|
);
|
|
76
88
|
}
|
|
77
89
|
|
|
90
|
+
/** @internal */
|
|
78
91
|
export const LOG_LEVELS = {
|
|
79
92
|
ERROR: "ERROR",
|
|
80
93
|
WARN: "WARN",
|
|
@@ -83,6 +96,7 @@ export const LOG_LEVELS = {
|
|
|
83
96
|
} as const;
|
|
84
97
|
type LogLevel = keyof typeof LOG_LEVELS;
|
|
85
98
|
|
|
99
|
+
/** @internal */
|
|
86
100
|
export function logWithLevel(level: LogLevel, ...args: unknown[]) {
|
|
87
101
|
const configuredLogLevel =
|
|
88
102
|
LOG_LEVELS[
|
|
@@ -111,6 +125,7 @@ export function logWithLevel(level: LogLevel, ...args: unknown[]) {
|
|
|
111
125
|
}
|
|
112
126
|
|
|
113
127
|
const UNREDACTED_LENGTH = 5;
|
|
128
|
+
/** @internal */
|
|
114
129
|
export function maybeRedact(value: string) {
|
|
115
130
|
if (value === "") {
|
|
116
131
|
return "";
|
|
@@ -129,3 +144,58 @@ export function maybeRedact(value: string) {
|
|
|
129
144
|
return value;
|
|
130
145
|
}
|
|
131
146
|
}
|
|
147
|
+
|
|
148
|
+
const SECRET_KEY_ENV = "AUTH_SECRET_ENCRYPTION_KEY";
|
|
149
|
+
const SECRET_IV_LENGTH = 12;
|
|
150
|
+
|
|
151
|
+
function toArrayBuffer(bytes: Uint8Array) {
|
|
152
|
+
return bytes.buffer.slice(
|
|
153
|
+
bytes.byteOffset,
|
|
154
|
+
bytes.byteOffset + bytes.byteLength,
|
|
155
|
+
) as ArrayBuffer;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
async function getSecretCryptoKey() {
|
|
159
|
+
const material = requireEnv(SECRET_KEY_ENV);
|
|
160
|
+
const rawKey = rawSha256(new TextEncoder().encode(material));
|
|
161
|
+
return await crypto.subtle.importKey(
|
|
162
|
+
"raw",
|
|
163
|
+
toArrayBuffer(rawKey),
|
|
164
|
+
{ name: "AES-GCM" },
|
|
165
|
+
false,
|
|
166
|
+
["encrypt", "decrypt"],
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/** @internal */
|
|
171
|
+
export async function encryptSecret(value: string) {
|
|
172
|
+
const key = await getSecretCryptoKey();
|
|
173
|
+
const iv = crypto.getRandomValues(new Uint8Array(SECRET_IV_LENGTH));
|
|
174
|
+
const encrypted = await crypto.subtle.encrypt(
|
|
175
|
+
{ name: "AES-GCM", iv: toArrayBuffer(iv) },
|
|
176
|
+
key,
|
|
177
|
+
toArrayBuffer(new TextEncoder().encode(value)),
|
|
178
|
+
);
|
|
179
|
+
return `${encodeBase64urlNoPadding(iv)}.${encodeBase64urlNoPadding(new Uint8Array(encrypted))}`;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/** @internal */
|
|
183
|
+
export async function decryptSecret(ciphertext: string) {
|
|
184
|
+
const [ivEncoded, payloadEncoded] = ciphertext.split(".");
|
|
185
|
+
if (!ivEncoded || !payloadEncoded) {
|
|
186
|
+
throw new AuthError(
|
|
187
|
+
"INVALID_PARAMETERS",
|
|
188
|
+
"Stored enterprise secret is malformed.",
|
|
189
|
+
).toConvexError();
|
|
190
|
+
}
|
|
191
|
+
const key = await getSecretCryptoKey();
|
|
192
|
+
const decrypted = await crypto.subtle.decrypt(
|
|
193
|
+
{
|
|
194
|
+
name: "AES-GCM",
|
|
195
|
+
iv: toArrayBuffer(decodeBase64urlIgnorePadding(ivEncoded)),
|
|
196
|
+
},
|
|
197
|
+
key,
|
|
198
|
+
toArrayBuffer(decodeBase64urlIgnorePadding(payloadEncoded)),
|
|
199
|
+
);
|
|
200
|
+
return new TextDecoder().decode(decrypted);
|
|
201
|
+
}
|
package/src/server/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Auto-generated by scripts/generate-version.js — do not edit.
|
|
2
|
-
export const AUTH_VERSION = "0.0.4-preview.
|
|
2
|
+
export const AUTH_VERSION = "0.0.4-preview.15";
|