@portaidentity/sdk 1.7.3 → 1.9.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 +27 -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 +122 -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 +104 -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 +390 -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/clients.js
CHANGED
|
@@ -4,51 +4,152 @@
|
|
|
4
4
|
* @module domains/clients
|
|
5
5
|
*/
|
|
6
6
|
import { listAll } from '../pagination/index.js';
|
|
7
|
-
import {
|
|
7
|
+
import { etagHeaders, isRecord, isStringArray, requireData, requireDataWithEtag, requirePaginatedData, toQueryParams, } from './helpers.js';
|
|
8
|
+
/** Return whether a value is one supported login-method collection. */
|
|
9
|
+
function isLoginMethods(value) {
|
|
10
|
+
return (isStringArray(value) &&
|
|
11
|
+
value.every((method) => method === 'password' || method === 'magic_link'));
|
|
12
|
+
}
|
|
13
|
+
/** Validate one complete client returned by the Admin API. */
|
|
14
|
+
function isClient(value) {
|
|
15
|
+
return (isRecord(value) &&
|
|
16
|
+
typeof value.id === 'string' &&
|
|
17
|
+
typeof value.organizationId === 'string' &&
|
|
18
|
+
typeof value.applicationId === 'string' &&
|
|
19
|
+
typeof value.clientId === 'string' &&
|
|
20
|
+
typeof value.clientName === 'string' &&
|
|
21
|
+
(value.clientType === 'public' || value.clientType === 'confidential') &&
|
|
22
|
+
(value.applicationType === 'web' ||
|
|
23
|
+
value.applicationType === 'native' ||
|
|
24
|
+
value.applicationType === 'spa') &&
|
|
25
|
+
isStringArray(value.redirectUris) &&
|
|
26
|
+
isStringArray(value.postLogoutRedirectUris) &&
|
|
27
|
+
isStringArray(value.grantTypes) &&
|
|
28
|
+
value.grantTypes.every((grant) => grant === 'authorization_code' ||
|
|
29
|
+
grant === 'client_credentials' ||
|
|
30
|
+
grant === 'refresh_token') &&
|
|
31
|
+
isStringArray(value.responseTypes) &&
|
|
32
|
+
value.responseTypes.every((responseType) => responseType === 'code') &&
|
|
33
|
+
typeof value.scope === 'string' &&
|
|
34
|
+
(value.tokenEndpointAuthMethod === 'client_secret_basic' ||
|
|
35
|
+
value.tokenEndpointAuthMethod === 'client_secret_post' ||
|
|
36
|
+
value.tokenEndpointAuthMethod === 'none') &&
|
|
37
|
+
isStringArray(value.allowedOrigins) &&
|
|
38
|
+
typeof value.requirePkce === 'boolean' &&
|
|
39
|
+
typeof value.requireConsent === 'boolean' &&
|
|
40
|
+
(value.loginMethods === null || isLoginMethods(value.loginMethods)) &&
|
|
41
|
+
isLoginMethods(value.effectiveLoginMethods) &&
|
|
42
|
+
(value.status === 'active' || value.status === 'inactive') &&
|
|
43
|
+
typeof value.createdAt === 'string' &&
|
|
44
|
+
typeof value.updatedAt === 'string');
|
|
45
|
+
}
|
|
46
|
+
/** Validate secret metadata that never contains plaintext. */
|
|
47
|
+
function isClientSecret(value) {
|
|
48
|
+
return (isRecord(value) &&
|
|
49
|
+
typeof value.id === 'string' &&
|
|
50
|
+
typeof value.clientId === 'string' &&
|
|
51
|
+
(typeof value.label === 'string' || value.label === null) &&
|
|
52
|
+
(value.status === 'active' || value.status === 'revoked') &&
|
|
53
|
+
(typeof value.lastUsedAt === 'string' || value.lastUsedAt === null) &&
|
|
54
|
+
(typeof value.expiresAt === 'string' || value.expiresAt === null) &&
|
|
55
|
+
typeof value.createdAt === 'string');
|
|
56
|
+
}
|
|
57
|
+
/** Validate a secret returned once by create or generate. */
|
|
58
|
+
function isGeneratedSecret(value) {
|
|
59
|
+
return (isRecord(value) &&
|
|
60
|
+
typeof value.id === 'string' &&
|
|
61
|
+
typeof value.clientId === 'string' &&
|
|
62
|
+
(typeof value.label === 'string' || value.label === null) &&
|
|
63
|
+
typeof value.plaintext === 'string' &&
|
|
64
|
+
(typeof value.expiresAt === 'string' || value.expiresAt === null) &&
|
|
65
|
+
typeof value.createdAt === 'string');
|
|
66
|
+
}
|
|
67
|
+
/** Validate one client history entry. */
|
|
68
|
+
function isHistoryEntry(value) {
|
|
69
|
+
return (isRecord(value) &&
|
|
70
|
+
typeof value.id === 'string' &&
|
|
71
|
+
typeof value.eventType === 'string' &&
|
|
72
|
+
(typeof value.actorId === 'string' || value.actorId === null) &&
|
|
73
|
+
(isRecord(value.metadata) || value.metadata === null) &&
|
|
74
|
+
typeof value.createdAt === 'string');
|
|
75
|
+
}
|
|
76
|
+
/** Validate the relationship between client type and its optional one-time secret. */
|
|
77
|
+
function isClientCreateResult(value) {
|
|
78
|
+
if (!isRecord(value) || !isClient(value.client))
|
|
79
|
+
return false;
|
|
80
|
+
if (value.client.clientType === 'confidential')
|
|
81
|
+
return isGeneratedSecret(value.secret);
|
|
82
|
+
return value.secret === undefined || value.secret === null;
|
|
83
|
+
}
|
|
84
|
+
/** Create the client operations backed by one HTTP transport. */
|
|
8
85
|
export function createClientsDomain(transport) {
|
|
9
86
|
const base = '/clients';
|
|
10
87
|
return {
|
|
11
88
|
async list(params) {
|
|
12
|
-
const res = await transport.request({
|
|
13
|
-
|
|
89
|
+
const res = await transport.request({
|
|
90
|
+
method: 'GET',
|
|
91
|
+
path: base,
|
|
92
|
+
params: toQueryParams(params),
|
|
93
|
+
});
|
|
94
|
+
return requirePaginatedData(res.body, isClient);
|
|
14
95
|
},
|
|
15
96
|
listAll(params) {
|
|
16
97
|
return listAll((p) => this.list({ ...params, ...p }), params);
|
|
17
98
|
},
|
|
18
|
-
async get(
|
|
19
|
-
const res = await transport.request({ method: 'GET', path: `${base}/${
|
|
20
|
-
return
|
|
99
|
+
async get(id) {
|
|
100
|
+
const res = await transport.request({ method: 'GET', path: `${base}/${id}` });
|
|
101
|
+
return requireDataWithEtag(res, isClient);
|
|
21
102
|
},
|
|
22
103
|
async create(input) {
|
|
23
104
|
const res = await transport.request({ method: 'POST', path: base, body: input });
|
|
24
|
-
|
|
105
|
+
const result = requireData(res.body, isClientCreateResult);
|
|
106
|
+
return result.secret
|
|
107
|
+
? { client: result.client, secret: result.secret }
|
|
108
|
+
: { client: result.client };
|
|
25
109
|
},
|
|
26
|
-
async update(
|
|
110
|
+
async update(id, input, etag) {
|
|
27
111
|
const res = await transport.request({
|
|
28
|
-
method: 'PUT',
|
|
112
|
+
method: 'PUT',
|
|
113
|
+
path: `${base}/${id}`,
|
|
114
|
+
body: input,
|
|
115
|
+
headers: etagHeaders(etag),
|
|
29
116
|
});
|
|
30
|
-
return
|
|
117
|
+
return requireData(res.body, isClient);
|
|
118
|
+
},
|
|
119
|
+
async delete(id) {
|
|
120
|
+
await transport.request({ method: 'DELETE', path: `${base}/${id}` });
|
|
31
121
|
},
|
|
32
|
-
async
|
|
33
|
-
await transport.request({ method: 'POST', path: `${base}/${
|
|
122
|
+
async activate(id) {
|
|
123
|
+
await transport.request({ method: 'POST', path: `${base}/${id}/activate` });
|
|
34
124
|
},
|
|
35
|
-
async
|
|
36
|
-
await transport.request({ method: 'POST', path: `${base}/${
|
|
125
|
+
async deactivate(id) {
|
|
126
|
+
await transport.request({ method: 'POST', path: `${base}/${id}/deactivate` });
|
|
37
127
|
},
|
|
38
|
-
async getHistory(
|
|
39
|
-
const res = await transport.request({
|
|
40
|
-
|
|
128
|
+
async getHistory(id, params) {
|
|
129
|
+
const res = await transport.request({
|
|
130
|
+
method: 'GET',
|
|
131
|
+
path: `${base}/${id}/history`,
|
|
132
|
+
params: toQueryParams(params),
|
|
133
|
+
});
|
|
134
|
+
return requireData(res.body, (value) => Array.isArray(value) && value.every(isHistoryEntry));
|
|
41
135
|
},
|
|
42
136
|
async listSecrets(clientId) {
|
|
43
137
|
const res = await transport.request({ method: 'GET', path: `${base}/${clientId}/secrets` });
|
|
44
|
-
return
|
|
138
|
+
return requireData(res.body, (value) => Array.isArray(value) && value.every(isClientSecret));
|
|
45
139
|
},
|
|
46
140
|
async generateSecret(clientId, input) {
|
|
47
|
-
const res = await transport.request({
|
|
48
|
-
|
|
141
|
+
const res = await transport.request({
|
|
142
|
+
method: 'POST',
|
|
143
|
+
path: `${base}/${clientId}/secrets`,
|
|
144
|
+
body: input,
|
|
145
|
+
});
|
|
146
|
+
return requireData(res.body, isGeneratedSecret);
|
|
49
147
|
},
|
|
50
148
|
async revokeSecret(clientId, secretId) {
|
|
51
|
-
await transport.request({
|
|
149
|
+
await transport.request({
|
|
150
|
+
method: 'POST',
|
|
151
|
+
path: `${base}/${clientId}/secrets/${secretId}/revoke`,
|
|
152
|
+
});
|
|
52
153
|
},
|
|
53
154
|
};
|
|
54
155
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clients.js","sourceRoot":"","sources":["../../src/domains/clients.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"clients.js","sourceRoot":"","sources":["../../src/domains/clients.ts"],"names":[],"mappings":"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"}
|
package/dist/domains/config.d.ts
CHANGED
|
@@ -4,11 +4,28 @@
|
|
|
4
4
|
* @module domains/config
|
|
5
5
|
*/
|
|
6
6
|
import type { HttpTransport } from '../transport/types.js';
|
|
7
|
-
import type { ConfigEntry } from '../types/index.js';
|
|
7
|
+
import type { ConfigEntry, ConfigKey, ConfigValue, ConfigUpdateResult, ConfigBatchUpdateResult } from '../types/index.js';
|
|
8
|
+
/** Metadata-driven access to the closed operational configuration catalog. */
|
|
8
9
|
export interface ConfigDomain {
|
|
9
|
-
|
|
10
|
+
/** Read all authoritative entries, preserving server catalog order. */
|
|
11
|
+
list(): Promise<readonly ConfigEntry[]>;
|
|
12
|
+
/** Read an untrusted name; non-catalog names receive the server's uniform 404. */
|
|
10
13
|
get(key: string): Promise<ConfigEntry>;
|
|
11
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Update one native scalar and retain the required restart action.
|
|
16
|
+
* @throws {PortaError} If a JavaScript caller supplies a bare dot path segment
|
|
17
|
+
*/
|
|
18
|
+
set(key: ConfigKey, value: ConfigValue): Promise<ConfigUpdateResult>;
|
|
19
|
+
/** Atomically update selected catalog keys; the server validates the entire batch. */
|
|
20
|
+
setMany(values: Readonly<Partial<Record<ConfigKey, ConfigValue>>>): Promise<ConfigBatchUpdateResult>;
|
|
12
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Bind configuration operations to the existing authenticated HTTP transport.
|
|
24
|
+
* Transport errors propagate unchanged; the server remains the validation authority.
|
|
25
|
+
* @param transport - Authenticated Admin API transport
|
|
26
|
+
* @returns Configuration operations without local policy metadata copies
|
|
27
|
+
* @example
|
|
28
|
+
* await createConfigDomain(transport).set('magic_link_ttl', 1200);
|
|
29
|
+
*/
|
|
13
30
|
export declare function createConfigDomain(transport: HttpTransport): ConfigDomain;
|
|
14
31
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/domains/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/domains/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,uBAAuB,EACxB,MAAM,mBAAmB,CAAC;AAI3B,8EAA8E;AAC9E,MAAM,WAAW,YAAY;IAC3B,uEAAuE;IACvE,IAAI,IAAI,OAAO,CAAC,SAAS,WAAW,EAAE,CAAC,CAAC;IACxC,kFAAkF;IAClF,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrE,sFAAsF;IACtF,OAAO,CACL,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,GACxD,OAAO,CAAC,uBAAuB,CAAC,CAAC;CACrC;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,aAAa,GAAG,YAAY,CAiCzE"}
|
package/dist/domains/config.js
CHANGED
|
@@ -4,6 +4,15 @@
|
|
|
4
4
|
* @module domains/config
|
|
5
5
|
*/
|
|
6
6
|
import { unwrapData } from './helpers.js';
|
|
7
|
+
import { PortaError } from '../errors/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Bind configuration operations to the existing authenticated HTTP transport.
|
|
10
|
+
* Transport errors propagate unchanged; the server remains the validation authority.
|
|
11
|
+
* @param transport - Authenticated Admin API transport
|
|
12
|
+
* @returns Configuration operations without local policy metadata copies
|
|
13
|
+
* @example
|
|
14
|
+
* await createConfigDomain(transport).set('magic_link_ttl', 1200);
|
|
15
|
+
*/
|
|
7
16
|
export function createConfigDomain(transport) {
|
|
8
17
|
return {
|
|
9
18
|
async list() {
|
|
@@ -11,12 +20,30 @@ export function createConfigDomain(transport) {
|
|
|
11
20
|
return unwrapData(res.body);
|
|
12
21
|
},
|
|
13
22
|
async get(key) {
|
|
14
|
-
const res = await transport.request({
|
|
23
|
+
const res = await transport.request({
|
|
24
|
+
method: 'GET',
|
|
25
|
+
path: `/config/${encodeURIComponent(key)}`,
|
|
26
|
+
});
|
|
15
27
|
return unwrapData(res.body);
|
|
16
28
|
},
|
|
17
29
|
async set(key, value) {
|
|
18
|
-
const
|
|
19
|
-
|
|
30
|
+
const encodedKey = encodeURIComponent(key);
|
|
31
|
+
// JavaScript and agent callers bypass compile-time keys. Bare dots survive encoding and
|
|
32
|
+
// are normalized by fetch, so reject them before they can leave the configuration route.
|
|
33
|
+
if (encodedKey === '.' || encodedKey === '..') {
|
|
34
|
+
throw new PortaError('Configuration key is invalid.');
|
|
35
|
+
}
|
|
36
|
+
const res = await transport.request({
|
|
37
|
+
method: 'PUT',
|
|
38
|
+
path: `/config/${encodedKey}`,
|
|
39
|
+
body: { value },
|
|
40
|
+
});
|
|
41
|
+
// Updates intentionally retain the envelope: unwrapping would lose the restart decision.
|
|
42
|
+
return res.body;
|
|
43
|
+
},
|
|
44
|
+
async setMany(values) {
|
|
45
|
+
const res = await transport.request({ method: 'PUT', path: '/config', body: { values } });
|
|
46
|
+
return res.body;
|
|
20
47
|
},
|
|
21
48
|
};
|
|
22
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/domains/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/domains/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAmBhD;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAwB;IACzD,OAAO;QACL,KAAK,CAAC,IAAI;YACR,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YACxE,OAAO,UAAU,CAAyB,GAAG,CAAC,IAAI,CAAC,CAAC;QACtD,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,GAAG;YACX,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC;gBAClC,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,WAAW,kBAAkB,CAAC,GAAG,CAAC,EAAE;aAC3C,CAAC,CAAC;YACH,OAAO,UAAU,CAAc,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK;YAClB,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAC3C,wFAAwF;YACxF,yFAAyF;YACzF,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBAC9C,MAAM,IAAI,UAAU,CAAC,+BAA+B,CAAC,CAAC;YACxD,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC;gBAClC,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,WAAW,UAAU,EAAE;gBAC7B,IAAI,EAAE,EAAE,KAAK,EAAE;aAChB,CAAC,CAAC;YACH,yFAAyF;YACzF,OAAO,GAAG,CAAC,IAA0B,CAAC;QACxC,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,MAAM;YAClB,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YAC1F,OAAO,GAAG,CAAC,IAA+B,CAAC;QAC7C,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -11,7 +11,8 @@ export interface CustomClaimsDomain {
|
|
|
11
11
|
get(appId: string, claimId: string): Promise<ClaimDefinition>;
|
|
12
12
|
create(appId: string, input: CreateClaimDefinitionInput): Promise<ClaimDefinition>;
|
|
13
13
|
update(appId: string, claimId: string, input: UpdateClaimDefinitionInput): Promise<ClaimDefinition>;
|
|
14
|
-
|
|
14
|
+
/** Permanently delete a claim definition through its parent-qualified route. */
|
|
15
|
+
delete(appId: string, claimId: string): Promise<void>;
|
|
15
16
|
}
|
|
16
17
|
export declare function createCustomClaimsDomain(transport: HttpTransport): CustomClaimsDomain;
|
|
17
18
|
//# sourceMappingURL=custom-claims.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-claims.d.ts","sourceRoot":"","sources":["../../src/domains/custom-claims.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAIhJ,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,CAAC;IACtF,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACjG,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACnF,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACpG,
|
|
1
|
+
{"version":3,"file":"custom-claims.d.ts","sourceRoot":"","sources":["../../src/domains/custom-claims.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAIhJ,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,CAAC;IACtF,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACjG,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACnF,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACpG,gFAAgF;IAChF,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,aAAa,GAAG,kBAAkB,CA2BrF"}
|
|
@@ -27,8 +27,8 @@ export function createCustomClaimsDomain(transport) {
|
|
|
27
27
|
const res = await transport.request({ method: 'PUT', path: `${base(appId)}/${claimId}`, body: input });
|
|
28
28
|
return unwrapData(res.body);
|
|
29
29
|
},
|
|
30
|
-
async
|
|
31
|
-
await transport.request({ method: '
|
|
30
|
+
async delete(appId, claimId) {
|
|
31
|
+
await transport.request({ method: 'DELETE', path: `${base(appId)}/${claimId}` });
|
|
32
32
|
},
|
|
33
33
|
};
|
|
34
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-claims.js","sourceRoot":"","sources":["../../src/domains/custom-claims.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"custom-claims.js","sourceRoot":"","sources":["../../src/domains/custom-claims.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAYzD,MAAM,UAAU,wBAAwB,CAAC,SAAwB;IAC/D,SAAS,IAAI,CAAC,KAAa,IAAI,OAAO,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC;IAExE,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAO;YACvB,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzG,OAAO,GAAG,CAAC,IAA0C,CAAC;QACxD,CAAC;QACD,OAAO,CAAC,KAAK,EAAE,MAAO;YACpB,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACvE,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO;YACtB,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC;YAC1F,OAAO,UAAU,CAAkB,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK;YACvB,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACxF,OAAO,UAAU,CAAkB,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK;YAChC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACvG,OAAO,UAAU,CAAkB,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO;YACzB,MAAM,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC;QACnF,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -4,9 +4,14 @@
|
|
|
4
4
|
* @module domains/exports
|
|
5
5
|
*/
|
|
6
6
|
import type { HttpTransport, TransportResponse } from '../transport/types.js';
|
|
7
|
-
import type { ExportParams } from '../types/index.js';
|
|
7
|
+
import type { ExportManifestRequest, ExportManifestResponse, ExportParams } from '../types/index.js';
|
|
8
|
+
/** Administrative report downloads and selective manifest exports. */
|
|
8
9
|
export interface ExportsDomain {
|
|
10
|
+
/** Download one existing CSV or JSON administrative report. */
|
|
9
11
|
download(params: ExportParams): Promise<TransportResponse>;
|
|
12
|
+
/** Export one parsed portability manifest without writing a local file. */
|
|
13
|
+
manifest(request: ExportManifestRequest): Promise<ExportManifestResponse>;
|
|
10
14
|
}
|
|
15
|
+
/** Create the export operations backed by one shared HTTP transport. */
|
|
11
16
|
export declare function createExportsDomain(transport: HttpTransport): ExportsDomain;
|
|
12
17
|
//# sourceMappingURL=exports.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../src/domains/exports.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../src/domains/exports.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EAEb,MAAM,mBAAmB,CAAC;AAmB3B,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,+DAA+D;IAC/D,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3D,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CAC3E;AAED,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,aAAa,GAAG,aAAa,CAwB3E"}
|
package/dist/domains/exports.js
CHANGED
|
@@ -3,7 +3,22 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module domains/exports
|
|
5
5
|
*/
|
|
6
|
-
import { toQueryParams } from './helpers.js';
|
|
6
|
+
import { toQueryParams, unwrapData } from './helpers.js';
|
|
7
|
+
/** Path-free attachment names accepted from the server response. */
|
|
8
|
+
const SAFE_ATTACHMENT_FILENAME = /^[A-Za-z0-9][A-Za-z0-9._-]{0,254}$/;
|
|
9
|
+
/** Return the server attachment name only when it is a safe final path component. */
|
|
10
|
+
function attachmentFilename(contentDisposition) {
|
|
11
|
+
if (!contentDisposition)
|
|
12
|
+
return undefined;
|
|
13
|
+
const match = /filename\s*=\s*(?:"([^"]+)"|([^;\s]+))/i.exec(contentDisposition);
|
|
14
|
+
const filename = match?.[1] ?? match?.[2];
|
|
15
|
+
return filename && SAFE_ATTACHMENT_FILENAME.test(filename) ? filename : undefined;
|
|
16
|
+
}
|
|
17
|
+
/** Create a path-free fallback name from the current UTC instant. */
|
|
18
|
+
function fallbackManifestFilename() {
|
|
19
|
+
return `porta-manifest-${new Date().toISOString().replace(/[:.]/g, '-')}.json`;
|
|
20
|
+
}
|
|
21
|
+
/** Create the export operations backed by one shared HTTP transport. */
|
|
7
22
|
export function createExportsDomain(transport) {
|
|
8
23
|
return {
|
|
9
24
|
async download(params) {
|
|
@@ -15,6 +30,17 @@ export function createExportsDomain(transport) {
|
|
|
15
30
|
responseType: 'raw',
|
|
16
31
|
});
|
|
17
32
|
},
|
|
33
|
+
async manifest(request) {
|
|
34
|
+
const response = await transport.request({
|
|
35
|
+
method: 'POST',
|
|
36
|
+
path: '/export/manifest',
|
|
37
|
+
body: request,
|
|
38
|
+
});
|
|
39
|
+
return {
|
|
40
|
+
manifest: unwrapData(response.body),
|
|
41
|
+
filename: attachmentFilename(response.headers['content-disposition']) ?? fallbackManifestFilename(),
|
|
42
|
+
};
|
|
43
|
+
},
|
|
18
44
|
};
|
|
19
45
|
}
|
|
20
46
|
//# sourceMappingURL=exports.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exports.js","sourceRoot":"","sources":["../../src/domains/exports.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"exports.js","sourceRoot":"","sources":["../../src/domains/exports.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEzD,oEAAoE;AACpE,MAAM,wBAAwB,GAAG,oCAAoC,CAAC;AAEtE,qFAAqF;AACrF,SAAS,kBAAkB,CAAC,kBAAsC;IAChE,IAAI,CAAC,kBAAkB;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,KAAK,GAAG,yCAAyC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACjF,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1C,OAAO,QAAQ,IAAI,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACpF,CAAC;AAED,qEAAqE;AACrE,SAAS,wBAAwB;IAC/B,OAAO,kBAAkB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC;AACjF,CAAC;AAUD,wEAAwE;AACxE,MAAM,UAAU,mBAAmB,CAAC,SAAwB;IAC1D,OAAO;QACL,KAAK,CAAC,QAAQ,CAAC,MAAM;YACnB,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;YACvC,OAAO,SAAS,CAAC,OAAO,CAAC;gBACvB,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,WAAW,UAAU,EAAE;gBAC7B,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC;gBAC3B,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,QAAQ,CAAC,OAAO;YACpB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC;gBACvC,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;YACH,OAAO;gBACL,QAAQ,EAAE,UAAU,CAAsB,QAAQ,CAAC,IAAI,CAAC;gBACxD,QAAQ,EACN,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,IAAI,wBAAwB,EAAE;aAC5F,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -4,6 +4,37 @@
|
|
|
4
4
|
* @module domains/helpers
|
|
5
5
|
*/
|
|
6
6
|
import type { TransportResponse } from '../transport/types.js';
|
|
7
|
+
import type { ETagResponse, PaginatedResponse } from '../types/index.js';
|
|
8
|
+
/** Return whether a value is a non-null object record. */
|
|
9
|
+
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
10
|
+
/** Return whether every array entry is a string. */
|
|
11
|
+
export declare function isStringArray(value: unknown): value is string[];
|
|
12
|
+
/**
|
|
13
|
+
* Require a `{ data: T }` response envelope and validate its payload.
|
|
14
|
+
*
|
|
15
|
+
* @param body - Raw response body
|
|
16
|
+
* @param isData - Feature-specific payload guard
|
|
17
|
+
* @returns Validated payload
|
|
18
|
+
* @throws {PortaError} When the envelope or payload is invalid
|
|
19
|
+
*/
|
|
20
|
+
export declare function requireData<T>(body: unknown, isData: (value: unknown) => value is T): T;
|
|
21
|
+
/**
|
|
22
|
+
* Require a paginated response whose every item passes the supplied guard.
|
|
23
|
+
*
|
|
24
|
+
* @param body - Raw response body
|
|
25
|
+
* @param isItem - Feature-specific item guard
|
|
26
|
+
* @returns Validated pagination response
|
|
27
|
+
* @throws {PortaError} When pagination metadata or an item is invalid
|
|
28
|
+
*/
|
|
29
|
+
export declare function requirePaginatedData<T>(body: unknown, isItem: (value: unknown) => value is T): PaginatedResponse<T>;
|
|
30
|
+
/**
|
|
31
|
+
* Require a validated data envelope while preserving its ETag header.
|
|
32
|
+
*
|
|
33
|
+
* @param response - Raw transport response
|
|
34
|
+
* @param isData - Feature-specific payload guard
|
|
35
|
+
* @returns Validated payload and optional ETag
|
|
36
|
+
*/
|
|
37
|
+
export declare function requireDataWithEtag<T>(response: TransportResponse, isData: (value: unknown) => value is T): ETagResponse<T>;
|
|
7
38
|
/**
|
|
8
39
|
* Unwrap a `{ data: T }` response envelope.
|
|
9
40
|
* If the body already has a `data` property, extracts it; otherwise returns as-is.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/domains/helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/domains/helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGzE,0DAA0D;AAC1D,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,oDAAoD;AACpD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,EAAE,CAE/D;AAOD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,CAKvF;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,GACrC,iBAAiB,CAAC,CAAC,CAAC,CAwBtB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,GACrC,YAAY,CAAC,CAAC,CAAC,CAIjB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,CAAC,CAK9C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,iBAAiB,GAAG;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAI/F;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAGjE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,SAAS,CAavD"}
|
package/dist/domains/helpers.js
CHANGED
|
@@ -3,6 +3,75 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module domains/helpers
|
|
5
5
|
*/
|
|
6
|
+
import { PortaError } from '../errors/index.js';
|
|
7
|
+
/** Return whether a value is a non-null object record. */
|
|
8
|
+
export function isRecord(value) {
|
|
9
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
10
|
+
}
|
|
11
|
+
/** Return whether every array entry is a string. */
|
|
12
|
+
export function isStringArray(value) {
|
|
13
|
+
return Array.isArray(value) && value.every((entry) => typeof entry === 'string');
|
|
14
|
+
}
|
|
15
|
+
/** Create the fixed SDK error used when a successful response has an invalid public shape. */
|
|
16
|
+
function invalidResponseError() {
|
|
17
|
+
return new PortaError('Porta API returned an invalid response.');
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Require a `{ data: T }` response envelope and validate its payload.
|
|
21
|
+
*
|
|
22
|
+
* @param body - Raw response body
|
|
23
|
+
* @param isData - Feature-specific payload guard
|
|
24
|
+
* @returns Validated payload
|
|
25
|
+
* @throws {PortaError} When the envelope or payload is invalid
|
|
26
|
+
*/
|
|
27
|
+
export function requireData(body, isData) {
|
|
28
|
+
if (!isRecord(body) || !('data' in body) || !isData(body.data)) {
|
|
29
|
+
throw invalidResponseError();
|
|
30
|
+
}
|
|
31
|
+
return body.data;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Require a paginated response whose every item passes the supplied guard.
|
|
35
|
+
*
|
|
36
|
+
* @param body - Raw response body
|
|
37
|
+
* @param isItem - Feature-specific item guard
|
|
38
|
+
* @returns Validated pagination response
|
|
39
|
+
* @throws {PortaError} When pagination metadata or an item is invalid
|
|
40
|
+
*/
|
|
41
|
+
export function requirePaginatedData(body, isItem) {
|
|
42
|
+
if (!isRecord(body) ||
|
|
43
|
+
!Array.isArray(body.data) ||
|
|
44
|
+
!body.data.every(isItem) ||
|
|
45
|
+
typeof body.total !== 'number' ||
|
|
46
|
+
(body.page !== undefined && typeof body.page !== 'number') ||
|
|
47
|
+
(body.pageSize !== undefined && typeof body.pageSize !== 'number') ||
|
|
48
|
+
(body.totalPages !== undefined && typeof body.totalPages !== 'number') ||
|
|
49
|
+
(body.cursor !== undefined && body.cursor !== null && typeof body.cursor !== 'string') ||
|
|
50
|
+
(body.hasMore !== undefined && typeof body.hasMore !== 'boolean')) {
|
|
51
|
+
throw invalidResponseError();
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
data: body.data,
|
|
55
|
+
total: body.total,
|
|
56
|
+
...(body.page !== undefined ? { page: body.page } : {}),
|
|
57
|
+
...(body.pageSize !== undefined ? { pageSize: body.pageSize } : {}),
|
|
58
|
+
...(body.totalPages !== undefined ? { totalPages: body.totalPages } : {}),
|
|
59
|
+
...(typeof body.cursor === 'string' ? { cursor: body.cursor } : {}),
|
|
60
|
+
...(body.hasMore !== undefined ? { hasMore: body.hasMore } : {}),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Require a validated data envelope while preserving its ETag header.
|
|
65
|
+
*
|
|
66
|
+
* @param response - Raw transport response
|
|
67
|
+
* @param isData - Feature-specific payload guard
|
|
68
|
+
* @returns Validated payload and optional ETag
|
|
69
|
+
*/
|
|
70
|
+
export function requireDataWithEtag(response, isData) {
|
|
71
|
+
const data = requireData(response.body, isData);
|
|
72
|
+
const etag = response.headers?.['etag'] ?? response.headers?.['ETag'] ?? null;
|
|
73
|
+
return { data, etag };
|
|
74
|
+
}
|
|
6
75
|
/**
|
|
7
76
|
* Unwrap a `{ data: T }` response envelope.
|
|
8
77
|
* If the body already has a `data` property, extracts it; otherwise returns as-is.
|
|
@@ -37,7 +106,9 @@ export function toQueryParams(params) {
|
|
|
37
106
|
return undefined;
|
|
38
107
|
const result = {};
|
|
39
108
|
for (const [key, value] of Object.entries(params)) {
|
|
40
|
-
if (value !== undefined &&
|
|
109
|
+
if (value !== undefined &&
|
|
110
|
+
value !== null &&
|
|
111
|
+
(typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean')) {
|
|
41
112
|
result[key] = value;
|
|
42
113
|
}
|
|
43
114
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/domains/helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAI,IAAa;IACzC,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACvD,OAAQ,IAAoB,CAAC,IAAI,CAAC;IACpC,CAAC;IACD,OAAO,IAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAI,QAA2B;IAC3D,MAAM,IAAI,GAAG,UAAU,CAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IAC9E,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAa;IACvC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAgC;IAEhC,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,MAAM,GAA8C,EAAE,CAAC;IAC7D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/domains/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Imports domain — declarative provisioning / data import.
|
|
3
|
-
*
|
|
4
|
-
* @module domains/imports
|
|
5
|
-
*/
|
|
1
|
+
/** Strict portability-manifest preview and import operations. */
|
|
6
2
|
import type { HttpTransport } from '../transport/types.js';
|
|
7
|
-
import type {
|
|
3
|
+
import type { PortabilityManifest, PortabilityResult } from '../types/index.js';
|
|
4
|
+
/** Strict manifest preview and apply operations. */
|
|
8
5
|
export interface ImportsDomain {
|
|
9
|
-
|
|
6
|
+
/** Build a mutation-free import plan. */
|
|
7
|
+
preview(manifest: PortabilityManifest): Promise<PortabilityResult>;
|
|
8
|
+
/** Apply one validated manifest using the selected existing-record policy. */
|
|
9
|
+
apply(manifest: PortabilityManifest, mode: 'keep-existing' | 'update-existing'): Promise<PortabilityResult>;
|
|
10
10
|
}
|
|
11
|
+
/** Create the import operations backed by one shared HTTP transport. */
|
|
11
12
|
export declare function createImportsDomain(transport: HttpTransport): ImportsDomain;
|
|
12
13
|
//# sourceMappingURL=imports.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imports.d.ts","sourceRoot":"","sources":["../../src/domains/imports.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"imports.d.ts","sourceRoot":"","sources":["../../src/domains/imports.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAEjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAIV,mBAAmB,EAEnB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AA4L3B,oDAAoD;AACpD,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,OAAO,CAAC,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACnE,8EAA8E;IAC9E,KAAK,CACH,QAAQ,EAAE,mBAAmB,EAC7B,IAAI,EAAE,eAAe,GAAG,iBAAiB,GACxC,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC/B;AAED,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,aAAa,GAAG,aAAa,CAS3E"}
|