@salesforce/b2c-tooling-sdk 0.4.0 → 0.5.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/README.md +1 -1
- package/data/cip-proto/common.proto +281 -0
- package/data/cip-proto/requests.proto +178 -0
- package/data/cip-proto/responses.proto +135 -0
- package/dist/cjs/cli/am-command.js +2 -0
- package/dist/cjs/cli/am-command.js.map +1 -1
- package/dist/cjs/cli/base-command.d.ts +3 -1
- package/dist/cjs/cli/base-command.js +12 -4
- package/dist/cjs/cli/base-command.js.map +1 -1
- package/dist/cjs/cli/config.d.ts +1 -1
- package/dist/cjs/cli/config.js +5 -3
- package/dist/cjs/cli/config.js.map +1 -1
- package/dist/cjs/cli/instance-command.d.ts +2 -1
- package/dist/cjs/cli/mrt-command.d.ts +1 -0
- package/dist/cjs/cli/oauth-command.d.ts +2 -1
- package/dist/cjs/cli/oauth-command.js +1 -1
- package/dist/cjs/cli/oauth-command.js.map +1 -1
- package/dist/cjs/cli/ods-command.d.ts +2 -1
- package/dist/cjs/cli/webdav-command.d.ts +2 -1
- package/dist/cjs/clients/am-api.d.ts +40 -10
- package/dist/cjs/clients/am-api.js +171 -129
- package/dist/cjs/clients/am-api.js.map +1 -1
- package/dist/cjs/clients/am-users-api.generated.d.ts +63 -0
- package/dist/cjs/clients/cip.d.ts +162 -0
- package/dist/cjs/clients/cip.js +571 -0
- package/dist/cjs/clients/cip.js.map +1 -0
- package/dist/cjs/clients/index.d.ts +5 -2
- package/dist/cjs/clients/index.js +3 -1
- package/dist/cjs/clients/index.js.map +1 -1
- package/dist/cjs/clients/middleware-registry.d.ts +1 -1
- package/dist/cjs/clients/middleware-registry.js.map +1 -1
- package/dist/cjs/config/dw-json.d.ts +10 -8
- package/dist/cjs/config/dw-json.js +10 -10
- package/dist/cjs/config/dw-json.js.map +1 -1
- package/dist/cjs/config/mapping.js +7 -0
- package/dist/cjs/config/mapping.js.map +1 -1
- package/dist/cjs/config/sources/dw-json-source.js +5 -5
- package/dist/cjs/config/sources/dw-json-source.js.map +1 -1
- package/dist/cjs/config/sources/package-json-source.js +2 -2
- package/dist/cjs/config/sources/package-json-source.js.map +1 -1
- package/dist/cjs/config/types.d.ts +5 -1
- package/dist/cjs/discovery/patterns/storefront-next.d.ts +4 -8
- package/dist/cjs/discovery/patterns/storefront-next.js +53 -8
- package/dist/cjs/discovery/patterns/storefront-next.js.map +1 -1
- package/dist/cjs/index.d.ts +4 -2
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/logging/index.d.ts +1 -1
- package/dist/cjs/logging/index.js +1 -1
- package/dist/cjs/operations/cip/index.d.ts +35 -0
- package/dist/cjs/operations/cip/index.js +128 -0
- package/dist/cjs/operations/cip/index.js.map +1 -0
- package/dist/cjs/operations/cip/reports.d.ts +2 -0
- package/dist/cjs/operations/cip/reports.js +210 -0
- package/dist/cjs/operations/cip/reports.js.map +1 -0
- package/dist/cjs/operations/cip/types.d.ts +97 -0
- package/dist/cjs/operations/cip/types.js +7 -0
- package/dist/cjs/operations/cip/types.js.map +1 -0
- package/dist/cjs/operations/content/export.js +2 -5
- package/dist/cjs/operations/content/export.js.map +1 -1
- package/dist/cjs/operations/jobs/index.d.ts +1 -1
- package/dist/cjs/operations/jobs/index.js +1 -1
- package/dist/cjs/operations/jobs/index.js.map +1 -1
- package/dist/cjs/operations/jobs/site-archive.d.ts +33 -9
- package/dist/cjs/operations/jobs/site-archive.js +43 -16
- package/dist/cjs/operations/jobs/site-archive.js.map +1 -1
- package/dist/cjs/operations/users/index.d.ts +12 -2
- package/dist/cjs/operations/users/index.js +22 -24
- package/dist/cjs/operations/users/index.js.map +1 -1
- package/dist/cjs/schemas/index.d.ts +6 -1
- package/dist/cjs/schemas/index.js +7 -1
- package/dist/cjs/schemas/index.js.map +1 -1
- package/dist/cjs/schemas/security-schemes.d.ts +26 -0
- package/dist/cjs/schemas/security-schemes.js +44 -0
- package/dist/cjs/schemas/security-schemes.js.map +1 -0
- package/dist/esm/cli/am-command.js +2 -0
- package/dist/esm/cli/am-command.js.map +1 -1
- package/dist/esm/cli/base-command.d.ts +3 -1
- package/dist/esm/cli/base-command.js +12 -4
- package/dist/esm/cli/base-command.js.map +1 -1
- package/dist/esm/cli/config.d.ts +1 -1
- package/dist/esm/cli/config.js +5 -3
- package/dist/esm/cli/config.js.map +1 -1
- package/dist/esm/cli/instance-command.d.ts +2 -1
- package/dist/esm/cli/mrt-command.d.ts +1 -0
- package/dist/esm/cli/oauth-command.d.ts +2 -1
- package/dist/esm/cli/oauth-command.js +1 -1
- package/dist/esm/cli/oauth-command.js.map +1 -1
- package/dist/esm/cli/ods-command.d.ts +2 -1
- package/dist/esm/cli/webdav-command.d.ts +2 -1
- package/dist/esm/clients/am-api.d.ts +40 -10
- package/dist/esm/clients/am-api.js +171 -129
- package/dist/esm/clients/am-api.js.map +1 -1
- package/dist/esm/clients/am-users-api.generated.d.ts +63 -0
- package/dist/esm/clients/cip.d.ts +162 -0
- package/dist/esm/clients/cip.js +571 -0
- package/dist/esm/clients/cip.js.map +1 -0
- package/dist/esm/clients/index.d.ts +5 -2
- package/dist/esm/clients/index.js +3 -1
- package/dist/esm/clients/index.js.map +1 -1
- package/dist/esm/clients/middleware-registry.d.ts +1 -1
- package/dist/esm/clients/middleware-registry.js.map +1 -1
- package/dist/esm/config/dw-json.d.ts +10 -8
- package/dist/esm/config/dw-json.js +10 -10
- package/dist/esm/config/dw-json.js.map +1 -1
- package/dist/esm/config/mapping.js +7 -0
- package/dist/esm/config/mapping.js.map +1 -1
- package/dist/esm/config/sources/dw-json-source.js +5 -5
- package/dist/esm/config/sources/dw-json-source.js.map +1 -1
- package/dist/esm/config/sources/package-json-source.js +2 -2
- package/dist/esm/config/sources/package-json-source.js.map +1 -1
- package/dist/esm/config/types.d.ts +5 -1
- package/dist/esm/discovery/patterns/storefront-next.d.ts +4 -8
- package/dist/esm/discovery/patterns/storefront-next.js +53 -8
- package/dist/esm/discovery/patterns/storefront-next.js.map +1 -1
- package/dist/esm/index.d.ts +4 -2
- package/dist/esm/index.js +3 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/logging/index.d.ts +1 -1
- package/dist/esm/logging/index.js +1 -1
- package/dist/esm/operations/cip/index.d.ts +35 -0
- package/dist/esm/operations/cip/index.js +128 -0
- package/dist/esm/operations/cip/index.js.map +1 -0
- package/dist/esm/operations/cip/reports.d.ts +2 -0
- package/dist/esm/operations/cip/reports.js +210 -0
- package/dist/esm/operations/cip/reports.js.map +1 -0
- package/dist/esm/operations/cip/types.d.ts +97 -0
- package/dist/esm/operations/cip/types.js +7 -0
- package/dist/esm/operations/cip/types.js.map +1 -0
- package/dist/esm/operations/content/export.js +2 -5
- package/dist/esm/operations/content/export.js.map +1 -1
- package/dist/esm/operations/jobs/index.d.ts +1 -1
- package/dist/esm/operations/jobs/index.js +1 -1
- package/dist/esm/operations/jobs/index.js.map +1 -1
- package/dist/esm/operations/jobs/site-archive.d.ts +33 -9
- package/dist/esm/operations/jobs/site-archive.js +43 -16
- package/dist/esm/operations/jobs/site-archive.js.map +1 -1
- package/dist/esm/operations/users/index.d.ts +12 -2
- package/dist/esm/operations/users/index.js +22 -24
- package/dist/esm/operations/users/index.js.map +1 -1
- package/dist/esm/schemas/index.d.ts +6 -1
- package/dist/esm/schemas/index.js +7 -1
- package/dist/esm/schemas/index.js.map +1 -1
- package/dist/esm/schemas/security-schemes.d.ts +26 -0
- package/dist/esm/schemas/security-schemes.js +44 -0
- package/dist/esm/schemas/security-schemes.js.map +1 -0
- package/package.json +21 -9
- package/specs/am-users-api-v1.yaml +40 -0
|
@@ -0,0 +1,571 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025, Salesforce, Inc.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2
|
|
4
|
+
* For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
|
|
5
|
+
*/
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
import { randomUUID } from 'node:crypto';
|
|
8
|
+
import { createRequire } from 'node:module';
|
|
9
|
+
import protobuf from 'protobufjs';
|
|
10
|
+
import { OAuthStrategy } from '../auth/oauth.js';
|
|
11
|
+
import { getLogger } from '../logging/logger.js';
|
|
12
|
+
import { globalMiddlewareRegistry } from './middleware-registry.js';
|
|
13
|
+
const require = createRequire(import.meta.url);
|
|
14
|
+
const packageRoot = path.dirname(require.resolve('@salesforce/b2c-tooling-sdk/package.json'));
|
|
15
|
+
/** Default CIP Avatica host. */
|
|
16
|
+
export const DEFAULT_CIP_HOST = 'jdbc.analytics.commercecloud.salesforce.com';
|
|
17
|
+
/** Default CIP Avatica host for staging/non-production analytics. */
|
|
18
|
+
export const DEFAULT_CIP_STAGING_HOST = 'jdbc.stg.analytics.commercecloud.salesforce.com';
|
|
19
|
+
const CIP_CLIENT_VERSION = '2.11.0';
|
|
20
|
+
const PROTOBUF_PREVIEW_BYTES = 48;
|
|
21
|
+
const CIP_PROTO_FILES = [
|
|
22
|
+
path.join(packageRoot, 'data/cip-proto/common.proto'),
|
|
23
|
+
path.join(packageRoot, 'data/cip-proto/requests.proto'),
|
|
24
|
+
path.join(packageRoot, 'data/cip-proto/responses.proto'),
|
|
25
|
+
];
|
|
26
|
+
const REP = {
|
|
27
|
+
PRIMITIVE_BOOLEAN: 0,
|
|
28
|
+
BOOLEAN: 8,
|
|
29
|
+
STRING: 21,
|
|
30
|
+
LONG: 13,
|
|
31
|
+
INTEGER: 12,
|
|
32
|
+
PRIMITIVE_INT: 4,
|
|
33
|
+
PRIMITIVE_LONG: 5,
|
|
34
|
+
NUMBER: 22,
|
|
35
|
+
BIG_INTEGER: 25,
|
|
36
|
+
FLOAT: 14,
|
|
37
|
+
DOUBLE: 15,
|
|
38
|
+
PRIMITIVE_FLOAT: 6,
|
|
39
|
+
PRIMITIVE_DOUBLE: 7,
|
|
40
|
+
BIG_DECIMAL: 26,
|
|
41
|
+
BYTE_STRING: 20,
|
|
42
|
+
JAVA_SQL_DATE: 18,
|
|
43
|
+
JAVA_SQL_TIME: 16,
|
|
44
|
+
JAVA_SQL_TIMESTAMP: 17,
|
|
45
|
+
JAVA_UTIL_DATE: 19,
|
|
46
|
+
ARRAY: 27,
|
|
47
|
+
};
|
|
48
|
+
function hasOwn(value, key) {
|
|
49
|
+
return typeof value === 'object' && value !== null && Object.prototype.hasOwnProperty.call(value, key);
|
|
50
|
+
}
|
|
51
|
+
function normalizeCipHost(host) {
|
|
52
|
+
if (!host) {
|
|
53
|
+
return DEFAULT_CIP_HOST;
|
|
54
|
+
}
|
|
55
|
+
const withoutProtocol = host.replace(/^https?:\/\//u, '');
|
|
56
|
+
return withoutProtocol.replace(/\/.*$/u, '');
|
|
57
|
+
}
|
|
58
|
+
function toNumber(value) {
|
|
59
|
+
if (typeof value === 'number') {
|
|
60
|
+
return value;
|
|
61
|
+
}
|
|
62
|
+
if (typeof value === 'bigint') {
|
|
63
|
+
return Number(value);
|
|
64
|
+
}
|
|
65
|
+
if (typeof value === 'object' && value !== null && 'toNumber' in value) {
|
|
66
|
+
return Number(value.toNumber());
|
|
67
|
+
}
|
|
68
|
+
return Number(value ?? 0);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* CIP Avatica client with protobuf transport.
|
|
72
|
+
*
|
|
73
|
+
* Use this client for raw SQL execution against B2C Commerce Intelligence
|
|
74
|
+
* (CIP/CCAC) data.
|
|
75
|
+
*
|
|
76
|
+
* See {@link createCipClient} for the recommended construction helper.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```ts
|
|
80
|
+
* import {OAuthStrategy} from '@salesforce/b2c-tooling-sdk/auth';
|
|
81
|
+
* import {createCipClient} from '@salesforce/b2c-tooling-sdk/clients';
|
|
82
|
+
*
|
|
83
|
+
* const auth = new OAuthStrategy({
|
|
84
|
+
* clientId: process.env.SFCC_CLIENT_ID!,
|
|
85
|
+
* clientSecret: process.env.SFCC_CLIENT_SECRET!,
|
|
86
|
+
* });
|
|
87
|
+
*
|
|
88
|
+
* const cip = createCipClient({instance: 'zzxy_prd'}, auth);
|
|
89
|
+
*
|
|
90
|
+
* const result = await cip.query(
|
|
91
|
+
* 'SELECT submit_date, num_orders FROM ccdw_aggr_sales_summary LIMIT 10',
|
|
92
|
+
* {fetchSize: 500},
|
|
93
|
+
* );
|
|
94
|
+
*
|
|
95
|
+
* console.log(result.rowCount, result.columns, result.rows[0]);
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
export class CipClient {
|
|
99
|
+
config;
|
|
100
|
+
auth;
|
|
101
|
+
baseUrl;
|
|
102
|
+
middlewareRegistry;
|
|
103
|
+
protoRoot;
|
|
104
|
+
connectionId;
|
|
105
|
+
sessionId;
|
|
106
|
+
signatureByStatementId = new Map();
|
|
107
|
+
constructor(config, auth) {
|
|
108
|
+
this.config = config;
|
|
109
|
+
this.auth = auth;
|
|
110
|
+
this.baseUrl = `https://${normalizeCipHost(config.host)}/${config.instance}`;
|
|
111
|
+
this.middlewareRegistry = config.middlewareRegistry ?? globalMiddlewareRegistry;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Opens a new Avatica connection.
|
|
115
|
+
*/
|
|
116
|
+
async openConnection(info = {}) {
|
|
117
|
+
if (this.connectionId) {
|
|
118
|
+
throw new Error('CIP connection is already open');
|
|
119
|
+
}
|
|
120
|
+
const connectionId = randomUUID();
|
|
121
|
+
await this.sendRequest('OpenConnectionRequest', { connectionId, info });
|
|
122
|
+
this.connectionId = connectionId;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Closes the current Avatica connection (no-op if not open).
|
|
126
|
+
*/
|
|
127
|
+
async closeConnection() {
|
|
128
|
+
if (!this.connectionId) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const connectionId = this.connectionId;
|
|
132
|
+
try {
|
|
133
|
+
await this.sendRequest('CloseConnectionRequest', { connectionId });
|
|
134
|
+
}
|
|
135
|
+
finally {
|
|
136
|
+
this.connectionId = undefined;
|
|
137
|
+
this.sessionId = undefined;
|
|
138
|
+
this.signatureByStatementId.clear();
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Creates a statement in the currently open connection.
|
|
143
|
+
*/
|
|
144
|
+
async createStatement() {
|
|
145
|
+
this.requireConnection();
|
|
146
|
+
const response = (await this.sendRequest('CreateStatementRequest', {
|
|
147
|
+
connectionId: this.connectionId,
|
|
148
|
+
}));
|
|
149
|
+
if (typeof response.statementId !== 'number') {
|
|
150
|
+
throw new Error('CIP create statement failed: missing statement id');
|
|
151
|
+
}
|
|
152
|
+
return response.statementId;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Closes a statement.
|
|
156
|
+
*/
|
|
157
|
+
async closeStatement(statementId) {
|
|
158
|
+
this.requireConnection();
|
|
159
|
+
try {
|
|
160
|
+
await this.sendRequest('CloseStatementRequest', {
|
|
161
|
+
connectionId: this.connectionId,
|
|
162
|
+
statementId,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
finally {
|
|
166
|
+
this.signatureByStatementId.delete(statementId);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Executes SQL and returns the first decoded frame.
|
|
171
|
+
*/
|
|
172
|
+
async execute(statementId, sql, firstFrameMaxSize = 1000) {
|
|
173
|
+
this.requireConnection();
|
|
174
|
+
getLogger().debug({ statementId, sql }, `[CIP SQL] statement=${statementId}`);
|
|
175
|
+
const response = (await this.sendRequest('PrepareAndExecuteRequest', {
|
|
176
|
+
connectionId: this.connectionId,
|
|
177
|
+
statementId,
|
|
178
|
+
sql,
|
|
179
|
+
maxRowCount: firstFrameMaxSize,
|
|
180
|
+
firstFrameMaxSize,
|
|
181
|
+
}));
|
|
182
|
+
const result = response.results?.[0];
|
|
183
|
+
if (!result) {
|
|
184
|
+
return { statementId };
|
|
185
|
+
}
|
|
186
|
+
const resolvedStatementId = result.statementId ?? statementId;
|
|
187
|
+
if (result.signature) {
|
|
188
|
+
this.signatureByStatementId.set(resolvedStatementId, result.signature);
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
statementId: resolvedStatementId,
|
|
192
|
+
frame: this.decodeFrame(result.signature ?? this.signatureByStatementId.get(resolvedStatementId), result.firstFrame),
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Fetches an additional frame for an existing statement.
|
|
197
|
+
*/
|
|
198
|
+
async fetch(statementId, offset, fetchMaxRowCount = 1000) {
|
|
199
|
+
this.requireConnection();
|
|
200
|
+
const response = (await this.sendRequest('FetchRequest', {
|
|
201
|
+
connectionId: this.connectionId,
|
|
202
|
+
statementId,
|
|
203
|
+
offset,
|
|
204
|
+
fetchMaxRowCount,
|
|
205
|
+
}));
|
|
206
|
+
return {
|
|
207
|
+
frame: this.decodeFrame(this.signatureByStatementId.get(statementId), response.frame),
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Executes SQL and returns the full decoded row set.
|
|
212
|
+
*
|
|
213
|
+
* This helper opens and closes the connection automatically.
|
|
214
|
+
*/
|
|
215
|
+
async query(sql, options = {}) {
|
|
216
|
+
const fetchSize = options.fetchSize ?? 1000;
|
|
217
|
+
const rows = [];
|
|
218
|
+
let columns = [];
|
|
219
|
+
await this.openConnection(options.connectionProperties);
|
|
220
|
+
const statementId = await this.createStatement();
|
|
221
|
+
try {
|
|
222
|
+
const executeResponse = await this.execute(statementId, sql, fetchSize);
|
|
223
|
+
let frame = executeResponse.frame;
|
|
224
|
+
if (frame) {
|
|
225
|
+
rows.push(...frame.rows);
|
|
226
|
+
columns = frame.columns.map((column) => column.label);
|
|
227
|
+
}
|
|
228
|
+
while (frame && !frame.done) {
|
|
229
|
+
const nextOffset = frame.offset + frame.rows.length;
|
|
230
|
+
const fetchResponse = await this.fetch(executeResponse.statementId, nextOffset, fetchSize);
|
|
231
|
+
frame = fetchResponse.frame;
|
|
232
|
+
if (frame) {
|
|
233
|
+
rows.push(...frame.rows);
|
|
234
|
+
if (columns.length === 0) {
|
|
235
|
+
columns = frame.columns.map((column) => column.label);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return {
|
|
240
|
+
columns,
|
|
241
|
+
rows,
|
|
242
|
+
rowCount: rows.length,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
finally {
|
|
246
|
+
await this.closeStatement(statementId).catch((error) => {
|
|
247
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
248
|
+
getLogger().debug({ error: message }, 'Failed to close CIP statement during cleanup');
|
|
249
|
+
});
|
|
250
|
+
await this.closeConnection().catch((error) => {
|
|
251
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
252
|
+
getLogger().debug({ error: message }, 'Failed to close CIP connection during cleanup');
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
requireConnection() {
|
|
257
|
+
if (!this.connectionId) {
|
|
258
|
+
throw new Error('No CIP connection is open. Call openConnection() first.');
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
getMiddleware() {
|
|
262
|
+
return this.middlewareRegistry.getMiddleware('cip');
|
|
263
|
+
}
|
|
264
|
+
async getProtoRoot() {
|
|
265
|
+
if (!this.protoRoot) {
|
|
266
|
+
this.protoRoot = await protobuf.load(CIP_PROTO_FILES);
|
|
267
|
+
}
|
|
268
|
+
return this.protoRoot;
|
|
269
|
+
}
|
|
270
|
+
async sendRequest(requestTypeName, payload) {
|
|
271
|
+
const logger = getLogger();
|
|
272
|
+
const root = await this.getProtoRoot();
|
|
273
|
+
const requestType = root.lookupType(requestTypeName);
|
|
274
|
+
const requestMessage = requestType.create(payload);
|
|
275
|
+
const serializedRequest = requestType.encode(requestMessage).finish();
|
|
276
|
+
const wireType = root.lookupType('WireMessage');
|
|
277
|
+
const wireRequest = wireType.create({
|
|
278
|
+
name: `org.apache.calcite.avatica.proto.Requests$${requestTypeName}`,
|
|
279
|
+
wrappedMessage: serializedRequest,
|
|
280
|
+
});
|
|
281
|
+
const serializedWireRequest = wireType.encode(wireRequest).finish();
|
|
282
|
+
let request = new Request(this.baseUrl, {
|
|
283
|
+
method: 'POST',
|
|
284
|
+
headers: {
|
|
285
|
+
'Content-Type': 'application/x-protobuf',
|
|
286
|
+
'X-Client-Version': CIP_CLIENT_VERSION,
|
|
287
|
+
InstanceId: this.config.instance,
|
|
288
|
+
...(this.sessionId ? { 'x-session-id': this.sessionId } : {}),
|
|
289
|
+
},
|
|
290
|
+
body: serializedWireRequest,
|
|
291
|
+
});
|
|
292
|
+
const middleware = this.getMiddleware();
|
|
293
|
+
const middlewareParams = {
|
|
294
|
+
request,
|
|
295
|
+
schemaPath: '/cip',
|
|
296
|
+
options: { baseUrl: this.baseUrl },
|
|
297
|
+
params: {},
|
|
298
|
+
id: 'cip',
|
|
299
|
+
};
|
|
300
|
+
for (const middlewareItem of middleware) {
|
|
301
|
+
if (!middlewareItem.onRequest)
|
|
302
|
+
continue;
|
|
303
|
+
const nextRequest = await middlewareItem.onRequest(middlewareParams);
|
|
304
|
+
if (nextRequest instanceof Request) {
|
|
305
|
+
request = nextRequest;
|
|
306
|
+
middlewareParams.request = nextRequest;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
let body = serializedWireRequest;
|
|
310
|
+
if (request.body) {
|
|
311
|
+
body = await request.clone().arrayBuffer();
|
|
312
|
+
}
|
|
313
|
+
const requestStartTime = Date.now();
|
|
314
|
+
logger.debug({ type: requestTypeName, url: request.url }, `[CIP REQ] ${requestTypeName}`);
|
|
315
|
+
logger.trace({
|
|
316
|
+
method: request.method,
|
|
317
|
+
url: request.url,
|
|
318
|
+
headers: this.headersToObject(request.headers),
|
|
319
|
+
body: this.formatProtobufBody(body, {
|
|
320
|
+
requestTypeName,
|
|
321
|
+
wireMessageName: `org.apache.calcite.avatica.proto.Requests$${requestTypeName}`,
|
|
322
|
+
payload,
|
|
323
|
+
}),
|
|
324
|
+
}, `[CIP REQ BODY] ${request.method} ${request.url}`);
|
|
325
|
+
let response = await this.auth.fetch(request.url, {
|
|
326
|
+
method: request.method,
|
|
327
|
+
headers: request.headers,
|
|
328
|
+
body,
|
|
329
|
+
});
|
|
330
|
+
const duration = Date.now() - requestStartTime;
|
|
331
|
+
const responseParams = {
|
|
332
|
+
...middlewareParams,
|
|
333
|
+
request,
|
|
334
|
+
response,
|
|
335
|
+
};
|
|
336
|
+
for (const middlewareItem of middleware) {
|
|
337
|
+
if (!middlewareItem.onResponse)
|
|
338
|
+
continue;
|
|
339
|
+
const nextResponse = await middlewareItem.onResponse(responseParams);
|
|
340
|
+
if (nextResponse instanceof Response) {
|
|
341
|
+
response = nextResponse;
|
|
342
|
+
responseParams.response = nextResponse;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
const sessionId = response.headers.get('x-session-id');
|
|
346
|
+
if (sessionId) {
|
|
347
|
+
this.sessionId = sessionId;
|
|
348
|
+
}
|
|
349
|
+
if (!response.ok) {
|
|
350
|
+
const bodyText = await response.text();
|
|
351
|
+
logger.debug({ method: request.method, url: request.url, status: response.status, duration }, `[CIP RESP] ${requestTypeName} ${response.status} ${duration}ms`);
|
|
352
|
+
logger.trace({
|
|
353
|
+
method: request.method,
|
|
354
|
+
url: request.url,
|
|
355
|
+
status: response.status,
|
|
356
|
+
headers: this.headersToObject(response.headers),
|
|
357
|
+
body: bodyText,
|
|
358
|
+
}, `[CIP RESP BODY] ${request.method} ${request.url}`);
|
|
359
|
+
throw new Error(`CIP Avatica request failed (${response.status} ${response.statusText}): ${bodyText}`);
|
|
360
|
+
}
|
|
361
|
+
const responseBytes = new Uint8Array(await response.arrayBuffer());
|
|
362
|
+
const wireResponse = wireType.decode(responseBytes);
|
|
363
|
+
const responseClassName = wireResponse.name ?? '';
|
|
364
|
+
const responseTypeName = responseClassName.split('$').pop() ?? '';
|
|
365
|
+
const wrappedResponse = wireResponse.wrappedMessage;
|
|
366
|
+
logger.debug({ method: request.method, url: request.url, status: response.status, duration, responseTypeName }, `[CIP RESP] ${requestTypeName} ${response.status} ${duration}ms`);
|
|
367
|
+
logger.trace({
|
|
368
|
+
method: request.method,
|
|
369
|
+
url: request.url,
|
|
370
|
+
status: response.status,
|
|
371
|
+
headers: this.headersToObject(response.headers),
|
|
372
|
+
body: this.formatProtobufBody(responseBytes, {
|
|
373
|
+
wireMessageName: wireResponse.name,
|
|
374
|
+
responseTypeName,
|
|
375
|
+
}),
|
|
376
|
+
}, `[CIP RESP BODY] ${request.method} ${request.url}`);
|
|
377
|
+
if (!wrappedResponse) {
|
|
378
|
+
throw new Error('CIP Avatica response did not contain a wrapped protobuf message');
|
|
379
|
+
}
|
|
380
|
+
if (responseTypeName === 'ErrorResponse') {
|
|
381
|
+
const errorType = root.lookupType('ErrorResponse');
|
|
382
|
+
const decodedError = errorType.decode(wrappedResponse);
|
|
383
|
+
const errorMessage = decodedError.errorMessage ?? 'Unknown Avatica error';
|
|
384
|
+
const sqlState = decodedError.sqlState ? ` SQLState=${decodedError.sqlState}` : '';
|
|
385
|
+
const errorCode = decodedError.errorCode !== undefined ? ` ErrorCode=${decodedError.errorCode}` : '';
|
|
386
|
+
throw new Error(`CIP Avatica error: ${errorMessage}${sqlState}${errorCode}`);
|
|
387
|
+
}
|
|
388
|
+
const responseType = root.lookupType(responseTypeName);
|
|
389
|
+
return responseType.decode(wrappedResponse);
|
|
390
|
+
}
|
|
391
|
+
decodeFrame(signature, frame) {
|
|
392
|
+
if (!frame) {
|
|
393
|
+
return undefined;
|
|
394
|
+
}
|
|
395
|
+
const columns = this.getColumnsFromSignature(signature);
|
|
396
|
+
const rows = (frame.rows ?? []).map((row) => {
|
|
397
|
+
const values = Array.isArray(row.value) ? row.value : [];
|
|
398
|
+
const decoded = {};
|
|
399
|
+
for (let index = 0; index < columns.length; index++) {
|
|
400
|
+
const column = columns[index];
|
|
401
|
+
const value = values[index];
|
|
402
|
+
const columnMeta = signature?.columns?.[index];
|
|
403
|
+
decoded[column.label] = this.decodeColumnValue(value, columnMeta);
|
|
404
|
+
}
|
|
405
|
+
return decoded;
|
|
406
|
+
});
|
|
407
|
+
return {
|
|
408
|
+
offset: toNumber(frame.offset),
|
|
409
|
+
done: Boolean(frame.done),
|
|
410
|
+
columns,
|
|
411
|
+
rows,
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
getColumnsFromSignature(signature) {
|
|
415
|
+
const columns = signature?.columns;
|
|
416
|
+
if (!columns || columns.length === 0) {
|
|
417
|
+
return [];
|
|
418
|
+
}
|
|
419
|
+
return columns.map((column, index) => {
|
|
420
|
+
const label = typeof column.label === 'string' && column.label.length > 0 ? column.label : undefined;
|
|
421
|
+
const columnName = typeof column.columnName === 'string' && column.columnName.length > 0 ? column.columnName : undefined;
|
|
422
|
+
return {
|
|
423
|
+
label: label ?? columnName ?? `column_${index + 1}`,
|
|
424
|
+
name: columnName,
|
|
425
|
+
typeName: this.getColumnTypeName(column),
|
|
426
|
+
};
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
getColumnTypeName(column) {
|
|
430
|
+
if (typeof column.type === 'object' &&
|
|
431
|
+
column.type !== null &&
|
|
432
|
+
typeof column.type.name === 'string') {
|
|
433
|
+
return column.type.name;
|
|
434
|
+
}
|
|
435
|
+
return undefined;
|
|
436
|
+
}
|
|
437
|
+
decodeColumnValue(columnValue, columnMetadata) {
|
|
438
|
+
if (!columnValue) {
|
|
439
|
+
return null;
|
|
440
|
+
}
|
|
441
|
+
if (columnValue.hasArrayValue === true && Array.isArray(columnValue.arrayValue)) {
|
|
442
|
+
return columnValue.arrayValue.map((value) => this.decodeTypedValue(value, columnMetadata));
|
|
443
|
+
}
|
|
444
|
+
if (typeof columnValue.scalarValue === 'object' && columnValue.scalarValue !== null) {
|
|
445
|
+
return this.decodeTypedValue(columnValue.scalarValue, columnMetadata);
|
|
446
|
+
}
|
|
447
|
+
if (Array.isArray(columnValue.value) && columnValue.value.length > 0) {
|
|
448
|
+
return this.decodeTypedValue(columnValue.value[0], columnMetadata);
|
|
449
|
+
}
|
|
450
|
+
return null;
|
|
451
|
+
}
|
|
452
|
+
decodeTypedValue(typedValue, columnMetadata) {
|
|
453
|
+
if (typeof typedValue !== 'object' || typedValue === null) {
|
|
454
|
+
return null;
|
|
455
|
+
}
|
|
456
|
+
const typed = typedValue;
|
|
457
|
+
const rep = hasOwn(typed, 'type') ? toNumber(typed.type) : undefined;
|
|
458
|
+
if (typed.null === true || typed.implicitlyNull === true) {
|
|
459
|
+
return null;
|
|
460
|
+
}
|
|
461
|
+
if (rep === REP.ARRAY && Array.isArray(typed.arrayValue)) {
|
|
462
|
+
return typed.arrayValue.map((value) => this.decodeTypedValue(value, undefined));
|
|
463
|
+
}
|
|
464
|
+
if (rep === REP.BOOLEAN || rep === REP.PRIMITIVE_BOOLEAN) {
|
|
465
|
+
return Boolean(typed.boolValue);
|
|
466
|
+
}
|
|
467
|
+
if (rep === REP.STRING) {
|
|
468
|
+
return hasOwn(typed, 'stringValue') ? typed.stringValue : '';
|
|
469
|
+
}
|
|
470
|
+
if (rep === REP.LONG ||
|
|
471
|
+
rep === REP.INTEGER ||
|
|
472
|
+
rep === REP.PRIMITIVE_INT ||
|
|
473
|
+
rep === REP.PRIMITIVE_LONG ||
|
|
474
|
+
rep === REP.NUMBER ||
|
|
475
|
+
rep === REP.BIG_INTEGER) {
|
|
476
|
+
return this.decodeNumericValue(typed.numberValue, columnMetadata);
|
|
477
|
+
}
|
|
478
|
+
if (rep === REP.FLOAT || rep === REP.DOUBLE || rep === REP.PRIMITIVE_FLOAT || rep === REP.PRIMITIVE_DOUBLE) {
|
|
479
|
+
return hasOwn(typed, 'doubleValue') ? Number(typed.doubleValue) : Number(typed.numberValue ?? 0);
|
|
480
|
+
}
|
|
481
|
+
if (rep === REP.BIG_DECIMAL) {
|
|
482
|
+
if (hasOwn(typed, 'stringValue') && typeof typed.stringValue === 'string') {
|
|
483
|
+
return Number.parseFloat(typed.stringValue);
|
|
484
|
+
}
|
|
485
|
+
return Number(typed.doubleValue ?? typed.numberValue ?? 0);
|
|
486
|
+
}
|
|
487
|
+
if (rep === REP.BYTE_STRING && typed.bytesValue instanceof Uint8Array) {
|
|
488
|
+
return Buffer.from(typed.bytesValue).toString('base64');
|
|
489
|
+
}
|
|
490
|
+
if (rep === REP.JAVA_SQL_DATE || rep === REP.JAVA_UTIL_DATE || rep === REP.JAVA_SQL_TIMESTAMP) {
|
|
491
|
+
return new Date(toNumber(typed.numberValue));
|
|
492
|
+
}
|
|
493
|
+
if (rep === REP.JAVA_SQL_TIME) {
|
|
494
|
+
return toNumber(typed.numberValue);
|
|
495
|
+
}
|
|
496
|
+
if (hasOwn(typed, 'stringValue')) {
|
|
497
|
+
return typed.stringValue;
|
|
498
|
+
}
|
|
499
|
+
if (hasOwn(typed, 'doubleValue')) {
|
|
500
|
+
return Number(typed.doubleValue);
|
|
501
|
+
}
|
|
502
|
+
if (hasOwn(typed, 'numberValue')) {
|
|
503
|
+
return Number(typed.numberValue);
|
|
504
|
+
}
|
|
505
|
+
if (hasOwn(typed, 'boolValue')) {
|
|
506
|
+
return Boolean(typed.boolValue);
|
|
507
|
+
}
|
|
508
|
+
return null;
|
|
509
|
+
}
|
|
510
|
+
decodeNumericValue(value, columnMetadata) {
|
|
511
|
+
const numeric = toNumber(value);
|
|
512
|
+
if (typeof columnMetadata === 'object' && columnMetadata !== null) {
|
|
513
|
+
const column = columnMetadata;
|
|
514
|
+
const typeName = typeof column.type?.name === 'string' ? column.type.name.toUpperCase() : undefined;
|
|
515
|
+
const typeId = column.type?.id !== undefined ? toNumber(column.type.id) : undefined;
|
|
516
|
+
if (typeName === 'DATE' || typeId === 91) {
|
|
517
|
+
return new Date(numeric * 24 * 60 * 60 * 1000);
|
|
518
|
+
}
|
|
519
|
+
if (typeName === 'TIMESTAMP' || typeId === 93) {
|
|
520
|
+
return new Date(numeric);
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
return numeric;
|
|
524
|
+
}
|
|
525
|
+
formatProtobufBody(body, metadata) {
|
|
526
|
+
if (!body) {
|
|
527
|
+
return undefined;
|
|
528
|
+
}
|
|
529
|
+
const bytes = body instanceof Uint8Array ? body : new Uint8Array(body);
|
|
530
|
+
const preview = bytes.subarray(0, PROTOBUF_PREVIEW_BYTES);
|
|
531
|
+
return {
|
|
532
|
+
kind: 'protobuf',
|
|
533
|
+
sizeBytes: bytes.byteLength,
|
|
534
|
+
previewHex: Buffer.from(preview).toString('hex'),
|
|
535
|
+
previewBase64: Buffer.from(preview).toString('base64'),
|
|
536
|
+
previewSize: preview.byteLength,
|
|
537
|
+
truncated: bytes.byteLength > preview.byteLength,
|
|
538
|
+
...metadata,
|
|
539
|
+
};
|
|
540
|
+
}
|
|
541
|
+
headersToObject(headers) {
|
|
542
|
+
const result = {};
|
|
543
|
+
headers.forEach((value, key) => {
|
|
544
|
+
result[key] = value;
|
|
545
|
+
});
|
|
546
|
+
return result;
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
/**
|
|
550
|
+
* Creates a CIP client and ensures the required CIP scope on OAuth strategies.
|
|
551
|
+
*
|
|
552
|
+
* @example
|
|
553
|
+
* ```ts
|
|
554
|
+
* import {OAuthStrategy} from '@salesforce/b2c-tooling-sdk/auth';
|
|
555
|
+
* import {createCipClient} from '@salesforce/b2c-tooling-sdk/clients';
|
|
556
|
+
*
|
|
557
|
+
* const auth = new OAuthStrategy({
|
|
558
|
+
* clientId: process.env.SFCC_CLIENT_ID!,
|
|
559
|
+
* clientSecret: process.env.SFCC_CLIENT_SECRET!,
|
|
560
|
+
* });
|
|
561
|
+
*
|
|
562
|
+
* const cip = createCipClient({instance: 'zzxy_prd'}, auth);
|
|
563
|
+
* const query = await cip.query('SELECT submit_date FROM ccdw_aggr_sales_summary LIMIT 1');
|
|
564
|
+
* ```
|
|
565
|
+
*/
|
|
566
|
+
export function createCipClient(config, auth) {
|
|
567
|
+
const cipScope = `SALESFORCE_COMMERCE_API:${config.instance}`;
|
|
568
|
+
const scopedAuth = auth instanceof OAuthStrategy ? auth.withAdditionalScopes([cipScope]) : auth;
|
|
569
|
+
return new CipClient(config, scopedAuth);
|
|
570
|
+
}
|
|
571
|
+
//# sourceMappingURL=cip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cip.js","sourceRoot":"","sources":["../../../src/clients/cip.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* - {@link OcapiClient} - Data API operations via OCAPI (openapi-fetch Client)
|
|
11
11
|
* - {@link SlasClient} - SLAS Admin API for managing tenants and clients
|
|
12
12
|
* - {@link OdsClient} - On-Demand Sandbox API for managing developer sandboxes
|
|
13
|
+
* - {@link CipClient} - B2C Commerce Intelligence (CIP/CCAC) query client
|
|
13
14
|
* - {@link CustomApisClient} - Custom APIs DX API for retrieving endpoint status
|
|
14
15
|
* - {@link ScapiSchemasClient} - SCAPI Schemas API for discovering and retrieving OpenAPI schemas
|
|
15
16
|
*
|
|
@@ -129,12 +130,14 @@ export { createCustomApisClient, toOrganizationId, toTenantId, buildTenantScope,
|
|
|
129
130
|
export type { CustomApisClient, CustomApisClientConfig, CustomApisError, CustomApisResponse, paths as CustomApisPaths, components as CustomApisComponents, } from './custom-apis.js';
|
|
130
131
|
export { createScapiSchemasClient, SCAPI_SCHEMAS_DEFAULT_SCOPES } from './scapi-schemas.js';
|
|
131
132
|
export type { ScapiSchemasClient, ScapiSchemasClientConfig, ScapiSchemasError, ScapiSchemasResponse, SchemaListItem, SchemaListResult, OpenApiSchema, paths as ScapiSchemasPaths, components as ScapiSchemasComponents, } from './scapi-schemas.js';
|
|
132
|
-
export { createAccountManagerClient, createAccountManagerUsersClient, getUser, listUsers, createUser, updateUser, deleteUser, purgeUser, resetUser, findUserByLogin,
|
|
133
|
-
export type { AccountManagerClient, AccountManagerClientConfig, AccountManagerUsersClient, AccountManagerUser, AccountManagerResponse, AccountManagerError, UserExpandOption, UserCreate, UserUpdate, UserCollection, UserState, ListUsersOptions, AccountManagerRolesClient, AccountManagerRole, AccountManagerRolesResponse, AccountManagerRolesError, RoleCollection, ListRolesOptions, AccountManagerApiClientsClient, AccountManagerApiClient, APIClientCreate, APIClientUpdate, APIClientCollection, ApiClientExpandOption, ListApiClientsOptions, AccountManagerOrgsClient, AccountManagerOrganization, OrganizationCollection, ListOrgsOptions, } from './am-api.js';
|
|
133
|
+
export { createAccountManagerClient, createAccountManagerUsersClient, getUser, listUsers, createUser, updateUser, deleteUser, purgeUser, resetUser, findUserByLogin, fetchRoleMapping, resolveToInternalRole, resolveFromInternalRole, createAccountManagerRolesClient, getRole, listRoles, createAccountManagerApiClientsClient, createAccountManagerOrgsClient, isValidRoleTenantFilter, ROLE_TENANT_FILTER_PATTERN, } from './am-api.js';
|
|
134
|
+
export type { AccountManagerClient, AccountManagerClientConfig, AccountManagerUsersClient, AccountManagerUser, AccountManagerResponse, AccountManagerError, UserExpandOption, UserCreate, UserUpdate, UserCollection, UserState, ListUsersOptions, AccountManagerRolesClient, AccountManagerRole, AccountManagerRolesResponse, AccountManagerRolesError, RoleCollection, ListRolesOptions, RoleMapping, OrgMapping, AccountManagerApiClientsClient, AccountManagerApiClient, APIClientCreate, APIClientUpdate, APIClientCollection, ApiClientExpandOption, ListApiClientsOptions, AccountManagerOrgsClient, AccountManagerOrganization, OrganizationCollection, ListOrgsOptions, } from './am-api.js';
|
|
134
135
|
export { createCdnZonesClient, CDN_ZONES_READ_SCOPES, CDN_ZONES_RW_SCOPES } from './cdn-zones.js';
|
|
135
136
|
export type { CdnZonesClient, CdnZonesClientConfig, CdnZonesClientOptions, CdnZonesError, CdnZonesResponse, Zone, ZonesEnvelope, Certificate, SecuritySetting, SpeedSetting, paths as CdnZonesPaths, components as CdnZonesComponents, } from './cdn-zones.js';
|
|
136
137
|
export { createMrtB2CClient, DEFAULT_MRT_B2C_ORIGIN } from './mrt-b2c.js';
|
|
137
138
|
export type { MrtB2CClient, MrtB2CClientConfig, MrtB2CError, MrtB2CResponse, B2COrgInfo, B2CTargetInfo, PatchedB2CTargetInfo, paths as MrtB2CPaths, components as MrtB2CComponents, } from './mrt-b2c.js';
|
|
139
|
+
export { createCipClient, CipClient, DEFAULT_CIP_HOST, DEFAULT_CIP_STAGING_HOST } from './cip.js';
|
|
140
|
+
export type { CipClientConfig, CipColumn, CipExecuteResponse, CipFetchResponse, CipFrame, CipQueryOptions, CipQueryResult, } from './cip.js';
|
|
138
141
|
export { getApiErrorMessage } from './error-utils.js';
|
|
139
142
|
export { createTlsDispatcher } from './tls-dispatcher.js';
|
|
140
143
|
export type { TlsOptions } from './tls-dispatcher.js';
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* - {@link OcapiClient} - Data API operations via OCAPI (openapi-fetch Client)
|
|
16
16
|
* - {@link SlasClient} - SLAS Admin API for managing tenants and clients
|
|
17
17
|
* - {@link OdsClient} - On-Demand Sandbox API for managing developer sandboxes
|
|
18
|
+
* - {@link CipClient} - B2C Commerce Intelligence (CIP/CCAC) query client
|
|
18
19
|
* - {@link CustomApisClient} - Custom APIs DX API for retrieving endpoint status
|
|
19
20
|
* - {@link ScapiSchemasClient} - SCAPI Schemas API for discovering and retrieving OpenAPI schemas
|
|
20
21
|
*
|
|
@@ -126,9 +127,10 @@ export { createOdsClient } from './ods.js';
|
|
|
126
127
|
export { createMrtClient, DEFAULT_MRT_ORIGIN } from './mrt.js';
|
|
127
128
|
export { createCustomApisClient, toOrganizationId, toTenantId, buildTenantScope, ORGANIZATION_ID_PREFIX, SCAPI_TENANT_SCOPE_PREFIX, CUSTOM_APIS_DEFAULT_SCOPES, } from './custom-apis.js';
|
|
128
129
|
export { createScapiSchemasClient, SCAPI_SCHEMAS_DEFAULT_SCOPES } from './scapi-schemas.js';
|
|
129
|
-
export { createAccountManagerClient, createAccountManagerUsersClient, getUser, listUsers, createUser, updateUser, deleteUser, purgeUser, resetUser, findUserByLogin,
|
|
130
|
+
export { createAccountManagerClient, createAccountManagerUsersClient, getUser, listUsers, createUser, updateUser, deleteUser, purgeUser, resetUser, findUserByLogin, fetchRoleMapping, resolveToInternalRole, resolveFromInternalRole, createAccountManagerRolesClient, getRole, listRoles, createAccountManagerApiClientsClient, createAccountManagerOrgsClient, isValidRoleTenantFilter, ROLE_TENANT_FILTER_PATTERN, } from './am-api.js';
|
|
130
131
|
export { createCdnZonesClient, CDN_ZONES_READ_SCOPES, CDN_ZONES_RW_SCOPES } from './cdn-zones.js';
|
|
131
132
|
export { createMrtB2CClient, DEFAULT_MRT_B2C_ORIGIN } from './mrt-b2c.js';
|
|
133
|
+
export { createCipClient, CipClient, DEFAULT_CIP_HOST, DEFAULT_CIP_STAGING_HOST } from './cip.js';
|
|
132
134
|
export { getApiErrorMessage } from './error-utils.js';
|
|
133
135
|
export { createTlsDispatcher } from './tls-dispatcher.js';
|
|
134
136
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/clients/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/clients/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgHG;AACH,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AAGzC,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,uBAAuB,EACvB,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AAQzB,iDAAiD;AACjD,OAAO,EAAC,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAC,MAAM,iBAAiB,CAAC;AAE9F,OAAO,EAAC,kBAAkB,EAAE,wBAAwB,EAAC,MAAM,0BAA0B,CAAC;AAGtF,OAAO,EAAC,iBAAiB,EAAC,MAAM,YAAY,CAAC;AAU7C,OAAO,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAUjD,OAAO,EAAC,eAAe,EAAC,MAAM,UAAU,CAAC;AAUzC,OAAO,EAAC,eAAe,EAAE,kBAAkB,EAAC,MAAM,UAAU,CAAC;AAW7D,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAU1B,OAAO,EAAC,wBAAwB,EAAE,4BAA4B,EAAC,MAAM,oBAAoB,CAAC;AAa1F,OAAO,EACL,0BAA0B,EAC1B,+BAA+B,EAC/B,OAAO,EACP,SAAS,EACT,UAAU,EACV,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,+BAA+B,EAC/B,OAAO,EACP,SAAS,EACT,oCAAoC,EACpC,8BAA8B,EAC9B,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AAmCrB,OAAO,EAAC,oBAAoB,EAAE,qBAAqB,EAAE,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;AAgBhG,OAAO,EAAC,kBAAkB,EAAE,sBAAsB,EAAC,MAAM,cAAc,CAAC;AAaxE,OAAO,EAAC,eAAe,EAAE,SAAS,EAAE,gBAAgB,EAAE,wBAAwB,EAAC,MAAM,UAAU,CAAC;AAWhG,OAAO,EAAC,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC"}
|