@robelest/convex-auth 0.0.4-preview.21 → 0.0.4-preview.23
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/authorization/index.d.ts +1 -1
- package/dist/authorization/index.js +1 -1
- package/dist/authorization/index.js.map +1 -1
- package/dist/client/index.d.ts +1 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +36 -39
- package/dist/client/index.js.map +1 -1
- package/dist/component/client/index.d.ts +1 -2
- 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 +5 -5
- package/dist/component/model.d.ts.map +1 -1
- package/dist/component/public/enterprise/audit.d.ts.map +1 -1
- package/dist/component/public/enterprise/audit.js.map +1 -1
- package/dist/component/public/enterprise/core.d.ts.map +1 -1
- package/dist/component/public/enterprise/core.js.map +1 -1
- package/dist/component/public/enterprise/domains.d.ts.map +1 -1
- package/dist/component/public/enterprise/domains.js.map +1 -1
- package/dist/component/public/enterprise/scim.d.ts.map +1 -1
- package/dist/component/public/enterprise/scim.js.map +1 -1
- package/dist/component/public/enterprise/secrets.d.ts.map +1 -1
- package/dist/component/public/enterprise/secrets.js.map +1 -1
- package/dist/component/public/enterprise/webhooks.d.ts.map +1 -1
- package/dist/component/public/enterprise/webhooks.js.map +1 -1
- package/dist/component/public/factors/devices.d.ts.map +1 -1
- package/dist/component/public/factors/devices.js.map +1 -1
- package/dist/component/public/factors/passkeys.d.ts.map +1 -1
- package/dist/component/public/factors/passkeys.js.map +1 -1
- package/dist/component/public/factors/totp.d.ts.map +1 -1
- package/dist/component/public/factors/totp.js.map +1 -1
- package/dist/component/public/groups/core.js.map +1 -1
- package/dist/component/public/groups/invites.d.ts.map +1 -1
- package/dist/component/public/groups/invites.js.map +1 -1
- package/dist/component/public/groups/members.d.ts.map +1 -1
- package/dist/component/public/groups/members.js.map +1 -1
- package/dist/component/public/identity/accounts.d.ts.map +1 -1
- package/dist/component/public/identity/accounts.js.map +1 -1
- package/dist/component/public/identity/codes.d.ts.map +1 -1
- package/dist/component/public/identity/codes.js.map +1 -1
- package/dist/component/public/identity/sessions.d.ts.map +1 -1
- package/dist/component/public/identity/sessions.js.map +1 -1
- package/dist/component/public/identity/tokens.d.ts.map +1 -1
- package/dist/component/public/identity/tokens.js.map +1 -1
- package/dist/component/public/identity/users.d.ts.map +1 -1
- package/dist/component/public/identity/users.js.map +1 -1
- package/dist/component/public/identity/verifiers.d.ts.map +1 -1
- package/dist/component/public/identity/verifiers.js.map +1 -1
- package/dist/component/public/security/keys.d.ts.map +1 -1
- package/dist/component/public/security/keys.js.map +1 -1
- package/dist/component/public/security/limits.d.ts.map +1 -1
- package/dist/component/public/security/limits.js.map +1 -1
- package/dist/component/schema.d.ts +39 -39
- package/dist/component/server/auth.d.ts +95 -52
- package/dist/component/server/auth.d.ts.map +1 -1
- package/dist/component/server/auth.js +63 -43
- package/dist/component/server/auth.js.map +1 -1
- package/dist/component/server/core.js +116 -235
- package/dist/component/server/core.js.map +1 -1
- package/dist/component/server/crypto.js +25 -7
- package/dist/component/server/crypto.js.map +1 -1
- package/dist/component/server/device.js +58 -15
- package/dist/component/server/device.js.map +1 -1
- package/dist/component/server/enterprise/domain.js +148 -59
- package/dist/component/server/enterprise/domain.js.map +1 -1
- package/dist/component/server/enterprise/http.js +36 -15
- package/dist/component/server/enterprise/http.js.map +1 -1
- package/dist/component/server/enterprise/oidc.js +1 -1
- package/dist/component/server/http.js +26 -21
- package/dist/component/server/http.js.map +1 -1
- package/dist/component/server/identity.js +5 -2
- package/dist/component/server/identity.js.map +1 -1
- package/dist/component/server/limits.js +21 -30
- package/dist/component/server/limits.js.map +1 -1
- package/dist/component/server/mutations/account.js +12 -10
- package/dist/component/server/mutations/account.js.map +1 -1
- package/dist/component/server/mutations/code.js +5 -2
- package/dist/component/server/mutations/code.js.map +1 -1
- package/dist/component/server/mutations/invalidate.js +1 -1
- package/dist/component/server/mutations/invalidate.js.map +1 -1
- package/dist/component/server/mutations/oauth.js +10 -4
- package/dist/component/server/mutations/oauth.js.map +1 -1
- package/dist/component/server/mutations/refresh.js +2 -2
- package/dist/component/server/mutations/refresh.js.map +1 -1
- package/dist/component/server/mutations/register.js +46 -42
- package/dist/component/server/mutations/register.js.map +1 -1
- package/dist/component/server/mutations/retrieve.js +21 -25
- package/dist/component/server/mutations/retrieve.js.map +1 -1
- package/dist/component/server/mutations/signature.js +10 -4
- package/dist/component/server/mutations/signature.js.map +1 -1
- package/dist/component/server/mutations/signout.js.map +1 -1
- package/dist/component/server/mutations/store.js +9 -24
- package/dist/component/server/mutations/store.js.map +1 -1
- package/dist/component/server/mutations/verifier.js.map +1 -1
- package/dist/component/server/mutations/verify.js +1 -1
- package/dist/component/server/mutations/verify.js.map +1 -1
- package/dist/component/server/oauth.js +53 -16
- package/dist/component/server/oauth.js.map +1 -1
- package/dist/component/server/passkey.js +115 -31
- package/dist/component/server/passkey.js.map +1 -1
- package/dist/component/server/redirects.js +9 -3
- package/dist/component/server/redirects.js.map +1 -1
- package/dist/component/server/refresh.js +10 -7
- package/dist/component/server/refresh.js.map +1 -1
- package/dist/component/server/runtime.d.ts +3 -3
- package/dist/component/server/runtime.d.ts.map +1 -1
- package/dist/component/server/runtime.js +62 -20
- package/dist/component/server/runtime.js.map +1 -1
- package/dist/component/server/signin.js +34 -10
- package/dist/component/server/signin.js.map +1 -1
- package/dist/component/server/totp.js +79 -19
- package/dist/component/server/totp.js.map +1 -1
- package/dist/component/server/types.d.ts +12 -20
- 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 +6 -3
- package/dist/component/server/users.js.map +1 -1
- package/dist/component/server/utils.js +10 -4
- package/dist/component/server/utils.js.map +1 -1
- package/dist/core/types.d.ts +14 -22
- package/dist/core/types.d.ts.map +1 -1
- package/dist/factors/device.js +8 -9
- package/dist/factors/device.js.map +1 -1
- package/dist/factors/passkey.js +18 -21
- package/dist/factors/passkey.js.map +1 -1
- package/dist/providers/password.js +66 -81
- package/dist/providers/password.js.map +1 -1
- package/dist/runtime/invite.js +2 -8
- package/dist/runtime/invite.js.map +1 -1
- package/dist/server/auth.d.ts +95 -52
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +63 -43
- package/dist/server/auth.js.map +1 -1
- package/dist/server/core.d.ts +71 -159
- package/dist/server/core.d.ts.map +1 -1
- package/dist/server/core.js +116 -235
- package/dist/server/core.js.map +1 -1
- package/dist/server/crypto.d.ts.map +1 -1
- package/dist/server/crypto.js +25 -7
- package/dist/server/crypto.js.map +1 -1
- package/dist/server/device.js +58 -15
- package/dist/server/device.js.map +1 -1
- package/dist/server/enterprise/domain.d.ts +0 -8
- package/dist/server/enterprise/domain.d.ts.map +1 -1
- package/dist/server/enterprise/domain.js +148 -59
- package/dist/server/enterprise/domain.js.map +1 -1
- package/dist/server/enterprise/http.d.ts.map +1 -1
- package/dist/server/enterprise/http.js +35 -14
- package/dist/server/enterprise/http.js.map +1 -1
- package/dist/server/http.d.ts +2 -2
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +25 -20
- package/dist/server/http.js.map +1 -1
- package/dist/server/identity.js +5 -2
- package/dist/server/identity.js.map +1 -1
- package/dist/server/index.d.ts +2 -2
- package/dist/server/limits.js +21 -30
- package/dist/server/limits.js.map +1 -1
- package/dist/server/mounts.d.ts +26 -64
- package/dist/server/mounts.d.ts.map +1 -1
- package/dist/server/mounts.js +45 -106
- package/dist/server/mounts.js.map +1 -1
- package/dist/server/mutations/account.d.ts +8 -9
- package/dist/server/mutations/account.d.ts.map +1 -1
- package/dist/server/mutations/account.js +11 -9
- package/dist/server/mutations/account.js.map +1 -1
- package/dist/server/mutations/code.d.ts +13 -13
- package/dist/server/mutations/code.d.ts.map +1 -1
- package/dist/server/mutations/code.js +5 -2
- package/dist/server/mutations/code.js.map +1 -1
- package/dist/server/mutations/invalidate.d.ts +4 -4
- package/dist/server/mutations/invalidate.d.ts.map +1 -1
- package/dist/server/mutations/invalidate.js.map +1 -1
- package/dist/server/mutations/oauth.d.ts +12 -10
- package/dist/server/mutations/oauth.d.ts.map +1 -1
- package/dist/server/mutations/oauth.js +9 -3
- package/dist/server/mutations/oauth.js.map +1 -1
- package/dist/server/mutations/refresh.d.ts +3 -3
- package/dist/server/mutations/refresh.d.ts.map +1 -1
- package/dist/server/mutations/refresh.js +1 -1
- package/dist/server/mutations/refresh.js.map +1 -1
- package/dist/server/mutations/register.d.ts +11 -11
- package/dist/server/mutations/register.d.ts.map +1 -1
- package/dist/server/mutations/register.js +45 -41
- package/dist/server/mutations/register.js.map +1 -1
- package/dist/server/mutations/retrieve.d.ts +6 -6
- package/dist/server/mutations/retrieve.d.ts.map +1 -1
- package/dist/server/mutations/retrieve.js +20 -24
- package/dist/server/mutations/retrieve.js.map +1 -1
- package/dist/server/mutations/signature.d.ts +6 -7
- package/dist/server/mutations/signature.d.ts.map +1 -1
- package/dist/server/mutations/signature.js +9 -3
- package/dist/server/mutations/signature.js.map +1 -1
- package/dist/server/mutations/signin.d.ts +5 -5
- package/dist/server/mutations/signin.d.ts.map +1 -1
- package/dist/server/mutations/signout.js.map +1 -1
- package/dist/server/mutations/store.d.ts +97 -97
- package/dist/server/mutations/store.d.ts.map +1 -1
- package/dist/server/mutations/store.js +8 -23
- package/dist/server/mutations/store.js.map +1 -1
- package/dist/server/mutations/verifier.js.map +1 -1
- package/dist/server/mutations/verify.d.ts +10 -10
- package/dist/server/mutations/verify.d.ts.map +1 -1
- package/dist/server/mutations/verify.js.map +1 -1
- package/dist/server/oauth.js +53 -16
- package/dist/server/oauth.js.map +1 -1
- package/dist/server/passkey.d.ts +2 -2
- package/dist/server/passkey.d.ts.map +1 -1
- package/dist/server/passkey.js +114 -30
- package/dist/server/passkey.js.map +1 -1
- package/dist/server/redirects.js +9 -3
- package/dist/server/redirects.js.map +1 -1
- package/dist/server/refresh.js +10 -7
- package/dist/server/refresh.js.map +1 -1
- package/dist/server/runtime.d.ts +14 -14
- package/dist/server/runtime.d.ts.map +1 -1
- package/dist/server/runtime.js +61 -19
- package/dist/server/runtime.js.map +1 -1
- package/dist/server/signin.js +34 -10
- package/dist/server/signin.js.map +1 -1
- package/dist/server/ssr.d.ts.map +1 -1
- package/dist/server/ssr.js +175 -184
- package/dist/server/ssr.js.map +1 -1
- package/dist/server/totp.js +78 -18
- package/dist/server/totp.js.map +1 -1
- package/dist/server/types.d.ts +13 -21
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js.map +1 -1
- package/dist/server/users.js +6 -3
- package/dist/server/users.js.map +1 -1
- package/dist/server/utils.js +10 -4
- package/dist/server/utils.js.map +1 -1
- package/package.json +2 -6
- package/src/authorization/index.ts +1 -1
- package/src/cli/index.ts +1 -1
- package/src/client/core/types.ts +14 -14
- package/src/client/factors/device.ts +10 -12
- package/src/client/factors/passkey.ts +23 -26
- package/src/client/index.ts +54 -64
- package/src/client/runtime/invite.ts +5 -7
- package/src/component/index.ts +1 -0
- package/src/component/public/enterprise/audit.ts +6 -1
- package/src/component/public/enterprise/core.ts +1 -0
- package/src/component/public/enterprise/domains.ts +5 -1
- package/src/component/public/enterprise/scim.ts +1 -0
- package/src/component/public/enterprise/secrets.ts +1 -0
- package/src/component/public/enterprise/webhooks.ts +1 -0
- package/src/component/public/factors/devices.ts +1 -0
- package/src/component/public/factors/passkeys.ts +1 -0
- package/src/component/public/factors/totp.ts +1 -0
- package/src/component/public/groups/core.ts +1 -1
- package/src/component/public/groups/invites.ts +7 -1
- package/src/component/public/groups/members.ts +1 -0
- package/src/component/public/identity/accounts.ts +1 -0
- package/src/component/public/identity/codes.ts +1 -0
- package/src/component/public/identity/sessions.ts +1 -0
- package/src/component/public/identity/tokens.ts +1 -0
- package/src/component/public/identity/users.ts +1 -0
- package/src/component/public/identity/verifiers.ts +1 -0
- package/src/component/public/security/keys.ts +1 -0
- package/src/component/public/security/limits.ts +1 -0
- package/src/providers/password.ts +89 -110
- package/src/server/auth.ts +177 -111
- package/src/server/core.ts +197 -233
- package/src/server/crypto.ts +31 -29
- package/src/server/device.ts +65 -32
- package/src/server/enterprise/domain.ts +158 -170
- package/src/server/enterprise/http.ts +46 -39
- package/src/server/http.ts +36 -30
- package/src/server/identity.ts +5 -5
- package/src/server/index.ts +2 -0
- package/src/server/limits.ts +53 -80
- package/src/server/mounts.ts +47 -74
- package/src/server/mutations/account.ts +22 -36
- package/src/server/mutations/code.ts +6 -6
- package/src/server/mutations/invalidate.ts +1 -1
- package/src/server/mutations/oauth.ts +14 -8
- package/src/server/mutations/refresh.ts +5 -4
- package/src/server/mutations/register.ts +87 -132
- package/src/server/mutations/retrieve.ts +44 -44
- package/src/server/mutations/signature.ts +13 -6
- package/src/server/mutations/signout.ts +1 -1
- package/src/server/mutations/store.ts +16 -31
- package/src/server/mutations/verifier.ts +1 -1
- package/src/server/mutations/verify.ts +3 -5
- package/src/server/oauth.ts +60 -69
- package/src/server/passkey.ts +567 -517
- package/src/server/redirects.ts +10 -6
- package/src/server/refresh.ts +14 -18
- package/src/server/runtime.ts +70 -55
- package/src/server/signin.ts +44 -37
- package/src/server/ssr.ts +390 -407
- package/src/server/totp.ts +85 -35
- package/src/server/types.ts +19 -22
- package/src/server/users.ts +7 -6
- package/src/server/utils.ts +10 -12
- package/dist/component/server/authError.js +0 -34
- package/dist/component/server/authError.js.map +0 -1
- package/dist/component/server/errors.d.ts +0 -1
- package/dist/component/server/errors.js +0 -137
- package/dist/component/server/errors.js.map +0 -1
- package/dist/server/authError.d.ts +0 -46
- package/dist/server/authError.d.ts.map +0 -1
- package/dist/server/authError.js +0 -34
- package/dist/server/authError.js.map +0 -1
- package/dist/server/errors.d.ts +0 -177
- package/dist/server/errors.d.ts.map +0 -1
- package/dist/server/errors.js +0 -212
- package/dist/server/errors.js.map +0 -1
- package/src/server/authError.ts +0 -44
- package/src/server/errors.ts +0 -290
package/dist/server/limits.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { AuthError } from "./authError.js";
|
|
2
|
-
import { errorMessage } from "./utils.js";
|
|
3
1
|
import { authDb } from "./db.js";
|
|
4
2
|
import { Fx } from "@robelest/fx";
|
|
5
3
|
|
|
@@ -16,45 +14,38 @@ const isSignInRateLimited = (ctx, identifier, config) => getRateLimitState(ctx,
|
|
|
16
14
|
* If a record exists, decrement; otherwise create.
|
|
17
15
|
*/
|
|
18
16
|
/** @internal */
|
|
19
|
-
const recordFailedSignIn = (ctx, identifier, config) =>
|
|
20
|
-
|
|
17
|
+
const recordFailedSignIn = (ctx, identifier, config) => Fx.gen(function* () {
|
|
18
|
+
const state = yield* getRateLimitState(ctx, identifier, config);
|
|
19
|
+
if (state !== null) yield* Fx.promise(() => authDb(ctx, config).rateLimits.patch(state.limit._id, {
|
|
21
20
|
attemptsLeft: state.attemptsLeft - 1,
|
|
22
21
|
lastAttemptTime: Date.now()
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
}) : Fx.from({
|
|
26
|
-
ok: () => authDb(ctx, config).rateLimits.create({
|
|
22
|
+
}));
|
|
23
|
+
else yield* Fx.promise(() => authDb(ctx, config).rateLimits.create({
|
|
27
24
|
identifier,
|
|
28
25
|
attemptsLeft: (config.signIn?.maxFailedAttemptsPerHour ?? DEFAULT_MAX_SIGN_IN_ATTEMPTS_PER_HOUR) - 1,
|
|
29
26
|
lastAttemptTime: Date.now()
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
})), Fx.map(() => void 0));
|
|
27
|
+
}));
|
|
28
|
+
});
|
|
33
29
|
/**
|
|
34
30
|
* Reset the rate limit for the given identifier (e.g. after successful sign-in).
|
|
35
31
|
*/
|
|
36
32
|
/** @internal */
|
|
37
|
-
const resetSignInRateLimit = (ctx, identifier, config) =>
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
})
|
|
41
|
-
const getRateLimitState = (ctx, identifier, config) => {
|
|
33
|
+
const resetSignInRateLimit = (ctx, identifier, config) => Fx.gen(function* () {
|
|
34
|
+
const state = yield* getRateLimitState(ctx, identifier, config);
|
|
35
|
+
if (state !== null) yield* Fx.promise(() => authDb(ctx, config).rateLimits.delete(state.limit._id));
|
|
36
|
+
});
|
|
37
|
+
const getRateLimitState = (ctx, identifier, config) => Fx.gen(function* () {
|
|
42
38
|
const now = Date.now();
|
|
43
39
|
const maxAttemptsPerHour = config.signIn?.maxFailedAttemptsPerHour ?? DEFAULT_MAX_SIGN_IN_ATTEMPTS_PER_HOUR;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
limit,
|
|
54
|
-
attemptsLeft: Math.min(maxAttemptsPerHour, limit.attemptsLeft + elapsed * maxAttemptsPerMs)
|
|
55
|
-
};
|
|
56
|
-
}));
|
|
57
|
-
};
|
|
40
|
+
const limit = yield* Fx.promise(() => authDb(ctx, config).rateLimits.get(identifier));
|
|
41
|
+
if (limit === null) return null;
|
|
42
|
+
const elapsed = now - limit.lastAttemptTime;
|
|
43
|
+
const maxAttemptsPerMs = maxAttemptsPerHour / (3600 * 1e3);
|
|
44
|
+
return {
|
|
45
|
+
limit,
|
|
46
|
+
attemptsLeft: Math.min(maxAttemptsPerHour, limit.attemptsLeft + elapsed * maxAttemptsPerMs)
|
|
47
|
+
};
|
|
48
|
+
});
|
|
58
49
|
|
|
59
50
|
//#endregion
|
|
60
51
|
export { isSignInRateLimited, recordFailedSignIn, resetSignInRateLimit };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"limits.js","names":[],"sources":["../../src/server/limits.ts"],"sourcesContent":["import { Fx } from \"@robelest/fx\";\
|
|
1
|
+
{"version":3,"file":"limits.js","names":[],"sources":["../../src/server/limits.ts"],"sourcesContent":["import { Fx } from \"@robelest/fx\";\nimport { ConvexError } from \"convex/values\";\n\nimport { authDb } from \"./db\";\nimport { Doc, MutationCtx } from \"./types\";\nimport { ConvexAuthConfig } from \"./types\";\n\nconst DEFAULT_MAX_SIGN_IN_ATTEMPTS_PER_HOUR = 10;\n\n/**\n * Check whether the given identifier is currently rate-limited.\n */\n/** @internal */\nexport const isSignInRateLimited = (\n ctx: MutationCtx,\n identifier: string,\n config: ConvexAuthConfig,\n): Fx<boolean, ConvexError<any>> =>\n getRateLimitState(ctx, identifier, config).pipe(\n Fx.map((state) => state !== null && state.attemptsLeft < 1),\n );\n\n/**\n * Record a failed sign-in attempt for the given identifier.\n *\n * If a record exists, decrement; otherwise create.\n */\n/** @internal */\nexport const recordFailedSignIn = (\n ctx: MutationCtx,\n identifier: string,\n config: ConvexAuthConfig,\n): Fx<void, ConvexError<any>> =>\n Fx.gen(function* () {\n const state = yield* getRateLimitState(ctx, identifier, config);\n if (state !== null) {\n yield* Fx.promise(() =>\n authDb(ctx, config).rateLimits.patch(state.limit._id, {\n attemptsLeft: state.attemptsLeft - 1,\n lastAttemptTime: Date.now(),\n }),\n );\n } else {\n yield* Fx.promise(() =>\n authDb(ctx, config).rateLimits.create({\n identifier,\n attemptsLeft:\n (config.signIn?.maxFailedAttemptsPerHour ??\n DEFAULT_MAX_SIGN_IN_ATTEMPTS_PER_HOUR) - 1,\n lastAttemptTime: Date.now(),\n }),\n );\n }\n });\n\n/**\n * Reset the rate limit for the given identifier (e.g. after successful sign-in).\n */\n/** @internal */\nexport const resetSignInRateLimit = (\n ctx: MutationCtx,\n identifier: string,\n config: ConvexAuthConfig,\n): Fx<void, ConvexError<any>> =>\n Fx.gen(function* () {\n const state = yield* getRateLimitState(ctx, identifier, config);\n if (state !== null) {\n yield* Fx.promise(() =>\n authDb(ctx, config).rateLimits.delete(state.limit._id),\n );\n }\n });\n\n// ---------------------------------------------------------------------------\n// Internal\n// ---------------------------------------------------------------------------\n\ntype RateLimitState = {\n limit: Doc<\"RateLimit\"> & { attemptsLeft: number; lastAttemptTime: number };\n attemptsLeft: number;\n} | null;\n\nconst getRateLimitState = (\n ctx: MutationCtx,\n identifier: string,\n config: ConvexAuthConfig,\n): Fx<RateLimitState, ConvexError<any>> =>\n Fx.gen(function* () {\n const now = Date.now();\n const maxAttemptsPerHour =\n config.signIn?.maxFailedAttemptsPerHour ??\n DEFAULT_MAX_SIGN_IN_ATTEMPTS_PER_HOUR;\n\n const limit = (yield* Fx.promise(() =>\n authDb(ctx, config).rateLimits.get(identifier),\n )) as\n | (Doc<\"RateLimit\"> & { attemptsLeft: number; lastAttemptTime: number })\n | null;\n if (limit === null) return null;\n const elapsed = now - limit.lastAttemptTime;\n const maxAttemptsPerMs = maxAttemptsPerHour / (60 * 60 * 1000);\n const attemptsLeft = Math.min(\n maxAttemptsPerHour,\n limit.attemptsLeft + elapsed * maxAttemptsPerMs,\n );\n return { limit, attemptsLeft };\n });\n"],"mappings":";;;;AAOA,MAAM,wCAAwC;;;;;AAM9C,MAAa,uBACX,KACA,YACA,WAEA,kBAAkB,KAAK,YAAY,OAAO,CAAC,KACzC,GAAG,KAAK,UAAU,UAAU,QAAQ,MAAM,eAAe,EAAE,CAC5D;;;;;;;AAQH,MAAa,sBACX,KACA,YACA,WAEA,GAAG,IAAI,aAAa;CAClB,MAAM,QAAQ,OAAO,kBAAkB,KAAK,YAAY,OAAO;AAC/D,KAAI,UAAU,KACZ,QAAO,GAAG,cACR,OAAO,KAAK,OAAO,CAAC,WAAW,MAAM,MAAM,MAAM,KAAK;EACpD,cAAc,MAAM,eAAe;EACnC,iBAAiB,KAAK,KAAK;EAC5B,CAAC,CACH;KAED,QAAO,GAAG,cACR,OAAO,KAAK,OAAO,CAAC,WAAW,OAAO;EACpC;EACA,eACG,OAAO,QAAQ,4BACd,yCAAyC;EAC7C,iBAAiB,KAAK,KAAK;EAC5B,CAAC,CACH;EAEH;;;;;AAMJ,MAAa,wBACX,KACA,YACA,WAEA,GAAG,IAAI,aAAa;CAClB,MAAM,QAAQ,OAAO,kBAAkB,KAAK,YAAY,OAAO;AAC/D,KAAI,UAAU,KACZ,QAAO,GAAG,cACR,OAAO,KAAK,OAAO,CAAC,WAAW,OAAO,MAAM,MAAM,IAAI,CACvD;EAEH;AAWJ,MAAM,qBACJ,KACA,YACA,WAEA,GAAG,IAAI,aAAa;CAClB,MAAM,MAAM,KAAK,KAAK;CACtB,MAAM,qBACJ,OAAO,QAAQ,4BACf;CAEF,MAAM,QAAS,OAAO,GAAG,cACvB,OAAO,KAAK,OAAO,CAAC,WAAW,IAAI,WAAW,CAC/C;AAGD,KAAI,UAAU,KAAM,QAAO;CAC3B,MAAM,UAAU,MAAM,MAAM;CAC5B,MAAM,mBAAmB,sBAAsB,OAAU;AAKzD,QAAO;EAAE;EAAO,cAJK,KAAK,IACxB,oBACA,MAAM,eAAe,UAAU,iBAChC;EAC6B;EAC9B"}
|
package/dist/server/mounts.d.ts
CHANGED
|
@@ -36,11 +36,11 @@ type EnterpriseAdminAuthorizationInput = {
|
|
|
36
36
|
/**
|
|
37
37
|
* App-defined authorization hook for mounted enterprise admin APIs.
|
|
38
38
|
*
|
|
39
|
-
* Return `void` (or resolve) to allow the operation, or
|
|
39
|
+
* Return `void` (or resolve) to allow the operation, or throw to deny it.
|
|
40
40
|
*
|
|
41
41
|
* @param ctx - Convex context with `ctx.auth` for identity checks.
|
|
42
42
|
* @param input - The {@link EnterpriseAdminAuthorizationInput} describing who is doing what.
|
|
43
|
-
* @returns `void` to allow
|
|
43
|
+
* @returns `void` to allow; throw to deny.
|
|
44
44
|
*
|
|
45
45
|
* @example
|
|
46
46
|
* ```ts
|
|
@@ -48,16 +48,14 @@ type EnterpriseAdminAuthorizationInput = {
|
|
|
48
48
|
*
|
|
49
49
|
* const authorized: EnterpriseAuthorizer = async (ctx, input) => {
|
|
50
50
|
* const identity = await ctx.auth.getUserIdentity();
|
|
51
|
-
* if (!identity)
|
|
51
|
+
* if (!identity) throw new Error("Forbidden");
|
|
52
52
|
* // Allow all admin ops for the org owner
|
|
53
53
|
* };
|
|
54
54
|
* ```
|
|
55
55
|
*/
|
|
56
56
|
type EnterpriseAuthorizer = (ctx: {
|
|
57
57
|
auth: convex_server0.Auth;
|
|
58
|
-
}, input: EnterpriseAdminAuthorizationInput) => Promise<void
|
|
59
|
-
ok: false;
|
|
60
|
-
}>;
|
|
58
|
+
}, input: EnterpriseAdminAuthorizationInput) => Promise<void>;
|
|
61
59
|
type RoleRef<TRoleId extends string> = {
|
|
62
60
|
id: TRoleId;
|
|
63
61
|
};
|
|
@@ -130,10 +128,10 @@ declare function sso<TAuthorization extends AuthAuthorizationConfig | undefined
|
|
|
130
128
|
admin: {
|
|
131
129
|
connection: {
|
|
132
130
|
create: convex_server0.RegisteredMutation<"public", {
|
|
133
|
-
|
|
131
|
+
groupId?: string | undefined;
|
|
134
132
|
name?: string | undefined;
|
|
135
133
|
slug?: string | undefined;
|
|
136
|
-
|
|
134
|
+
status?: "draft" | "active" | "disabled" | undefined;
|
|
137
135
|
domain?: string | undefined;
|
|
138
136
|
}, Promise<any>>;
|
|
139
137
|
get: convex_server0.RegisteredQuery<"public", {
|
|
@@ -146,12 +144,12 @@ declare function sso<TAuthorization extends AuthAuthorizationConfig | undefined
|
|
|
146
144
|
domain: string;
|
|
147
145
|
}, Promise<any>>;
|
|
148
146
|
list: convex_server0.RegisteredQuery<"public", {
|
|
147
|
+
limit?: number | undefined;
|
|
149
148
|
where?: {
|
|
150
|
-
status?: "draft" | "active" | "disabled" | undefined;
|
|
151
|
-
slug?: string | undefined;
|
|
152
149
|
groupId?: string | undefined;
|
|
150
|
+
slug?: string | undefined;
|
|
151
|
+
status?: "draft" | "active" | "disabled" | undefined;
|
|
153
152
|
} | undefined;
|
|
154
|
-
limit?: number | undefined;
|
|
155
153
|
cursor?: string | null | undefined;
|
|
156
154
|
orderBy?: string | undefined;
|
|
157
155
|
order?: "asc" | "desc" | undefined;
|
|
@@ -159,18 +157,12 @@ declare function sso<TAuthorization extends AuthAuthorizationConfig | undefined
|
|
|
159
157
|
update: convex_server0.RegisteredMutation<"public", {
|
|
160
158
|
enterpriseId: string;
|
|
161
159
|
data: {
|
|
162
|
-
status?: "draft" | "active" | "disabled" | undefined;
|
|
163
160
|
name?: string | undefined;
|
|
164
161
|
slug?: string | undefined;
|
|
162
|
+
status?: "draft" | "active" | "disabled" | undefined;
|
|
165
163
|
};
|
|
166
164
|
}, Promise<{
|
|
167
|
-
ok: false;
|
|
168
|
-
code: "NOT_SIGNED_IN" | "FORBIDDEN";
|
|
169
|
-
enterpriseId?: undefined;
|
|
170
|
-
} | {
|
|
171
|
-
ok: true;
|
|
172
165
|
enterpriseId: string;
|
|
173
|
-
code?: undefined;
|
|
174
166
|
}>>;
|
|
175
167
|
delete: convex_server0.RegisteredMutation<"public", {
|
|
176
168
|
enterpriseId: string;
|
|
@@ -194,12 +186,12 @@ declare function sso<TAuthorization extends AuthAuthorizationConfig | undefined
|
|
|
194
186
|
}, Promise<any>>;
|
|
195
187
|
verification: {
|
|
196
188
|
request: convex_server0.RegisteredMutation<"public", {
|
|
197
|
-
enterpriseId: string;
|
|
198
189
|
domain: string;
|
|
190
|
+
enterpriseId: string;
|
|
199
191
|
}, Promise<any>>;
|
|
200
192
|
confirm: convex_server0.RegisteredAction<"public", {
|
|
201
|
-
enterpriseId: string;
|
|
202
193
|
domain: string;
|
|
194
|
+
enterpriseId: string;
|
|
203
195
|
}, Promise<any>>;
|
|
204
196
|
};
|
|
205
197
|
};
|
|
@@ -231,8 +223,8 @@ declare function sso<TAuthorization extends AuthAuthorizationConfig | undefined
|
|
|
231
223
|
metadataUrl?: string | undefined;
|
|
232
224
|
signAuthnRequests?: boolean | undefined;
|
|
233
225
|
attributeMapping?: {
|
|
234
|
-
email?: string | undefined;
|
|
235
226
|
name?: string | undefined;
|
|
227
|
+
email?: string | undefined;
|
|
236
228
|
subject?: string | undefined;
|
|
237
229
|
firstName?: string | undefined;
|
|
238
230
|
lastName?: string | undefined;
|
|
@@ -288,8 +280,8 @@ declare function sso<TAuthorization extends AuthAuthorizationConfig | undefined
|
|
|
288
280
|
audit: {
|
|
289
281
|
list: convex_server0.RegisteredQuery<"public", {
|
|
290
282
|
groupId?: string | undefined;
|
|
291
|
-
enterpriseId?: string | undefined;
|
|
292
283
|
limit?: number | undefined;
|
|
284
|
+
enterpriseId?: string | undefined;
|
|
293
285
|
}, Promise<any>>;
|
|
294
286
|
};
|
|
295
287
|
webhook: {
|
|
@@ -307,16 +299,6 @@ declare function sso<TAuthorization extends AuthAuthorizationConfig | undefined
|
|
|
307
299
|
url: string;
|
|
308
300
|
subscriptions: string[];
|
|
309
301
|
}, Promise<{
|
|
310
|
-
ok: false;
|
|
311
|
-
code: "NOT_SIGNED_IN" | "FORBIDDEN";
|
|
312
|
-
_id?: undefined;
|
|
313
|
-
enterpriseId?: undefined;
|
|
314
|
-
url?: undefined;
|
|
315
|
-
subscriptions?: undefined;
|
|
316
|
-
createdByUserId?: undefined;
|
|
317
|
-
status?: undefined;
|
|
318
|
-
failureCount?: undefined;
|
|
319
|
-
} | {
|
|
320
302
|
_id: any;
|
|
321
303
|
enterpriseId: string;
|
|
322
304
|
url: string;
|
|
@@ -324,8 +306,6 @@ declare function sso<TAuthorization extends AuthAuthorizationConfig | undefined
|
|
|
324
306
|
createdByUserId: string;
|
|
325
307
|
status: string;
|
|
326
308
|
failureCount: number;
|
|
327
|
-
ok?: undefined;
|
|
328
|
-
code?: undefined;
|
|
329
309
|
}>>;
|
|
330
310
|
list: convex_server0.RegisteredQuery<"public", {
|
|
331
311
|
enterpriseId: string;
|
|
@@ -338,9 +318,9 @@ declare function sso<TAuthorization extends AuthAuthorizationConfig | undefined
|
|
|
338
318
|
};
|
|
339
319
|
client: {
|
|
340
320
|
signIn: convex_server0.RegisteredQuery<"public", {
|
|
321
|
+
domain?: string | undefined;
|
|
341
322
|
email?: string | undefined;
|
|
342
323
|
enterpriseId?: string | undefined;
|
|
343
|
-
domain?: string | undefined;
|
|
344
324
|
redirectTo?: string | undefined;
|
|
345
325
|
}, Promise<any>>;
|
|
346
326
|
metadata: convex_server0.RegisteredQuery<"public", {
|
|
@@ -432,10 +412,10 @@ declare function scim<TAuthorization extends AuthAuthorizationConfig | undefined
|
|
|
432
412
|
*/
|
|
433
413
|
declare function enterprise<TAuthorization extends AuthAuthorizationConfig | undefined = undefined>(auth: Pick<AuthApi<TAuthorization>, "group" | "member" | "scim" | "sso" | "user">, options: EnterpriseMountOptions<AuthRoleId<TAuthorization>>): {
|
|
434
414
|
createConnection: convex_server0.RegisteredMutation<"public", {
|
|
435
|
-
|
|
415
|
+
groupId?: string | undefined;
|
|
436
416
|
name?: string | undefined;
|
|
437
417
|
slug?: string | undefined;
|
|
438
|
-
|
|
418
|
+
status?: "draft" | "active" | "disabled" | undefined;
|
|
439
419
|
domain?: string | undefined;
|
|
440
420
|
}, Promise<any>>;
|
|
441
421
|
getConnection: convex_server0.RegisteredQuery<"public", {
|
|
@@ -448,12 +428,12 @@ declare function enterprise<TAuthorization extends AuthAuthorizationConfig | und
|
|
|
448
428
|
domain: string;
|
|
449
429
|
}, Promise<any>>;
|
|
450
430
|
listConnections: convex_server0.RegisteredQuery<"public", {
|
|
431
|
+
limit?: number | undefined;
|
|
451
432
|
where?: {
|
|
452
|
-
status?: "draft" | "active" | "disabled" | undefined;
|
|
453
|
-
slug?: string | undefined;
|
|
454
433
|
groupId?: string | undefined;
|
|
434
|
+
slug?: string | undefined;
|
|
435
|
+
status?: "draft" | "active" | "disabled" | undefined;
|
|
455
436
|
} | undefined;
|
|
456
|
-
limit?: number | undefined;
|
|
457
437
|
cursor?: string | null | undefined;
|
|
458
438
|
orderBy?: string | undefined;
|
|
459
439
|
order?: "asc" | "desc" | undefined;
|
|
@@ -461,18 +441,12 @@ declare function enterprise<TAuthorization extends AuthAuthorizationConfig | und
|
|
|
461
441
|
updateConnection: convex_server0.RegisteredMutation<"public", {
|
|
462
442
|
enterpriseId: string;
|
|
463
443
|
data: {
|
|
464
|
-
status?: "draft" | "active" | "disabled" | undefined;
|
|
465
444
|
name?: string | undefined;
|
|
466
445
|
slug?: string | undefined;
|
|
446
|
+
status?: "draft" | "active" | "disabled" | undefined;
|
|
467
447
|
};
|
|
468
448
|
}, Promise<{
|
|
469
|
-
ok: false;
|
|
470
|
-
code: "NOT_SIGNED_IN" | "FORBIDDEN";
|
|
471
|
-
enterpriseId?: undefined;
|
|
472
|
-
} | {
|
|
473
|
-
ok: true;
|
|
474
449
|
enterpriseId: string;
|
|
475
|
-
code?: undefined;
|
|
476
450
|
}>>;
|
|
477
451
|
deleteConnection: convex_server0.RegisteredMutation<"public", {
|
|
478
452
|
enterpriseId: string;
|
|
@@ -494,12 +468,12 @@ declare function enterprise<TAuthorization extends AuthAuthorizationConfig | und
|
|
|
494
468
|
}[];
|
|
495
469
|
}, Promise<any>>;
|
|
496
470
|
requestDomainVerification: convex_server0.RegisteredMutation<"public", {
|
|
497
|
-
enterpriseId: string;
|
|
498
471
|
domain: string;
|
|
472
|
+
enterpriseId: string;
|
|
499
473
|
}, Promise<any>>;
|
|
500
474
|
confirmDomainVerification: convex_server0.RegisteredAction<"public", {
|
|
501
|
-
enterpriseId: string;
|
|
502
475
|
domain: string;
|
|
476
|
+
enterpriseId: string;
|
|
503
477
|
}, Promise<any>>;
|
|
504
478
|
configureOidc: convex_server0.RegisteredMutation<"public", {
|
|
505
479
|
scopes?: string[] | undefined;
|
|
@@ -525,8 +499,8 @@ declare function enterprise<TAuthorization extends AuthAuthorizationConfig | und
|
|
|
525
499
|
metadataUrl?: string | undefined;
|
|
526
500
|
signAuthnRequests?: boolean | undefined;
|
|
527
501
|
attributeMapping?: {
|
|
528
|
-
email?: string | undefined;
|
|
529
502
|
name?: string | undefined;
|
|
503
|
+
email?: string | undefined;
|
|
530
504
|
subject?: string | undefined;
|
|
531
505
|
firstName?: string | undefined;
|
|
532
506
|
lastName?: string | undefined;
|
|
@@ -578,8 +552,8 @@ declare function enterprise<TAuthorization extends AuthAuthorizationConfig | und
|
|
|
578
552
|
}, Promise<any>>;
|
|
579
553
|
listAudit: convex_server0.RegisteredQuery<"public", {
|
|
580
554
|
groupId?: string | undefined;
|
|
581
|
-
enterpriseId?: string | undefined;
|
|
582
555
|
limit?: number | undefined;
|
|
556
|
+
enterpriseId?: string | undefined;
|
|
583
557
|
}, Promise<any>>;
|
|
584
558
|
createWebhookEndpoint: convex_server0.RegisteredMutation<"public", {
|
|
585
559
|
createdByUserId?: string | undefined;
|
|
@@ -588,16 +562,6 @@ declare function enterprise<TAuthorization extends AuthAuthorizationConfig | und
|
|
|
588
562
|
url: string;
|
|
589
563
|
subscriptions: string[];
|
|
590
564
|
}, Promise<{
|
|
591
|
-
ok: false;
|
|
592
|
-
code: "NOT_SIGNED_IN" | "FORBIDDEN";
|
|
593
|
-
_id?: undefined;
|
|
594
|
-
enterpriseId?: undefined;
|
|
595
|
-
url?: undefined;
|
|
596
|
-
subscriptions?: undefined;
|
|
597
|
-
createdByUserId?: undefined;
|
|
598
|
-
status?: undefined;
|
|
599
|
-
failureCount?: undefined;
|
|
600
|
-
} | {
|
|
601
565
|
_id: any;
|
|
602
566
|
enterpriseId: string;
|
|
603
567
|
url: string;
|
|
@@ -605,8 +569,6 @@ declare function enterprise<TAuthorization extends AuthAuthorizationConfig | und
|
|
|
605
569
|
createdByUserId: string;
|
|
606
570
|
status: string;
|
|
607
571
|
failureCount: number;
|
|
608
|
-
ok?: undefined;
|
|
609
|
-
code?: undefined;
|
|
610
572
|
}>>;
|
|
611
573
|
listWebhookEndpoints: convex_server0.RegisteredQuery<"public", {
|
|
612
574
|
enterpriseId: string;
|
|
@@ -630,9 +592,9 @@ declare function enterprise<TAuthorization extends AuthAuthorizationConfig | und
|
|
|
630
592
|
enterpriseId: string;
|
|
631
593
|
}, Promise<any>>;
|
|
632
594
|
signIn: convex_server0.RegisteredQuery<"public", {
|
|
595
|
+
domain?: string | undefined;
|
|
633
596
|
email?: string | undefined;
|
|
634
597
|
enterpriseId?: string | undefined;
|
|
635
|
-
domain?: string | undefined;
|
|
636
598
|
redirectTo?: string | undefined;
|
|
637
599
|
}, Promise<any>>;
|
|
638
600
|
metadata: convex_server0.RegisteredQuery<"public", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mounts.d.ts","names":[],"sources":["../../src/server/mounts.ts"],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"mounts.d.ts","names":[],"sources":["../../src/server/mounts.ts"],"mappings":";;;;;;;;AAgCA;;;;;AAiBA;;;;;;;;KAjBY,yBAAA;;;;AAkDZ;;;KAjCY,iCAAA;EAmCH,2DAjCP,MAAA,UAkCU;EAhCV,UAAA,EAAY,yBAAA,EA8BL;EA5BP,YAAA,WA4BA;EA1BA,OAAA,WA2BA;EAzBA,eAAA;AAAA;;AA0BiB;;;;;;;;;AAEiC;;;;;;;;;;KALxC,oBAAA,IACV,GAAA;EAAO,IAAA,EADuB,cAAA,CACO,IAAA;AAAA,GACrC,KAAA,EAAO,iCAAA,KACJ,OAAA;AAAA,KAEA,OAAA;EAAoC,EAAA,EAAI,OAAA;AAAA;AAAA,KAExC,wBAAA;EACH,KAAA;IACE,UAAA,GAAa,oBAAA;IACb,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAA,CAAQ,OAAA;EAAA;AAAA;;;;;;;;;;;;;;;;;;;;;KAwBxB,sBAAA;EACV,KAAA;IACE,UAAA,EAAY,oBAAA;IACZ,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAA,CAAQ,OAAA;EAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqJpB,GAAA,wBACS,uBAAA,yBAAA,CAEvB,IAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,cAAA,yCACnB,OAAA,GAAU,wBAAA,CAAyB,UAAA,CAAW,cAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkgBhC,IAAA,wBACS,uBAAA,yBAAA,CAEvB,IAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,cAAA,6BACnB,OAAA,GAAU,wBAAA,CAAyB,UAAA,CAAW,cAAA;;;;;;;;;;;;;;;;AAJhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmFgB,UAAA,wBACS,uBAAA,yBAAA,CAEvB,IAAA,EAAM,IAAA,CACJ,OAAA,CAAQ,cAAA,kDAGV,OAAA,EAAS,sBAAA,CAAuB,UAAA,CAAW,cAAA"}
|