@looker/sdk-node 23.16.0 → 23.18.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 +14 -0
- package/README.md +6 -24
- package/lib/esm/index.js +5 -60
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/nodeSdk.js +7 -20
- package/lib/esm/nodeSdk.js.map +1 -1
- package/lib/esm/nodeServices.js +6 -13
- package/lib/esm/nodeServices.js.map +1 -1
- package/lib/esm/nodeSession.js +8 -15
- package/lib/esm/nodeSession.js.map +1 -1
- package/lib/esm/nodeSettings.js +16 -31
- package/lib/esm/nodeSettings.js.map +1 -1
- package/lib/esm/nodeTransport.js +37 -46
- package/lib/esm/nodeTransport.js.map +1 -1
- package/lib/esm/testUtils/index.js +1 -16
- package/lib/esm/testUtils/index.js.map +1 -1
- package/lib/esm/testUtils/testUtils.js +11 -23
- package/lib/esm/testUtils/testUtils.js.map +1 -1
- package/lib/nodeSdk.d.ts +1 -2
- package/lib/nodeSdk.js +0 -6
- package/lib/nodeSdk.js.map +1 -1
- package/lib/nodeServices.js.map +1 -1
- package/lib/nodeSession.js.map +1 -1
- package/lib/nodeSettings.js.map +1 -1
- package/lib/nodeTransport.js.map +1 -1
- package/lib/testUtils/testUtils.js.map +1 -1
- package/package.json +3 -3
package/lib/esm/nodeTransport.js
CHANGED
|
@@ -1,16 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.NodeTransport = exports.NodeCryptoHash = void 0;
|
|
7
|
-
var _crypto = _interopRequireDefault(require("crypto"));
|
|
8
|
-
var _request = _interopRequireDefault(require("request"));
|
|
9
|
-
var _requestPromiseNative = _interopRequireDefault(require("request-promise-native"));
|
|
10
|
-
var _readableStream = require("readable-stream");
|
|
11
|
-
var _errors = require("request-promise-native/errors");
|
|
12
|
-
var _sdkRtl = require("@looker/sdk-rtl");
|
|
13
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
14
1
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
15
2
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
16
3
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
@@ -18,6 +5,12 @@ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typ
|
|
|
18
5
|
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
19
6
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
20
7
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
8
|
+
import nodeCrypto from 'crypto';
|
|
9
|
+
import rq from 'request';
|
|
10
|
+
import rp from 'request-promise-native';
|
|
11
|
+
import { PassThrough } from 'readable-stream';
|
|
12
|
+
import { StatusCodeError } from 'request-promise-native/errors';
|
|
13
|
+
import { BaseTransport, ResponseMode, defaultTimeout, responseMode, trace, LookerAppId, agentPrefix, safeBase64 } from '@looker/sdk-rtl';
|
|
21
14
|
var utf8 = 'utf8';
|
|
22
15
|
var asString = value => {
|
|
23
16
|
if (value instanceof Buffer) {
|
|
@@ -28,20 +21,19 @@ var asString = value => {
|
|
|
28
21
|
}
|
|
29
22
|
return value.toString();
|
|
30
23
|
};
|
|
31
|
-
class NodeCryptoHash {
|
|
24
|
+
export class NodeCryptoHash {
|
|
32
25
|
secureRandom(byteCount) {
|
|
33
|
-
return
|
|
26
|
+
return nodeCrypto.randomBytes(byteCount).toString('hex');
|
|
34
27
|
}
|
|
35
28
|
sha256Hash(message) {
|
|
36
29
|
return _asyncToGenerator(function* () {
|
|
37
|
-
var hash =
|
|
30
|
+
var hash = nodeCrypto.createHash('sha256');
|
|
38
31
|
hash.update(message);
|
|
39
|
-
return
|
|
32
|
+
return safeBase64(new Uint8Array(hash.digest()));
|
|
40
33
|
})();
|
|
41
34
|
}
|
|
42
35
|
}
|
|
43
|
-
|
|
44
|
-
class NodeTransport extends _sdkRtl.BaseTransport {
|
|
36
|
+
export class NodeTransport extends BaseTransport {
|
|
45
37
|
constructor(options) {
|
|
46
38
|
super(options);
|
|
47
39
|
this.options = options;
|
|
@@ -50,7 +42,7 @@ class NodeTransport extends _sdkRtl.BaseTransport {
|
|
|
50
42
|
var _this = this;
|
|
51
43
|
return _asyncToGenerator(function* () {
|
|
52
44
|
var init = yield _this.initRequest(method, path, queryParams, body, authenticator, options);
|
|
53
|
-
var req = (
|
|
45
|
+
var req = rp(init).promise();
|
|
54
46
|
var rawResponse;
|
|
55
47
|
var requestStarted = Date.now();
|
|
56
48
|
var responseCompleted;
|
|
@@ -77,7 +69,7 @@ class NodeTransport extends _sdkRtl.BaseTransport {
|
|
|
77
69
|
var contentType = 'text';
|
|
78
70
|
var _body;
|
|
79
71
|
responseCompleted = Date.now();
|
|
80
|
-
if (e instanceof
|
|
72
|
+
if (e instanceof StatusCodeError) {
|
|
81
73
|
statusCode = e.statusCode;
|
|
82
74
|
if (e.error instanceof Buffer) {
|
|
83
75
|
_body = asString(e.error);
|
|
@@ -112,7 +104,7 @@ class NodeTransport extends _sdkRtl.BaseTransport {
|
|
|
112
104
|
}
|
|
113
105
|
parseResponse(res) {
|
|
114
106
|
return _asyncToGenerator(function* () {
|
|
115
|
-
var mode =
|
|
107
|
+
var mode = responseMode(res.contentType);
|
|
116
108
|
var response;
|
|
117
109
|
var error;
|
|
118
110
|
if (!res.ok) {
|
|
@@ -133,7 +125,7 @@ class NodeTransport extends _sdkRtl.BaseTransport {
|
|
|
133
125
|
return response;
|
|
134
126
|
}
|
|
135
127
|
var result = yield res.body;
|
|
136
|
-
if (mode ===
|
|
128
|
+
if (mode === ResponseMode.string) {
|
|
137
129
|
if (res.contentType.match(/^application\/.*\bjson\b/g)) {
|
|
138
130
|
try {
|
|
139
131
|
if (result instanceof Buffer) {
|
|
@@ -193,58 +185,58 @@ class NodeTransport extends _sdkRtl.BaseTransport {
|
|
|
193
185
|
var method = (_props$method = props.method) === null || _props$method === void 0 ? void 0 : _props$method.toString().toUpperCase();
|
|
194
186
|
switch (method) {
|
|
195
187
|
case 'GET':
|
|
196
|
-
return
|
|
188
|
+
return rq.get(props);
|
|
197
189
|
case 'PUT':
|
|
198
|
-
return
|
|
190
|
+
return rq.put(props);
|
|
199
191
|
case 'POST':
|
|
200
|
-
return
|
|
192
|
+
return rq.post(props);
|
|
201
193
|
case 'PATCH':
|
|
202
|
-
return
|
|
194
|
+
return rq.patch(props);
|
|
203
195
|
case 'DELETE':
|
|
204
|
-
return
|
|
196
|
+
return rq.put(props);
|
|
205
197
|
case 'HEAD':
|
|
206
|
-
return
|
|
198
|
+
return rq.head(props);
|
|
207
199
|
default:
|
|
208
|
-
return
|
|
200
|
+
return rq.get(props);
|
|
209
201
|
}
|
|
210
202
|
}
|
|
211
203
|
stream(callback, method, path, queryParams, body, authenticator, options) {
|
|
212
204
|
var _this3 = this;
|
|
213
205
|
return _asyncToGenerator(function* () {
|
|
214
|
-
var stream = new
|
|
206
|
+
var stream = new PassThrough();
|
|
215
207
|
var returnPromise = callback(stream);
|
|
216
208
|
var init = yield _this3.initRequest(method, path, queryParams, body, authenticator, options);
|
|
217
209
|
var streamPromise = new Promise((resolve, reject) => {
|
|
218
|
-
|
|
210
|
+
trace("[stream] beginning stream via download url", init);
|
|
219
211
|
var hasResolved = false;
|
|
220
212
|
var req = _this3.requestor(init);
|
|
221
213
|
req.on('error', err => {
|
|
222
214
|
if (hasResolved && err.code === 'ECONNRESET') {
|
|
223
|
-
|
|
215
|
+
trace('ignoring ECONNRESET that occurred after streaming finished', init);
|
|
224
216
|
} else {
|
|
225
|
-
|
|
217
|
+
trace('streaming error', err);
|
|
226
218
|
reject(err);
|
|
227
219
|
}
|
|
228
220
|
}).on('finish', () => {
|
|
229
|
-
|
|
221
|
+
trace("[stream] streaming via download url finished", init);
|
|
230
222
|
}).on('socket', socket => {
|
|
231
|
-
|
|
223
|
+
trace("[stream] setting keepalive on socket", init);
|
|
232
224
|
socket.setKeepAlive(true);
|
|
233
225
|
}).on('abort', () => {
|
|
234
|
-
|
|
226
|
+
trace("[stream] streaming via download url aborted", init);
|
|
235
227
|
}).on('response', () => {
|
|
236
|
-
|
|
228
|
+
trace("[stream] got response from download url", init);
|
|
237
229
|
}).on('close', () => {
|
|
238
|
-
|
|
230
|
+
trace("[stream] request stream closed", init);
|
|
239
231
|
}).pipe(stream).on('error', err => {
|
|
240
|
-
|
|
232
|
+
trace("[stream] PassThrough stream error", err);
|
|
241
233
|
reject(err);
|
|
242
234
|
}).on('finish', () => {
|
|
243
|
-
|
|
235
|
+
trace("[stream] PassThrough stream finished", init);
|
|
244
236
|
resolve();
|
|
245
237
|
hasResolved = true;
|
|
246
238
|
}).on('close', () => {
|
|
247
|
-
|
|
239
|
+
trace("[stream] PassThrough stream closed", init);
|
|
248
240
|
});
|
|
249
241
|
});
|
|
250
242
|
var results = yield Promise.all([returnPromise, streamPromise]);
|
|
@@ -258,17 +250,17 @@ class NodeTransport extends _sdkRtl.BaseTransport {
|
|
|
258
250
|
timeout(options) {
|
|
259
251
|
if (!options) options = this.options;
|
|
260
252
|
if ('timeout' in options && options.timeout) return options.timeout;
|
|
261
|
-
return
|
|
253
|
+
return defaultTimeout;
|
|
262
254
|
}
|
|
263
255
|
initRequest(method, path, queryParams, body, authenticator, options) {
|
|
264
256
|
var _this4 = this;
|
|
265
257
|
return _asyncToGenerator(function* () {
|
|
266
258
|
options = options ? _objectSpread(_objectSpread({}, _this4.options), options) : _this4.options;
|
|
267
259
|
if (!options.agentTag) {
|
|
268
|
-
options.agentTag =
|
|
260
|
+
options.agentTag = agentPrefix;
|
|
269
261
|
}
|
|
270
262
|
var headers = _objectSpread({
|
|
271
|
-
[
|
|
263
|
+
[LookerAppId]: options.agentTag
|
|
272
264
|
}, options.headers);
|
|
273
265
|
var requestPath = _this4.makeUrl(path, options, queryParams);
|
|
274
266
|
var init = {
|
|
@@ -290,5 +282,4 @@ class NodeTransport extends _sdkRtl.BaseTransport {
|
|
|
290
282
|
})();
|
|
291
283
|
}
|
|
292
284
|
}
|
|
293
|
-
exports.NodeTransport = NodeTransport;
|
|
294
285
|
//# sourceMappingURL=nodeTransport.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeTransport.js","names":["_crypto","_interopRequireDefault","require","_request","_requestPromiseNative","_readableStream","_errors","_sdkRtl","obj","__esModule","default","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","value","_toPropertyKey","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","asyncGeneratorStep","gen","resolve","reject","_next","_throw","info","error","done","Promise","then","_asyncToGenerator","fn","self","args","err","utf8","asString","Buffer","from","toString","JSON","stringify","NodeCryptoHash","secureRandom","byteCount","nodeCrypto","randomBytes","sha256Hash","message","hash","createHash","update","safeBase64","Uint8Array","digest","exports","NodeTransport","BaseTransport","constructor","options","rawRequest","method","path","queryParams","body","authenticator","_this","init","initRequest","req","rp","promise","rawResponse","requestStarted","Date","now","responseCompleted","resTyped","url","contentType","headers","ok","statusCode","statusMessage","e","concat","StatusCodeError","observer","parseResponse","mode","responseMode","response","parse","_unused","result","ResponseMode","string","match","_result","request","_this2","type","requestor","props","_props$method","toUpperCase","rq","get","put","post","patch","head","stream","callback","_this3","PassThrough","returnPromise","streamPromise","trace","hasResolved","on","code","socket","setKeepAlive","pipe","results","all","verifySsl","verify_ssl","timeout","defaultTimeout","_this4","agentTag","agentPrefix","LookerAppId","requestPath","makeUrl","encoding","json","rejectUnauthorized","resolveWithFullResponse"],"sources":["../../src/nodeTransport.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport nodeCrypto from 'crypto'\nimport type { Request } from 'request'\nimport rq from 'request'\n\nimport rp from 'request-promise-native'\nimport type { Readable } from 'readable-stream'\nimport { PassThrough } from 'readable-stream'\nimport { StatusCodeError } from 'request-promise-native/errors'\nimport {\n BaseTransport,\n ResponseMode,\n defaultTimeout,\n responseMode,\n trace,\n LookerAppId,\n agentPrefix,\n safeBase64,\n} from '@looker/sdk-rtl'\nimport type {\n Authenticator,\n HttpMethod,\n ISDKError,\n ITransportSettings,\n SDKResponse,\n Values,\n IRequestHeaders,\n IRawResponse,\n ICryptoHash,\n} from '@looker/sdk-rtl'\n\nconst utf8 = 'utf8'\n\nconst asString = (value: any): string => {\n if (value instanceof Buffer) {\n return Buffer.from(value).toString(utf8)\n }\n if (value instanceof Object) {\n return JSON.stringify(value)\n }\n return value.toString()\n}\n\nexport class NodeCryptoHash implements ICryptoHash {\n secureRandom(byteCount: number): string {\n // TODO update this to Node 18\n return nodeCrypto.randomBytes(byteCount).toString('hex')\n }\n\n async sha256Hash(message: string): Promise<string> {\n const hash = nodeCrypto.createHash('sha256')\n hash.update(message)\n return safeBase64(new Uint8Array(hash.digest()))\n }\n}\n\nexport type RequestOptions = rq.RequiredUriUrl &\n rp.RequestPromiseOptions &\n rq.OptionsWithUrl\n\nexport class NodeTransport extends BaseTransport {\n constructor(protected readonly options: ITransportSettings) {\n super(options)\n }\n\n async rawRequest(\n method: HttpMethod,\n path: string,\n queryParams?: Values,\n body?: any,\n authenticator?: Authenticator,\n options?: Partial<ITransportSettings>\n ): Promise<IRawResponse> {\n const init: RequestOptions = await this.initRequest(\n method,\n path,\n queryParams,\n body,\n authenticator,\n options\n )\n const req = rp(init).promise()\n let rawResponse: IRawResponse\n\n const requestStarted = Date.now()\n let responseCompleted\n try {\n const res = await req\n responseCompleted = Date.now()\n const resTyped = res as rq.Response\n rawResponse = {\n method,\n url: resTyped.url || init.url.toString() || '',\n body: await resTyped.body,\n contentType: String(resTyped.headers['content-type']),\n ok: true,\n statusCode: resTyped.statusCode,\n statusMessage: resTyped.statusMessage,\n headers: res.headers,\n requestStarted,\n responseCompleted,\n }\n // Update OK with response statusCode check\n rawResponse.ok = this.ok(rawResponse)\n } catch (e: any) {\n let statusMessage = `${method} ${path}`\n let statusCode = 404\n let contentType = 'text'\n let body\n responseCompleted = Date.now()\n if (e instanceof StatusCodeError) {\n statusCode = e.statusCode\n if (e.error instanceof Buffer) {\n body = asString(e.error)\n statusMessage += `: ${statusCode}`\n } else if (e.error instanceof Object) {\n // Capture error object as body\n body = e.error\n statusMessage += `: ${e.message}`\n // Clarify the error message\n body.message = statusMessage\n contentType = 'application/json'\n }\n } else if (e.error instanceof Buffer) {\n body = asString(e.error)\n } else {\n body = JSON.stringify(e)\n contentType = 'application/json'\n }\n rawResponse = {\n method,\n url: init.url.toString(),\n body,\n contentType,\n ok: false,\n statusCode,\n statusMessage,\n headers: {},\n requestStarted,\n responseCompleted,\n }\n }\n return this.observer ? this.observer(rawResponse) : rawResponse\n }\n\n async parseResponse<TSuccess, TError>(res: IRawResponse) {\n const mode = responseMode(res.contentType)\n let response: SDKResponse<TSuccess, TError>\n let error\n if (!res.ok) {\n // Raw request had an error. Make sure it's a string before parsing the result\n error = res.body\n if (typeof error === 'string') {\n try {\n error = JSON.parse(error)\n } catch {\n error = { message: `Request failed: ${error}` }\n }\n }\n response = { ok: false, error }\n return response\n }\n let result = await res.body\n if (mode === ResponseMode.string) {\n if (res.contentType.match(/^application\\/.*\\bjson\\b/g)) {\n try {\n if (result instanceof Buffer) {\n result = Buffer.from(result).toString(utf8)\n }\n if (!(result instanceof Object)) {\n result = JSON.parse(result.toString())\n }\n } catch (err) {\n error = err\n }\n } else if (!error) {\n // Convert to string otherwise\n result = asString(result)\n }\n } else {\n try {\n result = Buffer.from(result ?? '').toString('binary')\n } catch (err) {\n error = err\n }\n }\n if (!error) {\n response = { ok: true, value: result }\n } else {\n response = { ok: false, error: error as TError }\n }\n return response\n }\n\n async request<TSuccess, TError>(\n method: HttpMethod,\n path: string,\n queryParams?: Values,\n body?: any,\n authenticator?: Authenticator,\n options?: Partial<ITransportSettings>\n ): Promise<SDKResponse<TSuccess, TError>> {\n try {\n const res = await this.rawRequest(\n method,\n path,\n queryParams,\n body,\n authenticator,\n options\n )\n return await this.parseResponse<TSuccess, TError>(res)\n } catch (e: any) {\n const error: ISDKError = {\n message:\n typeof e.message === 'string'\n ? e.message\n : `The SDK call was not successful. The error was '${e}'.`,\n type: 'sdk_error',\n }\n return { error, ok: false }\n }\n }\n\n /**\n * Http method dispatcher from general-purpose request properties\n * @param props\n * @returns {request.Request}\n */\n protected requestor(props: RequestOptions): Request {\n const method = props.method?.toString().toUpperCase() as HttpMethod\n switch (method) {\n case 'GET':\n return rq.get(props)\n case 'PUT':\n return rq.put(props)\n case 'POST':\n return rq.post(props)\n case 'PATCH':\n return rq.patch(props)\n case 'DELETE':\n return rq.put(props)\n case 'HEAD':\n return rq.head(props)\n default:\n return rq.get(props)\n }\n }\n\n async stream<TSuccess>(\n callback: (readable: Readable) => Promise<TSuccess>,\n method: HttpMethod,\n path: string,\n queryParams?: Values,\n body?: any,\n authenticator?: Authenticator,\n options?: Partial<ITransportSettings>\n ): Promise<TSuccess> {\n const stream = new PassThrough()\n const returnPromise = callback(stream)\n const init = await this.initRequest(\n method,\n path,\n queryParams,\n body,\n authenticator,\n options\n )\n\n const streamPromise = new Promise<void>((resolve, reject) => {\n trace(`[stream] beginning stream via download url`, init)\n let hasResolved = false\n const req = this.requestor(init)\n\n req\n .on('error', (err) => {\n if (hasResolved && (err as any).code === 'ECONNRESET') {\n trace(\n 'ignoring ECONNRESET that occurred after streaming finished',\n init\n )\n } else {\n trace('streaming error', err)\n reject(err)\n }\n })\n .on('finish', () => {\n trace(`[stream] streaming via download url finished`, init)\n })\n .on('socket', (socket) => {\n trace(`[stream] setting keepalive on socket`, init)\n socket.setKeepAlive(true)\n })\n .on('abort', () => {\n trace(`[stream] streaming via download url aborted`, init)\n })\n .on('response', () => {\n trace(`[stream] got response from download url`, init)\n })\n .on('close', () => {\n trace(`[stream] request stream closed`, init)\n })\n .pipe(stream)\n .on('error', (err) => {\n trace(`[stream] PassThrough stream error`, err)\n reject(err)\n })\n .on('finish', () => {\n trace(`[stream] PassThrough stream finished`, init)\n resolve()\n hasResolved = true\n })\n .on('close', () => {\n trace(`[stream] PassThrough stream closed`, init)\n })\n })\n\n const results = await Promise.all([returnPromise, streamPromise])\n return results[0]\n }\n\n /**\n * should the request verify SSL?\n * @param {Partial<ITransportSettings>} options Defaults to the instance options values\n * @returns {boolean} true if the request should require full SSL verification\n */\n verifySsl(options?: Partial<ITransportSettings>) {\n if (!options) options = this.options\n return 'verify_ssl' in options ? options.verify_ssl : true\n }\n\n /**\n * Request timeout in seconds\n * @param {Partial<ITransportSettings>} options Defaults to the instance options values\n * @returns {number | undefined}\n */\n timeout(options?: Partial<ITransportSettings>): number {\n if (!options) options = this.options\n if ('timeout' in options && options.timeout) return options.timeout\n return defaultTimeout\n }\n\n private async initRequest(\n method: HttpMethod,\n path: string,\n queryParams?: any,\n body?: any,\n authenticator?: Authenticator,\n options?: Partial<ITransportSettings>\n ) {\n options = options ? { ...this.options, ...options } : this.options\n if (!options.agentTag) {\n options.agentTag = agentPrefix\n }\n const headers: IRequestHeaders = {\n [LookerAppId]: options.agentTag,\n ...options.headers,\n }\n\n const requestPath = this.makeUrl(path, options, queryParams)\n let init: RequestOptions = {\n body: body || undefined,\n encoding: null,\n headers: headers,\n json: body && typeof body !== 'string',\n // null = requests are returned as binary so `Content-Type` dictates response format\n method,\n\n rejectUnauthorized: this.verifySsl(options),\n\n // If body is a string, pass as is\n resolveWithFullResponse: true,\n\n timeout: this.timeout(options) * 1000,\n url: requestPath,\n }\n if ('encoding' in options) init.encoding = options.encoding\n\n if (authenticator) {\n // Automatic authentication process for the request\n init = await authenticator(init)\n }\n return init\n }\n\n // /**\n // * A streaming helper for the \"json\" data format. It handles automatically parsing\n // * the JSON in a streaming fashion. You just need to implement a function that will\n // * be called for each row.\n // *\n // * ```ts\n // * await request.streamJson((row) => {\n // * // This will be called for each row of data\n // * })\n // * ```\n // *\n // * @returns A promise that will be resolved when streaming is complete.\n // * @param onRow A function that will be called for each streamed row, with the row as the first argument.\n // */\n // async streamJson(onRow: (row: { [fieldName: string]: any }) => void) {\n // return new Promise<void>((resolve, reject) => {\n // let rows = 0\n // this.stream(async (readable) => {\n // oboe(readable)\n // .node(\"![*]\", this.safeOboe(readable, reject, (row) => {\n // rows++\n // onRow(row)\n // }))\n // .done(() => {\n // winston.info(`[streamJson] oboe reports done`, {...this.logInfo, rows})\n // })\n // }).then(() => {\n // winston.info(`[streamJson] complete`, {...this.logInfo, rows})\n // resolve()\n // }).catch((error) => {\n // // This error should not be logged as it could come from an action\n // // which might decide to include user information in the error message\n // winston.info(`[streamJson] reported an error`, {...this.logInfo, rows})\n // reject(error)\n // })\n // })\n // }\n //\n // /**\n // * A streaming helper for the \"json_detail\" data format. It handles automatically parsing\n // * the JSON in a streaming fashion. You can implement an `onFields` callback to get\n // * the field metadata, and an `onRow` callback for each row of data.\n // *\n // * ```ts\n // * await request.streamJsonDetail({\n // * onFields: (fields) => {\n // * // This will be called when fields are available\n // * },\n // * onRow: (row) => {\n // * // This will be called for each row of data\n // * },\n // * })\n // * ```\n // *\n // * @returns A promise that will be resolved when streaming is complete.\n // * @param callbacks An object consisting of several callbacks that will be called\n // * when various parts of the data are parsed.\n // */\n // async streamJsonDetail(callbacks: {\n // onRow: (row: JsonDetailRow) => void,\n // onFields?: (fields: Fieldset) => void,\n // onRanAt?: (iso8601string: string) => void,\n // }) {\n // return new Promise<void>((resolve, reject) => {\n // let rows = 0\n // this.stream(async (readable) => {\n // oboe(readable)\n // .node(\"data.*\", this.safeOboe(readable, reject, (row) => {\n // rows++\n // callbacks.onRow(row)\n // }))\n // .node(\"!.fields\", this.safeOboe(readable, reject, (fields) => {\n // if (callbacks.onFields) {\n // callbacks.onFields(fields)\n // }\n // }))\n // .node(\"!.ran_at\", this.safeOboe(readable, reject, (ranAt) => {\n // if (callbacks.onRanAt) {\n // callbacks.onRanAt(ranAt)\n // }\n // }))\n // .done(() => {\n // winston.info(`[streamJsonDetail] oboe reports done`, {...this.logInfo, rows})\n // })\n // }).then(() => {\n // winston.info(`[streamJsonDetail] complete`, {...this.logInfo, rows})\n // resolve()\n // }).catch((error) => {\n // // This error should not be logged as it could come from an action\n // // which might decide to include user information in the error message\n // winston.info(`[streamJsonDetail] reported an error`, {...this.logInfo, rows})\n // reject(error)\n // })\n // })\n // }\n}\n"],"mappings":";;;;;;AA0BA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,QAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,qBAAA,GAAAH,sBAAA,CAAAC,OAAA;AAEA,IAAAG,eAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,OAAA,GAAAL,OAAA;AASwB,SAAAD,uBAAAO,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,SAAAG,QAAAC,MAAA,EAAAC,cAAA,QAAAC,IAAA,GAAAC,MAAA,CAAAD,IAAA,CAAAF,MAAA,OAAAG,MAAA,CAAAC,qBAAA,QAAAC,OAAA,GAAAF,MAAA,CAAAC,qBAAA,CAAAJ,MAAA,GAAAC,cAAA,KAAAI,OAAA,GAAAA,OAAA,CAAAC,MAAA,WAAAC,GAAA,WAAAJ,MAAA,CAAAK,wBAAA,CAAAR,MAAA,EAAAO,GAAA,EAAAE,UAAA,OAAAP,IAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,IAAA,EAAAG,OAAA,YAAAH,IAAA;AAAA,SAAAU,cAAAC,MAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAC,SAAA,CAAAC,MAAA,EAAAF,CAAA,UAAAG,MAAA,WAAAF,SAAA,CAAAD,CAAA,IAAAC,SAAA,CAAAD,CAAA,QAAAA,CAAA,OAAAf,OAAA,CAAAI,MAAA,CAAAc,MAAA,OAAAC,OAAA,WAAAC,GAAA,IAAAC,eAAA,CAAAP,MAAA,EAAAM,GAAA,EAAAF,MAAA,CAAAE,GAAA,SAAAhB,MAAA,CAAAkB,yBAAA,GAAAlB,MAAA,CAAAmB,gBAAA,CAAAT,MAAA,EAAAV,MAAA,CAAAkB,yBAAA,CAAAJ,MAAA,KAAAlB,OAAA,CAAAI,MAAA,CAAAc,MAAA,GAAAC,OAAA,WAAAC,GAAA,IAAAhB,MAAA,CAAAoB,cAAA,CAAAV,MAAA,EAAAM,GAAA,EAAAhB,MAAA,CAAAK,wBAAA,CAAAS,MAAA,EAAAE,GAAA,iBAAAN,MAAA;AAAA,SAAAO,gBAAAxB,GAAA,EAAAuB,GAAA,EAAAK,KAAA,IAAAL,GAAA,GAAAM,cAAA,CAAAN,GAAA,OAAAA,GAAA,IAAAvB,GAAA,IAAAO,MAAA,CAAAoB,cAAA,CAAA3B,GAAA,EAAAuB,GAAA,IAAAK,KAAA,EAAAA,KAAA,EAAAf,UAAA,QAAAiB,YAAA,QAAAC,QAAA,oBAAA/B,GAAA,CAAAuB,GAAA,IAAAK,KAAA,WAAA5B,GAAA;AAAA,SAAA6B,eAAAG,GAAA,QAAAT,GAAA,GAAAU,YAAA,CAAAD,GAAA,2BAAAT,GAAA,gBAAAA,GAAA,GAAAW,MAAA,CAAAX,GAAA;AAAA,SAAAU,aAAAE,KAAA,EAAAC,IAAA,eAAAD,KAAA,iBAAAA,KAAA,kBAAAA,KAAA,MAAAE,IAAA,GAAAF,KAAA,CAAAG,MAAA,CAAAC,WAAA,OAAAF,IAAA,KAAAG,SAAA,QAAAC,GAAA,GAAAJ,IAAA,CAAAK,IAAA,CAAAP,KAAA,EAAAC,IAAA,2BAAAK,GAAA,sBAAAA,GAAA,YAAAE,SAAA,4DAAAP,IAAA,gBAAAF,MAAA,GAAAU,MAAA,EAAAT,KAAA;AAAA,SAAAU,mBAAAC,GAAA,EAAAC,OAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,MAAA,EAAA3B,GAAA,EAAAS,GAAA,cAAAmB,IAAA,GAAAL,GAAA,CAAAvB,GAAA,EAAAS,GAAA,OAAAJ,KAAA,GAAAuB,IAAA,CAAAvB,KAAA,WAAAwB,KAAA,IAAAJ,MAAA,CAAAI,KAAA,iBAAAD,IAAA,CAAAE,IAAA,IAAAN,OAAA,CAAAnB,KAAA,YAAA0B,OAAA,CAAAP,OAAA,CAAAnB,KAAA,EAAA2B,IAAA,CAAAN,KAAA,EAAAC,MAAA;AAAA,SAAAM,kBAAAC,EAAA,6BAAAC,IAAA,SAAAC,IAAA,GAAAxC,SAAA,aAAAmC,OAAA,WAAAP,OAAA,EAAAC,MAAA,QAAAF,GAAA,GAAAW,EAAA,CAAA1C,KAAA,CAAA2C,IAAA,EAAAC,IAAA,YAAAV,MAAArB,KAAA,IAAAiB,kBAAA,CAAAC,GAAA,EAAAC,OAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,MAAA,UAAAtB,KAAA,cAAAsB,OAAAU,GAAA,IAAAf,kBAAA,CAAAC,GAAA,EAAAC,OAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,MAAA,WAAAU,GAAA,KAAAX,KAAA,CAAAT,SAAA;AAaxB,IAAMqB,IAAI,GAAG,MAAM;AAEnB,IAAMC,QAAQ,GAAIlC,KAAU,IAAa;EACvC,IAAIA,KAAK,YAAYmC,MAAM,EAAE;IAC3B,OAAOA,MAAM,CAACC,IAAI,CAACpC,KAAK,CAAC,CAACqC,QAAQ,CAACJ,IAAI,CAAC;EAC1C;EACA,IAAIjC,KAAK,YAAYrB,MAAM,EAAE;IAC3B,OAAO2D,IAAI,CAACC,SAAS,CAACvC,KAAK,CAAC;EAC9B;EACA,OAAOA,KAAK,CAACqC,QAAQ,EAAE;AACzB,CAAC;AAEM,MAAMG,cAAc,CAAwB;EACjDC,YAAYA,CAACC,SAAiB,EAAU;IAEtC,OAAOC,eAAU,CAACC,WAAW,CAACF,SAAS,CAAC,CAACL,QAAQ,CAAC,KAAK,CAAC;EAC1D;EAEMQ,UAAUA,CAACC,OAAe,EAAmB;IAAA,OAAAlB,iBAAA;MACjD,IAAMmB,IAAI,GAAGJ,eAAU,CAACK,UAAU,CAAC,QAAQ,CAAC;MAC5CD,IAAI,CAACE,MAAM,CAACH,OAAO,CAAC;MACpB,OAAO,IAAAI,kBAAU,EAAC,IAAIC,UAAU,CAACJ,IAAI,CAACK,MAAM,EAAE,CAAC,CAAC;IAAA;EAClD;AACF;AAACC,OAAA,CAAAb,cAAA,GAAAA,cAAA;AAMM,MAAMc,aAAa,SAASC,qBAAa,CAAC;EAC/CC,WAAWA,CAAoBC,OAA2B,EAAE;IAC1D,KAAK,CAACA,OAAO,CAAC;IAAA,KADeA,OAA2B,GAA3BA,OAA2B;EAE1D;EAEMC,UAAUA,CACdC,MAAkB,EAClBC,IAAY,EACZC,WAAoB,EACpBC,IAAU,EACVC,aAA6B,EAC7BN,OAAqC,EACd;IAAA,IAAAO,KAAA;IAAA,OAAApC,iBAAA;MACvB,IAAMqC,IAAoB,SAASD,KAAI,CAACE,WAAW,CACjDP,MAAM,EACNC,IAAI,EACJC,WAAW,EACXC,IAAI,EACJC,aAAa,EACbN,OAAO,CACR;MACD,IAAMU,GAAG,GAAG,IAAAC,6BAAE,EAACH,IAAI,CAAC,CAACI,OAAO,EAAE;MAC9B,IAAIC,WAAyB;MAE7B,IAAMC,cAAc,GAAGC,IAAI,CAACC,GAAG,EAAE;MACjC,IAAIC,iBAAiB;MACrB,IAAI;QACF,IAAM7D,GAAG,SAASsD,GAAG;QACrBO,iBAAiB,GAAGF,IAAI,CAACC,GAAG,EAAE;QAC9B,IAAME,QAAQ,GAAG9D,GAAkB;QACnCyD,WAAW,GAAG;UACZX,MAAM;UACNiB,GAAG,EAAED,QAAQ,CAACC,GAAG,IAAIX,IAAI,CAACW,GAAG,CAACvC,QAAQ,EAAE,IAAI,EAAE;UAC9CyB,IAAI,QAAQa,QAAQ,CAACb,IAAI;UACzBe,WAAW,EAAEvE,MAAM,CAACqE,QAAQ,CAACG,OAAO,CAAC,cAAc,CAAC,CAAC;UACrDC,EAAE,EAAE,IAAI;UACRC,UAAU,EAAEL,QAAQ,CAACK,UAAU;UAC/BC,aAAa,EAAEN,QAAQ,CAACM,aAAa;UACrCH,OAAO,EAAEjE,GAAG,CAACiE,OAAO;UACpBP,cAAc;UACdG;QACF,CAAC;QAEDJ,WAAW,CAACS,EAAE,GAAGf,KAAI,CAACe,EAAE,CAACT,WAAW,CAAC;MACvC,CAAC,CAAC,OAAOY,CAAM,EAAE;QACf,IAAID,aAAa,MAAAE,MAAA,CAAMxB,MAAM,OAAAwB,MAAA,CAAIvB,IAAI,CAAE;QACvC,IAAIoB,UAAU,GAAG,GAAG;QACpB,IAAIH,WAAW,GAAG,MAAM;QACxB,IAAIf,KAAI;QACRY,iBAAiB,GAAGF,IAAI,CAACC,GAAG,EAAE;QAC9B,IAAIS,CAAC,YAAYE,uBAAe,EAAE;UAChCJ,UAAU,GAAGE,CAAC,CAACF,UAAU;UACzB,IAAIE,CAAC,CAAC1D,KAAK,YAAYW,MAAM,EAAE;YAC7B2B,KAAI,GAAG5B,QAAQ,CAACgD,CAAC,CAAC1D,KAAK,CAAC;YACxByD,aAAa,SAAAE,MAAA,CAASH,UAAU,CAAE;UACpC,CAAC,MAAM,IAAIE,CAAC,CAAC1D,KAAK,YAAY7C,MAAM,EAAE;YAEpCmF,KAAI,GAAGoB,CAAC,CAAC1D,KAAK;YACdyD,aAAa,SAAAE,MAAA,CAASD,CAAC,CAACpC,OAAO,CAAE;YAEjCgB,KAAI,CAAChB,OAAO,GAAGmC,aAAa;YAC5BJ,WAAW,GAAG,kBAAkB;UAClC;QACF,CAAC,MAAM,IAAIK,CAAC,CAAC1D,KAAK,YAAYW,MAAM,EAAE;UACpC2B,KAAI,GAAG5B,QAAQ,CAACgD,CAAC,CAAC1D,KAAK,CAAC;QAC1B,CAAC,MAAM;UACLsC,KAAI,GAAGxB,IAAI,CAACC,SAAS,CAAC2C,CAAC,CAAC;UACxBL,WAAW,GAAG,kBAAkB;QAClC;QACAP,WAAW,GAAG;UACZX,MAAM;UACNiB,GAAG,EAAEX,IAAI,CAACW,GAAG,CAACvC,QAAQ,EAAE;UACxByB,IAAI,EAAJA,KAAI;UACJe,WAAW;UACXE,EAAE,EAAE,KAAK;UACTC,UAAU;UACVC,aAAa;UACbH,OAAO,EAAE,CAAC,CAAC;UACXP,cAAc;UACdG;QACF,CAAC;MACH;MACA,OAAOV,KAAI,CAACqB,QAAQ,GAAGrB,KAAI,CAACqB,QAAQ,CAACf,WAAW,CAAC,GAAGA,WAAW;IAAA;EACjE;EAEMgB,aAAaA,CAAmBzE,GAAiB,EAAE;IAAA,OAAAe,iBAAA;MACvD,IAAM2D,IAAI,GAAG,IAAAC,oBAAY,EAAC3E,GAAG,CAACgE,WAAW,CAAC;MAC1C,IAAIY,QAAuC;MAC3C,IAAIjE,KAAK;MACT,IAAI,CAACX,GAAG,CAACkE,EAAE,EAAE;QAEXvD,KAAK,GAAGX,GAAG,CAACiD,IAAI;QAChB,IAAI,OAAOtC,KAAK,KAAK,QAAQ,EAAE;UAC7B,IAAI;YACFA,KAAK,GAAGc,IAAI,CAACoD,KAAK,CAAClE,KAAK,CAAC;UAC3B,CAAC,CAAC,OAAAmE,OAAA,EAAM;YACNnE,KAAK,GAAG;cAAEsB,OAAO,qBAAAqC,MAAA,CAAqB3D,KAAK;YAAG,CAAC;UACjD;QACF;QACAiE,QAAQ,GAAG;UAAEV,EAAE,EAAE,KAAK;UAAEvD;QAAM,CAAC;QAC/B,OAAOiE,QAAQ;MACjB;MACA,IAAIG,MAAM,SAAS/E,GAAG,CAACiD,IAAI;MAC3B,IAAIyB,IAAI,KAAKM,oBAAY,CAACC,MAAM,EAAE;QAChC,IAAIjF,GAAG,CAACgE,WAAW,CAACkB,KAAK,CAAC,2BAA2B,CAAC,EAAE;UACtD,IAAI;YACF,IAAIH,MAAM,YAAYzD,MAAM,EAAE;cAC5ByD,MAAM,GAAGzD,MAAM,CAACC,IAAI,CAACwD,MAAM,CAAC,CAACvD,QAAQ,CAACJ,IAAI,CAAC;YAC7C;YACA,IAAI,EAAE2D,MAAM,YAAYjH,MAAM,CAAC,EAAE;cAC/BiH,MAAM,GAAGtD,IAAI,CAACoD,KAAK,CAACE,MAAM,CAACvD,QAAQ,EAAE,CAAC;YACxC;UACF,CAAC,CAAC,OAAOL,GAAG,EAAE;YACZR,KAAK,GAAGQ,GAAG;UACb;QACF,CAAC,MAAM,IAAI,CAACR,KAAK,EAAE;UAEjBoE,MAAM,GAAG1D,QAAQ,CAAC0D,MAAM,CAAC;QAC3B;MACF,CAAC,MAAM;QACL,IAAI;UAAA,IAAAI,OAAA;UACFJ,MAAM,GAAGzD,MAAM,CAACC,IAAI,EAAA4D,OAAA,GAACJ,MAAM,cAAAI,OAAA,cAAAA,OAAA,GAAI,EAAE,CAAC,CAAC3D,QAAQ,CAAC,QAAQ,CAAC;QACvD,CAAC,CAAC,OAAOL,GAAG,EAAE;UACZR,KAAK,GAAGQ,GAAG;QACb;MACF;MACA,IAAI,CAACR,KAAK,EAAE;QACViE,QAAQ,GAAG;UAAEV,EAAE,EAAE,IAAI;UAAE/E,KAAK,EAAE4F;QAAO,CAAC;MACxC,CAAC,MAAM;QACLH,QAAQ,GAAG;UAAEV,EAAE,EAAE,KAAK;UAAEvD,KAAK,EAAEA;QAAgB,CAAC;MAClD;MACA,OAAOiE,QAAQ;IAAA;EACjB;EAEMQ,OAAOA,CACXtC,MAAkB,EAClBC,IAAY,EACZC,WAAoB,EACpBC,IAAU,EACVC,aAA6B,EAC7BN,OAAqC,EACG;IAAA,IAAAyC,MAAA;IAAA,OAAAtE,iBAAA;MACxC,IAAI;QACF,IAAMf,GAAG,SAASqF,MAAI,CAACxC,UAAU,CAC/BC,MAAM,EACNC,IAAI,EACJC,WAAW,EACXC,IAAI,EACJC,aAAa,EACbN,OAAO,CACR;QACD,aAAayC,MAAI,CAACZ,aAAa,CAAmBzE,GAAG,CAAC;MACxD,CAAC,CAAC,OAAOqE,CAAM,EAAE;QACf,IAAM1D,KAAgB,GAAG;UACvBsB,OAAO,EACL,OAAOoC,CAAC,CAACpC,OAAO,KAAK,QAAQ,GACzBoC,CAAC,CAACpC,OAAO,sDAAAqC,MAAA,CAC0CD,CAAC,OAAI;UAC9DiB,IAAI,EAAE;QACR,CAAC;QACD,OAAO;UAAE3E,KAAK;UAAEuD,EAAE,EAAE;QAAM,CAAC;MAC7B;IAAC;EACH;EAOUqB,SAASA,CAACC,KAAqB,EAAW;IAAA,IAAAC,aAAA;IAClD,IAAM3C,MAAM,IAAA2C,aAAA,GAAGD,KAAK,CAAC1C,MAAM,cAAA2C,aAAA,uBAAZA,aAAA,CAAcjE,QAAQ,EAAE,CAACkE,WAAW,EAAgB;IACnE,QAAQ5C,MAAM;MACZ,KAAK,KAAK;QACR,OAAO6C,gBAAE,CAACC,GAAG,CAACJ,KAAK,CAAC;MACtB,KAAK,KAAK;QACR,OAAOG,gBAAE,CAACE,GAAG,CAACL,KAAK,CAAC;MACtB,KAAK,MAAM;QACT,OAAOG,gBAAE,CAACG,IAAI,CAACN,KAAK,CAAC;MACvB,KAAK,OAAO;QACV,OAAOG,gBAAE,CAACI,KAAK,CAACP,KAAK,CAAC;MACxB,KAAK,QAAQ;QACX,OAAOG,gBAAE,CAACE,GAAG,CAACL,KAAK,CAAC;MACtB,KAAK,MAAM;QACT,OAAOG,gBAAE,CAACK,IAAI,CAACR,KAAK,CAAC;MACvB;QACE,OAAOG,gBAAE,CAACC,GAAG,CAACJ,KAAK,CAAC;IAAA;EAE1B;EAEMS,MAAMA,CACVC,QAAmD,EACnDpD,MAAkB,EAClBC,IAAY,EACZC,WAAoB,EACpBC,IAAU,EACVC,aAA6B,EAC7BN,OAAqC,EAClB;IAAA,IAAAuD,MAAA;IAAA,OAAApF,iBAAA;MACnB,IAAMkF,MAAM,GAAG,IAAIG,2BAAW,EAAE;MAChC,IAAMC,aAAa,GAAGH,QAAQ,CAACD,MAAM,CAAC;MACtC,IAAM7C,IAAI,SAAS+C,MAAI,CAAC9C,WAAW,CACjCP,MAAM,EACNC,IAAI,EACJC,WAAW,EACXC,IAAI,EACJC,aAAa,EACbN,OAAO,CACR;MAED,IAAM0D,aAAa,GAAG,IAAIzF,OAAO,CAAO,CAACP,OAAO,EAAEC,MAAM,KAAK;QAC3D,IAAAgG,aAAK,gDAA+CnD,IAAI,CAAC;QACzD,IAAIoD,WAAW,GAAG,KAAK;QACvB,IAAMlD,GAAG,GAAG6C,MAAI,CAACZ,SAAS,CAACnC,IAAI,CAAC;QAEhCE,GAAG,CACAmD,EAAE,CAAC,OAAO,EAAGtF,GAAG,IAAK;UACpB,IAAIqF,WAAW,IAAKrF,GAAG,CAASuF,IAAI,KAAK,YAAY,EAAE;YACrD,IAAAH,aAAK,EACH,4DAA4D,EAC5DnD,IAAI,CACL;UACH,CAAC,MAAM;YACL,IAAAmD,aAAK,EAAC,iBAAiB,EAAEpF,GAAG,CAAC;YAC7BZ,MAAM,CAACY,GAAG,CAAC;UACb;QACF,CAAC,CAAC,CACDsF,EAAE,CAAC,QAAQ,EAAE,MAAM;UAClB,IAAAF,aAAK,kDAAiDnD,IAAI,CAAC;QAC7D,CAAC,CAAC,CACDqD,EAAE,CAAC,QAAQ,EAAGE,MAAM,IAAK;UACxB,IAAAJ,aAAK,0CAAyCnD,IAAI,CAAC;UACnDuD,MAAM,CAACC,YAAY,CAAC,IAAI,CAAC;QAC3B,CAAC,CAAC,CACDH,EAAE,CAAC,OAAO,EAAE,MAAM;UACjB,IAAAF,aAAK,iDAAgDnD,IAAI,CAAC;QAC5D,CAAC,CAAC,CACDqD,EAAE,CAAC,UAAU,EAAE,MAAM;UACpB,IAAAF,aAAK,6CAA4CnD,IAAI,CAAC;QACxD,CAAC,CAAC,CACDqD,EAAE,CAAC,OAAO,EAAE,MAAM;UACjB,IAAAF,aAAK,oCAAmCnD,IAAI,CAAC;QAC/C,CAAC,CAAC,CACDyD,IAAI,CAACZ,MAAM,CAAC,CACZQ,EAAE,CAAC,OAAO,EAAGtF,GAAG,IAAK;UACpB,IAAAoF,aAAK,uCAAsCpF,GAAG,CAAC;UAC/CZ,MAAM,CAACY,GAAG,CAAC;QACb,CAAC,CAAC,CACDsF,EAAE,CAAC,QAAQ,EAAE,MAAM;UAClB,IAAAF,aAAK,0CAAyCnD,IAAI,CAAC;UACnD9C,OAAO,EAAE;UACTkG,WAAW,GAAG,IAAI;QACpB,CAAC,CAAC,CACDC,EAAE,CAAC,OAAO,EAAE,MAAM;UACjB,IAAAF,aAAK,wCAAuCnD,IAAI,CAAC;QACnD,CAAC,CAAC;MACN,CAAC,CAAC;MAEF,IAAM0D,OAAO,SAASjG,OAAO,CAACkG,GAAG,CAAC,CAACV,aAAa,EAAEC,aAAa,CAAC,CAAC;MACjE,OAAOQ,OAAO,CAAC,CAAC,CAAC;IAAA;EACnB;EAOAE,SAASA,CAACpE,OAAqC,EAAE;IAC/C,IAAI,CAACA,OAAO,EAAEA,OAAO,GAAG,IAAI,CAACA,OAAO;IACpC,OAAO,YAAY,IAAIA,OAAO,GAAGA,OAAO,CAACqE,UAAU,GAAG,IAAI;EAC5D;EAOAC,OAAOA,CAACtE,OAAqC,EAAU;IACrD,IAAI,CAACA,OAAO,EAAEA,OAAO,GAAG,IAAI,CAACA,OAAO;IACpC,IAAI,SAAS,IAAIA,OAAO,IAAIA,OAAO,CAACsE,OAAO,EAAE,OAAOtE,OAAO,CAACsE,OAAO;IACnE,OAAOC,sBAAc;EACvB;EAEc9D,WAAWA,CACvBP,MAAkB,EAClBC,IAAY,EACZC,WAAiB,EACjBC,IAAU,EACVC,aAA6B,EAC7BN,OAAqC,EACrC;IAAA,IAAAwE,MAAA;IAAA,OAAArG,iBAAA;MACA6B,OAAO,GAAGA,OAAO,GAAArE,aAAA,CAAAA,aAAA,KAAQ6I,MAAI,CAACxE,OAAO,GAAKA,OAAO,IAAKwE,MAAI,CAACxE,OAAO;MAClE,IAAI,CAACA,OAAO,CAACyE,QAAQ,EAAE;QACrBzE,OAAO,CAACyE,QAAQ,GAAGC,mBAAW;MAChC;MACA,IAAMrD,OAAwB,GAAA1F,aAAA;QAC5B,CAACgJ,mBAAW,GAAG3E,OAAO,CAACyE;MAAQ,GAC5BzE,OAAO,CAACqB,OAAO,CACnB;MAED,IAAMuD,WAAW,GAAGJ,MAAI,CAACK,OAAO,CAAC1E,IAAI,EAAEH,OAAO,EAAEI,WAAW,CAAC;MAC5D,IAAII,IAAoB,GAAG;QACzBH,IAAI,EAAEA,IAAI,IAAIlD,SAAS;QACvB2H,QAAQ,EAAE,IAAI;QACdzD,OAAO,EAAEA,OAAO;QAChB0D,IAAI,EAAE1E,IAAI,IAAI,OAAOA,IAAI,KAAK,QAAQ;QAEtCH,MAAM;QAEN8E,kBAAkB,EAAER,MAAI,CAACJ,SAAS,CAACpE,OAAO,CAAC;QAG3CiF,uBAAuB,EAAE,IAAI;QAE7BX,OAAO,EAAEE,MAAI,CAACF,OAAO,CAACtE,OAAO,CAAC,GAAG,IAAI;QACrCmB,GAAG,EAAEyD;MACP,CAAC;MACD,IAAI,UAAU,IAAI5E,OAAO,EAAEQ,IAAI,CAACsE,QAAQ,GAAG9E,OAAO,CAAC8E,QAAQ;MAE3D,IAAIxE,aAAa,EAAE;QAEjBE,IAAI,SAASF,aAAa,CAACE,IAAI,CAAC;MAClC;MACA,OAAOA,IAAI;IAAA;EACb;AAiGF;AAACZ,OAAA,CAAAC,aAAA,GAAAA,aAAA"}
|
|
1
|
+
{"version":3,"file":"nodeTransport.js","names":["nodeCrypto","rq","rp","PassThrough","StatusCodeError","BaseTransport","ResponseMode","defaultTimeout","responseMode","trace","LookerAppId","agentPrefix","safeBase64","utf8","asString","value","Buffer","from","toString","Object","JSON","stringify","NodeCryptoHash","secureRandom","byteCount","randomBytes","sha256Hash","message","_asyncToGenerator","hash","createHash","update","Uint8Array","digest","NodeTransport","constructor","options","rawRequest","method","path","queryParams","body","authenticator","_this","init","initRequest","req","promise","rawResponse","requestStarted","Date","now","responseCompleted","res","resTyped","url","contentType","String","headers","ok","statusCode","statusMessage","e","concat","error","observer","parseResponse","mode","response","parse","_unused","result","string","match","err","_result","request","_this2","type","requestor","props","_props$method","toUpperCase","get","put","post","patch","head","stream","callback","_this3","returnPromise","streamPromise","Promise","resolve","reject","hasResolved","on","code","socket","setKeepAlive","pipe","results","all","verifySsl","verify_ssl","timeout","_this4","_objectSpread","agentTag","requestPath","makeUrl","undefined","encoding","json","rejectUnauthorized","resolveWithFullResponse"],"sources":["../../src/nodeTransport.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport nodeCrypto from 'crypto'\nimport type { Request } from 'request'\nimport rq from 'request'\n\nimport rp from 'request-promise-native'\nimport type { Readable } from 'readable-stream'\nimport { PassThrough } from 'readable-stream'\nimport { StatusCodeError } from 'request-promise-native/errors'\nimport {\n BaseTransport,\n ResponseMode,\n defaultTimeout,\n responseMode,\n trace,\n LookerAppId,\n agentPrefix,\n safeBase64,\n} from '@looker/sdk-rtl'\nimport type {\n Authenticator,\n HttpMethod,\n ISDKError,\n ITransportSettings,\n SDKResponse,\n Values,\n IRequestHeaders,\n IRawResponse,\n ICryptoHash,\n} from '@looker/sdk-rtl'\n\nconst utf8 = 'utf8'\n\nconst asString = (value: any): string => {\n if (value instanceof Buffer) {\n return Buffer.from(value).toString(utf8)\n }\n if (value instanceof Object) {\n return JSON.stringify(value)\n }\n return value.toString()\n}\n\nexport class NodeCryptoHash implements ICryptoHash {\n secureRandom(byteCount: number): string {\n // TODO update this to Node 18\n return nodeCrypto.randomBytes(byteCount).toString('hex')\n }\n\n async sha256Hash(message: string): Promise<string> {\n const hash = nodeCrypto.createHash('sha256')\n hash.update(message)\n return safeBase64(new Uint8Array(hash.digest()))\n }\n}\n\nexport type RequestOptions = rq.RequiredUriUrl &\n rp.RequestPromiseOptions &\n rq.OptionsWithUrl\n\nexport class NodeTransport extends BaseTransport {\n constructor(protected readonly options: ITransportSettings) {\n super(options)\n }\n\n async rawRequest(\n method: HttpMethod,\n path: string,\n queryParams?: Values,\n body?: any,\n authenticator?: Authenticator,\n options?: Partial<ITransportSettings>\n ): Promise<IRawResponse> {\n const init: RequestOptions = await this.initRequest(\n method,\n path,\n queryParams,\n body,\n authenticator,\n options\n )\n const req = rp(init).promise()\n let rawResponse: IRawResponse\n\n const requestStarted = Date.now()\n let responseCompleted\n try {\n const res = await req\n responseCompleted = Date.now()\n const resTyped = res as rq.Response\n rawResponse = {\n method,\n url: resTyped.url || init.url.toString() || '',\n body: await resTyped.body,\n contentType: String(resTyped.headers['content-type']),\n ok: true,\n statusCode: resTyped.statusCode,\n statusMessage: resTyped.statusMessage,\n headers: res.headers,\n requestStarted,\n responseCompleted,\n }\n // Update OK with response statusCode check\n rawResponse.ok = this.ok(rawResponse)\n } catch (e: any) {\n let statusMessage = `${method} ${path}`\n let statusCode = 404\n let contentType = 'text'\n let body\n responseCompleted = Date.now()\n if (e instanceof StatusCodeError) {\n statusCode = e.statusCode\n if (e.error instanceof Buffer) {\n body = asString(e.error)\n statusMessage += `: ${statusCode}`\n } else if (e.error instanceof Object) {\n // Capture error object as body\n body = e.error\n statusMessage += `: ${e.message}`\n // Clarify the error message\n body.message = statusMessage\n contentType = 'application/json'\n }\n } else if (e.error instanceof Buffer) {\n body = asString(e.error)\n } else {\n body = JSON.stringify(e)\n contentType = 'application/json'\n }\n rawResponse = {\n method,\n url: init.url.toString(),\n body,\n contentType,\n ok: false,\n statusCode,\n statusMessage,\n headers: {},\n requestStarted,\n responseCompleted,\n }\n }\n return this.observer ? this.observer(rawResponse) : rawResponse\n }\n\n async parseResponse<TSuccess, TError>(res: IRawResponse) {\n const mode = responseMode(res.contentType)\n let response: SDKResponse<TSuccess, TError>\n let error\n if (!res.ok) {\n // Raw request had an error. Make sure it's a string before parsing the result\n error = res.body\n if (typeof error === 'string') {\n try {\n error = JSON.parse(error)\n } catch {\n error = { message: `Request failed: ${error}` }\n }\n }\n response = { ok: false, error }\n return response\n }\n let result = await res.body\n if (mode === ResponseMode.string) {\n if (res.contentType.match(/^application\\/.*\\bjson\\b/g)) {\n try {\n if (result instanceof Buffer) {\n result = Buffer.from(result).toString(utf8)\n }\n if (!(result instanceof Object)) {\n result = JSON.parse(result.toString())\n }\n } catch (err) {\n error = err\n }\n } else if (!error) {\n // Convert to string otherwise\n result = asString(result)\n }\n } else {\n try {\n result = Buffer.from(result ?? '').toString('binary')\n } catch (err) {\n error = err\n }\n }\n if (!error) {\n response = { ok: true, value: result }\n } else {\n response = { ok: false, error: error as TError }\n }\n return response\n }\n\n async request<TSuccess, TError>(\n method: HttpMethod,\n path: string,\n queryParams?: Values,\n body?: any,\n authenticator?: Authenticator,\n options?: Partial<ITransportSettings>\n ): Promise<SDKResponse<TSuccess, TError>> {\n try {\n const res = await this.rawRequest(\n method,\n path,\n queryParams,\n body,\n authenticator,\n options\n )\n return await this.parseResponse<TSuccess, TError>(res)\n } catch (e: any) {\n const error: ISDKError = {\n message:\n typeof e.message === 'string'\n ? e.message\n : `The SDK call was not successful. The error was '${e}'.`,\n type: 'sdk_error',\n }\n return { error, ok: false }\n }\n }\n\n /**\n * Http method dispatcher from general-purpose request properties\n * @param props\n * @returns {request.Request}\n */\n protected requestor(props: RequestOptions): Request {\n const method = props.method?.toString().toUpperCase() as HttpMethod\n switch (method) {\n case 'GET':\n return rq.get(props)\n case 'PUT':\n return rq.put(props)\n case 'POST':\n return rq.post(props)\n case 'PATCH':\n return rq.patch(props)\n case 'DELETE':\n return rq.put(props)\n case 'HEAD':\n return rq.head(props)\n default:\n return rq.get(props)\n }\n }\n\n async stream<TSuccess>(\n callback: (readable: Readable) => Promise<TSuccess>,\n method: HttpMethod,\n path: string,\n queryParams?: Values,\n body?: any,\n authenticator?: Authenticator,\n options?: Partial<ITransportSettings>\n ): Promise<TSuccess> {\n const stream = new PassThrough()\n const returnPromise = callback(stream)\n const init = await this.initRequest(\n method,\n path,\n queryParams,\n body,\n authenticator,\n options\n )\n\n const streamPromise = new Promise<void>((resolve, reject) => {\n trace(`[stream] beginning stream via download url`, init)\n let hasResolved = false\n const req = this.requestor(init)\n\n req\n .on('error', (err) => {\n if (hasResolved && (err as any).code === 'ECONNRESET') {\n trace(\n 'ignoring ECONNRESET that occurred after streaming finished',\n init\n )\n } else {\n trace('streaming error', err)\n reject(err)\n }\n })\n .on('finish', () => {\n trace(`[stream] streaming via download url finished`, init)\n })\n .on('socket', (socket) => {\n trace(`[stream] setting keepalive on socket`, init)\n socket.setKeepAlive(true)\n })\n .on('abort', () => {\n trace(`[stream] streaming via download url aborted`, init)\n })\n .on('response', () => {\n trace(`[stream] got response from download url`, init)\n })\n .on('close', () => {\n trace(`[stream] request stream closed`, init)\n })\n .pipe(stream)\n .on('error', (err) => {\n trace(`[stream] PassThrough stream error`, err)\n reject(err)\n })\n .on('finish', () => {\n trace(`[stream] PassThrough stream finished`, init)\n resolve()\n hasResolved = true\n })\n .on('close', () => {\n trace(`[stream] PassThrough stream closed`, init)\n })\n })\n\n const results = await Promise.all([returnPromise, streamPromise])\n return results[0]\n }\n\n /**\n * should the request verify SSL?\n * @param {Partial<ITransportSettings>} options Defaults to the instance options values\n * @returns {boolean} true if the request should require full SSL verification\n */\n verifySsl(options?: Partial<ITransportSettings>) {\n if (!options) options = this.options\n return 'verify_ssl' in options ? options.verify_ssl : true\n }\n\n /**\n * Request timeout in seconds\n * @param {Partial<ITransportSettings>} options Defaults to the instance options values\n * @returns {number | undefined}\n */\n timeout(options?: Partial<ITransportSettings>): number {\n if (!options) options = this.options\n if ('timeout' in options && options.timeout) return options.timeout\n return defaultTimeout\n }\n\n private async initRequest(\n method: HttpMethod,\n path: string,\n queryParams?: any,\n body?: any,\n authenticator?: Authenticator,\n options?: Partial<ITransportSettings>\n ) {\n options = options ? { ...this.options, ...options } : this.options\n if (!options.agentTag) {\n options.agentTag = agentPrefix\n }\n const headers: IRequestHeaders = {\n [LookerAppId]: options.agentTag,\n ...options.headers,\n }\n\n const requestPath = this.makeUrl(path, options, queryParams)\n let init: RequestOptions = {\n body: body || undefined,\n encoding: null,\n headers: headers,\n json: body && typeof body !== 'string',\n // null = requests are returned as binary so `Content-Type` dictates response format\n method,\n\n rejectUnauthorized: this.verifySsl(options),\n\n // If body is a string, pass as is\n resolveWithFullResponse: true,\n\n timeout: this.timeout(options) * 1000,\n url: requestPath,\n }\n if ('encoding' in options) init.encoding = options.encoding\n\n if (authenticator) {\n // Automatic authentication process for the request\n init = await authenticator(init)\n }\n return init\n }\n\n // /**\n // * A streaming helper for the \"json\" data format. It handles automatically parsing\n // * the JSON in a streaming fashion. You just need to implement a function that will\n // * be called for each row.\n // *\n // * ```ts\n // * await request.streamJson((row) => {\n // * // This will be called for each row of data\n // * })\n // * ```\n // *\n // * @returns A promise that will be resolved when streaming is complete.\n // * @param onRow A function that will be called for each streamed row, with the row as the first argument.\n // */\n // async streamJson(onRow: (row: { [fieldName: string]: any }) => void) {\n // return new Promise<void>((resolve, reject) => {\n // let rows = 0\n // this.stream(async (readable) => {\n // oboe(readable)\n // .node(\"![*]\", this.safeOboe(readable, reject, (row) => {\n // rows++\n // onRow(row)\n // }))\n // .done(() => {\n // winston.info(`[streamJson] oboe reports done`, {...this.logInfo, rows})\n // })\n // }).then(() => {\n // winston.info(`[streamJson] complete`, {...this.logInfo, rows})\n // resolve()\n // }).catch((error) => {\n // // This error should not be logged as it could come from an action\n // // which might decide to include user information in the error message\n // winston.info(`[streamJson] reported an error`, {...this.logInfo, rows})\n // reject(error)\n // })\n // })\n // }\n //\n // /**\n // * A streaming helper for the \"json_detail\" data format. It handles automatically parsing\n // * the JSON in a streaming fashion. You can implement an `onFields` callback to get\n // * the field metadata, and an `onRow` callback for each row of data.\n // *\n // * ```ts\n // * await request.streamJsonDetail({\n // * onFields: (fields) => {\n // * // This will be called when fields are available\n // * },\n // * onRow: (row) => {\n // * // This will be called for each row of data\n // * },\n // * })\n // * ```\n // *\n // * @returns A promise that will be resolved when streaming is complete.\n // * @param callbacks An object consisting of several callbacks that will be called\n // * when various parts of the data are parsed.\n // */\n // async streamJsonDetail(callbacks: {\n // onRow: (row: JsonDetailRow) => void,\n // onFields?: (fields: Fieldset) => void,\n // onRanAt?: (iso8601string: string) => void,\n // }) {\n // return new Promise<void>((resolve, reject) => {\n // let rows = 0\n // this.stream(async (readable) => {\n // oboe(readable)\n // .node(\"data.*\", this.safeOboe(readable, reject, (row) => {\n // rows++\n // callbacks.onRow(row)\n // }))\n // .node(\"!.fields\", this.safeOboe(readable, reject, (fields) => {\n // if (callbacks.onFields) {\n // callbacks.onFields(fields)\n // }\n // }))\n // .node(\"!.ran_at\", this.safeOboe(readable, reject, (ranAt) => {\n // if (callbacks.onRanAt) {\n // callbacks.onRanAt(ranAt)\n // }\n // }))\n // .done(() => {\n // winston.info(`[streamJsonDetail] oboe reports done`, {...this.logInfo, rows})\n // })\n // }).then(() => {\n // winston.info(`[streamJsonDetail] complete`, {...this.logInfo, rows})\n // resolve()\n // }).catch((error) => {\n // // This error should not be logged as it could come from an action\n // // which might decide to include user information in the error message\n // winston.info(`[streamJsonDetail] reported an error`, {...this.logInfo, rows})\n // reject(error)\n // })\n // })\n // }\n}\n"],"mappings":"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"}
|
|
@@ -1,17 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
var _testUtils = require("./testUtils");
|
|
7
|
-
Object.keys(_testUtils).forEach(function (key) {
|
|
8
|
-
if (key === "default" || key === "__esModule") return;
|
|
9
|
-
if (key in exports && exports[key] === _testUtils[key]) return;
|
|
10
|
-
Object.defineProperty(exports, key, {
|
|
11
|
-
enumerable: true,
|
|
12
|
-
get: function get() {
|
|
13
|
-
return _testUtils[key];
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
});
|
|
1
|
+
export * from './testUtils';
|
|
17
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/testUtils/index.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nexport * from './testUtils'\n"],"mappings":"AA0BA,cAAc,aAAa"}
|
|
@@ -1,28 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
6
|
-
exports.rootFile = exports.getRootPath = exports.TestConfig = void 0;
|
|
7
|
-
var fs = _interopRequireWildcard(require("fs"));
|
|
8
|
-
var _path = _interopRequireDefault(require("path"));
|
|
9
|
-
var _dotenv = require("dotenv");
|
|
10
|
-
var _nodeSettings = require("../nodeSettings");
|
|
11
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
13
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { config } from 'dotenv';
|
|
4
|
+
import { readIniConfig } from '../nodeSettings';
|
|
14
5
|
var utf8 = 'utf-8';
|
|
15
6
|
var homeToRoost = '../../../../';
|
|
16
|
-
var getRootPath = () =>
|
|
17
|
-
|
|
18
|
-
var rootFile = function rootFile() {
|
|
7
|
+
export var getRootPath = () => path.join(__dirname, homeToRoost);
|
|
8
|
+
export var rootFile = function rootFile() {
|
|
19
9
|
var fileName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
20
|
-
return
|
|
10
|
+
return path.join(getRootPath(), fileName);
|
|
21
11
|
};
|
|
22
|
-
|
|
23
|
-
var TestConfig = function TestConfig() {
|
|
12
|
+
export var TestConfig = function TestConfig() {
|
|
24
13
|
var rootPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
25
|
-
|
|
14
|
+
config();
|
|
26
15
|
var testFile = 'data.yml.json';
|
|
27
16
|
var envPrefix = 'LOOKERSDK';
|
|
28
17
|
var sectionName = 'Looker';
|
|
@@ -32,10 +21,10 @@ var TestConfig = function TestConfig() {
|
|
|
32
21
|
var dataFile = "".concat(testPath).concat(testFile);
|
|
33
22
|
var testData = JSON.parse(fs.readFileSync(dataFile, utf8));
|
|
34
23
|
var testIni = "".concat(rootPath).concat(testData.iniFile);
|
|
35
|
-
var section =
|
|
24
|
+
var section = readIniConfig(localIni, envPrefix, sectionName);
|
|
36
25
|
var baseUrl = section.base_url;
|
|
37
26
|
var timeout = parseInt(section.timeout, 10);
|
|
38
|
-
var testSection =
|
|
27
|
+
var testSection = readIniConfig(localIni, envPrefix, sectionName);
|
|
39
28
|
if (!fs.existsSync(localIni)) localIni = '';
|
|
40
29
|
if (!fs.existsSync(testIni)) testIni = '';
|
|
41
30
|
return {
|
|
@@ -51,5 +40,4 @@ var TestConfig = function TestConfig() {
|
|
|
51
40
|
timeout
|
|
52
41
|
};
|
|
53
42
|
};
|
|
54
|
-
exports.TestConfig = TestConfig;
|
|
55
43
|
//# sourceMappingURL=testUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testUtils.js","names":["fs","
|
|
1
|
+
{"version":3,"file":"testUtils.js","names":["fs","path","config","readIniConfig","utf8","homeToRoost","getRootPath","join","__dirname","rootFile","fileName","arguments","length","undefined","TestConfig","rootPath","testFile","envPrefix","sectionName","localIni","process","env","LOOKERSDK_INI","testPath","dataFile","concat","testData","JSON","parse","readFileSync","testIni","iniFile","section","baseUrl","base_url","timeout","parseInt","testSection","existsSync"],"sources":["../../../src/testUtils/testUtils.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport * as fs from 'fs'\nimport path from 'path'\nimport { config } from 'dotenv'\nimport { readIniConfig } from '../nodeSettings'\n\ninterface IKeyAny {\n [key: string]: any\n}\n\nconst utf8 = 'utf-8'\n\n/**\n * Properties used for various typescript-based tests\n */\nexport interface ITestConfig {\n rootPath: string\n testPath: string\n dataFile: string\n localIni: string\n baseUrl: string\n timeout: number\n testData: any\n testIni: string\n section: IKeyAny\n testSection: IKeyAny\n}\n\nconst homeToRoost = '../../../../'\n\nexport const getRootPath = () => path.join(__dirname, homeToRoost)\nexport const rootFile = (fileName = '') => path.join(getRootPath(), fileName)\n\n/**\n * Reads configuration information, returning various test values\n * @param {string} rootPath\n * @returns {{testConfig: {[p: string]: any}; localIni: string; baseUrl: any; testData: any; apiVersion: any; testIni: string; configContents: string; rootPath: string; testSection: any; timeout: number}}\n * @constructor\n */\nexport const TestConfig = (rootPath = ''): ITestConfig => {\n config()\n const testFile = 'data.yml.json'\n const envPrefix = 'LOOKERSDK'\n const sectionName = 'Looker'\n rootPath = rootPath || getRootPath()\n let localIni = process.env.LOOKERSDK_INI || rootFile('looker.ini')\n const testPath = rootFile('test/')\n const dataFile = `${testPath}${testFile}`\n const testData = JSON.parse(fs.readFileSync(dataFile, utf8))\n let testIni = `${rootPath}${testData.iniFile}`\n const section = readIniConfig(localIni, envPrefix, sectionName)\n const baseUrl = section.base_url\n const timeout = parseInt(section.timeout, 10)\n const testSection = readIniConfig(localIni, envPrefix, sectionName)\n\n // If .ini files don't exist, don't try to read them downstream and expect environment variables to be set\n if (!fs.existsSync(localIni)) localIni = ''\n if (!fs.existsSync(testIni)) testIni = ''\n\n return {\n baseUrl,\n dataFile,\n localIni,\n rootPath,\n section,\n testData,\n testIni,\n testPath,\n testSection,\n timeout,\n }\n}\n"],"mappings":"AA0BA,OAAO,KAAKA,EAAE,MAAM,IAAI;AACxB,OAAOC,IAAI,MAAM,MAAM;AACvB,SAASC,MAAM,QAAQ,QAAQ;AAC/B,SAASC,aAAa,QAAQ,iBAAiB;AAM/C,IAAMC,IAAI,GAAG,OAAO;AAkBpB,IAAMC,WAAW,GAAG,cAAc;AAElC,OAAO,IAAMC,WAAW,GAAGA,CAAA,KAAML,IAAI,CAACM,IAAI,CAACC,SAAS,EAAEH,WAAW,CAAC;AAClE,OAAO,IAAMI,QAAQ,GAAG,SAAXA,QAAQA,CAAA;EAAA,IAAIC,QAAQ,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;EAAA,OAAKV,IAAI,CAACM,IAAI,CAACD,WAAW,CAAC,CAAC,EAAEI,QAAQ,CAAC;AAAA;AAQ7E,OAAO,IAAMI,UAAU,GAAG,SAAbA,UAAUA,CAAA,EAAmC;EAAA,IAA/BC,QAAQ,GAAAJ,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;EACtCT,MAAM,CAAC,CAAC;EACR,IAAMc,QAAQ,GAAG,eAAe;EAChC,IAAMC,SAAS,GAAG,WAAW;EAC7B,IAAMC,WAAW,GAAG,QAAQ;EAC5BH,QAAQ,GAAGA,QAAQ,IAAIT,WAAW,CAAC,CAAC;EACpC,IAAIa,QAAQ,GAAGC,OAAO,CAACC,GAAG,CAACC,aAAa,IAAIb,QAAQ,CAAC,YAAY,CAAC;EAClE,IAAMc,QAAQ,GAAGd,QAAQ,CAAC,OAAO,CAAC;EAClC,IAAMe,QAAQ,MAAAC,MAAA,CAAMF,QAAQ,EAAAE,MAAA,CAAGT,QAAQ,CAAE;EACzC,IAAMU,QAAQ,GAAGC,IAAI,CAACC,KAAK,CAAC5B,EAAE,CAAC6B,YAAY,CAACL,QAAQ,EAAEpB,IAAI,CAAC,CAAC;EAC5D,IAAI0B,OAAO,MAAAL,MAAA,CAAMV,QAAQ,EAAAU,MAAA,CAAGC,QAAQ,CAACK,OAAO,CAAE;EAC9C,IAAMC,OAAO,GAAG7B,aAAa,CAACgB,QAAQ,EAAEF,SAAS,EAAEC,WAAW,CAAC;EAC/D,IAAMe,OAAO,GAAGD,OAAO,CAACE,QAAQ;EAChC,IAAMC,OAAO,GAAGC,QAAQ,CAACJ,OAAO,CAACG,OAAO,EAAE,EAAE,CAAC;EAC7C,IAAME,WAAW,GAAGlC,aAAa,CAACgB,QAAQ,EAAEF,SAAS,EAAEC,WAAW,CAAC;EAGnE,IAAI,CAAClB,EAAE,CAACsC,UAAU,CAACnB,QAAQ,CAAC,EAAEA,QAAQ,GAAG,EAAE;EAC3C,IAAI,CAACnB,EAAE,CAACsC,UAAU,CAACR,OAAO,CAAC,EAAEA,OAAO,GAAG,EAAE;EAEzC,OAAO;IACLG,OAAO;IACPT,QAAQ;IACRL,QAAQ;IACRJ,QAAQ;IACRiB,OAAO;IACPN,QAAQ;IACRI,OAAO;IACPP,QAAQ;IACRc,WAAW;IACXF;EACF,CAAC;AACH,CAAC"}
|
package/lib/nodeSdk.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { ITransport, IApiSettings, IAuthSession } from '@looker/sdk-rtl';
|
|
2
|
-
import {
|
|
2
|
+
import { Looker40SDK } from '@looker/sdk';
|
|
3
3
|
export declare class LookerNodeSDK {
|
|
4
|
-
static init31(settings?: IApiSettings, transport?: ITransport, session?: IAuthSession): Looker31SDK;
|
|
5
4
|
static init40(settings?: IApiSettings, transport?: ITransport, session?: IAuthSession): Looker40SDK;
|
|
6
5
|
}
|
package/lib/nodeSdk.js
CHANGED
|
@@ -7,12 +7,6 @@ exports.LookerNodeSDK = void 0;
|
|
|
7
7
|
var _sdk = require("@looker/sdk");
|
|
8
8
|
var _ = require(".");
|
|
9
9
|
class LookerNodeSDK {
|
|
10
|
-
static init31(settings, transport, session) {
|
|
11
|
-
settings = settings || new _.NodeSettingsIniFile(_sdk.environmentPrefix);
|
|
12
|
-
transport = transport || new _.NodeTransport(settings);
|
|
13
|
-
session = session || new _.NodeSession(settings, transport);
|
|
14
|
-
return new _sdk.Looker31SDK(session);
|
|
15
|
-
}
|
|
16
10
|
static init40(settings, transport, session) {
|
|
17
11
|
var _session;
|
|
18
12
|
settings = settings || new _.NodeSettingsIniFile(_sdk.environmentPrefix);
|
package/lib/nodeSdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeSdk.js","names":["_sdk","require","_","LookerNodeSDK","
|
|
1
|
+
{"version":3,"file":"nodeSdk.js","names":["_sdk","require","_","LookerNodeSDK","init40","settings","transport","session","_session","NodeSettingsIniFile","environmentPrefix","NodeTransport","NodeSession","Looker40SDK","exports"],"sources":["../src/nodeSdk.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { ITransport, IApiSettings, IAuthSession } from '@looker/sdk-rtl'\nimport { Looker40SDK, environmentPrefix } from '@looker/sdk'\nimport { NodeSettingsIniFile, NodeSession, NodeTransport } from '.'\n\n/**\n * @class LookerNodeSDK\n *\n * Simple factory for the Node version of the Looker SDK. Provides default connectivity for SDK methods\n *\n */\nexport class LookerNodeSDK {\n /**\n * Creates a [[Looker40SDK]] object.\n *\n * @param settings Defaults to the settings from LookerIni\n *\n * @param transport Defaults to a `NodeTransport` object\n *\n * @param session Defaults to `NodeSession` which logs in the user\n */\n static init40(\n settings?: IApiSettings,\n transport?: ITransport,\n session?: IAuthSession\n ) {\n settings = settings || new NodeSettingsIniFile(environmentPrefix)\n transport = transport || new NodeTransport(settings)\n session = session ?? new NodeSession(settings, transport)\n return new Looker40SDK(session)\n }\n}\n"],"mappings":";;;;;;AA2BA,IAAAA,IAAA,GAAAC,OAAA;AACA,IAAAC,CAAA,GAAAD,OAAA;AAQO,MAAME,aAAa,CAAC;EAUzB,OAAOC,MAAMA,CACXC,QAAuB,EACvBC,SAAsB,EACtBC,OAAsB,EACtB;IAAA,IAAAC,QAAA;IACAH,QAAQ,GAAGA,QAAQ,IAAI,IAAII,qBAAmB,CAACC,sBAAiB,CAAC;IACjEJ,SAAS,GAAGA,SAAS,IAAI,IAAIK,eAAa,CAACN,QAAQ,CAAC;IACpDE,OAAO,IAAAC,QAAA,GAAGD,OAAO,cAAAC,QAAA,cAAAA,QAAA,GAAI,IAAII,aAAW,CAACP,QAAQ,EAAEC,SAAS,CAAC;IACzD,OAAO,IAAIO,gBAAW,CAACN,OAAO,CAAC;EACjC;AACF;AAACO,OAAA,CAAAX,aAAA,GAAAA,aAAA"}
|
package/lib/nodeServices.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeServices.js","names":["_sdkRtl","require","_nodeTransport","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","NodeServices","constructor","services","settings","sdkError","message","transport","NodeTransport","crypto","NodeCryptoHash","exports"],"sources":["../src/nodeServices.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type {\n ICryptoHash,\n IApiSettings,\n ITransport,\n IPlatformServices,\n} from '@looker/sdk-rtl'\nimport { sdkError } from '@looker/sdk-rtl'\nimport { NodeCryptoHash, NodeTransport } from './nodeTransport'\n\nexport class NodeServices implements IPlatformServices {\n /** Cryptography service interface */\n crypto: ICryptoHash\n /** SDK configuration interface */\n settings: IApiSettings\n transport: ITransport\n\n constructor(services: Partial<IPlatformServices>) {\n if (!services.settings) {\n throw sdkError({ message: 'Missing required IApiSettings' })\n }\n this.settings = services.settings\n this.transport = services.transport || new NodeTransport(this.settings)\n this.crypto = services.crypto || new NodeCryptoHash()\n }\n}\n"],"mappings":";;;;;;AAgCA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AAA+D,SAAAE,gBAAAC,GAAA,EAAAC,GAAA,EAAAC,KAAA,IAAAD,GAAA,GAAAE,cAAA,CAAAF,GAAA,OAAAA,GAAA,IAAAD,GAAA,IAAAI,MAAA,CAAAC,cAAA,CAAAL,GAAA,EAAAC,GAAA,IAAAC,KAAA,EAAAA,KAAA,EAAAI,UAAA,QAAAC,YAAA,QAAAC,QAAA,oBAAAR,GAAA,CAAAC,GAAA,IAAAC,KAAA,WAAAF,GAAA;AAAA,SAAAG,eAAAM,GAAA,QAAAR,GAAA,GAAAS,YAAA,CAAAD,GAAA,2BAAAR,GAAA,gBAAAA,GAAA,GAAAU,MAAA,CAAAV,GAAA;AAAA,SAAAS,aAAAE,KAAA,EAAAC,IAAA,eAAAD,KAAA,iBAAAA,KAAA,kBAAAA,KAAA,MAAAE,IAAA,GAAAF,KAAA,CAAAG,MAAA,CAAAC,WAAA,OAAAF,IAAA,KAAAG,SAAA,QAAAC,GAAA,GAAAJ,IAAA,CAAAK,IAAA,CAAAP,KAAA,EAAAC,IAAA,2BAAAK,GAAA,sBAAAA,GAAA,YAAAE,SAAA,4DAAAP,IAAA,gBAAAF,MAAA,GAAAU,MAAA,EAAAT,KAAA;AAExD,MAAMU,YAAY,CAA8B;EAOrDC,WAAWA,CAACC,QAAoC,EAAE;IAAAzB,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAChD,IAAI,CAACyB,QAAQ,CAACC,QAAQ,EAAE;MACtB,MAAM,IAAAC,gBAAQ,EAAC;QAAEC,OAAO,EAAE;MAAgC,CAAC,CAAC;IAC9D;IACA,IAAI,CAACF,QAAQ,GAAGD,QAAQ,CAACC,QAAQ;IACjC,IAAI,CAACG,SAAS,GAAGJ,QAAQ,CAACI,SAAS,IAAI,IAAIC,4BAAa,CAAC,IAAI,CAACJ,QAAQ,CAAC;IACvE,IAAI,CAACK,MAAM,GAAGN,QAAQ,CAACM,MAAM,IAAI,IAAIC,6BAAc,
|
|
1
|
+
{"version":3,"file":"nodeServices.js","names":["_sdkRtl","require","_nodeTransport","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","NodeServices","constructor","services","settings","sdkError","message","transport","NodeTransport","crypto","NodeCryptoHash","exports"],"sources":["../src/nodeServices.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type {\n ICryptoHash,\n IApiSettings,\n ITransport,\n IPlatformServices,\n} from '@looker/sdk-rtl'\nimport { sdkError } from '@looker/sdk-rtl'\nimport { NodeCryptoHash, NodeTransport } from './nodeTransport'\n\nexport class NodeServices implements IPlatformServices {\n /** Cryptography service interface */\n crypto: ICryptoHash\n /** SDK configuration interface */\n settings: IApiSettings\n transport: ITransport\n\n constructor(services: Partial<IPlatformServices>) {\n if (!services.settings) {\n throw sdkError({ message: 'Missing required IApiSettings' })\n }\n this.settings = services.settings\n this.transport = services.transport || new NodeTransport(this.settings)\n this.crypto = services.crypto || new NodeCryptoHash()\n }\n}\n"],"mappings":";;;;;;AAgCA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AAA+D,SAAAE,gBAAAC,GAAA,EAAAC,GAAA,EAAAC,KAAA,IAAAD,GAAA,GAAAE,cAAA,CAAAF,GAAA,OAAAA,GAAA,IAAAD,GAAA,IAAAI,MAAA,CAAAC,cAAA,CAAAL,GAAA,EAAAC,GAAA,IAAAC,KAAA,EAAAA,KAAA,EAAAI,UAAA,QAAAC,YAAA,QAAAC,QAAA,oBAAAR,GAAA,CAAAC,GAAA,IAAAC,KAAA,WAAAF,GAAA;AAAA,SAAAG,eAAAM,GAAA,QAAAR,GAAA,GAAAS,YAAA,CAAAD,GAAA,2BAAAR,GAAA,gBAAAA,GAAA,GAAAU,MAAA,CAAAV,GAAA;AAAA,SAAAS,aAAAE,KAAA,EAAAC,IAAA,eAAAD,KAAA,iBAAAA,KAAA,kBAAAA,KAAA,MAAAE,IAAA,GAAAF,KAAA,CAAAG,MAAA,CAAAC,WAAA,OAAAF,IAAA,KAAAG,SAAA,QAAAC,GAAA,GAAAJ,IAAA,CAAAK,IAAA,CAAAP,KAAA,EAAAC,IAAA,2BAAAK,GAAA,sBAAAA,GAAA,YAAAE,SAAA,4DAAAP,IAAA,gBAAAF,MAAA,GAAAU,MAAA,EAAAT,KAAA;AAExD,MAAMU,YAAY,CAA8B;EAOrDC,WAAWA,CAACC,QAAoC,EAAE;IAAAzB,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAChD,IAAI,CAACyB,QAAQ,CAACC,QAAQ,EAAE;MACtB,MAAM,IAAAC,gBAAQ,EAAC;QAAEC,OAAO,EAAE;MAAgC,CAAC,CAAC;IAC9D;IACA,IAAI,CAACF,QAAQ,GAAGD,QAAQ,CAACC,QAAQ;IACjC,IAAI,CAACG,SAAS,GAAGJ,QAAQ,CAACI,SAAS,IAAI,IAAIC,4BAAa,CAAC,IAAI,CAACJ,QAAQ,CAAC;IACvE,IAAI,CAACK,MAAM,GAAGN,QAAQ,CAACM,MAAM,IAAI,IAAIC,6BAAc,CAAC,CAAC;EACvD;AACF;AAACC,OAAA,CAAAV,YAAA,GAAAA,YAAA"}
|
package/lib/nodeSession.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeSession.js","names":["_sdkRtl","require","_nodeTransport","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","_defineProperty","obj","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","res","call","TypeError","Number","strPost","strDelete","NodeSession","AuthSession","constructor","settings","transport","NodeTransport","AuthToken","activeToken","_sudoToken","access_token","_authToken","isAuthenticated","token","isActive","authenticate","props","_this","getToken","headers","Authorization","concat","isSudo","sudoId","_this2","login","reset","_this3","_login","toString","logout","_this4","result","_logout","sudoLogout","_this5","newId","_this6","section","readConfig","clientId","client_id","clientSecret","client_secret","sdkError","message","body","encodeParams","ok","request","apiPath","setToken","promise","encodeURI","init","accessToken","_this7","exports"],"sources":["../src/nodeSession.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type {\n IRequestProps,\n ITransport,\n HttpMethod,\n IApiSettings,\n IAccessToken,\n IError,\n} from '@looker/sdk-rtl'\nimport { sdkError, encodeParams, AuthToken, AuthSession } from '@looker/sdk-rtl'\nimport { NodeTransport } from './nodeTransport'\n\nconst strPost: HttpMethod = 'POST'\nconst strDelete: HttpMethod = 'DELETE'\n\nexport class NodeSession extends AuthSession {\n private readonly apiPath: string = '/api/4.0'\n _authToken: AuthToken = new AuthToken()\n _sudoToken: AuthToken = new AuthToken()\n\n constructor(public settings: IApiSettings, transport?: ITransport) {\n super(settings, transport || new NodeTransport(settings))\n }\n\n /**\n * Abstraction of AuthToken retrieval to support sudo mode\n */\n get activeToken() {\n if (this._sudoToken.access_token) {\n return this._sudoToken\n }\n return this._authToken\n }\n\n /**\n * Is there an active authentication token?\n */\n isAuthenticated() {\n // TODO I think this can be simplified\n const token = this.activeToken\n if (!(token && token.access_token)) return false\n return token.isActive()\n }\n\n /**\n * Add authentication data to the pending API request\n * @param props initialized API request properties\n *\n * @returns the updated request properties\n */\n async authenticate(props: IRequestProps) {\n const token = await this.getToken()\n if (token && token.access_token) {\n props.headers.Authorization = `Bearer ${token.access_token}`\n }\n return props\n }\n\n isSudo() {\n return !!this.sudoId && this._sudoToken.isActive()\n }\n\n /**\n * retrieve the current authentication token. If there is no active token, performs default\n * login to retrieve the token\n */\n async getToken() {\n if (!this.isAuthenticated()) {\n await this.login()\n }\n return this.activeToken\n }\n\n /**\n * Reset the authentication session\n */\n reset() {\n this.sudoId = ''\n this._authToken.reset()\n this._sudoToken.reset()\n }\n\n /**\n * Activate the authentication token for the API3 or sudo user\n * @param sudoId {string | number}: optional. If provided, impersonates the user specified\n *\n */\n async login(sudoId?: string | number) {\n if (sudoId || sudoId !== this.sudoId || !this.isAuthenticated()) {\n if (sudoId) {\n await this._login(sudoId.toString())\n } else {\n await this._login()\n }\n }\n return this.activeToken\n }\n\n /**\n * Logout the active user. If the active user is sudo, the session reverts to the API3 user\n */\n async logout() {\n let result = false\n if (this.isAuthenticated()) {\n result = await this._logout()\n }\n return result\n }\n\n private async sudoLogout() {\n let result = false\n if (this.isSudo()) {\n result = await this.logout() // Logout the current sudo\n this._sudoToken.reset()\n }\n return result\n }\n\n // internal login method that manages default auth token and sudo workflow\n private async _login(newId?: string) {\n // for linty freshness, always logout sudo if set\n await this.sudoLogout()\n\n if (newId !== this.sudoId) {\n // Assign new requested sudo id\n this.sudoId = newId || ''\n }\n\n if (!this._authToken.isActive()) {\n this.reset()\n // only retain client API3 credentials for the lifetime of the login request\n const section = this.settings.readConfig()\n const clientId = section.client_id\n const clientSecret = section.client_secret\n if (!clientId || !clientSecret) {\n throw sdkError({\n message: 'API credentials client_id and/or client_secret are not set',\n })\n }\n const body = encodeParams({\n client_id: clientId,\n client_secret: clientSecret,\n })\n // authenticate client\n const token = await this.ok(\n this.transport.request<IAccessToken, IError>(\n strPost,\n `${this.apiPath}/login`,\n undefined,\n body\n )\n )\n this._authToken.setToken(token)\n }\n\n if (this.sudoId) {\n // Use the API user auth to sudo\n const token = this.activeToken\n const promise = this.transport.request<IAccessToken, IError>(\n strPost,\n encodeURI(`${this.apiPath}/login/${newId}`),\n null,\n null,\n // ensure the auth token is included in the sudo request\n (init: IRequestProps) => {\n if (token.access_token) {\n init.headers.Authorization = `Bearer ${token.access_token}`\n }\n return init\n },\n this.settings // TODO this may not be needed here\n )\n\n const accessToken = await this.ok(promise)\n\n this._sudoToken.setToken(accessToken)\n }\n\n return this.activeToken\n }\n\n private async _logout() {\n const token = this.activeToken\n const promise = this.transport.request<string, IError>(\n strDelete,\n `${this.apiPath}/logout`,\n null,\n null,\n // ensure the auth token is included in the logout promise\n (init: IRequestProps) => {\n if (token.access_token) {\n init.headers.Authorization = `Bearer ${token.access_token}`\n }\n return init\n },\n this.settings\n )\n\n await this.ok(promise)\n\n // If no error was thrown, logout was successful\n if (this.sudoId) {\n // User was logged out, so set auth back to default\n this.sudoId = ''\n this._sudoToken.reset()\n if (!this._authToken.isActive()) {\n await this.login()\n }\n } else {\n // completely logged out\n this.reset()\n }\n return true\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nodeSession.js","names":["_sdkRtl","require","_nodeTransport","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","_defineProperty","obj","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","res","call","TypeError","Number","strPost","strDelete","NodeSession","AuthSession","constructor","settings","transport","NodeTransport","AuthToken","activeToken","_sudoToken","access_token","_authToken","isAuthenticated","token","isActive","authenticate","props","_this","getToken","headers","Authorization","concat","isSudo","sudoId","_this2","login","reset","_this3","_login","toString","logout","_this4","result","_logout","sudoLogout","_this5","newId","_this6","section","readConfig","clientId","client_id","clientSecret","client_secret","sdkError","message","body","encodeParams","ok","request","apiPath","setToken","promise","encodeURI","init","accessToken","_this7","exports"],"sources":["../src/nodeSession.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type {\n IRequestProps,\n ITransport,\n HttpMethod,\n IApiSettings,\n IAccessToken,\n IError,\n} from '@looker/sdk-rtl'\nimport { sdkError, encodeParams, AuthToken, AuthSession } from '@looker/sdk-rtl'\nimport { NodeTransport } from './nodeTransport'\n\nconst strPost: HttpMethod = 'POST'\nconst strDelete: HttpMethod = 'DELETE'\n\nexport class NodeSession extends AuthSession {\n private readonly apiPath: string = '/api/4.0'\n _authToken: AuthToken = new AuthToken()\n _sudoToken: AuthToken = new AuthToken()\n\n constructor(public settings: IApiSettings, transport?: ITransport) {\n super(settings, transport || new NodeTransport(settings))\n }\n\n /**\n * Abstraction of AuthToken retrieval to support sudo mode\n */\n get activeToken() {\n if (this._sudoToken.access_token) {\n return this._sudoToken\n }\n return this._authToken\n }\n\n /**\n * Is there an active authentication token?\n */\n isAuthenticated() {\n // TODO I think this can be simplified\n const token = this.activeToken\n if (!(token && token.access_token)) return false\n return token.isActive()\n }\n\n /**\n * Add authentication data to the pending API request\n * @param props initialized API request properties\n *\n * @returns the updated request properties\n */\n async authenticate(props: IRequestProps) {\n const token = await this.getToken()\n if (token && token.access_token) {\n props.headers.Authorization = `Bearer ${token.access_token}`\n }\n return props\n }\n\n isSudo() {\n return !!this.sudoId && this._sudoToken.isActive()\n }\n\n /**\n * retrieve the current authentication token. If there is no active token, performs default\n * login to retrieve the token\n */\n async getToken() {\n if (!this.isAuthenticated()) {\n await this.login()\n }\n return this.activeToken\n }\n\n /**\n * Reset the authentication session\n */\n reset() {\n this.sudoId = ''\n this._authToken.reset()\n this._sudoToken.reset()\n }\n\n /**\n * Activate the authentication token for the API3 or sudo user\n * @param sudoId {string | number}: optional. If provided, impersonates the user specified\n *\n */\n async login(sudoId?: string | number) {\n if (sudoId || sudoId !== this.sudoId || !this.isAuthenticated()) {\n if (sudoId) {\n await this._login(sudoId.toString())\n } else {\n await this._login()\n }\n }\n return this.activeToken\n }\n\n /**\n * Logout the active user. If the active user is sudo, the session reverts to the API3 user\n */\n async logout() {\n let result = false\n if (this.isAuthenticated()) {\n result = await this._logout()\n }\n return result\n }\n\n private async sudoLogout() {\n let result = false\n if (this.isSudo()) {\n result = await this.logout() // Logout the current sudo\n this._sudoToken.reset()\n }\n return result\n }\n\n // internal login method that manages default auth token and sudo workflow\n private async _login(newId?: string) {\n // for linty freshness, always logout sudo if set\n await this.sudoLogout()\n\n if (newId !== this.sudoId) {\n // Assign new requested sudo id\n this.sudoId = newId || ''\n }\n\n if (!this._authToken.isActive()) {\n this.reset()\n // only retain client API3 credentials for the lifetime of the login request\n const section = this.settings.readConfig()\n const clientId = section.client_id\n const clientSecret = section.client_secret\n if (!clientId || !clientSecret) {\n throw sdkError({\n message: 'API credentials client_id and/or client_secret are not set',\n })\n }\n const body = encodeParams({\n client_id: clientId,\n client_secret: clientSecret,\n })\n // authenticate client\n const token = await this.ok(\n this.transport.request<IAccessToken, IError>(\n strPost,\n `${this.apiPath}/login`,\n undefined,\n body\n )\n )\n this._authToken.setToken(token)\n }\n\n if (this.sudoId) {\n // Use the API user auth to sudo\n const token = this.activeToken\n const promise = this.transport.request<IAccessToken, IError>(\n strPost,\n encodeURI(`${this.apiPath}/login/${newId}`),\n null,\n null,\n // ensure the auth token is included in the sudo request\n (init: IRequestProps) => {\n if (token.access_token) {\n init.headers.Authorization = `Bearer ${token.access_token}`\n }\n return init\n },\n this.settings // TODO this may not be needed here\n )\n\n const accessToken = await this.ok(promise)\n\n this._sudoToken.setToken(accessToken)\n }\n\n return this.activeToken\n }\n\n private async _logout() {\n const token = this.activeToken\n const promise = this.transport.request<string, IError>(\n strDelete,\n `${this.apiPath}/logout`,\n null,\n null,\n // ensure the auth token is included in the logout promise\n (init: IRequestProps) => {\n if (token.access_token) {\n init.headers.Authorization = `Bearer ${token.access_token}`\n }\n return init\n },\n this.settings\n )\n\n await this.ok(promise)\n\n // If no error was thrown, logout was successful\n if (this.sudoId) {\n // User was logged out, so set auth back to default\n this.sudoId = ''\n this._sudoToken.reset()\n if (!this._authToken.isActive()) {\n await this.login()\n }\n } else {\n // completely logged out\n this.reset()\n }\n return true\n }\n}\n"],"mappings":"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"}
|