@portaidentity/sdk 1.7.3 → 1.8.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 +5 -0
- package/README.md +70 -41
- package/dist/agent.d.ts +15 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +473 -69
- package/dist/agent.js.map +1 -1
- package/dist/auth/cli-auth.d.ts +45 -71
- package/dist/auth/cli-auth.d.ts.map +1 -1
- package/dist/auth/cli-auth.js +208 -144
- package/dist/auth/cli-auth.js.map +1 -1
- package/dist/auth/index.d.ts +1 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/domains/applications.d.ts +22 -3
- package/dist/domains/applications.d.ts.map +1 -1
- package/dist/domains/applications.js +90 -20
- package/dist/domains/applications.js.map +1 -1
- package/dist/domains/branding.d.ts +47 -16
- package/dist/domains/branding.d.ts.map +1 -1
- package/dist/domains/branding.js +28 -5
- package/dist/domains/branding.js.map +1 -1
- package/dist/domains/clients.d.ts +23 -6
- package/dist/domains/clients.d.ts.map +1 -1
- package/dist/domains/clients.js +121 -21
- package/dist/domains/clients.js.map +1 -1
- package/dist/domains/config.d.ts +20 -3
- package/dist/domains/config.d.ts.map +1 -1
- package/dist/domains/config.js +30 -3
- package/dist/domains/config.js.map +1 -1
- package/dist/domains/custom-claims.d.ts +2 -1
- package/dist/domains/custom-claims.d.ts.map +1 -1
- package/dist/domains/custom-claims.js +2 -2
- package/dist/domains/custom-claims.js.map +1 -1
- package/dist/domains/exports.d.ts +6 -1
- package/dist/domains/exports.d.ts.map +1 -1
- package/dist/domains/exports.js +27 -1
- package/dist/domains/exports.js.map +1 -1
- package/dist/domains/helpers.d.ts +31 -0
- package/dist/domains/helpers.d.ts.map +1 -1
- package/dist/domains/helpers.js +72 -1
- package/dist/domains/helpers.js.map +1 -1
- package/dist/domains/imports.d.ts +8 -7
- package/dist/domains/imports.d.ts.map +1 -1
- package/dist/domains/imports.js +158 -14
- package/dist/domains/imports.js.map +1 -1
- package/dist/domains/index.d.ts +1 -1
- package/dist/domains/index.d.ts.map +1 -1
- package/dist/domains/organizations.d.ts +2 -9
- package/dist/domains/organizations.d.ts.map +1 -1
- package/dist/domains/organizations.js +2 -13
- package/dist/domains/organizations.js.map +1 -1
- package/dist/domains/permissions.d.ts +22 -4
- package/dist/domains/permissions.d.ts.map +1 -1
- package/dist/domains/permissions.js +47 -13
- package/dist/domains/permissions.js.map +1 -1
- package/dist/domains/roles.d.ts +26 -16
- package/dist/domains/roles.d.ts.map +1 -1
- package/dist/domains/roles.js +61 -31
- package/dist/domains/roles.js.map +1 -1
- package/dist/domains/user-roles.d.ts +9 -4
- package/dist/domains/user-roles.d.ts.map +1 -1
- package/dist/domains/user-roles.js +32 -6
- package/dist/domains/user-roles.js.map +1 -1
- package/dist/domains/users.d.ts +31 -26
- package/dist/domains/users.d.ts.map +1 -1
- package/dist/domains/users.js +56 -46
- package/dist/domains/users.js.map +1 -1
- package/dist/errors/index.d.ts +2 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +18 -1
- package/dist/errors/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +1 -1
- package/dist/node.d.ts.map +1 -1
- package/dist/pagination/index.d.ts +5 -1
- package/dist/pagination/index.d.ts.map +1 -1
- package/dist/pagination/index.js +2 -2
- package/dist/pagination/index.js.map +1 -1
- package/dist/types/applications.d.ts +27 -6
- package/dist/types/applications.d.ts.map +1 -1
- package/dist/types/branding.d.ts +38 -11
- package/dist/types/branding.d.ts.map +1 -1
- package/dist/types/branding.js +0 -5
- package/dist/types/branding.js.map +1 -1
- package/dist/types/bulk.d.ts +2 -4
- package/dist/types/bulk.d.ts.map +1 -1
- package/dist/types/clients.d.ts +98 -13
- package/dist/types/clients.d.ts.map +1 -1
- package/dist/types/common.d.ts +26 -3
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/config.d.ts +57 -21
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +1 -8
- package/dist/types/config.js.map +1 -1
- package/dist/types/exports.d.ts +17 -0
- package/dist/types/exports.d.ts.map +1 -1
- package/dist/types/imports.d.ts +388 -84
- package/dist/types/imports.d.ts.map +1 -1
- package/dist/types/imports.js +1 -7
- package/dist/types/imports.js.map +1 -1
- package/dist/types/index.d.ts +14 -14
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/organizations.d.ts +5 -9
- package/dist/types/organizations.d.ts.map +1 -1
- package/dist/types/permissions.d.ts +21 -6
- package/dist/types/permissions.d.ts.map +1 -1
- package/dist/types/roles.d.ts +3 -1
- package/dist/types/roles.d.ts.map +1 -1
- package/dist/types/user-roles.d.ts +4 -10
- package/dist/types/user-roles.d.ts.map +1 -1
- package/dist/types/users.d.ts +102 -15
- package/dist/types/users.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -2
package/dist/domains/roles.js
CHANGED
|
@@ -6,48 +6,84 @@
|
|
|
6
6
|
* GET /applications/:appId/roles/:roleId — Get role (plain Role)
|
|
7
7
|
* POST /applications/:appId/roles — Create role
|
|
8
8
|
* PUT /applications/:appId/roles/:roleId — Update role
|
|
9
|
-
*
|
|
10
|
-
* DELETE /applications/:appId/roles/:roleId — Delete role (?force=true)
|
|
9
|
+
* DELETE /applications/:appId/roles/:roleId — Delete role
|
|
11
10
|
* GET /applications/:appId/roles/:roleId/permissions — List permissions for role
|
|
12
11
|
* PUT /applications/:appId/roles/:roleId/permissions — Assign permissions (bulk)
|
|
13
12
|
* DELETE /applications/:appId/roles/:roleId/permissions — Remove permissions (bulk)
|
|
14
13
|
*
|
|
15
14
|
* @module domains/roles
|
|
16
15
|
*/
|
|
17
|
-
import {
|
|
18
|
-
|
|
16
|
+
import { isRecord, requireData } from './helpers.js';
|
|
17
|
+
/** Validate one role returned by the Admin API. */
|
|
18
|
+
function isRole(value) {
|
|
19
|
+
return (isRecord(value) &&
|
|
20
|
+
typeof value.id === 'string' &&
|
|
21
|
+
typeof value.applicationId === 'string' &&
|
|
22
|
+
typeof value.name === 'string' &&
|
|
23
|
+
typeof value.slug === 'string' &&
|
|
24
|
+
(typeof value.description === 'string' || value.description === null) &&
|
|
25
|
+
typeof value.createdAt === 'string' &&
|
|
26
|
+
typeof value.updatedAt === 'string');
|
|
27
|
+
}
|
|
28
|
+
/** Validate one permission returned by a role-permission collection. */
|
|
29
|
+
function isPermission(value) {
|
|
30
|
+
return (isRecord(value) &&
|
|
31
|
+
typeof value.id === 'string' &&
|
|
32
|
+
typeof value.applicationId === 'string' &&
|
|
33
|
+
(typeof value.moduleId === 'string' || value.moduleId === null) &&
|
|
34
|
+
typeof value.name === 'string' &&
|
|
35
|
+
typeof value.slug === 'string' &&
|
|
36
|
+
(typeof value.description === 'string' || value.description === null) &&
|
|
37
|
+
typeof value.createdAt === 'string');
|
|
38
|
+
}
|
|
39
|
+
/** Validate the explicit result of a committed authority reduction. */
|
|
40
|
+
function isAuthorityReductionResult(value) {
|
|
41
|
+
return isRecord(value) && typeof value.reauthenticationRequired === 'boolean';
|
|
42
|
+
}
|
|
43
|
+
/** Validate a role update result and its authentication effect. */
|
|
44
|
+
function isRoleUpdateResult(value) {
|
|
45
|
+
return (isRecord(value) && isRole(value.role) && typeof value.reauthenticationRequired === 'boolean');
|
|
46
|
+
}
|
|
47
|
+
/** Create role operations backed by one HTTP transport. */
|
|
19
48
|
export function createRolesDomain(transport) {
|
|
20
|
-
|
|
49
|
+
/** Build the parent-qualified role collection path. */
|
|
50
|
+
function base(appId) {
|
|
51
|
+
return `/applications/${appId}/roles`;
|
|
52
|
+
}
|
|
21
53
|
return {
|
|
22
|
-
async list(appId
|
|
23
|
-
const res = await transport.request({ method: 'GET', path: base(appId)
|
|
24
|
-
return res.body;
|
|
25
|
-
},
|
|
26
|
-
listAll(appId, params) {
|
|
27
|
-
return listAll((p) => this.list(appId, { ...params, ...p }), params);
|
|
54
|
+
async list(appId) {
|
|
55
|
+
const res = await transport.request({ method: 'GET', path: base(appId) });
|
|
56
|
+
return requireData(res.body, (value) => Array.isArray(value) && value.every(isRole));
|
|
28
57
|
},
|
|
29
58
|
async get(appId, roleId) {
|
|
30
59
|
const res = await transport.request({ method: 'GET', path: `${base(appId)}/${roleId}` });
|
|
31
|
-
return
|
|
60
|
+
return requireData(res.body, isRole);
|
|
32
61
|
},
|
|
33
62
|
async create(appId, input) {
|
|
34
63
|
const res = await transport.request({ method: 'POST', path: base(appId), body: input });
|
|
35
|
-
return
|
|
64
|
+
return requireData(res.body, isRole);
|
|
36
65
|
},
|
|
37
66
|
async update(appId, roleId, input) {
|
|
38
|
-
const res = await transport.request({
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
67
|
+
const res = await transport.request({
|
|
68
|
+
method: 'PUT',
|
|
69
|
+
path: `${base(appId)}/${roleId}`,
|
|
70
|
+
body: input,
|
|
71
|
+
});
|
|
72
|
+
return requireData(res.body, isRoleUpdateResult);
|
|
43
73
|
},
|
|
44
|
-
async
|
|
45
|
-
const
|
|
46
|
-
|
|
74
|
+
async delete(appId, roleId) {
|
|
75
|
+
const res = await transport.request({
|
|
76
|
+
method: 'DELETE',
|
|
77
|
+
path: `${base(appId)}/${roleId}`,
|
|
78
|
+
});
|
|
79
|
+
return requireData(res.body, isAuthorityReductionResult);
|
|
47
80
|
},
|
|
48
81
|
async listPermissions(appId, roleId) {
|
|
49
|
-
const res = await transport.request({
|
|
50
|
-
|
|
82
|
+
const res = await transport.request({
|
|
83
|
+
method: 'GET',
|
|
84
|
+
path: `${base(appId)}/${roleId}/permissions`,
|
|
85
|
+
});
|
|
86
|
+
return requireData(res.body, (value) => Array.isArray(value) && value.every(isPermission));
|
|
51
87
|
},
|
|
52
88
|
async assignPermissions(appId, roleId, permissionIds) {
|
|
53
89
|
await transport.request({
|
|
@@ -57,18 +93,12 @@ export function createRolesDomain(transport) {
|
|
|
57
93
|
});
|
|
58
94
|
},
|
|
59
95
|
async removePermissions(appId, roleId, permissionIds) {
|
|
60
|
-
await transport.request({
|
|
96
|
+
const res = await transport.request({
|
|
61
97
|
method: 'DELETE',
|
|
62
98
|
path: `${base(appId)}/${roleId}/permissions`,
|
|
63
99
|
body: { permissionIds },
|
|
64
100
|
});
|
|
65
|
-
|
|
66
|
-
// Backward-compatible singular wrappers
|
|
67
|
-
async assignPermission(appId, roleId, permissionId) {
|
|
68
|
-
return this.assignPermissions(appId, roleId, [permissionId]);
|
|
69
|
-
},
|
|
70
|
-
async removePermission(appId, roleId, permissionId) {
|
|
71
|
-
return this.removePermissions(appId, roleId, [permissionId]);
|
|
101
|
+
return requireData(res.body, isAuthorityReductionResult);
|
|
72
102
|
},
|
|
73
103
|
};
|
|
74
104
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roles.js","sourceRoot":"","sources":["../../src/domains/roles.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"roles.js","sourceRoot":"","sources":["../../src/domains/roles.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,11 +4,16 @@
|
|
|
4
4
|
* @module domains/user-roles
|
|
5
5
|
*/
|
|
6
6
|
import type { HttpTransport } from '../transport/types.js';
|
|
7
|
-
import type {
|
|
7
|
+
import type { Role, UserRoleRemovalResult } from '../types/index.js';
|
|
8
|
+
/** User-role collection operations scoped by organization and user. */
|
|
8
9
|
export interface UserRolesDomain {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
/** List the complete set of roles assigned to a user. */
|
|
11
|
+
list(orgId: string, userId: string): Promise<Role[]>;
|
|
12
|
+
/** Assign one or more roles in a single collection request. */
|
|
13
|
+
assign(orgId: string, userId: string, roleIds: string[]): Promise<void>;
|
|
14
|
+
/** Remove one or more roles and report whether the caller must authenticate again. */
|
|
15
|
+
remove(orgId: string, userId: string, roleIds: string[]): Promise<UserRoleRemovalResult>;
|
|
12
16
|
}
|
|
17
|
+
/** Create user-role operations backed by one HTTP transport. */
|
|
13
18
|
export declare function createUserRolesDomain(transport: HttpTransport): UserRolesDomain;
|
|
14
19
|
//# sourceMappingURL=user-roles.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-roles.d.ts","sourceRoot":"","sources":["../../src/domains/user-roles.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"user-roles.d.ts","sourceRoot":"","sources":["../../src/domains/user-roles.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAsBrE,uEAAuE;AACvE,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACrD,+DAA+D;IAC/D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,sFAAsF;IACtF,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAC1F;AAED,gEAAgE;AAChE,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,aAAa,GAAG,eAAe,CA8B/E"}
|
|
@@ -3,21 +3,47 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module domains/user-roles
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
6
|
+
import { isRecord, requireData } from './helpers.js';
|
|
7
|
+
/** Validate one role returned by the Admin API. */
|
|
8
|
+
function isRole(value) {
|
|
9
|
+
return (isRecord(value) &&
|
|
10
|
+
typeof value.id === 'string' &&
|
|
11
|
+
typeof value.applicationId === 'string' &&
|
|
12
|
+
typeof value.name === 'string' &&
|
|
13
|
+
typeof value.slug === 'string' &&
|
|
14
|
+
(typeof value.description === 'string' || value.description === null) &&
|
|
15
|
+
typeof value.createdAt === 'string' &&
|
|
16
|
+
typeof value.updatedAt === 'string');
|
|
17
|
+
}
|
|
18
|
+
/** Validate the explicit result of a committed user-role removal. */
|
|
19
|
+
function isUserRoleRemovalResult(value) {
|
|
20
|
+
return isRecord(value) && typeof value.reauthenticationRequired === 'boolean';
|
|
21
|
+
}
|
|
22
|
+
/** Create user-role operations backed by one HTTP transport. */
|
|
7
23
|
export function createUserRolesDomain(transport) {
|
|
24
|
+
/** Build the organization- and user-qualified role collection path. */
|
|
8
25
|
function base(orgId, userId) {
|
|
9
26
|
return `/organizations/${orgId}/users/${userId}/roles`;
|
|
10
27
|
}
|
|
11
28
|
return {
|
|
12
29
|
async list(orgId, userId) {
|
|
13
30
|
const res = await transport.request({ method: 'GET', path: base(orgId, userId) });
|
|
14
|
-
return
|
|
31
|
+
return requireData(res.body, (value) => Array.isArray(value) && value.every(isRole));
|
|
15
32
|
},
|
|
16
|
-
async assign(orgId, userId,
|
|
17
|
-
await transport.request({
|
|
33
|
+
async assign(orgId, userId, roleIds) {
|
|
34
|
+
await transport.request({
|
|
35
|
+
method: 'PUT',
|
|
36
|
+
path: base(orgId, userId),
|
|
37
|
+
body: { roleIds },
|
|
38
|
+
});
|
|
18
39
|
},
|
|
19
|
-
async remove(orgId, userId,
|
|
20
|
-
await transport.request({
|
|
40
|
+
async remove(orgId, userId, roleIds) {
|
|
41
|
+
const res = await transport.request({
|
|
42
|
+
method: 'DELETE',
|
|
43
|
+
path: base(orgId, userId),
|
|
44
|
+
body: { roleIds },
|
|
45
|
+
});
|
|
46
|
+
return requireData(res.body, isUserRoleRemovalResult);
|
|
21
47
|
},
|
|
22
48
|
};
|
|
23
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-roles.js","sourceRoot":"","sources":["../../src/domains/user-roles.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"user-roles.js","sourceRoot":"","sources":["../../src/domains/user-roles.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAErD,mDAAmD;AACnD,SAAS,MAAM,CAAC,KAAc;IAC5B,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAC5B,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ;QACvC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,CAAC,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC;QACrE,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;QACnC,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,CACpC,CAAC;AACJ,CAAC;AAED,qEAAqE;AACrE,SAAS,uBAAuB,CAAC,KAAc;IAC7C,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,wBAAwB,KAAK,SAAS,CAAC;AAChF,CAAC;AAYD,gEAAgE;AAChE,MAAM,UAAU,qBAAqB,CAAC,SAAwB;IAC5D,uEAAuE;IACvE,SAAS,IAAI,CAAC,KAAa,EAAE,MAAc;QACzC,OAAO,kBAAkB,KAAK,UAAU,MAAM,QAAQ,CAAC;IACzD,CAAC;IAED,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM;YACtB,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAClF,OAAO,WAAW,CAChB,GAAG,CAAC,IAAI,EACR,CAAC,KAAK,EAAmB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CACxE,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO;YACjC,MAAM,SAAS,CAAC,OAAO,CAAC;gBACtB,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC;gBACzB,IAAI,EAAE,EAAE,OAAO,EAAE;aAClB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO;YACjC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC;gBAClC,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC;gBACzB,IAAI,EAAE,EAAE,OAAO,EAAE;aAClB,CAAC,CAAC;YACH,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;QACxD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/domains/users.d.ts
CHANGED
|
@@ -4,14 +4,21 @@
|
|
|
4
4
|
* @module domains/users
|
|
5
5
|
*/
|
|
6
6
|
import type { HttpTransport } from '../transport/types.js';
|
|
7
|
-
import type { CreateUserInput, ETagResponse,
|
|
7
|
+
import type { CreateUserInput, ETagResponse, HistoryResult, InviteUserInput, InviteUserResult, PaginatedResponse, SetPasswordInput, UpdateUserInput, User, UserListParams } from '../types/index.js';
|
|
8
|
+
/** Organization-scoped user administration operations. */
|
|
8
9
|
export interface UsersDomain {
|
|
10
|
+
/** List users with offset or cursor pagination. */
|
|
9
11
|
list(orgId: string, params?: UserListParams): Promise<PaginatedResponse<User>>;
|
|
12
|
+
/** Fetch every matching user across all available pages. */
|
|
10
13
|
listAll(orgId: string, params?: Omit<UserListParams, 'page' | 'cursor'>): Promise<User[]>;
|
|
14
|
+
/** Fetch one user and its current ETag. */
|
|
11
15
|
get(orgId: string, userId: string): Promise<ETagResponse<User>>;
|
|
16
|
+
/** Create a user in the organization named by the input. */
|
|
12
17
|
create(input: CreateUserInput): Promise<User>;
|
|
18
|
+
/** Update mutable profile fields, optionally using optimistic concurrency. */
|
|
13
19
|
update(orgId: string, userId: string, input: UpdateUserInput, etag?: string): Promise<User>;
|
|
14
|
-
|
|
20
|
+
/** Invite a user and return the invitation outcome. */
|
|
21
|
+
invite(input: InviteUserInput): Promise<InviteUserResult>;
|
|
15
22
|
/** Preview the invitation email without sending — POST .../invite/preview */
|
|
16
23
|
invitePreview(input: InviteUserInput): Promise<InvitePreviewResult>;
|
|
17
24
|
setPassword(orgId: string, userId: string, input: SetPasswordInput): Promise<void>;
|
|
@@ -21,16 +28,14 @@ export interface UsersDomain {
|
|
|
21
28
|
verifyEmail(orgId: string, userId: string): Promise<void>;
|
|
22
29
|
/** GDPR data export (Article 20) — GET .../:userId/export */
|
|
23
30
|
exportData(orgId: string, userId: string): Promise<UserExportData>;
|
|
24
|
-
/**
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
/** Unsuspend a user (suspended → active) — POST .../:userId/unsuspend */
|
|
28
|
-
unsuspend(orgId: string, userId: string): Promise<void>;
|
|
29
|
-
lock(orgId: string, userId: string): Promise<void>;
|
|
30
|
-
unlock(orgId: string, userId: string): Promise<void>;
|
|
31
|
+
/** Permanently delete a user and their owned identity data. */
|
|
32
|
+
delete(orgId: string, userId: string): Promise<void>;
|
|
33
|
+
/** Deactivate an active user. */
|
|
31
34
|
deactivate(orgId: string, userId: string): Promise<void>;
|
|
32
|
-
|
|
33
|
-
|
|
35
|
+
/** Activate an inactive user. */
|
|
36
|
+
activate(orgId: string, userId: string): Promise<void>;
|
|
37
|
+
/** Fetch the first page of user history. */
|
|
38
|
+
getHistory(orgId: string, userId: string): Promise<HistoryResult>;
|
|
34
39
|
}
|
|
35
40
|
/** Rendered invitation email returned by `invitePreview()`. */
|
|
36
41
|
export interface InvitePreviewResult {
|
|
@@ -40,14 +45,18 @@ export interface InvitePreviewResult {
|
|
|
40
45
|
}
|
|
41
46
|
/** GDPR export payload returned by `exportData()` (shape determined by the server). */
|
|
42
47
|
export type UserExportData = Record<string, unknown>;
|
|
43
|
-
/**
|
|
44
|
-
|
|
48
|
+
/**
|
|
49
|
+
* Create organization-scoped user operations over an authenticated transport.
|
|
50
|
+
*
|
|
51
|
+
* @param transport - HTTP transport used for every request.
|
|
52
|
+
* @returns User operations bound to the supplied transport.
|
|
53
|
+
*/
|
|
45
54
|
export declare function createUsersDomain(transport: HttpTransport): UsersDomain;
|
|
46
55
|
/**
|
|
47
56
|
* Org-less user operations — mirrors the server `createStandaloneUserRouter`
|
|
48
57
|
* (prefix `/api/admin/users`). These are used by the Admin GUI SPA, where the
|
|
49
58
|
* user detail page only knows the `userId` (not the org). The org-scoped
|
|
50
|
-
* `UsersDomain` remains the primary surface for listing
|
|
59
|
+
* `UsersDomain` remains the primary surface for listing and creating users.
|
|
51
60
|
*/
|
|
52
61
|
export interface StandaloneUsersDomain {
|
|
53
62
|
/** Get a user by ID — GET /users/:userId */
|
|
@@ -62,20 +71,16 @@ export interface StandaloneUsersDomain {
|
|
|
62
71
|
verifyEmail(userId: string): Promise<void>;
|
|
63
72
|
/** Deactivate a user — POST /users/:userId/deactivate */
|
|
64
73
|
deactivate(userId: string): Promise<void>;
|
|
65
|
-
/**
|
|
66
|
-
reactivate(userId: string): Promise<void>;
|
|
67
|
-
/** Activate a user (SPA alias for reactivate) — POST /users/:userId/activate */
|
|
74
|
+
/** Activate a user — POST /users/:userId/activate */
|
|
68
75
|
activate(userId: string): Promise<void>;
|
|
69
|
-
/** Suspend a user — POST /users/:userId/suspend */
|
|
70
|
-
suspend(userId: string): Promise<void>;
|
|
71
|
-
/** Unsuspend a user — POST /users/:userId/unsuspend */
|
|
72
|
-
unsuspend(userId: string): Promise<void>;
|
|
73
|
-
/** Lock a user — POST /users/:userId/lock */
|
|
74
|
-
lock(userId: string): Promise<void>;
|
|
75
|
-
/** Unlock a user — POST /users/:userId/unlock */
|
|
76
|
-
unlock(userId: string): Promise<void>;
|
|
77
76
|
/** User change history — GET /users/:userId/history */
|
|
78
|
-
getHistory(userId: string
|
|
77
|
+
getHistory(userId: string): Promise<HistoryResult>;
|
|
79
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* Create standalone user operations over an authenticated transport.
|
|
81
|
+
*
|
|
82
|
+
* @param transport - HTTP transport used for every request.
|
|
83
|
+
* @returns Standalone user operations bound to the supplied transport.
|
|
84
|
+
*/
|
|
80
85
|
export declare function createStandaloneUsersDomain(transport: HttpTransport): StandaloneUsersDomain;
|
|
81
86
|
//# sourceMappingURL=users.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/domains/users.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,
|
|
1
|
+
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/domains/users.ts"],"names":[],"mappings":"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"}
|
package/dist/domains/users.js
CHANGED
|
@@ -4,7 +4,40 @@
|
|
|
4
4
|
* @module domains/users
|
|
5
5
|
*/
|
|
6
6
|
import { listAll } from '../pagination/index.js';
|
|
7
|
-
import { etagHeaders,
|
|
7
|
+
import { etagHeaders, unwrapData, unwrapWithEtag } from './helpers.js';
|
|
8
|
+
/**
|
|
9
|
+
* Convert the closed user-list input into the query names accepted by the
|
|
10
|
+
* selected pagination strategy.
|
|
11
|
+
*/
|
|
12
|
+
function userListQuery(params) {
|
|
13
|
+
if (!params)
|
|
14
|
+
return undefined;
|
|
15
|
+
const common = {
|
|
16
|
+
...(params.search !== undefined ? { search: params.search } : {}),
|
|
17
|
+
...(params.status !== undefined ? { status: params.status } : {}),
|
|
18
|
+
...(params.sortBy !== undefined ? { sortBy: params.sortBy } : {}),
|
|
19
|
+
...(params.sortOrder !== undefined ? { sortOrder: params.sortOrder } : {}),
|
|
20
|
+
};
|
|
21
|
+
if (params.cursor !== undefined) {
|
|
22
|
+
return {
|
|
23
|
+
cursor: params.cursor,
|
|
24
|
+
...(params.pageSize !== undefined ? { limit: params.pageSize } : {}),
|
|
25
|
+
...common,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
const query = {
|
|
29
|
+
...(params.page !== undefined ? { page: params.page } : {}),
|
|
30
|
+
...(params.pageSize !== undefined ? { pageSize: params.pageSize } : {}),
|
|
31
|
+
...common,
|
|
32
|
+
};
|
|
33
|
+
return Object.keys(query).length > 0 ? query : undefined;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Create organization-scoped user operations over an authenticated transport.
|
|
37
|
+
*
|
|
38
|
+
* @param transport - HTTP transport used for every request.
|
|
39
|
+
* @returns User operations bound to the supplied transport.
|
|
40
|
+
*/
|
|
8
41
|
export function createUsersDomain(transport) {
|
|
9
42
|
function userBase(orgId) {
|
|
10
43
|
return `/organizations/${orgId}/users`;
|
|
@@ -14,12 +47,17 @@ export function createUsersDomain(transport) {
|
|
|
14
47
|
const res = await transport.request({
|
|
15
48
|
method: 'GET',
|
|
16
49
|
path: userBase(orgId),
|
|
17
|
-
params:
|
|
50
|
+
params: userListQuery(params),
|
|
18
51
|
});
|
|
19
52
|
return res.body;
|
|
20
53
|
},
|
|
21
54
|
listAll(orgId, params) {
|
|
22
|
-
return listAll((
|
|
55
|
+
return listAll((page) => this.list(orgId, {
|
|
56
|
+
...params,
|
|
57
|
+
...(page.page !== undefined ? { page: page.page } : {}),
|
|
58
|
+
...(page.cursor !== undefined ? { cursor: page.cursor } : {}),
|
|
59
|
+
...(page.limit !== undefined ? { pageSize: page.limit } : {}),
|
|
60
|
+
}), params);
|
|
23
61
|
},
|
|
24
62
|
async get(orgId, userId) {
|
|
25
63
|
const res = await transport.request({ method: 'GET', path: `${userBase(orgId)}/${userId}` });
|
|
@@ -81,44 +119,31 @@ export function createUsersDomain(transport) {
|
|
|
81
119
|
});
|
|
82
120
|
return unwrapData(res.body);
|
|
83
121
|
},
|
|
84
|
-
async
|
|
85
|
-
|
|
86
|
-
// irreversible GDPR purge (X-Confirm-Purge: true).
|
|
87
|
-
const res = await transport.request({
|
|
88
|
-
method: 'POST',
|
|
89
|
-
path: `${userBase(orgId)}/${userId}/purge`,
|
|
90
|
-
headers: { 'X-Confirm-Purge': 'true' },
|
|
91
|
-
});
|
|
92
|
-
return unwrapData(res.body);
|
|
93
|
-
},
|
|
94
|
-
async suspend(orgId, userId) {
|
|
95
|
-
await transport.request({ method: 'POST', path: `${userBase(orgId)}/${userId}/suspend` });
|
|
96
|
-
},
|
|
97
|
-
async unsuspend(orgId, userId) {
|
|
98
|
-
await transport.request({ method: 'POST', path: `${userBase(orgId)}/${userId}/unsuspend` });
|
|
99
|
-
},
|
|
100
|
-
async lock(orgId, userId) {
|
|
101
|
-
await transport.request({ method: 'POST', path: `${userBase(orgId)}/${userId}/lock` });
|
|
102
|
-
},
|
|
103
|
-
async unlock(orgId, userId) {
|
|
104
|
-
await transport.request({ method: 'POST', path: `${userBase(orgId)}/${userId}/unlock` });
|
|
122
|
+
async delete(orgId, userId) {
|
|
123
|
+
await transport.request({ method: 'DELETE', path: `${userBase(orgId)}/${userId}` });
|
|
105
124
|
},
|
|
106
125
|
async deactivate(orgId, userId) {
|
|
107
126
|
await transport.request({ method: 'POST', path: `${userBase(orgId)}/${userId}/deactivate` });
|
|
108
127
|
},
|
|
109
|
-
async
|
|
110
|
-
await transport.request({ method: 'POST', path: `${userBase(orgId)}/${userId}/
|
|
128
|
+
async activate(orgId, userId) {
|
|
129
|
+
await transport.request({ method: 'POST', path: `${userBase(orgId)}/${userId}/activate` });
|
|
111
130
|
},
|
|
112
|
-
async getHistory(orgId, userId
|
|
131
|
+
async getHistory(orgId, userId) {
|
|
113
132
|
const res = await transport.request({
|
|
114
133
|
method: 'GET',
|
|
115
134
|
path: `${userBase(orgId)}/${userId}/history`,
|
|
116
|
-
params:
|
|
135
|
+
params: undefined,
|
|
117
136
|
});
|
|
118
|
-
return
|
|
137
|
+
return res.body;
|
|
119
138
|
},
|
|
120
139
|
};
|
|
121
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* Create standalone user operations over an authenticated transport.
|
|
143
|
+
*
|
|
144
|
+
* @param transport - HTTP transport used for every request.
|
|
145
|
+
* @returns Standalone user operations bound to the supplied transport.
|
|
146
|
+
*/
|
|
122
147
|
export function createStandaloneUsersDomain(transport) {
|
|
123
148
|
const base = '/users';
|
|
124
149
|
return {
|
|
@@ -147,29 +172,14 @@ export function createStandaloneUsersDomain(transport) {
|
|
|
147
172
|
async deactivate(userId) {
|
|
148
173
|
await transport.request({ method: 'POST', path: `${base}/${userId}/deactivate` });
|
|
149
174
|
},
|
|
150
|
-
async reactivate(userId) {
|
|
151
|
-
await transport.request({ method: 'POST', path: `${base}/${userId}/reactivate` });
|
|
152
|
-
},
|
|
153
175
|
async activate(userId) {
|
|
154
176
|
await transport.request({ method: 'POST', path: `${base}/${userId}/activate` });
|
|
155
177
|
},
|
|
156
|
-
async
|
|
157
|
-
await transport.request({ method: 'POST', path: `${base}/${userId}/suspend` });
|
|
158
|
-
},
|
|
159
|
-
async unsuspend(userId) {
|
|
160
|
-
await transport.request({ method: 'POST', path: `${base}/${userId}/unsuspend` });
|
|
161
|
-
},
|
|
162
|
-
async lock(userId) {
|
|
163
|
-
await transport.request({ method: 'POST', path: `${base}/${userId}/lock` });
|
|
164
|
-
},
|
|
165
|
-
async unlock(userId) {
|
|
166
|
-
await transport.request({ method: 'POST', path: `${base}/${userId}/unlock` });
|
|
167
|
-
},
|
|
168
|
-
async getHistory(userId, params) {
|
|
178
|
+
async getHistory(userId) {
|
|
169
179
|
const res = await transport.request({
|
|
170
180
|
method: 'GET',
|
|
171
181
|
path: `${base}/${userId}/history`,
|
|
172
|
-
params:
|
|
182
|
+
params: undefined,
|
|
173
183
|
});
|
|
174
184
|
return unwrapData(res.body);
|
|
175
185
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/domains/users.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAcjD,OAAO,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/domains/users.ts"],"names":[],"mappings":"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"}
|
package/dist/errors/index.d.ts
CHANGED
|
@@ -94,6 +94,8 @@ export declare class PortaRateLimitError extends PortaHttpError {
|
|
|
94
94
|
* The specific status code is preserved for debugging.
|
|
95
95
|
*/
|
|
96
96
|
export declare class PortaServerError extends PortaHttpError {
|
|
97
|
+
/** Safe server-created request identifier for operator support, when supplied. */
|
|
98
|
+
readonly requestId: string | null;
|
|
97
99
|
constructor(status: number, body?: unknown);
|
|
98
100
|
}
|
|
99
101
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D;;;GAGG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACnC,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAGzD;CACF;AAED;;;GAGG;AACH,qBAAa,cAAe,SAAQ,UAAU;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAEvB,YAAY,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAK1D;CACF;AAED,4DAA4D;AAC5D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,cAAc;IACtD,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAErC,YAAY,IAAI,EAAE,OAAO,EAKxB;CACF;AAED;;;;GAIG;AACH,qBAAa,wBAAyB,SAAQ,cAAc;IAC1D,YAAY,IAAI,CAAC,EAAE,OAAO,EAIzB;CACF;AAED;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,cAAc;IACrD,YAAY,IAAI,CAAC,EAAE,OAAO,EAIzB;CACF;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,YAAY,IAAI,CAAC,EAAE,OAAO,EAIzB;CACF;AAED;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,YAAY,IAAI,CAAC,EAAE,OAAO,EAIzB;CACF;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,cAAc;IACrD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnC,YAAY,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,EAKrD;CACF;AAED;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,cAAc;IAClD,YAAY,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D;;;GAGG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACnC,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAGzD;CACF;AAED;;;GAGG;AACH,qBAAa,cAAe,SAAQ,UAAU;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAEvB,YAAY,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAK1D;CACF;AAED,4DAA4D;AAC5D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,cAAc;IACtD,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAErC,YAAY,IAAI,EAAE,OAAO,EAKxB;CACF;AAED;;;;GAIG;AACH,qBAAa,wBAAyB,SAAQ,cAAc;IAC1D,YAAY,IAAI,CAAC,EAAE,OAAO,EAIzB;CACF;AAED;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,cAAc;IACrD,YAAY,IAAI,CAAC,EAAE,OAAO,EAIzB;CACF;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,YAAY,IAAI,CAAC,EAAE,OAAO,EAIzB;CACF;AAED;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,YAAY,IAAI,CAAC,EAAE,OAAO,EAIzB;CACF;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,cAAc;IACrD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnC,YAAY,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,EAKrD;CACF;AAED;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,cAAc;IAClD,kFAAkF;IAClF,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAElC,YAAY,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAKzC;CACF;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,cAAc,CA0B9E"}
|
package/dist/errors/index.js
CHANGED
|
@@ -119,10 +119,13 @@ export class PortaRateLimitError extends PortaHttpError {
|
|
|
119
119
|
* The specific status code is preserved for debugging.
|
|
120
120
|
*/
|
|
121
121
|
export class PortaServerError extends PortaHttpError {
|
|
122
|
+
/** Safe server-created request identifier for operator support, when supplied. */
|
|
123
|
+
requestId;
|
|
122
124
|
constructor(status, body) {
|
|
123
125
|
const message = extractMessage(body, 'Server error');
|
|
124
126
|
super(status, message, body);
|
|
125
127
|
this.name = 'PortaServerError';
|
|
128
|
+
this.requestId = extractRequestId(body);
|
|
126
129
|
}
|
|
127
130
|
}
|
|
128
131
|
/**
|
|
@@ -185,6 +188,16 @@ function extractMessage(body, fallback) {
|
|
|
185
188
|
}
|
|
186
189
|
return fallback;
|
|
187
190
|
}
|
|
191
|
+
/** Extract only a UUID-shaped server request identifier from an error body. */
|
|
192
|
+
function extractRequestId(body) {
|
|
193
|
+
if (!body || typeof body !== 'object')
|
|
194
|
+
return null;
|
|
195
|
+
const requestId = Reflect.get(body, 'request_id');
|
|
196
|
+
return typeof requestId === 'string' &&
|
|
197
|
+
/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(requestId)
|
|
198
|
+
? requestId
|
|
199
|
+
: null;
|
|
200
|
+
}
|
|
188
201
|
/**
|
|
189
202
|
* Extracts validation details from a 400 response body.
|
|
190
203
|
* Looks for { details: [{ path, message, code? }] } or
|
|
@@ -194,7 +207,11 @@ function extractDetails(body) {
|
|
|
194
207
|
if (!body || typeof body !== 'object')
|
|
195
208
|
return [];
|
|
196
209
|
const obj = body;
|
|
197
|
-
const raw = Array.isArray(obj.details)
|
|
210
|
+
const raw = Array.isArray(obj.details)
|
|
211
|
+
? obj.details
|
|
212
|
+
: Array.isArray(obj.errors)
|
|
213
|
+
? obj.errors
|
|
214
|
+
: [];
|
|
198
215
|
return raw
|
|
199
216
|
.filter((item) => item && typeof item === 'object')
|
|
200
217
|
.map((item) => ({
|