tm1npm 1.6.0 → 2.0.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 +89 -0
- package/lib/services/ApplicationService.d.ts.map +1 -1
- package/lib/services/AsyncOperationService.d.ts +8 -1
- package/lib/services/AsyncOperationService.d.ts.map +1 -1
- package/lib/services/AsyncOperationService.js +69 -26
- package/lib/services/FileService.d.ts.map +1 -1
- package/lib/services/ProcessService.d.ts +18 -13
- package/lib/services/ProcessService.d.ts.map +1 -1
- package/lib/services/ProcessService.js +28 -17
- package/lib/services/RestService.d.ts +213 -25
- package/lib/services/RestService.d.ts.map +1 -1
- package/lib/services/RestService.js +840 -271
- package/lib/services/TM1Service.d.ts +42 -1
- package/lib/services/TM1Service.d.ts.map +1 -1
- package/lib/services/TM1Service.js +94 -4
- package/lib/tests/asyncOperationService.test.js +51 -45
- package/lib/tests/processService.comprehensive.test.js +2 -2
- package/lib/tests/processService.test.js +20 -6
- package/lib/tests/restService.test.d.ts +0 -4
- package/lib/tests/restService.test.d.ts.map +1 -1
- package/lib/tests/restService.test.js +1558 -143
- package/lib/tests/tm1Service.test.js +80 -8
- package/package.json +1 -1
- package/src/services/ApplicationService.ts +4 -4
- package/src/services/AsyncOperationService.ts +76 -29
- package/src/services/FileService.ts +3 -3
- package/src/services/ProcessService.ts +67 -37
- package/src/services/RestService.ts +1020 -278
- package/src/services/TM1Service.ts +124 -6
- package/src/tests/asyncOperationService.test.ts +52 -48
- package/src/tests/processService.comprehensive.test.ts +3 -3
- package/src/tests/processService.test.ts +21 -9
- package/src/tests/restService.test.ts +1844 -139
- package/src/tests/tm1Service.test.ts +95 -11
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AxiosResponse, AxiosRequestConfig } from 'axios';
|
|
2
|
+
import * as https from 'https';
|
|
2
3
|
export declare enum AuthenticationMode {
|
|
3
4
|
BASIC = 1,
|
|
4
5
|
WIA = 2,
|
|
@@ -25,6 +26,9 @@ export interface RestServiceConfig {
|
|
|
25
26
|
timeout?: number;
|
|
26
27
|
cancelAtTimeout?: boolean;
|
|
27
28
|
asyncRequestsMode?: boolean;
|
|
29
|
+
asyncPollingInitialDelay?: number;
|
|
30
|
+
asyncPollingMaxDelay?: number;
|
|
31
|
+
asyncPollingBackoffFactor?: number;
|
|
28
32
|
connectionPoolSize?: number;
|
|
29
33
|
poolConnections?: number;
|
|
30
34
|
instance?: string;
|
|
@@ -36,21 +40,95 @@ export interface RestServiceConfig {
|
|
|
36
40
|
apiKey?: string;
|
|
37
41
|
accessToken?: string;
|
|
38
42
|
tenant?: string;
|
|
43
|
+
iamUrl?: string;
|
|
44
|
+
paUrl?: string;
|
|
45
|
+
cpdUrl?: string;
|
|
46
|
+
gateway?: string;
|
|
47
|
+
integratedLogin?: boolean;
|
|
48
|
+
integratedLoginDomain?: string;
|
|
49
|
+
integratedLoginService?: string;
|
|
50
|
+
integratedLoginHost?: string;
|
|
51
|
+
integratedLoginDelegate?: boolean;
|
|
52
|
+
proxies?: {
|
|
53
|
+
http?: string;
|
|
54
|
+
https?: string;
|
|
55
|
+
};
|
|
56
|
+
sslContext?: https.Agent;
|
|
57
|
+
cert?: string | [string, string];
|
|
58
|
+
reConnectOnSessionTimeout?: boolean;
|
|
59
|
+
reConnectOnRemoteDisconnect?: boolean;
|
|
60
|
+
remoteDisconnectMaxRetries?: number;
|
|
61
|
+
remoteDisconnectRetryDelay?: number;
|
|
62
|
+
remoteDisconnectMaxDelay?: number;
|
|
63
|
+
}
|
|
64
|
+
export interface RequestOptions extends Omit<AxiosRequestConfig, 'timeout'> {
|
|
65
|
+
asyncRequestsMode?: boolean;
|
|
66
|
+
returnAsyncId?: boolean;
|
|
67
|
+
timeout?: number;
|
|
68
|
+
cancelAtTimeout?: boolean;
|
|
69
|
+
idempotent?: boolean;
|
|
70
|
+
verifyResponse?: boolean;
|
|
39
71
|
}
|
|
40
72
|
export declare class RestService {
|
|
41
73
|
private static readonly HEADERS;
|
|
42
74
|
private static readonly DEFAULT_CONNECTION_POOL_SIZE;
|
|
43
75
|
private static readonly DEFAULT_POOL_CONNECTIONS;
|
|
76
|
+
private static readonly SESSION_COOKIE_NAMES;
|
|
44
77
|
private axiosInstance;
|
|
45
78
|
private config;
|
|
46
|
-
private
|
|
79
|
+
private sessionCookies;
|
|
47
80
|
private sandboxName?;
|
|
48
81
|
private isConnected;
|
|
49
82
|
private _serverVersion?;
|
|
83
|
+
private _asyncRequestsMode;
|
|
84
|
+
private _cancelAtTimeout;
|
|
85
|
+
private _timeout;
|
|
86
|
+
private _asyncPollingInitialDelay;
|
|
87
|
+
private _asyncPollingMaxDelay;
|
|
88
|
+
private _asyncPollingBackoffFactor;
|
|
89
|
+
private _reConnectOnSessionTimeout;
|
|
90
|
+
private _reConnectOnRemoteDisconnect;
|
|
91
|
+
private _remoteDisconnectMaxRetries;
|
|
92
|
+
private _remoteDisconnectRetryDelay;
|
|
93
|
+
private _remoteDisconnectMaxDelay;
|
|
94
|
+
private _isAdmin?;
|
|
95
|
+
private _isDataAdmin?;
|
|
96
|
+
private _isSecurityAdmin?;
|
|
97
|
+
private _isOpsAdmin?;
|
|
98
|
+
private _activeUserGroupsPromise?;
|
|
50
99
|
get version(): string | undefined;
|
|
100
|
+
get isAdmin(): boolean;
|
|
101
|
+
get isDataAdmin(): boolean;
|
|
102
|
+
get isSecurityAdmin(): boolean;
|
|
103
|
+
get isOpsAdmin(): boolean;
|
|
51
104
|
constructor(config: RestServiceConfig);
|
|
105
|
+
private getSessionCookieValue;
|
|
106
|
+
private buildCookieHeader;
|
|
107
|
+
private parseSetCookieHeaders;
|
|
108
|
+
private removeAuthorizationHeader;
|
|
109
|
+
private deleteHeaderCaseInsensitive;
|
|
52
110
|
private setupAxiosInstance;
|
|
53
111
|
private buildBaseUrl;
|
|
112
|
+
/**
|
|
113
|
+
* Pick the deployment topology based on the provided config, mirroring
|
|
114
|
+
* tm1py's _determine_auth_mode + _construct_service_and_auth_root dispatch.
|
|
115
|
+
*
|
|
116
|
+
* Note: authUrl is intentionally excluded from the v12 signal set because
|
|
117
|
+
* tm1npm historically uses authUrl for CAM SSO (unlike tm1py, where auth_url
|
|
118
|
+
* is a v12-only field). apiKey is also excluded to avoid collision with the
|
|
119
|
+
* existing BASIC_API_KEY auth flow.
|
|
120
|
+
*/
|
|
121
|
+
private determineTopology;
|
|
122
|
+
/**
|
|
123
|
+
* Resolve the TM1 service root and auth root URLs for the configured topology.
|
|
124
|
+
* Mirrors tm1py's _construct_service_and_auth_root return tuple.
|
|
125
|
+
*/
|
|
126
|
+
private resolveRoots;
|
|
127
|
+
private rootsV11;
|
|
128
|
+
private rootsIbmCloud;
|
|
129
|
+
private rootsPaProxy;
|
|
130
|
+
private rootsS2s;
|
|
131
|
+
private rootsFromBaseUrl;
|
|
54
132
|
private setupInterceptors;
|
|
55
133
|
/**
|
|
56
134
|
* Determine if a request should be retried
|
|
@@ -61,42 +139,118 @@ export declare class RestService {
|
|
|
61
139
|
*/
|
|
62
140
|
private canRetryRequest;
|
|
63
141
|
/**
|
|
64
|
-
* Retry a failed request with exponential backoff
|
|
142
|
+
* Retry a failed request with exponential backoff, reconnecting the
|
|
143
|
+
* session before replay. Mirrors tm1py's _handle_remote_disconnect,
|
|
144
|
+
* which calls _manage_http_adapter() + connect() prior to retrying
|
|
145
|
+
* so a dropped session is re-established rather than replayed dead.
|
|
65
146
|
*/
|
|
66
147
|
private retryRequest;
|
|
67
148
|
private extractErrorMessage;
|
|
149
|
+
private waitTimeGenerator;
|
|
150
|
+
private _executeSyncRequest;
|
|
151
|
+
private _executeAsyncRequest;
|
|
152
|
+
private _pollAsyncResponse;
|
|
153
|
+
private _request;
|
|
68
154
|
connect(): Promise<void>;
|
|
69
155
|
disconnect(): Promise<void>;
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
156
|
+
/**
|
|
157
|
+
* When `returnAsyncId: true`, the caller receives the async id string
|
|
158
|
+
* iff the server returns `202 Accepted`. If TM1 short-circuits with
|
|
159
|
+
* `200/201`, the full `AxiosResponse` is returned instead — the
|
|
160
|
+
* declared `Promise<string>` return type is a best-effort narrowing.
|
|
161
|
+
*/
|
|
162
|
+
get(url: string, options: RequestOptions & {
|
|
163
|
+
returnAsyncId: true;
|
|
164
|
+
}): Promise<string | AxiosResponse>;
|
|
165
|
+
get(url: string, options?: RequestOptions): Promise<AxiosResponse>;
|
|
166
|
+
post(url: string, data: any, options: RequestOptions & {
|
|
167
|
+
returnAsyncId: true;
|
|
168
|
+
}): Promise<string | AxiosResponse>;
|
|
169
|
+
post(url: string, data?: any, options?: RequestOptions): Promise<AxiosResponse>;
|
|
170
|
+
patch(url: string, data: any, options: RequestOptions & {
|
|
171
|
+
returnAsyncId: true;
|
|
172
|
+
}): Promise<string | AxiosResponse>;
|
|
173
|
+
patch(url: string, data?: any, options?: RequestOptions): Promise<AxiosResponse>;
|
|
174
|
+
put(url: string, data: any, options: RequestOptions & {
|
|
175
|
+
returnAsyncId: true;
|
|
176
|
+
}): Promise<string | AxiosResponse>;
|
|
177
|
+
put(url: string, data?: any, options?: RequestOptions): Promise<AxiosResponse>;
|
|
178
|
+
delete(url: string, options: RequestOptions & {
|
|
179
|
+
returnAsyncId: true;
|
|
180
|
+
}): Promise<string | AxiosResponse>;
|
|
181
|
+
delete(url: string, options?: RequestOptions): Promise<AxiosResponse>;
|
|
75
182
|
getSessionId(): string | undefined;
|
|
76
183
|
setSandbox(sandboxName?: string): void;
|
|
77
184
|
getSandbox(): string | undefined;
|
|
78
185
|
isLoggedIn(): boolean;
|
|
79
186
|
getApiMetadata(): Promise<any>;
|
|
80
187
|
/**
|
|
81
|
-
*
|
|
188
|
+
* Build an httpsAgent option that skips TLS verification when verify is false.
|
|
82
189
|
*/
|
|
83
|
-
private
|
|
190
|
+
private static insecureAgentOption;
|
|
191
|
+
/**
|
|
192
|
+
* Normalise a Set-Cookie header value (string | string[] | undefined) into a string[].
|
|
193
|
+
*/
|
|
194
|
+
private static normaliseSetCookie;
|
|
195
|
+
/**
|
|
196
|
+
* Extract a named cookie value from raw Set-Cookie headers.
|
|
197
|
+
*/
|
|
198
|
+
private static extractCookieValue;
|
|
199
|
+
/**
|
|
200
|
+
* Build Basic Authorization header.
|
|
201
|
+
* Mirrors tm1py's _build_authorization_token_basic.
|
|
202
|
+
*/
|
|
203
|
+
private static _buildAuthorizationTokenBasic;
|
|
204
|
+
/**
|
|
205
|
+
* Build CAMNamespace Authorization header.
|
|
206
|
+
* Mirrors tm1py's _build_authorization_token_cam (non-gateway path).
|
|
207
|
+
*/
|
|
208
|
+
private static _buildAuthorizationTokenCam;
|
|
84
209
|
/**
|
|
85
|
-
*
|
|
210
|
+
* Build CAMPassport Authorization token via gateway SSO.
|
|
211
|
+
* Mirrors tm1py's _build_authorization_token_cam (gateway path).
|
|
212
|
+
* Makes a GET request to the gateway URL with CAMNamespace as a query
|
|
213
|
+
* parameter and extracts the cam_passport cookie from the response.
|
|
214
|
+
*
|
|
215
|
+
* Note: tm1py uses HttpNegotiateAuth (NTLM/Kerberos) for gateway requests,
|
|
216
|
+
* which is Windows-only. This implementation sends a plain GET and relies on
|
|
217
|
+
* the gateway being accessible without NTLM. For environments requiring NTLM,
|
|
218
|
+
* pass a pre-obtained cam_passport via config.camPassport instead.
|
|
86
219
|
*/
|
|
87
|
-
private
|
|
220
|
+
private static _buildAuthorizationTokenCamSso;
|
|
88
221
|
/**
|
|
89
|
-
*
|
|
222
|
+
* Generate IBM IAM Cloud access token.
|
|
223
|
+
* Mirrors tm1py's _generate_ibm_iam_cloud_access_token.
|
|
90
224
|
*/
|
|
91
|
-
private
|
|
225
|
+
private _generateIbmIamCloudAccessToken;
|
|
92
226
|
/**
|
|
93
|
-
*
|
|
227
|
+
* Generate CPD (Cloud Pak for Data) access token.
|
|
228
|
+
* Mirrors tm1py's _generate_cpd_access_token.
|
|
94
229
|
*/
|
|
95
|
-
private
|
|
230
|
+
private _generateCpdAccessToken;
|
|
96
231
|
/**
|
|
97
|
-
*
|
|
232
|
+
* Authenticate with PA Proxy using a CPD JWT token.
|
|
233
|
+
* Mirrors tm1py's PA_PROXY flow in _start_session.
|
|
234
|
+
*/
|
|
235
|
+
private _authenticateWithPaProxy;
|
|
236
|
+
/**
|
|
237
|
+
* Authenticate Service-to-Service (v12).
|
|
238
|
+
* Mirrors tm1py's SERVICE_TO_SERVICE flow in _start_session:
|
|
239
|
+
* Uses Basic auth with applicationClientId:applicationClientSecret,
|
|
240
|
+
* then POSTs {"User": user} to the auth endpoint.
|
|
241
|
+
*/
|
|
242
|
+
private _authenticateServiceToService;
|
|
243
|
+
/**
|
|
244
|
+
* Determine the authentication mode from config.
|
|
245
|
+
* Mirrors tm1py's _determine_auth_mode, using the URL topology as the
|
|
246
|
+
* primary discriminator for v12 modes.
|
|
98
247
|
*/
|
|
99
248
|
getAuthenticationMode(): AuthenticationMode;
|
|
249
|
+
/**
|
|
250
|
+
* Set up authentication based on configuration.
|
|
251
|
+
* Mirrors tm1py's _start_session routing.
|
|
252
|
+
*/
|
|
253
|
+
private setupAuthentication;
|
|
100
254
|
/**
|
|
101
255
|
* Re-authenticate using stored configuration
|
|
102
256
|
*/
|
|
@@ -162,19 +316,27 @@ export declare class RestService {
|
|
|
162
316
|
*/
|
|
163
317
|
set_version(version: string): void;
|
|
164
318
|
/**
|
|
165
|
-
*
|
|
319
|
+
* Fetch the active user's group names as a CaseAndSpaceInsensitiveSet so
|
|
320
|
+
* membership tests are case- and whitespace-insensitive (mirrors tm1py).
|
|
321
|
+
* Concurrent callers (e.g. Promise.all([is_admin(), is_data_admin(), ...]))
|
|
322
|
+
* coalesce onto a single in-flight request.
|
|
323
|
+
*/
|
|
324
|
+
private fetchActiveUserGroupNames;
|
|
325
|
+
/**
|
|
326
|
+
* Check if current user is admin. Result is cached after the first
|
|
327
|
+
* computation, and pre-populated when the configured user is ADMIN.
|
|
166
328
|
*/
|
|
167
329
|
is_admin(): Promise<boolean>;
|
|
168
330
|
/**
|
|
169
|
-
* Check if current user is data admin
|
|
331
|
+
* Check if current user is data admin (member of Admin or DataAdmin).
|
|
170
332
|
*/
|
|
171
333
|
is_data_admin(): Promise<boolean>;
|
|
172
334
|
/**
|
|
173
|
-
* Check if current user is ops admin
|
|
335
|
+
* Check if current user is ops admin (member of Admin or OperationsAdmin).
|
|
174
336
|
*/
|
|
175
337
|
is_ops_admin(): Promise<boolean>;
|
|
176
338
|
/**
|
|
177
|
-
* Check if current user is security admin
|
|
339
|
+
* Check if current user is security admin (member of Admin or SecurityAdmin).
|
|
178
340
|
*/
|
|
179
341
|
is_security_admin(): Promise<boolean>;
|
|
180
342
|
/**
|
|
@@ -191,6 +353,23 @@ export declare class RestService {
|
|
|
191
353
|
get_http_headers(): {
|
|
192
354
|
[key: string]: string;
|
|
193
355
|
};
|
|
356
|
+
/**
|
|
357
|
+
* Insert `tm1.compact=v0` into the Accept header (after the
|
|
358
|
+
* `application/json` segment) and return the previous header value.
|
|
359
|
+
* Mirrors tm1py's add_compact_json_header.
|
|
360
|
+
*/
|
|
361
|
+
add_compact_json_header(): string;
|
|
362
|
+
/**
|
|
363
|
+
* Decode a Base64-encoded password to its UTF-8 plaintext form
|
|
364
|
+
* (mirrors tm1py's b64_decode_password).
|
|
365
|
+
*/
|
|
366
|
+
static b64_decode_password(encryptedPassword: string): string;
|
|
367
|
+
/**
|
|
368
|
+
* Coerce a boolean/number/string config value to a boolean. Strings
|
|
369
|
+
* are stripped of whitespace and lowercased before comparison with
|
|
370
|
+
* `'true'` (mirrors tm1py's translate_to_boolean).
|
|
371
|
+
*/
|
|
372
|
+
static translate_to_boolean(value: unknown): boolean;
|
|
194
373
|
/**
|
|
195
374
|
* Cancel an async operation by ID
|
|
196
375
|
*/
|
|
@@ -198,15 +377,24 @@ export declare class RestService {
|
|
|
198
377
|
/**
|
|
199
378
|
* Retrieve async operation response
|
|
200
379
|
*/
|
|
201
|
-
retrieve_async_response(async_id: string): Promise<
|
|
380
|
+
retrieve_async_response(async_id: string): Promise<AxiosResponse>;
|
|
202
381
|
/**
|
|
203
|
-
*
|
|
382
|
+
* TM1 v12 returns completed async results with HTTP 200 and encodes
|
|
383
|
+
* the true operation status in the `asyncresult` header (e.g.
|
|
384
|
+
* "500 Internal Server Error"). Mirror tm1py's
|
|
385
|
+
* `_transform_async_response` by throwing on any embedded non-2xx
|
|
386
|
+
* status so callers are not handed a 500 as "success".
|
|
204
387
|
*/
|
|
205
|
-
|
|
388
|
+
private verifyAsyncResultHeader;
|
|
206
389
|
/**
|
|
207
|
-
* Wait for async operation to complete
|
|
390
|
+
* Wait for async operation to complete using a fixed polling cadence.
|
|
391
|
+
*
|
|
392
|
+
* Unlike the internal dispatcher's {@link waitTimeGenerator} (capped
|
|
393
|
+
* exponential backoff), this public helper polls every
|
|
394
|
+
* {@link poll_interval_seconds} seconds so existing callers who tuned
|
|
395
|
+
* the cadence keep their original behavior.
|
|
208
396
|
*/
|
|
209
|
-
wait_for_async_operation(async_id: string, timeout_seconds?: number, poll_interval_seconds?: number): Promise<any>;
|
|
397
|
+
wait_for_async_operation(async_id: string, timeout_seconds?: number, poll_interval_seconds?: number, cancel_at_timeout?: boolean): Promise<any>;
|
|
210
398
|
/**
|
|
211
399
|
* Get active user name
|
|
212
400
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RestService.d.ts","sourceRoot":"","sources":["../../src/services/RestService.ts"],"names":[],"mappings":"AAAA,OAAc,EAAiB,aAAa,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"RestService.d.ts","sourceRoot":"","sources":["../../src/services/RestService.ts"],"names":[],"mappings":"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"}
|