@seamless-auth/types 0.21.0 → 0.23.0
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/CHANGELOG.md +28 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/schemas/authEvent/schema.d.ts +7 -1
- package/dist/schemas/authEvent/schema.d.ts.map +1 -1
- package/dist/schemas/authEvent/schema.js +2 -0
- package/dist/schemas/authEvent/schema.js.map +1 -1
- package/dist/schemas/organization/schema.d.ts +4 -0
- package/dist/schemas/organization/schema.d.ts.map +1 -1
- package/dist/schemas/organization/schema.js +2 -2
- package/dist/schemas/organization/schema.js.map +1 -1
- package/dist/schemas/systemConfig/schema.d.ts +107 -0
- package/dist/schemas/systemConfig/schema.d.ts.map +1 -1
- package/dist/schemas/systemConfig/schema.js +59 -0
- package/dist/schemas/systemConfig/schema.js.map +1 -1
- package/dist/schemas/userImport/schema.d.ts +152 -0
- package/dist/schemas/userImport/schema.d.ts.map +1 -0
- package/dist/schemas/userImport/schema.js +85 -0
- package/dist/schemas/userImport/schema.js.map +1 -0
- package/package.json +2 -2
- package/src/index.ts +1 -0
- package/src/schemas/authEvent/schema.ts +2 -0
- package/src/schemas/organization/schema.ts +5 -2
- package/src/schemas/systemConfig/schema.ts +64 -0
- package/src/schemas/userImport/schema.ts +112 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
# @seamless-auth/types
|
|
2
2
|
|
|
3
|
+
## 0.23.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 43b2ea5: Add the user import contract: `ImportUsersRequestSchema`, `ImportUsersResponseSchema` and the row, organization, status, rejection and change schemas behind them, with `USER_IMPORT_MAX_ROWS` (200). Export `MembershipRoleSchema` and `MembershipScopeSchema`, and add the `admin_user_imported` and `admin_user_import_completed` audit event types.
|
|
8
|
+
|
|
9
|
+
## 0.22.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- c934d8f: Add `flow_rate_limits` to the system config, and pin the Android WebAuthn origin form.
|
|
14
|
+
|
|
15
|
+
`seamless-auth-api` limits how often one caller may start an OTP, magic link, or OAuth flow, on
|
|
16
|
+
top of the general `rate_limit`, with constants fixed in code: 10 OTP sends and 20 magic links per
|
|
17
|
+
IP per 15 minutes, 5 per address, 30 OAuth starts per IP and 10 per provider. Those are fine for a
|
|
18
|
+
web audience and wrong for a mobile one, because carriers put thousands of subscribers behind one
|
|
19
|
+
address. `flow_rate_limits` is an object key (`windowSeconds`, `otp.perIp`, `otp.perIdentity`,
|
|
20
|
+
`magicLink.perIp`, `magicLink.perIdentity`, `oauth.perIp`, `oauth.perProvider`) whose defaults
|
|
21
|
+
are exactly those constants, so a deployment that sets nothing behaves as it did, and a partial
|
|
22
|
+
value fills the flows it leaves out. `FlowRateLimitsSchema`, `FlowRateLimits` and
|
|
23
|
+
`DefaultFlowRateLimits` are exported; the patch schema accepts the key.
|
|
24
|
+
|
|
25
|
+
`origins` gains a test and a comment for the form Android reports, `android:apk-key-hash:<base64url>`,
|
|
26
|
+
which `z.url()` accepts as an opaque URL. It has to keep accepting it for native passkeys to
|
|
27
|
+
verify, and nothing said so until now.
|
|
28
|
+
|
|
29
|
+
Part of the mobile track, fells-code/seamless-templates#40.
|
|
30
|
+
|
|
3
31
|
## 0.21.0
|
|
4
32
|
|
|
5
33
|
### Minor Changes
|
package/dist/index.d.ts
CHANGED
|
@@ -16,4 +16,5 @@ export * from './schemas/organization/schema.js';
|
|
|
16
16
|
export * from './schemas/me/schema.js';
|
|
17
17
|
export * from './schemas/metrics/schema.js';
|
|
18
18
|
export * from './schemas/admin/schema.js';
|
|
19
|
+
export * from './schemas/userImport/schema.js';
|
|
19
20
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAE5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAE5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -16,4 +16,5 @@ export * from './schemas/organization/schema.js';
|
|
|
16
16
|
export * from './schemas/me/schema.js';
|
|
17
17
|
export * from './schemas/metrics/schema.js';
|
|
18
18
|
export * from './schemas/admin/schema.js';
|
|
19
|
+
export * from './schemas/userImport/schema.js';
|
|
19
20
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAE5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAE5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import z from 'zod';
|
|
2
|
-
export declare const AUTH_EVENT_TYPES: readonly ["admin_device_replacement_recovery", "admin_session_revoked", "auth_action_incremented", "bearer_token_failed", "bearer_token_success", "bearer_token_suspicious", "credentials_deleted", "informational", "internal_user_updated_by_owner", "jwks_failed", "jwks_success", "jwks_suspicious", "login_challenge", "login_failed", "login_success", "login_suspicious", "logout_failed", "logout_success", "logout_suspicious", "magic_link_failed", "magic_link_poll_completed_successfully", "magic_link_requested", "magic_link_success", "mfa_otp_failed", "mfa_otp_success", "mfa_otp_suspicious", "notification_sent", "oauth_login_failed", "oauth_login_started", "oauth_login_success", "otp_failed", "otp_success", "otp_suspicious", "recovery_otp_failed", "recovery_otp_success", "recovery_otp_suspicious", "refresh_token_failed", "refresh_token_success", "refresh_token_suspicious", "registration_failed", "registration_success", "registration_suspicious", "request_suspicious", "service_token_failed", "service_token_rotated", "service_token_success", "service_token_suspicious", "step_up_challenge", "step_up_failed", "step_up_success", "step_up_suspicious", "system_config_error", "system_config_read", "system_config_updated", "totp_disabled", "totp_enrollment_started", "totp_enrollment_success", "totp_failed", "totp_success", "totp_suspicious", "user_created", "user_data_failed", "user_data_success", "user_data_suspicious", "user_deleted", "verify_otp_failed", "verify_otp_success", "verify_otp_suspicious", "webauthn_login_failed", "webauthn_login_success", "webauthn_login_suspicious", "webauthn_registration_failed", "webauthn_registration_success", "webauthn_registration_suspicious"];
|
|
2
|
+
export declare const AUTH_EVENT_TYPES: readonly ["admin_device_replacement_recovery", "admin_user_import_completed", "admin_user_imported", "admin_session_revoked", "auth_action_incremented", "bearer_token_failed", "bearer_token_success", "bearer_token_suspicious", "credentials_deleted", "informational", "internal_user_updated_by_owner", "jwks_failed", "jwks_success", "jwks_suspicious", "login_challenge", "login_failed", "login_success", "login_suspicious", "logout_failed", "logout_success", "logout_suspicious", "magic_link_failed", "magic_link_poll_completed_successfully", "magic_link_requested", "magic_link_success", "mfa_otp_failed", "mfa_otp_success", "mfa_otp_suspicious", "notification_sent", "oauth_login_failed", "oauth_login_started", "oauth_login_success", "otp_failed", "otp_success", "otp_suspicious", "recovery_otp_failed", "recovery_otp_success", "recovery_otp_suspicious", "refresh_token_failed", "refresh_token_success", "refresh_token_suspicious", "registration_failed", "registration_success", "registration_suspicious", "request_suspicious", "service_token_failed", "service_token_rotated", "service_token_success", "service_token_suspicious", "step_up_challenge", "step_up_failed", "step_up_success", "step_up_suspicious", "system_config_error", "system_config_read", "system_config_updated", "totp_disabled", "totp_enrollment_started", "totp_enrollment_success", "totp_failed", "totp_success", "totp_suspicious", "user_created", "user_data_failed", "user_data_success", "user_data_suspicious", "user_deleted", "verify_otp_failed", "verify_otp_success", "verify_otp_suspicious", "webauthn_login_failed", "webauthn_login_success", "webauthn_login_suspicious", "webauthn_registration_failed", "webauthn_registration_success", "webauthn_registration_suspicious"];
|
|
3
3
|
export declare const AuthEventTypeEnum: z.ZodEnum<{
|
|
4
4
|
admin_device_replacement_recovery: "admin_device_replacement_recovery";
|
|
5
|
+
admin_user_import_completed: "admin_user_import_completed";
|
|
6
|
+
admin_user_imported: "admin_user_imported";
|
|
5
7
|
admin_session_revoked: "admin_session_revoked";
|
|
6
8
|
auth_action_incremented: "auth_action_incremented";
|
|
7
9
|
bearer_token_failed: "bearer_token_failed";
|
|
@@ -103,6 +105,8 @@ export declare const AuthEventQuerySchema: z.ZodObject<{
|
|
|
103
105
|
sessionId: z.ZodOptional<z.ZodString>;
|
|
104
106
|
type: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
105
107
|
admin_device_replacement_recovery: "admin_device_replacement_recovery";
|
|
108
|
+
admin_user_import_completed: "admin_user_import_completed";
|
|
109
|
+
admin_user_imported: "admin_user_imported";
|
|
106
110
|
admin_session_revoked: "admin_session_revoked";
|
|
107
111
|
auth_action_incremented: "auth_action_incremented";
|
|
108
112
|
bearer_token_failed: "bearer_token_failed";
|
|
@@ -178,6 +182,8 @@ export declare const AuthEventQuerySchema: z.ZodObject<{
|
|
|
178
182
|
webauthn_registration_suspicious: "webauthn_registration_suspicious";
|
|
179
183
|
}>, z.ZodString, z.ZodArray<z.ZodUnion<readonly [z.ZodEnum<{
|
|
180
184
|
admin_device_replacement_recovery: "admin_device_replacement_recovery";
|
|
185
|
+
admin_user_import_completed: "admin_user_import_completed";
|
|
186
|
+
admin_user_imported: "admin_user_imported";
|
|
181
187
|
admin_session_revoked: "admin_session_revoked";
|
|
182
188
|
auth_action_incremented: "auth_action_incremented";
|
|
183
189
|
bearer_token_failed: "bearer_token_failed";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/schemas/authEvent/schema.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAGpB,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/schemas/authEvent/schema.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAGpB,eAAO,MAAM,gBAAgB,stDA6EnB,CAAC;AAEX,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA2B,CAAC;AAE1D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAI9D,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;iBAsD1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAe/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;iBAGnC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
|
|
@@ -2,6 +2,8 @@ import z from 'zod';
|
|
|
2
2
|
import { IsoDate } from '../../shared.js';
|
|
3
3
|
export const AUTH_EVENT_TYPES = [
|
|
4
4
|
'admin_device_replacement_recovery',
|
|
5
|
+
'admin_user_import_completed',
|
|
6
|
+
'admin_user_imported',
|
|
5
7
|
'admin_session_revoked',
|
|
6
8
|
'auth_action_incremented',
|
|
7
9
|
'bearer_token_failed',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/schemas/authEvent/schema.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,mCAAmC;IACnC,uBAAuB;IACvB,yBAAyB;IACzB,qBAAqB;IACrB,sBAAsB;IACtB,yBAAyB;IACzB,qBAAqB;IACrB,eAAe;IACf,gCAAgC;IAChC,aAAa;IACb,cAAc;IACd,iBAAiB;IACjB,iBAAiB;IACjB,cAAc;IACd,eAAe;IACf,kBAAkB;IAClB,eAAe;IACf,gBAAgB;IAChB,mBAAmB;IACnB,mBAAmB;IACnB,wCAAwC;IACxC,sBAAsB;IACtB,oBAAoB;IACpB,gBAAgB;IAChB,iBAAiB;IACjB,oBAAoB;IACpB,mBAAmB;IACnB,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB;IACrB,YAAY;IACZ,aAAa;IACb,gBAAgB;IAChB,qBAAqB;IACrB,sBAAsB;IACtB,yBAAyB;IACzB,sBAAsB;IACtB,uBAAuB;IACvB,0BAA0B;IAC1B,qBAAqB;IACrB,sBAAsB;IACtB,yBAAyB;IACzB,oBAAoB;IACpB,sBAAsB;IACtB,uBAAuB;IACvB,uBAAuB;IACvB,0BAA0B;IAC1B,mBAAmB;IACnB,gBAAgB;IAChB,iBAAiB;IACjB,oBAAoB;IACpB,qBAAqB;IACrB,oBAAoB;IACpB,uBAAuB;IACvB,eAAe;IACf,yBAAyB;IACzB,yBAAyB;IACzB,aAAa;IACb,cAAc;IACd,iBAAiB;IACjB,cAAc;IACd,kBAAkB;IAClB,mBAAmB;IACnB,sBAAsB;IACtB,cAAc;IACd,mBAAmB;IACnB,oBAAoB;IACpB,uBAAuB;IACvB,uBAAuB;IACvB,wBAAwB;IACxB,2BAA2B;IAC3B,8BAA8B;IAC9B,+BAA+B;IAC/B,kCAAkC;CAC1B,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAI1D,6EAA6E;AAC7E,6EAA6E;AAC7E,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACzC;;;;;;;OAOG;IACH,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC/C;;;;;OAKG;IACH,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC5C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC5C;;;;OAIG;IACH,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC/C;;;;;OAKG;IACH,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC9C;;;OAGG;IACH,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC/C;;;OAGG;IACH,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACxC;;;;OAIG;IACH,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC5C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IACtD,UAAU,EAAE,OAAO;IACnB,UAAU,EAAE,OAAO;CACpB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACpD,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAE3C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,oFAAoF;IACpF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,0DAA0D;IAC1D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,IAAI,EAAE,CAAC;SACJ,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;SACzF,QAAQ,EAAE;IAEb,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC1B,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC;IAChC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CAClB,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/schemas/authEvent/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,10 @@ export declare const UpdateOrganizationRequestSchema: z.ZodObject<{
|
|
|
20
20
|
metadata: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
21
21
|
}, z.core.$strip>;
|
|
22
22
|
export type UpdateOrganizationRequest = z.infer<typeof UpdateOrganizationRequestSchema>;
|
|
23
|
+
export declare const MembershipRoleSchema: z.ZodString;
|
|
24
|
+
export declare const MembershipScopeSchema: z.ZodString;
|
|
25
|
+
export type MembershipRole = z.infer<typeof MembershipRoleSchema>;
|
|
26
|
+
export type MembershipScope = z.infer<typeof MembershipScopeSchema>;
|
|
23
27
|
export declare const AddOrganizationMemberRequestSchema: z.ZodObject<{
|
|
24
28
|
userId: z.ZodOptional<z.ZodUUID>;
|
|
25
29
|
email: z.ZodOptional<z.ZodEmail>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/schemas/organization/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,yBAAyB;;iBAEpC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,6BAA6B;;;iBAExC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF,eAAO,MAAM,+BAA+B;;;;iBAI1C,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAExF,eAAO,MAAM,+BAA+B;;;;iBAI1C,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/schemas/organization/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,yBAAyB;;iBAEpC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,6BAA6B;;;iBAExC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF,eAAO,MAAM,+BAA+B;;;;iBAI1C,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAExF,eAAO,MAAM,+BAA+B;;;;iBAI1C,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAExF,eAAO,MAAM,oBAAoB,aAAmC,CAAC;AACrE,eAAO,MAAM,qBAAqB,aAAoC,CAAC;AAEvE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,kCAAkC;;;;;iBAS3C,CAAC;AAEL,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAE9F,eAAO,MAAM,qCAAqC;;;iBAGhD,CAAC;AAEH,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qCAAqC,CAAC,CAAC;AASpG,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;iBASvC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;iBAU7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;iBAE7C,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAE9F,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAGzC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAEtF,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAG9C,CAAC;AAEH,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC;AAEhG,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;iBAG5C,CAAC;AAEH,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAE5F,eAAO,MAAM,4CAA4C;;;;;;;;;;;;;;;;iBAEvD,CAAC;AAEH,MAAM,MAAM,sCAAsC,GAAG,CAAC,CAAC,KAAK,CAC1D,OAAO,4CAA4C,CACpD,CAAC;AAEF,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQ3C,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAC"}
|
|
@@ -17,8 +17,8 @@ export const UpdateOrganizationRequestSchema = z.object({
|
|
|
17
17
|
slug: z.string().trim().min(1).max(100).optional(),
|
|
18
18
|
metadata: MetadataSchema,
|
|
19
19
|
});
|
|
20
|
-
const MembershipRoleSchema = z.string().trim().min(1).max(80);
|
|
21
|
-
const MembershipScopeSchema = z.string().trim().min(1).max(120);
|
|
20
|
+
export const MembershipRoleSchema = z.string().trim().min(1).max(80);
|
|
21
|
+
export const MembershipScopeSchema = z.string().trim().min(1).max(120);
|
|
22
22
|
export const AddOrganizationMemberRequestSchema = z
|
|
23
23
|
.object({
|
|
24
24
|
userId: z.uuid().optional(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/schemas/organization/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,cAAc,EAAE,CAAC,CAAC,IAAI,EAAE;CACzB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,6BAA6B,GAAG,yBAAyB,CAAC,MAAM,CAAC;IAC5E,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE;CACjB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC;IACtD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAClD,QAAQ,EAAE,cAAc;CACzB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC;IACtD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAClD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAClD,QAAQ,EAAE,cAAc;CACzB,CAAC,CAAC;AAIH,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/schemas/organization/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,6 +49,53 @@ export declare const DefaultLockoutPolicy: {
|
|
|
49
49
|
readonly windowSeconds: number;
|
|
50
50
|
readonly lockoutSeconds: number;
|
|
51
51
|
};
|
|
52
|
+
/**
|
|
53
|
+
* How many times one caller may start a message-carrying or provider flow per
|
|
54
|
+
* window, before the general `rate_limit` applies to everything else.
|
|
55
|
+
*
|
|
56
|
+
* Two keys per flow because they guard different things. `perIdentity` bounds
|
|
57
|
+
* how often one address or phone can be messaged, which is the abuse a sender
|
|
58
|
+
* cares about. `perIp` bounds how many distinct addresses one network location
|
|
59
|
+
* can drive, which is the enumeration and spam guard. The per-IP values were
|
|
60
|
+
* fixed constants before this key existed, and those constants are the defaults
|
|
61
|
+
* here, so a deployment that sets nothing behaves as it did.
|
|
62
|
+
*
|
|
63
|
+
* Per-IP limits are the ones a native app runs into first. Mobile carriers put
|
|
64
|
+
* thousands of subscribers behind one address, so a value that never troubles a
|
|
65
|
+
* web audience can refuse a mobile audience at modest scale. Raise `perIp` for a
|
|
66
|
+
* deployment that serves phones; leave `perIdentity` where it is.
|
|
67
|
+
*/
|
|
68
|
+
export declare const FlowRateLimitsSchema: z.ZodObject<{
|
|
69
|
+
windowSeconds: z.ZodDefault<z.ZodNumber>;
|
|
70
|
+
otp: z.ZodDefault<z.ZodObject<{
|
|
71
|
+
perIp: z.ZodDefault<z.ZodNumber>;
|
|
72
|
+
perIdentity: z.ZodDefault<z.ZodNumber>;
|
|
73
|
+
}, z.core.$strip>>;
|
|
74
|
+
magicLink: z.ZodDefault<z.ZodObject<{
|
|
75
|
+
perIp: z.ZodDefault<z.ZodNumber>;
|
|
76
|
+
perIdentity: z.ZodDefault<z.ZodNumber>;
|
|
77
|
+
}, z.core.$strip>>;
|
|
78
|
+
oauth: z.ZodDefault<z.ZodObject<{
|
|
79
|
+
perIp: z.ZodDefault<z.ZodNumber>;
|
|
80
|
+
perProvider: z.ZodDefault<z.ZodNumber>;
|
|
81
|
+
}, z.core.$strip>>;
|
|
82
|
+
}, z.core.$strip>;
|
|
83
|
+
export type FlowRateLimits = z.infer<typeof FlowRateLimitsSchema>;
|
|
84
|
+
export declare const DefaultFlowRateLimits: {
|
|
85
|
+
readonly windowSeconds: number;
|
|
86
|
+
readonly otp: {
|
|
87
|
+
readonly perIp: 10;
|
|
88
|
+
readonly perIdentity: 5;
|
|
89
|
+
};
|
|
90
|
+
readonly magicLink: {
|
|
91
|
+
readonly perIp: 20;
|
|
92
|
+
readonly perIdentity: 5;
|
|
93
|
+
};
|
|
94
|
+
readonly oauth: {
|
|
95
|
+
readonly perIp: 30;
|
|
96
|
+
readonly perProvider: 10;
|
|
97
|
+
};
|
|
98
|
+
};
|
|
52
99
|
export declare const AuthenticatorAttachmentPolicySchema: z.ZodEnum<{
|
|
53
100
|
"cross-platform": "cross-platform";
|
|
54
101
|
platform: "platform";
|
|
@@ -183,6 +230,21 @@ export declare const SystemConfigSchema: z.ZodObject<{
|
|
|
183
230
|
max_concurrent_sessions: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
|
|
184
231
|
rate_limit: z.ZodNumber;
|
|
185
232
|
delay_after: z.ZodNumber;
|
|
233
|
+
flow_rate_limits: z.ZodDefault<z.ZodObject<{
|
|
234
|
+
windowSeconds: z.ZodDefault<z.ZodNumber>;
|
|
235
|
+
otp: z.ZodDefault<z.ZodObject<{
|
|
236
|
+
perIp: z.ZodDefault<z.ZodNumber>;
|
|
237
|
+
perIdentity: z.ZodDefault<z.ZodNumber>;
|
|
238
|
+
}, z.core.$strip>>;
|
|
239
|
+
magicLink: z.ZodDefault<z.ZodObject<{
|
|
240
|
+
perIp: z.ZodDefault<z.ZodNumber>;
|
|
241
|
+
perIdentity: z.ZodDefault<z.ZodNumber>;
|
|
242
|
+
}, z.core.$strip>>;
|
|
243
|
+
oauth: z.ZodDefault<z.ZodObject<{
|
|
244
|
+
perIp: z.ZodDefault<z.ZodNumber>;
|
|
245
|
+
perProvider: z.ZodDefault<z.ZodNumber>;
|
|
246
|
+
}, z.core.$strip>>;
|
|
247
|
+
}, z.core.$strip>>;
|
|
186
248
|
rpid: z.ZodString;
|
|
187
249
|
origins: z.ZodArray<z.ZodURL>;
|
|
188
250
|
frontend_url: z.ZodOptional<z.ZodURL>;
|
|
@@ -260,6 +322,21 @@ export declare const SystemConfigPatchSchema: z.ZodObject<{
|
|
|
260
322
|
max_concurrent_sessions: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
261
323
|
rate_limit: z.ZodOptional<z.ZodNumber>;
|
|
262
324
|
delay_after: z.ZodOptional<z.ZodNumber>;
|
|
325
|
+
flow_rate_limits: z.ZodOptional<z.ZodObject<{
|
|
326
|
+
windowSeconds: z.ZodDefault<z.ZodNumber>;
|
|
327
|
+
otp: z.ZodDefault<z.ZodObject<{
|
|
328
|
+
perIp: z.ZodDefault<z.ZodNumber>;
|
|
329
|
+
perIdentity: z.ZodDefault<z.ZodNumber>;
|
|
330
|
+
}, z.core.$strip>>;
|
|
331
|
+
magicLink: z.ZodDefault<z.ZodObject<{
|
|
332
|
+
perIp: z.ZodDefault<z.ZodNumber>;
|
|
333
|
+
perIdentity: z.ZodDefault<z.ZodNumber>;
|
|
334
|
+
}, z.core.$strip>>;
|
|
335
|
+
oauth: z.ZodDefault<z.ZodObject<{
|
|
336
|
+
perIp: z.ZodDefault<z.ZodNumber>;
|
|
337
|
+
perProvider: z.ZodDefault<z.ZodNumber>;
|
|
338
|
+
}, z.core.$strip>>;
|
|
339
|
+
}, z.core.$strip>>;
|
|
263
340
|
rpid: z.ZodOptional<z.ZodString>;
|
|
264
341
|
origins: z.ZodOptional<z.ZodArray<z.ZodURL>>;
|
|
265
342
|
magic_link_redirect_uris: z.ZodOptional<z.ZodArray<z.ZodURL>>;
|
|
@@ -340,6 +417,21 @@ export declare function createPatchSystemConfigSchema(existing: SystemConfig): z
|
|
|
340
417
|
max_concurrent_sessions: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
341
418
|
rate_limit: z.ZodOptional<z.ZodNumber>;
|
|
342
419
|
delay_after: z.ZodOptional<z.ZodNumber>;
|
|
420
|
+
flow_rate_limits: z.ZodOptional<z.ZodObject<{
|
|
421
|
+
windowSeconds: z.ZodDefault<z.ZodNumber>;
|
|
422
|
+
otp: z.ZodDefault<z.ZodObject<{
|
|
423
|
+
perIp: z.ZodDefault<z.ZodNumber>;
|
|
424
|
+
perIdentity: z.ZodDefault<z.ZodNumber>;
|
|
425
|
+
}, z.core.$strip>>;
|
|
426
|
+
magicLink: z.ZodDefault<z.ZodObject<{
|
|
427
|
+
perIp: z.ZodDefault<z.ZodNumber>;
|
|
428
|
+
perIdentity: z.ZodDefault<z.ZodNumber>;
|
|
429
|
+
}, z.core.$strip>>;
|
|
430
|
+
oauth: z.ZodDefault<z.ZodObject<{
|
|
431
|
+
perIp: z.ZodDefault<z.ZodNumber>;
|
|
432
|
+
perProvider: z.ZodDefault<z.ZodNumber>;
|
|
433
|
+
}, z.core.$strip>>;
|
|
434
|
+
}, z.core.$strip>>;
|
|
343
435
|
rpid: z.ZodOptional<z.ZodString>;
|
|
344
436
|
origins: z.ZodOptional<z.ZodArray<z.ZodURL>>;
|
|
345
437
|
magic_link_redirect_uris: z.ZodOptional<z.ZodArray<z.ZodURL>>;
|
|
@@ -527,6 +619,21 @@ export declare const GetSystemConfigResponseSchema: z.ZodObject<{
|
|
|
527
619
|
max_concurrent_sessions: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
|
|
528
620
|
rate_limit: z.ZodNumber;
|
|
529
621
|
delay_after: z.ZodNumber;
|
|
622
|
+
flow_rate_limits: z.ZodDefault<z.ZodObject<{
|
|
623
|
+
windowSeconds: z.ZodDefault<z.ZodNumber>;
|
|
624
|
+
otp: z.ZodDefault<z.ZodObject<{
|
|
625
|
+
perIp: z.ZodDefault<z.ZodNumber>;
|
|
626
|
+
perIdentity: z.ZodDefault<z.ZodNumber>;
|
|
627
|
+
}, z.core.$strip>>;
|
|
628
|
+
magicLink: z.ZodDefault<z.ZodObject<{
|
|
629
|
+
perIp: z.ZodDefault<z.ZodNumber>;
|
|
630
|
+
perIdentity: z.ZodDefault<z.ZodNumber>;
|
|
631
|
+
}, z.core.$strip>>;
|
|
632
|
+
oauth: z.ZodDefault<z.ZodObject<{
|
|
633
|
+
perIp: z.ZodDefault<z.ZodNumber>;
|
|
634
|
+
perProvider: z.ZodDefault<z.ZodNumber>;
|
|
635
|
+
}, z.core.$strip>>;
|
|
636
|
+
}, z.core.$strip>>;
|
|
530
637
|
rpid: z.ZodString;
|
|
531
638
|
origins: z.ZodArray<z.ZodURL>;
|
|
532
639
|
frontend_url: z.ZodOptional<z.ZodURL>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/schemas/systemConfig/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,iBAAiB;;;;;;EAM5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAqB5D,eAAO,MAAM,oBAAoB,UAShC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,qBAAqB,aAAwC,CAAC;AAE3E,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;iBAsBpC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,mBAAmB;;;;;iBAa9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,oBAAoB;;;;;CAKvB,CAAC;AAEX,eAAO,MAAM,mCAAmC;;;;EAAgD,CAAC;AAEjG,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC;AAEhG;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB;;;EAA6B,CAAC;AAElE,eAAO,MAAM,yBAAyB;;;EAA6B,CAAC;AAEpE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,eAAO,MAAM,4BAA4B;;;;EAAmD,CAAC;AAE7F,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;iBAoEpC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,0BAA0B;;;;;;;;CAQ7B,CAAC;AAIX,eAAO,MAAM,kBAAkB
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/schemas/systemConfig/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -77,6 +77,54 @@ export const DefaultLockoutPolicy = {
|
|
|
77
77
|
windowSeconds: 15 * 60,
|
|
78
78
|
lockoutSeconds: 15 * 60,
|
|
79
79
|
};
|
|
80
|
+
const PerIpLimitSchema = z.number().int().positive();
|
|
81
|
+
/**
|
|
82
|
+
* How many times one caller may start a message-carrying or provider flow per
|
|
83
|
+
* window, before the general `rate_limit` applies to everything else.
|
|
84
|
+
*
|
|
85
|
+
* Two keys per flow because they guard different things. `perIdentity` bounds
|
|
86
|
+
* how often one address or phone can be messaged, which is the abuse a sender
|
|
87
|
+
* cares about. `perIp` bounds how many distinct addresses one network location
|
|
88
|
+
* can drive, which is the enumeration and spam guard. The per-IP values were
|
|
89
|
+
* fixed constants before this key existed, and those constants are the defaults
|
|
90
|
+
* here, so a deployment that sets nothing behaves as it did.
|
|
91
|
+
*
|
|
92
|
+
* Per-IP limits are the ones a native app runs into first. Mobile carriers put
|
|
93
|
+
* thousands of subscribers behind one address, so a value that never troubles a
|
|
94
|
+
* web audience can refuse a mobile audience at modest scale. Raise `perIp` for a
|
|
95
|
+
* deployment that serves phones; leave `perIdentity` where it is.
|
|
96
|
+
*/
|
|
97
|
+
export const FlowRateLimitsSchema = z.object({
|
|
98
|
+
windowSeconds: z
|
|
99
|
+
.number()
|
|
100
|
+
.int()
|
|
101
|
+
.positive()
|
|
102
|
+
.default(15 * 60),
|
|
103
|
+
otp: z
|
|
104
|
+
.object({
|
|
105
|
+
perIp: PerIpLimitSchema.default(10),
|
|
106
|
+
perIdentity: PerIpLimitSchema.default(5),
|
|
107
|
+
})
|
|
108
|
+
.default({ perIp: 10, perIdentity: 5 }),
|
|
109
|
+
magicLink: z
|
|
110
|
+
.object({
|
|
111
|
+
perIp: PerIpLimitSchema.default(20),
|
|
112
|
+
perIdentity: PerIpLimitSchema.default(5),
|
|
113
|
+
})
|
|
114
|
+
.default({ perIp: 20, perIdentity: 5 }),
|
|
115
|
+
oauth: z
|
|
116
|
+
.object({
|
|
117
|
+
perIp: PerIpLimitSchema.default(30),
|
|
118
|
+
perProvider: PerIpLimitSchema.default(10),
|
|
119
|
+
})
|
|
120
|
+
.default({ perIp: 30, perProvider: 10 }),
|
|
121
|
+
});
|
|
122
|
+
export const DefaultFlowRateLimits = {
|
|
123
|
+
windowSeconds: 15 * 60,
|
|
124
|
+
otp: { perIp: 10, perIdentity: 5 },
|
|
125
|
+
magicLink: { perIp: 20, perIdentity: 5 },
|
|
126
|
+
oauth: { perIp: 30, perProvider: 10 },
|
|
127
|
+
};
|
|
80
128
|
export const AuthenticatorAttachmentPolicySchema = z.enum(['any', 'platform', 'cross-platform']);
|
|
81
129
|
/**
|
|
82
130
|
* Which authenticators a deployment will enrol.
|
|
@@ -204,7 +252,17 @@ export const SystemConfigSchema = z.object({
|
|
|
204
252
|
max_concurrent_sessions: z.number().int().positive().nullable().default(null),
|
|
205
253
|
rate_limit: z.number().int().positive(),
|
|
206
254
|
delay_after: z.number().int().nonnegative(),
|
|
255
|
+
flow_rate_limits: FlowRateLimitsSchema.default(DefaultFlowRateLimits),
|
|
207
256
|
rpid: z.string().min(1),
|
|
257
|
+
/**
|
|
258
|
+
* The WebAuthn origins this deployment accepts, and the fallback for the magic
|
|
259
|
+
* link and OAuth destinations (`origins[0]`), so the web origin belongs first.
|
|
260
|
+
*
|
|
261
|
+
* `z.url()` here is deliberately loose. An Android app's WebAuthn origin is
|
|
262
|
+
* `android:apk-key-hash:<base64url>`, which is a valid URL with an opaque path
|
|
263
|
+
* and no host, and it must be accepted here for native passkeys to verify. Do
|
|
264
|
+
* not tighten this to a hostname check without carrying that form along.
|
|
265
|
+
*/
|
|
208
266
|
origins: z.array(z.url()).min(1),
|
|
209
267
|
frontend_url: z.url().optional(),
|
|
210
268
|
/**
|
|
@@ -234,6 +292,7 @@ export const SystemConfigPatchSchema = z
|
|
|
234
292
|
max_concurrent_sessions: z.number().int().positive().nullable().optional(),
|
|
235
293
|
rate_limit: SystemConfigSchema.shape.rate_limit.optional(),
|
|
236
294
|
delay_after: SystemConfigSchema.shape.delay_after.optional(),
|
|
295
|
+
flow_rate_limits: FlowRateLimitsSchema.optional(),
|
|
237
296
|
rpid: SystemConfigSchema.shape.rpid.optional(),
|
|
238
297
|
origins: SystemConfigSchema.shape.origins.optional(),
|
|
239
298
|
magic_link_redirect_uris: z.array(RedirectTargetSchema).optional(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/schemas/systemConfig/schema.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/schemas/systemConfig/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const USER_IMPORT_MAX_ROWS = 200;
|
|
3
|
+
/** Names the system the users come from, so the same external id can be matched on a re-run. */
|
|
4
|
+
export declare const UserImportSourceSchema: z.ZodString;
|
|
5
|
+
export type UserImportSource = z.infer<typeof UserImportSourceSchema>;
|
|
6
|
+
export declare const UserImportOrganizationSchema: z.ZodObject<{
|
|
7
|
+
organizationId: z.ZodOptional<z.ZodUUID>;
|
|
8
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
9
|
+
roles: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
10
|
+
scopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
11
|
+
}, z.core.$strict>;
|
|
12
|
+
export type UserImportOrganization = z.infer<typeof UserImportOrganizationSchema>;
|
|
13
|
+
export declare const UserImportRowSchema: z.ZodObject<{
|
|
14
|
+
externalId: z.ZodOptional<z.ZodString>;
|
|
15
|
+
email: z.ZodEmail;
|
|
16
|
+
phone: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
17
|
+
roles: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
18
|
+
organizations: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
19
|
+
organizationId: z.ZodOptional<z.ZodUUID>;
|
|
20
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
21
|
+
roles: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
22
|
+
scopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
23
|
+
}, z.core.$strict>>>;
|
|
24
|
+
}, z.core.$strict>;
|
|
25
|
+
export type UserImportRow = z.infer<typeof UserImportRowSchema>;
|
|
26
|
+
/**
|
|
27
|
+
* A batch of users to bring across from another identity system.
|
|
28
|
+
*
|
|
29
|
+
* Imports never carry credentials: an imported user signs in for the first time by
|
|
30
|
+
* registering with the imported email, which proves control of the address and then
|
|
31
|
+
* enrolls a passkey. Imports only ever add roles and memberships, never remove them,
|
|
32
|
+
* so re-running one after correcting the source data cannot take access away.
|
|
33
|
+
*/
|
|
34
|
+
export declare const ImportUsersRequestSchema: z.ZodObject<{
|
|
35
|
+
source: z.ZodString;
|
|
36
|
+
dryRun: z.ZodDefault<z.ZodBoolean>;
|
|
37
|
+
users: z.ZodArray<z.ZodObject<{
|
|
38
|
+
externalId: z.ZodOptional<z.ZodString>;
|
|
39
|
+
email: z.ZodEmail;
|
|
40
|
+
phone: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
41
|
+
roles: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
42
|
+
organizations: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
43
|
+
organizationId: z.ZodOptional<z.ZodUUID>;
|
|
44
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
45
|
+
roles: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
46
|
+
scopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
47
|
+
}, z.core.$strict>>>;
|
|
48
|
+
}, z.core.$strict>>;
|
|
49
|
+
}, z.core.$strict>;
|
|
50
|
+
export type ImportUsersRequest = z.infer<typeof ImportUsersRequestSchema>;
|
|
51
|
+
export declare const UserImportStatusSchema: z.ZodEnum<{
|
|
52
|
+
rejected: "rejected";
|
|
53
|
+
created: "created";
|
|
54
|
+
updated: "updated";
|
|
55
|
+
unchanged: "unchanged";
|
|
56
|
+
}>;
|
|
57
|
+
export type UserImportStatus = z.infer<typeof UserImportStatusSchema>;
|
|
58
|
+
export declare const UserImportRejectionSchema: z.ZodEnum<{
|
|
59
|
+
admin_role_not_allowed: "admin_role_not_allowed";
|
|
60
|
+
role_unavailable: "role_unavailable";
|
|
61
|
+
organization_not_found: "organization_not_found";
|
|
62
|
+
duplicate_in_batch: "duplicate_in_batch";
|
|
63
|
+
email_mismatch: "email_mismatch";
|
|
64
|
+
phone_invalid: "phone_invalid";
|
|
65
|
+
phone_in_use: "phone_in_use";
|
|
66
|
+
external_id_conflict: "external_id_conflict";
|
|
67
|
+
write_failed: "write_failed";
|
|
68
|
+
}>;
|
|
69
|
+
export type UserImportRejection = z.infer<typeof UserImportRejectionSchema>;
|
|
70
|
+
export declare const UserImportChangeSchema: z.ZodEnum<{
|
|
71
|
+
phone: "phone";
|
|
72
|
+
roles: "roles";
|
|
73
|
+
organizations: "organizations";
|
|
74
|
+
created: "created";
|
|
75
|
+
linked: "linked";
|
|
76
|
+
}>;
|
|
77
|
+
export type UserImportChange = z.infer<typeof UserImportChangeSchema>;
|
|
78
|
+
export declare const UserImportResultSchema: z.ZodObject<{
|
|
79
|
+
index: z.ZodNumber;
|
|
80
|
+
email: z.ZodString;
|
|
81
|
+
externalId: z.ZodOptional<z.ZodString>;
|
|
82
|
+
status: z.ZodEnum<{
|
|
83
|
+
rejected: "rejected";
|
|
84
|
+
created: "created";
|
|
85
|
+
updated: "updated";
|
|
86
|
+
unchanged: "unchanged";
|
|
87
|
+
}>;
|
|
88
|
+
userId: z.ZodOptional<z.ZodString>;
|
|
89
|
+
changes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
90
|
+
phone: "phone";
|
|
91
|
+
roles: "roles";
|
|
92
|
+
organizations: "organizations";
|
|
93
|
+
created: "created";
|
|
94
|
+
linked: "linked";
|
|
95
|
+
}>>>;
|
|
96
|
+
reason: z.ZodOptional<z.ZodEnum<{
|
|
97
|
+
admin_role_not_allowed: "admin_role_not_allowed";
|
|
98
|
+
role_unavailable: "role_unavailable";
|
|
99
|
+
organization_not_found: "organization_not_found";
|
|
100
|
+
duplicate_in_batch: "duplicate_in_batch";
|
|
101
|
+
email_mismatch: "email_mismatch";
|
|
102
|
+
phone_invalid: "phone_invalid";
|
|
103
|
+
phone_in_use: "phone_in_use";
|
|
104
|
+
external_id_conflict: "external_id_conflict";
|
|
105
|
+
write_failed: "write_failed";
|
|
106
|
+
}>>;
|
|
107
|
+
detail: z.ZodOptional<z.ZodString>;
|
|
108
|
+
}, z.core.$strip>;
|
|
109
|
+
export type UserImportResult = z.infer<typeof UserImportResultSchema>;
|
|
110
|
+
export declare const ImportUsersResponseSchema: z.ZodObject<{
|
|
111
|
+
source: z.ZodString;
|
|
112
|
+
dryRun: z.ZodBoolean;
|
|
113
|
+
summary: z.ZodObject<{
|
|
114
|
+
created: z.ZodNumber;
|
|
115
|
+
updated: z.ZodNumber;
|
|
116
|
+
unchanged: z.ZodNumber;
|
|
117
|
+
rejected: z.ZodNumber;
|
|
118
|
+
}, z.core.$strip>;
|
|
119
|
+
results: z.ZodArray<z.ZodObject<{
|
|
120
|
+
index: z.ZodNumber;
|
|
121
|
+
email: z.ZodString;
|
|
122
|
+
externalId: z.ZodOptional<z.ZodString>;
|
|
123
|
+
status: z.ZodEnum<{
|
|
124
|
+
rejected: "rejected";
|
|
125
|
+
created: "created";
|
|
126
|
+
updated: "updated";
|
|
127
|
+
unchanged: "unchanged";
|
|
128
|
+
}>;
|
|
129
|
+
userId: z.ZodOptional<z.ZodString>;
|
|
130
|
+
changes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
131
|
+
phone: "phone";
|
|
132
|
+
roles: "roles";
|
|
133
|
+
organizations: "organizations";
|
|
134
|
+
created: "created";
|
|
135
|
+
linked: "linked";
|
|
136
|
+
}>>>;
|
|
137
|
+
reason: z.ZodOptional<z.ZodEnum<{
|
|
138
|
+
admin_role_not_allowed: "admin_role_not_allowed";
|
|
139
|
+
role_unavailable: "role_unavailable";
|
|
140
|
+
organization_not_found: "organization_not_found";
|
|
141
|
+
duplicate_in_batch: "duplicate_in_batch";
|
|
142
|
+
email_mismatch: "email_mismatch";
|
|
143
|
+
phone_invalid: "phone_invalid";
|
|
144
|
+
phone_in_use: "phone_in_use";
|
|
145
|
+
external_id_conflict: "external_id_conflict";
|
|
146
|
+
write_failed: "write_failed";
|
|
147
|
+
}>>;
|
|
148
|
+
detail: z.ZodOptional<z.ZodString>;
|
|
149
|
+
}, z.core.$strip>>;
|
|
150
|
+
}, z.core.$strip>;
|
|
151
|
+
export type ImportUsersResponse = z.infer<typeof ImportUsersResponseSchema>;
|
|
152
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/schemas/userImport/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,gGAAgG;AAChG,eAAO,MAAM,sBAAsB,aAGqD,CAAC;AAEzF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,4BAA4B;;;;;kBAUrC,CAAC;AAEL,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,eAAO,MAAM,mBAAmB;;;;;;;;;;;kBAQrB,CAAC;AAEZ,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;kBAM1B,CAAC;AAEZ,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,eAAO,MAAM,sBAAsB;;;;;EAA0D,CAAC;AAE9F,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,yBAAyB;;;;;;;;;;EAUpC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,sBAAsB;;;;;;EAMjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBASjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAUpC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { MembershipRoleSchema, MembershipScopeSchema } from '../organization/schema.js';
|
|
3
|
+
import { RoleNameSchema } from '../role/schema.js';
|
|
4
|
+
export const USER_IMPORT_MAX_ROWS = 200;
|
|
5
|
+
/** Names the system the users come from, so the same external id can be matched on a re-run. */
|
|
6
|
+
export const UserImportSourceSchema = z
|
|
7
|
+
.string()
|
|
8
|
+
.trim()
|
|
9
|
+
.regex(/^[a-z0-9][a-z0-9-]{0,63}$/, 'lowercase letters, digits and hyphens, up to 64');
|
|
10
|
+
export const UserImportOrganizationSchema = z
|
|
11
|
+
.object({
|
|
12
|
+
organizationId: z.uuid().optional(),
|
|
13
|
+
slug: z.string().trim().min(1).max(100).optional(),
|
|
14
|
+
roles: z.array(MembershipRoleSchema).max(50).optional(),
|
|
15
|
+
scopes: z.array(MembershipScopeSchema).max(50).optional(),
|
|
16
|
+
})
|
|
17
|
+
.strict()
|
|
18
|
+
.refine((value) => Boolean(value.organizationId) !== Boolean(value.slug), {
|
|
19
|
+
message: 'exactly one of organizationId or slug is required',
|
|
20
|
+
});
|
|
21
|
+
export const UserImportRowSchema = z
|
|
22
|
+
.object({
|
|
23
|
+
externalId: z.string().trim().min(1).max(255).optional(),
|
|
24
|
+
email: z.email(),
|
|
25
|
+
phone: z.string().min(5).nullish(),
|
|
26
|
+
roles: z.array(RoleNameSchema).max(50).optional(),
|
|
27
|
+
organizations: z.array(UserImportOrganizationSchema).max(50).optional(),
|
|
28
|
+
})
|
|
29
|
+
.strict();
|
|
30
|
+
/**
|
|
31
|
+
* A batch of users to bring across from another identity system.
|
|
32
|
+
*
|
|
33
|
+
* Imports never carry credentials: an imported user signs in for the first time by
|
|
34
|
+
* registering with the imported email, which proves control of the address and then
|
|
35
|
+
* enrolls a passkey. Imports only ever add roles and memberships, never remove them,
|
|
36
|
+
* so re-running one after correcting the source data cannot take access away.
|
|
37
|
+
*/
|
|
38
|
+
export const ImportUsersRequestSchema = z
|
|
39
|
+
.object({
|
|
40
|
+
source: UserImportSourceSchema,
|
|
41
|
+
dryRun: z.boolean().default(false),
|
|
42
|
+
users: z.array(UserImportRowSchema).min(1).max(USER_IMPORT_MAX_ROWS),
|
|
43
|
+
})
|
|
44
|
+
.strict();
|
|
45
|
+
export const UserImportStatusSchema = z.enum(['created', 'updated', 'unchanged', 'rejected']);
|
|
46
|
+
export const UserImportRejectionSchema = z.enum([
|
|
47
|
+
'admin_role_not_allowed',
|
|
48
|
+
'role_unavailable',
|
|
49
|
+
'organization_not_found',
|
|
50
|
+
'duplicate_in_batch',
|
|
51
|
+
'email_mismatch',
|
|
52
|
+
'phone_invalid',
|
|
53
|
+
'phone_in_use',
|
|
54
|
+
'external_id_conflict',
|
|
55
|
+
'write_failed',
|
|
56
|
+
]);
|
|
57
|
+
export const UserImportChangeSchema = z.enum([
|
|
58
|
+
'created',
|
|
59
|
+
'linked',
|
|
60
|
+
'phone',
|
|
61
|
+
'roles',
|
|
62
|
+
'organizations',
|
|
63
|
+
]);
|
|
64
|
+
export const UserImportResultSchema = z.object({
|
|
65
|
+
index: z.number().int().nonnegative(),
|
|
66
|
+
email: z.string(),
|
|
67
|
+
externalId: z.string().optional(),
|
|
68
|
+
status: UserImportStatusSchema,
|
|
69
|
+
userId: z.string().optional(),
|
|
70
|
+
changes: z.array(UserImportChangeSchema).optional(),
|
|
71
|
+
reason: UserImportRejectionSchema.optional(),
|
|
72
|
+
detail: z.string().optional(),
|
|
73
|
+
});
|
|
74
|
+
export const ImportUsersResponseSchema = z.object({
|
|
75
|
+
source: z.string(),
|
|
76
|
+
dryRun: z.boolean(),
|
|
77
|
+
summary: z.object({
|
|
78
|
+
created: z.number().int().nonnegative(),
|
|
79
|
+
updated: z.number().int().nonnegative(),
|
|
80
|
+
unchanged: z.number().int().nonnegative(),
|
|
81
|
+
rejected: z.number().int().nonnegative(),
|
|
82
|
+
}),
|
|
83
|
+
results: z.array(UserImportResultSchema),
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/schemas/userImport/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC,gGAAgG;AAChG,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC;KACpC,MAAM,EAAE;KACR,IAAI,EAAE;KACN,KAAK,CAAC,2BAA2B,EAAE,iDAAiD,CAAC,CAAC;AAIzF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC;KAC1C,MAAM,CAAC;IACN,cAAc,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACnC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAClD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvD,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC1D,CAAC;KACD,MAAM,EAAE;KACR,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;IACxE,OAAO,EAAE,mDAAmD;CAC7D,CAAC,CAAC;AAIL,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,MAAM,CAAC;IACN,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACxD,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;IAClC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACjD,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;CACxE,CAAC;KACD,MAAM,EAAE,CAAC;AAIZ;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC;KACtC,MAAM,CAAC;IACN,MAAM,EAAE,sBAAsB;IAC9B,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAClC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC;CACrE,CAAC;KACD,MAAM,EAAE,CAAC;AAIZ,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;AAI9F,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC9C,wBAAwB;IACxB,kBAAkB;IAClB,wBAAwB;IACxB,oBAAoB;IACpB,gBAAgB;IAChB,eAAe;IACf,cAAc;IACd,sBAAsB;IACtB,cAAc;CACf,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC3C,SAAS;IACT,QAAQ;IACR,OAAO;IACP,OAAO;IACP,eAAe;CAChB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,MAAM,EAAE,sBAAsB;IAC9B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE;IACnD,MAAM,EAAE,yBAAyB,CAAC,QAAQ,EAAE;IAC5C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QACvC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QACvC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QACzC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;KACzC,CAAC;IACF,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC;CACzC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seamless-auth/types",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.23.0",
|
|
4
4
|
"description": "Shared TypeScript types and Zod schemas for SeamlessAuth.",
|
|
5
5
|
"author": "Fells Code, LLC",
|
|
6
6
|
"license": "AGPL-3.0-only",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"eslint-config-prettier": "^10.1.8",
|
|
88
88
|
"husky": "^9.1.7",
|
|
89
89
|
"lint-staged": "^17.2.0",
|
|
90
|
-
"prettier": "3.9.
|
|
90
|
+
"prettier": "3.9.9",
|
|
91
91
|
"typescript": "^5.9.3",
|
|
92
92
|
"vitest": "^4.1.1"
|
|
93
93
|
},
|
package/src/index.ts
CHANGED
|
@@ -30,8 +30,11 @@ export const UpdateOrganizationRequestSchema = z.object({
|
|
|
30
30
|
|
|
31
31
|
export type UpdateOrganizationRequest = z.infer<typeof UpdateOrganizationRequestSchema>;
|
|
32
32
|
|
|
33
|
-
const MembershipRoleSchema = z.string().trim().min(1).max(80);
|
|
34
|
-
const MembershipScopeSchema = z.string().trim().min(1).max(120);
|
|
33
|
+
export const MembershipRoleSchema = z.string().trim().min(1).max(80);
|
|
34
|
+
export const MembershipScopeSchema = z.string().trim().min(1).max(120);
|
|
35
|
+
|
|
36
|
+
export type MembershipRole = z.infer<typeof MembershipRoleSchema>;
|
|
37
|
+
export type MembershipScope = z.infer<typeof MembershipScopeSchema>;
|
|
35
38
|
|
|
36
39
|
export const AddOrganizationMemberRequestSchema = z
|
|
37
40
|
.object({
|
|
@@ -97,6 +97,59 @@ export const DefaultLockoutPolicy = {
|
|
|
97
97
|
lockoutSeconds: 15 * 60,
|
|
98
98
|
} as const;
|
|
99
99
|
|
|
100
|
+
const PerIpLimitSchema = z.number().int().positive();
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* How many times one caller may start a message-carrying or provider flow per
|
|
104
|
+
* window, before the general `rate_limit` applies to everything else.
|
|
105
|
+
*
|
|
106
|
+
* Two keys per flow because they guard different things. `perIdentity` bounds
|
|
107
|
+
* how often one address or phone can be messaged, which is the abuse a sender
|
|
108
|
+
* cares about. `perIp` bounds how many distinct addresses one network location
|
|
109
|
+
* can drive, which is the enumeration and spam guard. The per-IP values were
|
|
110
|
+
* fixed constants before this key existed, and those constants are the defaults
|
|
111
|
+
* here, so a deployment that sets nothing behaves as it did.
|
|
112
|
+
*
|
|
113
|
+
* Per-IP limits are the ones a native app runs into first. Mobile carriers put
|
|
114
|
+
* thousands of subscribers behind one address, so a value that never troubles a
|
|
115
|
+
* web audience can refuse a mobile audience at modest scale. Raise `perIp` for a
|
|
116
|
+
* deployment that serves phones; leave `perIdentity` where it is.
|
|
117
|
+
*/
|
|
118
|
+
export const FlowRateLimitsSchema = z.object({
|
|
119
|
+
windowSeconds: z
|
|
120
|
+
.number()
|
|
121
|
+
.int()
|
|
122
|
+
.positive()
|
|
123
|
+
.default(15 * 60),
|
|
124
|
+
otp: z
|
|
125
|
+
.object({
|
|
126
|
+
perIp: PerIpLimitSchema.default(10),
|
|
127
|
+
perIdentity: PerIpLimitSchema.default(5),
|
|
128
|
+
})
|
|
129
|
+
.default({ perIp: 10, perIdentity: 5 }),
|
|
130
|
+
magicLink: z
|
|
131
|
+
.object({
|
|
132
|
+
perIp: PerIpLimitSchema.default(20),
|
|
133
|
+
perIdentity: PerIpLimitSchema.default(5),
|
|
134
|
+
})
|
|
135
|
+
.default({ perIp: 20, perIdentity: 5 }),
|
|
136
|
+
oauth: z
|
|
137
|
+
.object({
|
|
138
|
+
perIp: PerIpLimitSchema.default(30),
|
|
139
|
+
perProvider: PerIpLimitSchema.default(10),
|
|
140
|
+
})
|
|
141
|
+
.default({ perIp: 30, perProvider: 10 }),
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
export type FlowRateLimits = z.infer<typeof FlowRateLimitsSchema>;
|
|
145
|
+
|
|
146
|
+
export const DefaultFlowRateLimits = {
|
|
147
|
+
windowSeconds: 15 * 60,
|
|
148
|
+
otp: { perIp: 10, perIdentity: 5 },
|
|
149
|
+
magicLink: { perIp: 20, perIdentity: 5 },
|
|
150
|
+
oauth: { perIp: 30, perProvider: 10 },
|
|
151
|
+
} as const;
|
|
152
|
+
|
|
100
153
|
export const AuthenticatorAttachmentPolicySchema = z.enum(['any', 'platform', 'cross-platform']);
|
|
101
154
|
|
|
102
155
|
export type AuthenticatorAttachmentPolicy = z.infer<typeof AuthenticatorAttachmentPolicySchema>;
|
|
@@ -247,8 +300,18 @@ export const SystemConfigSchema = z.object({
|
|
|
247
300
|
|
|
248
301
|
rate_limit: z.number().int().positive(),
|
|
249
302
|
delay_after: z.number().int().nonnegative(),
|
|
303
|
+
flow_rate_limits: FlowRateLimitsSchema.default(DefaultFlowRateLimits),
|
|
250
304
|
|
|
251
305
|
rpid: z.string().min(1),
|
|
306
|
+
/**
|
|
307
|
+
* The WebAuthn origins this deployment accepts, and the fallback for the magic
|
|
308
|
+
* link and OAuth destinations (`origins[0]`), so the web origin belongs first.
|
|
309
|
+
*
|
|
310
|
+
* `z.url()` here is deliberately loose. An Android app's WebAuthn origin is
|
|
311
|
+
* `android:apk-key-hash:<base64url>`, which is a valid URL with an opaque path
|
|
312
|
+
* and no host, and it must be accepted here for native passkeys to verify. Do
|
|
313
|
+
* not tighten this to a hostname check without carrying that form along.
|
|
314
|
+
*/
|
|
252
315
|
origins: z.array(z.url()).min(1),
|
|
253
316
|
|
|
254
317
|
frontend_url: z.url().optional(),
|
|
@@ -284,6 +347,7 @@ export const SystemConfigPatchSchema = z
|
|
|
284
347
|
max_concurrent_sessions: z.number().int().positive().nullable().optional(),
|
|
285
348
|
rate_limit: SystemConfigSchema.shape.rate_limit.optional(),
|
|
286
349
|
delay_after: SystemConfigSchema.shape.delay_after.optional(),
|
|
350
|
+
flow_rate_limits: FlowRateLimitsSchema.optional(),
|
|
287
351
|
rpid: SystemConfigSchema.shape.rpid.optional(),
|
|
288
352
|
origins: SystemConfigSchema.shape.origins.optional(),
|
|
289
353
|
magic_link_redirect_uris: z.array(RedirectTargetSchema).optional(),
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { MembershipRoleSchema, MembershipScopeSchema } from '../organization/schema.js';
|
|
3
|
+
import { RoleNameSchema } from '../role/schema.js';
|
|
4
|
+
|
|
5
|
+
export const USER_IMPORT_MAX_ROWS = 200;
|
|
6
|
+
|
|
7
|
+
/** Names the system the users come from, so the same external id can be matched on a re-run. */
|
|
8
|
+
export const UserImportSourceSchema = z
|
|
9
|
+
.string()
|
|
10
|
+
.trim()
|
|
11
|
+
.regex(/^[a-z0-9][a-z0-9-]{0,63}$/, 'lowercase letters, digits and hyphens, up to 64');
|
|
12
|
+
|
|
13
|
+
export type UserImportSource = z.infer<typeof UserImportSourceSchema>;
|
|
14
|
+
|
|
15
|
+
export const UserImportOrganizationSchema = z
|
|
16
|
+
.object({
|
|
17
|
+
organizationId: z.uuid().optional(),
|
|
18
|
+
slug: z.string().trim().min(1).max(100).optional(),
|
|
19
|
+
roles: z.array(MembershipRoleSchema).max(50).optional(),
|
|
20
|
+
scopes: z.array(MembershipScopeSchema).max(50).optional(),
|
|
21
|
+
})
|
|
22
|
+
.strict()
|
|
23
|
+
.refine((value) => Boolean(value.organizationId) !== Boolean(value.slug), {
|
|
24
|
+
message: 'exactly one of organizationId or slug is required',
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
export type UserImportOrganization = z.infer<typeof UserImportOrganizationSchema>;
|
|
28
|
+
|
|
29
|
+
export const UserImportRowSchema = z
|
|
30
|
+
.object({
|
|
31
|
+
externalId: z.string().trim().min(1).max(255).optional(),
|
|
32
|
+
email: z.email(),
|
|
33
|
+
phone: z.string().min(5).nullish(),
|
|
34
|
+
roles: z.array(RoleNameSchema).max(50).optional(),
|
|
35
|
+
organizations: z.array(UserImportOrganizationSchema).max(50).optional(),
|
|
36
|
+
})
|
|
37
|
+
.strict();
|
|
38
|
+
|
|
39
|
+
export type UserImportRow = z.infer<typeof UserImportRowSchema>;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* A batch of users to bring across from another identity system.
|
|
43
|
+
*
|
|
44
|
+
* Imports never carry credentials: an imported user signs in for the first time by
|
|
45
|
+
* registering with the imported email, which proves control of the address and then
|
|
46
|
+
* enrolls a passkey. Imports only ever add roles and memberships, never remove them,
|
|
47
|
+
* so re-running one after correcting the source data cannot take access away.
|
|
48
|
+
*/
|
|
49
|
+
export const ImportUsersRequestSchema = z
|
|
50
|
+
.object({
|
|
51
|
+
source: UserImportSourceSchema,
|
|
52
|
+
dryRun: z.boolean().default(false),
|
|
53
|
+
users: z.array(UserImportRowSchema).min(1).max(USER_IMPORT_MAX_ROWS),
|
|
54
|
+
})
|
|
55
|
+
.strict();
|
|
56
|
+
|
|
57
|
+
export type ImportUsersRequest = z.infer<typeof ImportUsersRequestSchema>;
|
|
58
|
+
|
|
59
|
+
export const UserImportStatusSchema = z.enum(['created', 'updated', 'unchanged', 'rejected']);
|
|
60
|
+
|
|
61
|
+
export type UserImportStatus = z.infer<typeof UserImportStatusSchema>;
|
|
62
|
+
|
|
63
|
+
export const UserImportRejectionSchema = z.enum([
|
|
64
|
+
'admin_role_not_allowed',
|
|
65
|
+
'role_unavailable',
|
|
66
|
+
'organization_not_found',
|
|
67
|
+
'duplicate_in_batch',
|
|
68
|
+
'email_mismatch',
|
|
69
|
+
'phone_invalid',
|
|
70
|
+
'phone_in_use',
|
|
71
|
+
'external_id_conflict',
|
|
72
|
+
'write_failed',
|
|
73
|
+
]);
|
|
74
|
+
|
|
75
|
+
export type UserImportRejection = z.infer<typeof UserImportRejectionSchema>;
|
|
76
|
+
|
|
77
|
+
export const UserImportChangeSchema = z.enum([
|
|
78
|
+
'created',
|
|
79
|
+
'linked',
|
|
80
|
+
'phone',
|
|
81
|
+
'roles',
|
|
82
|
+
'organizations',
|
|
83
|
+
]);
|
|
84
|
+
|
|
85
|
+
export type UserImportChange = z.infer<typeof UserImportChangeSchema>;
|
|
86
|
+
|
|
87
|
+
export const UserImportResultSchema = z.object({
|
|
88
|
+
index: z.number().int().nonnegative(),
|
|
89
|
+
email: z.string(),
|
|
90
|
+
externalId: z.string().optional(),
|
|
91
|
+
status: UserImportStatusSchema,
|
|
92
|
+
userId: z.string().optional(),
|
|
93
|
+
changes: z.array(UserImportChangeSchema).optional(),
|
|
94
|
+
reason: UserImportRejectionSchema.optional(),
|
|
95
|
+
detail: z.string().optional(),
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
export type UserImportResult = z.infer<typeof UserImportResultSchema>;
|
|
99
|
+
|
|
100
|
+
export const ImportUsersResponseSchema = z.object({
|
|
101
|
+
source: z.string(),
|
|
102
|
+
dryRun: z.boolean(),
|
|
103
|
+
summary: z.object({
|
|
104
|
+
created: z.number().int().nonnegative(),
|
|
105
|
+
updated: z.number().int().nonnegative(),
|
|
106
|
+
unchanged: z.number().int().nonnegative(),
|
|
107
|
+
rejected: z.number().int().nonnegative(),
|
|
108
|
+
}),
|
|
109
|
+
results: z.array(UserImportResultSchema),
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
export type ImportUsersResponse = z.infer<typeof ImportUsersResponseSchema>;
|