@looker/sdk-node 24.14.0 → 24.16.2

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.
@@ -6,11 +6,10 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
6
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); } }
7
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
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, LookerAppId, ResponseMode, agentPrefix, defaultTimeout, responseMode, safeBase64, trace } from '@looker/sdk-rtl';
9
+ import { Buffer } from 'buffer';
10
+ import * as process from 'process';
11
+ import { BaseTransport, BrowserTransport, ResponseMode, canRetry, initResponse, pauseForRetry, responseMode, retryError, retryWait, safeBase64, mergeOptions, verifySsl } from '@looker/sdk-rtl';
12
+ import { WritableStream } from 'node:stream/web';
14
13
  var utf8 = 'utf8';
15
14
  var asString = value => {
16
15
  if (value instanceof Buffer) {
@@ -38,68 +37,102 @@ export class NodeTransport extends BaseTransport {
38
37
  super(options);
39
38
  this.options = options;
40
39
  }
41
- rawRequest(method, path, queryParams, body, authenticator, options) {
40
+ retry(request) {
42
41
  var _this = this;
43
42
  return _asyncToGenerator(function* () {
44
- var init = yield _this.initRequest(method, path, queryParams, body, authenticator, options);
45
- var req = rp(init).promise();
46
- var rawResponse;
47
- var requestStarted = Date.now();
48
- var responseCompleted;
49
- try {
50
- var res = yield req;
51
- responseCompleted = Date.now();
52
- var resTyped = res;
53
- rawResponse = {
54
- method,
55
- url: resTyped.url || init.url.toString() || '',
56
- body: yield resTyped.body,
57
- contentType: String(resTyped.headers['content-type']),
58
- ok: true,
59
- statusCode: resTyped.statusCode,
60
- statusMessage: resTyped.statusMessage,
61
- headers: res.headers,
62
- requestStarted,
63
- responseCompleted
64
- };
65
- rawResponse.ok = _this.ok(rawResponse);
66
- } catch (e) {
67
- var statusMessage = "".concat(method, " ").concat(path);
68
- var statusCode = 404;
69
- var contentType = 'text';
70
- var _body;
71
- responseCompleted = Date.now();
72
- if (e instanceof StatusCodeError) {
73
- statusCode = e.statusCode;
74
- if (e.error instanceof Buffer) {
75
- _body = asString(e.error);
76
- statusMessage += ": ".concat(statusCode);
77
- } else if (e.error instanceof Object) {
78
- _body = e.error;
79
- statusMessage += ": ".concat(e.message);
80
- _body.message = statusMessage;
81
- contentType = 'application/json';
43
+ var _request$options, _newOpts$maxTries;
44
+ var {
45
+ method,
46
+ path,
47
+ queryParams,
48
+ body,
49
+ authenticator
50
+ } = request;
51
+ var newOpts = mergeOptions(_this.options, (_request$options = request.options) !== null && _request$options !== void 0 ? _request$options : {});
52
+ var requestPath = _this.makeUrl(path, newOpts, queryParams);
53
+ var waiter = newOpts.waitHandler || retryWait;
54
+ var props = yield _this.initRequest(method, requestPath, body, authenticator, newOpts);
55
+ var response = initResponse(method, requestPath);
56
+ var maxTries = (_newOpts$maxTries = newOpts.maxTries) !== null && _newOpts$maxTries !== void 0 ? _newOpts$maxTries : 1;
57
+ var attempt = 1;
58
+ var _loop = function* _loop() {
59
+ var req = fetch(props.url, props);
60
+ var requestStarted = Date.now();
61
+ try {
62
+ var res = yield req;
63
+ var responseCompleted = Date.now();
64
+ var started = BrowserTransport.markStart(BrowserTransport.markName(requestPath));
65
+ var contentType = String(res.headers.get('content-type'));
66
+ var mode = responseMode(contentType);
67
+ var responseBody = mode === ResponseMode.binary ? res.blob() : res.text();
68
+ if (!('fromRequest' in newOpts)) {
69
+ BrowserTransport.markEnd(requestPath, started);
70
+ }
71
+ var headers = {};
72
+ res.headers.forEach((value, key) => headers[key] = value);
73
+ response = {
74
+ method,
75
+ url: requestPath,
76
+ body: responseBody,
77
+ contentType,
78
+ statusCode: res.status,
79
+ statusMessage: res.statusText,
80
+ startMark: started,
81
+ headers,
82
+ requestStarted,
83
+ responseCompleted,
84
+ ok: true
85
+ };
86
+ response.ok = _this.ok(response);
87
+ if (canRetry(response.statusCode) && attempt < maxTries) {
88
+ var result = yield pauseForRetry(request, response, attempt, waiter);
89
+ if (result.response === 'cancel') {
90
+ if (result.reason) {
91
+ response.statusMessage = result.reason;
92
+ }
93
+ return "break";
94
+ } else if (result.response === 'error') {
95
+ if (result.reason) {
96
+ response.statusMessage = result.reason;
97
+ }
98
+ return {
99
+ v: retryError(response)
100
+ };
101
+ }
102
+ } else {
103
+ return "break";
82
104
  }
83
- } else if (e.error instanceof Buffer) {
84
- _body = asString(e.error);
85
- } else {
86
- _body = JSON.stringify(e);
87
- contentType = 'application/json';
105
+ attempt++;
106
+ } catch (e) {
107
+ response.ok = false;
108
+ response.body = e;
109
+ response.statusCode = e.statusCode;
110
+ response.statusMessage = e.message;
111
+ return {
112
+ v: response
113
+ };
88
114
  }
89
- rawResponse = {
90
- method,
91
- url: init.url.toString(),
92
- body: _body,
93
- contentType,
94
- ok: false,
95
- statusCode,
96
- statusMessage,
97
- headers: {},
98
- requestStarted,
99
- responseCompleted
100
- };
115
+ };
116
+ while (attempt <= maxTries) {
117
+ var _ret = yield* _loop();
118
+ if (_ret === "break") break;
119
+ if (typeof _ret === "object") return _ret.v;
101
120
  }
102
- return _this.observer ? _this.observer(rawResponse) : rawResponse;
121
+ return response;
122
+ })();
123
+ }
124
+ rawRequest(method, path, queryParams, body, authenticator, options) {
125
+ var _this2 = this;
126
+ return _asyncToGenerator(function* () {
127
+ var response = yield _this2.retry({
128
+ method,
129
+ path,
130
+ queryParams,
131
+ body,
132
+ authenticator,
133
+ options
134
+ });
135
+ return _this2.observer ? _this2.observer(response) : response;
103
136
  })();
104
137
  }
105
138
  parseResponse(res) {
@@ -108,7 +141,7 @@ export class NodeTransport extends BaseTransport {
108
141
  var response;
109
142
  var error;
110
143
  if (!res.ok) {
111
- error = res.body;
144
+ error = yield res.body;
112
145
  if (typeof error === 'string') {
113
146
  try {
114
147
  error = JSON.parse(error);
@@ -129,7 +162,7 @@ export class NodeTransport extends BaseTransport {
129
162
  if (res.contentType.match(/^application\/.*\bjson\b/g)) {
130
163
  try {
131
164
  if (result instanceof Buffer) {
132
- result = Buffer.from(result).toString(utf8);
165
+ result = Buffer.from(result).toString();
133
166
  }
134
167
  if (!(result instanceof Object)) {
135
168
  result = JSON.parse(result.toString());
@@ -142,8 +175,13 @@ export class NodeTransport extends BaseTransport {
142
175
  }
143
176
  } else {
144
177
  try {
145
- var _result;
146
- result = Buffer.from((_result = result) !== null && _result !== void 0 ? _result : '').toString('binary');
178
+ var body = yield result;
179
+ if (typeof body === 'string') {
180
+ result = body;
181
+ } else {
182
+ var bytes = yield body.arrayBuffer();
183
+ result = Buffer.from(bytes !== null && bytes !== void 0 ? bytes : '').toString('binary');
184
+ }
147
185
  } catch (err) {
148
186
  error = err;
149
187
  }
@@ -163,11 +201,11 @@ export class NodeTransport extends BaseTransport {
163
201
  })();
164
202
  }
165
203
  request(method, path, queryParams, body, authenticator, options) {
166
- var _this2 = this;
204
+ var _this3 = this;
167
205
  return _asyncToGenerator(function* () {
168
206
  try {
169
- var res = yield _this2.rawRequest(method, path, queryParams, body, authenticator, options);
170
- return yield _this2.parseResponse(res);
207
+ var res = yield _this3.rawRequest(method, path, queryParams, body, authenticator, options);
208
+ return yield _this3.parseResponse(res);
171
209
  } catch (e) {
172
210
  var error = {
173
211
  message: typeof e.message === 'string' ? e.message : "The SDK call was not successful. The error was '".concat(e, "'."),
@@ -180,106 +218,36 @@ export class NodeTransport extends BaseTransport {
180
218
  }
181
219
  })();
182
220
  }
183
- requestor(props) {
184
- var _props$method;
185
- var method = (_props$method = props.method) === null || _props$method === void 0 ? void 0 : _props$method.toString().toUpperCase();
186
- switch (method) {
187
- case 'GET':
188
- return rq.get(props);
189
- case 'PUT':
190
- return rq.put(props);
191
- case 'POST':
192
- return rq.post(props);
193
- case 'PATCH':
194
- return rq.patch(props);
195
- case 'DELETE':
196
- return rq.put(props);
197
- case 'HEAD':
198
- return rq.head(props);
199
- default:
200
- return rq.get(props);
201
- }
202
- }
203
221
  stream(callback, method, path, queryParams, body, authenticator, options) {
204
- var _this3 = this;
222
+ var _this4 = this;
205
223
  return _asyncToGenerator(function* () {
206
- var stream = new PassThrough();
207
- var returnPromise = callback(stream);
208
- var init = yield _this3.initRequest(method, path, queryParams, body, authenticator, options);
209
- var streamPromise = new Promise((resolve, reject) => {
210
- trace("[stream] beginning stream via download url", init);
211
- var hasResolved = false;
212
- var req = _this3.requestor(init);
213
- req.on('error', err => {
214
- if (hasResolved && err.code === 'ECONNRESET') {
215
- trace('ignoring ECONNRESET that occurred after streaming finished', init);
216
- } else {
217
- trace('streaming error', err);
218
- reject(err);
219
- }
220
- }).on('finish', () => {
221
- trace("[stream] streaming via download url finished", init);
222
- }).on('socket', socket => {
223
- trace("[stream] setting keepalive on socket", init);
224
- socket.setKeepAlive(true);
225
- }).on('abort', () => {
226
- trace("[stream] streaming via download url aborted", init);
227
- }).on('response', () => {
228
- trace("[stream] got response from download url", init);
229
- }).on('close', () => {
230
- trace("[stream] request stream closed", init);
231
- }).pipe(stream).on('error', err => {
232
- trace("[stream] PassThrough stream error", err);
233
- reject(err);
234
- }).on('finish', () => {
235
- trace("[stream] PassThrough stream finished", init);
236
- resolve();
237
- hasResolved = true;
238
- }).on('close', () => {
239
- trace("[stream] PassThrough stream closed", init);
240
- });
224
+ var newOpts = _objectSpread(_objectSpread({}, _this4.options), {}, {
225
+ options
241
226
  });
242
- var results = yield Promise.all([returnPromise, streamPromise]);
243
- return results[0];
227
+ var requestPath = _this4.makeUrl(path, newOpts, queryParams);
228
+ var init = yield _this4.initRequest(method, requestPath, body, authenticator, newOpts);
229
+ var response = yield fetch(requestPath, init);
230
+ return yield callback(response);
244
231
  })();
245
232
  }
246
- verifySsl(options) {
247
- if (!options) options = this.options;
248
- return 'verify_ssl' in options ? options.verify_ssl : true;
249
- }
250
- timeout(options) {
251
- if (!options) options = this.options;
252
- if ('timeout' in options && options.timeout) return options.timeout;
253
- return defaultTimeout;
254
- }
255
- initRequest(method, path, queryParams, body, authenticator, options) {
256
- var _this4 = this;
233
+ initRequest(method, path, body, authenticator, options) {
234
+ var _superprop_getInitRequest = () => super.initRequest,
235
+ _this5 = this;
257
236
  return _asyncToGenerator(function* () {
258
- options = options ? _objectSpread(_objectSpread({}, _this4.options), options) : _this4.options;
259
- if (!options.agentTag) {
260
- options.agentTag = agentPrefix;
237
+ var props = yield _superprop_getInitRequest().call(_this5, method, path, body, authenticator, options);
238
+ props.credentials = undefined;
239
+ if (!verifySsl(options)) {
240
+ process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
261
241
  }
262
- var headers = _objectSpread({
263
- [LookerAppId]: options.agentTag
264
- }, options.headers);
265
- var requestPath = _this4.makeUrl(path, options, queryParams);
266
- var init = {
267
- body: body || undefined,
268
- encoding: null,
269
- headers: headers,
270
- json: body && typeof body !== 'string',
271
- method,
272
- rejectUnauthorized: _this4.verifySsl(options),
273
- resolveWithFullResponse: true,
274
- timeout: _this4.timeout(options) * 1000,
275
- url: requestPath
276
- };
277
- if ('encoding' in options) init.encoding = options.encoding;
278
- if (authenticator) {
279
- init = yield authenticator(init);
280
- }
281
- return init;
242
+ return props;
282
243
  })();
283
244
  }
284
245
  }
246
+ export var createWritableStream = writer => {
247
+ return new WritableStream({
248
+ write: chunk => {
249
+ writer.write(chunk);
250
+ }
251
+ });
252
+ };
285
253
  //# sourceMappingURL=nodeTransport.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodeTransport.js","names":["nodeCrypto","rq","rp","PassThrough","StatusCodeError","BaseTransport","LookerAppId","ResponseMode","agentPrefix","defaultTimeout","responseMode","safeBase64","trace","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 LookerAppId,\n ResponseMode,\n agentPrefix,\n defaultTimeout,\n responseMode,\n safeBase64,\n trace,\n} from '@looker/sdk-rtl';\nimport type {\n Authenticator,\n HttpMethod,\n ICryptoHash,\n IRawResponse,\n IRequestHeaders,\n ISDKError,\n ITransportSettings,\n SDKResponse,\n Values,\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
+ {"version":3,"file":"nodeTransport.js","names":["nodeCrypto","Buffer","process","BaseTransport","BrowserTransport","ResponseMode","canRetry","initResponse","pauseForRetry","responseMode","retryError","retryWait","safeBase64","mergeOptions","verifySsl","WritableStream","utf8","asString","value","from","toString","Object","JSON","stringify","NodeCryptoHash","secureRandom","byteCount","randomBytes","sha256Hash","message","_asyncToGenerator","hash","createHash","update","Uint8Array","digest","NodeTransport","constructor","options","retry","request","_this","_request$options","_newOpts$maxTries","method","path","queryParams","body","authenticator","newOpts","requestPath","makeUrl","waiter","waitHandler","props","initRequest","response","maxTries","attempt","_loop","req","fetch","url","requestStarted","Date","now","res","responseCompleted","started","markStart","markName","contentType","String","headers","get","mode","responseBody","binary","blob","text","markEnd","forEach","key","statusCode","status","statusMessage","statusText","startMark","ok","result","reason","v","e","_ret","rawRequest","_this2","observer","parseResponse","error","parse","_unused","concat","string","match","err","bytes","arrayBuffer","_this3","type","stream","callback","_this4","_objectSpread","init","_superprop_getInitRequest","_this5","call","credentials","undefined","env","NODE_TLS_REJECT_UNAUTHORIZED","createWritableStream","writer","write","chunk"],"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 * as fs from 'fs';\n\nimport { Buffer } from 'buffer';\nimport * as process from 'process';\n\nimport type {\n Authenticator,\n HttpMethod,\n ICryptoHash,\n IRawRequest,\n IRawResponse,\n IRequestHeaders,\n ISDKError,\n ITransportSettings,\n SDKResponse,\n Values,\n} from '@looker/sdk-rtl';\nimport {\n BaseTransport,\n BrowserTransport,\n ResponseMode,\n canRetry,\n initResponse,\n pauseForRetry,\n responseMode,\n retryError,\n retryWait,\n safeBase64,\n mergeOptions,\n verifySsl,\n} from '@looker/sdk-rtl';\nimport { WritableStream } from 'node:stream/web';\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 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 class NodeTransport extends BaseTransport {\n constructor(protected readonly options: ITransportSettings) {\n super(options);\n }\n\n /**\n * Standard retry where requests will be retried based on configured\n * transport settings. If retry is not enabled, no requests will be retried\n *\n * This default retry pattern implements the \"full\" jitter algorithm\n * documented in https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/\n *\n * @param request options for HTTP request\n */\n async retry(request: IRawRequest): Promise<IRawResponse> {\n const { method, path, queryParams, body, authenticator } = request;\n const newOpts = mergeOptions(this.options, request.options ?? {});\n const requestPath = this.makeUrl(path, newOpts, queryParams);\n const waiter = newOpts.waitHandler || retryWait;\n const props = await this.initRequest(\n method,\n requestPath,\n body,\n authenticator,\n newOpts\n );\n let response = initResponse(method, requestPath);\n // TODO assign to MaxTries constant when retry is opt-out instead of opt-in\n const maxTries = newOpts.maxTries ?? 1; // MaxTries\n let attempt = 1;\n while (attempt <= maxTries) {\n const req = fetch(\n props.url,\n props as RequestInit // Weird package issues with unresolved imports for RequestInit for node-fetch :(\n );\n\n const requestStarted = Date.now();\n try {\n const res = await req;\n const responseCompleted = Date.now();\n\n // Start tracking the time it takes to convert the response\n const started = BrowserTransport.markStart(\n BrowserTransport.markName(requestPath)\n );\n const contentType = String(res.headers.get('content-type'));\n const mode = responseMode(contentType);\n const responseBody =\n mode === ResponseMode.binary ? res.blob() : res.text();\n if (!('fromRequest' in newOpts)) {\n // Request will markEnd, so don't mark the end here\n BrowserTransport.markEnd(requestPath, started);\n }\n const headers: IRequestHeaders = {};\n res.headers.forEach((value, key) => (headers[key] = value));\n response = {\n method,\n url: requestPath,\n body: responseBody,\n contentType,\n statusCode: res.status,\n statusMessage: res.statusText,\n startMark: started,\n headers,\n requestStarted,\n responseCompleted,\n ok: true,\n };\n response.ok = this.ok(response);\n if (canRetry(response.statusCode) && attempt < maxTries) {\n const result = await pauseForRetry(\n request,\n response,\n attempt,\n waiter\n );\n if (result.response === 'cancel') {\n if (result.reason) {\n response.statusMessage = result.reason;\n }\n break;\n } else if (result.response === 'error') {\n if (result.reason) {\n response.statusMessage = result.reason;\n }\n return retryError(response);\n }\n } else {\n break;\n }\n attempt++;\n } catch (e: any) {\n response.ok = false;\n response.body = e;\n response.statusCode = e.statusCode;\n response.statusMessage = e.message;\n return response;\n }\n }\n return response;\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 response = await this.retry({\n method,\n path,\n queryParams,\n body,\n authenticator,\n options,\n });\n return this.observer ? this.observer(response) : response;\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 = await 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: any) {\n error = err;\n }\n } else if (!error) {\n // Convert to string otherwise\n result = asString(result);\n }\n } else {\n try {\n const body = await result;\n if (typeof body === 'string') {\n result = body;\n } else {\n // must be a blob?\n const bytes = await body.arrayBuffer();\n result = Buffer.from(bytes ?? '').toString('binary');\n }\n } catch (err: any) {\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 async stream<TSuccess>(\n callback: (response: Response) => 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 newOpts = { ...this.options, options };\n const requestPath = this.makeUrl(path, newOpts, queryParams);\n const init = await this.initRequest(\n method,\n requestPath,\n body,\n authenticator,\n newOpts\n );\n\n const response: Response = await fetch(requestPath, init as RequestInit);\n return await callback(response);\n }\n\n protected override async initRequest(\n method: HttpMethod,\n path: string,\n body?: any,\n authenticator?: Authenticator,\n options?: Partial<ITransportSettings>\n ) {\n const props = await super.initRequest(\n method,\n path,\n body,\n authenticator,\n options\n );\n // don't default to same-origin for NodeJS\n props.credentials = undefined;\n\n if (!verifySsl(options)) {\n process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';\n }\n\n return props;\n }\n}\n\n/**\n * Turn a NodeJS WriteStream into a WritableStream for compatibility with browser standards\n * @param writer usually created by fs.createWriteStream()\n */\nexport const createWritableStream = (\n writer: ReturnType<typeof fs.createWriteStream>\n) => {\n return new WritableStream({\n write: (chunk: any) => {\n writer.write(chunk);\n },\n });\n};\n"],"mappings":"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"}
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_nodeServices","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_nodeSession","_nodeSettings","_nodeTransport","_nodeSdk"],"sources":["../src/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\n// Version 21.0.4\nexport * from './nodeServices';\nexport * from './nodeSession';\nexport * from './nodeSettings';\nexport * from './nodeTransport';\nexport * from './nodeSdk';\n"],"mappings":";;;;;AA2BA,IAAAA,aAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,aAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,aAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAT,aAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,YAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,YAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,YAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAC,YAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AACA,IAAAM,aAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,aAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,aAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAE,aAAA,CAAAN,GAAA;IAAA;EAAA;AAAA;AACA,IAAAO,cAAA,GAAAX,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAS,cAAA,EAAAR,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAO,cAAA,CAAAP,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAG,cAAA,CAAAP,GAAA;IAAA;EAAA;AAAA;AACA,IAAAQ,QAAA,GAAAZ,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAU,QAAA,EAAAT,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAQ,QAAA,CAAAR,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAI,QAAA,CAAAR,GAAA;IAAA;EAAA;AAAA"}
1
+ {"version":3,"file":"index.js","names":["_nodeServices","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_nodeSession","_nodeSettings","_nodeTransport","_nodeSdk"],"sources":["../src/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 './nodeServices';\nexport * from './nodeSession';\nexport * from './nodeSettings';\nexport * from './nodeTransport';\nexport * from './nodeSdk';\n"],"mappings":";;;;;AA0BA,IAAAA,aAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,aAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,aAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAT,aAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,YAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,YAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,YAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAC,YAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AACA,IAAAM,aAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,aAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,aAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAE,aAAA,CAAAN,GAAA;IAAA;EAAA;AAAA;AACA,IAAAO,cAAA,GAAAX,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAS,cAAA,EAAAR,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAO,cAAA,CAAAP,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAG,cAAA,CAAAP,GAAA;IAAA;EAAA;AAAA;AACA,IAAAQ,QAAA,GAAAZ,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAU,QAAA,EAAAT,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAQ,QAAA,CAAAR,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAI,QAAA,CAAAR,GAAA;IAAA;EAAA;AAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+
3
+ var fs = _interopRequireWildcard(require("fs"));
4
+ var process = _interopRequireWildcard(require("node:process"));
5
+ var _nodeTest = require("node:test");
6
+ var _expect = require("expect");
7
+ var _sdkRtl = require("@looker/sdk-rtl");
8
+ var _testUtils = require("@looker/sdk-rtl/src/testUtils");
9
+ var _nodeTransport = require("./nodeTransport");
10
+ var _nodeSession = require("./nodeSession");
11
+ var _nodeSettings = require("./nodeSettings");
12
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
13
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
14
+ 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); } }
15
+ 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); }); }; }
16
+ var config = (0, _testUtils.TestConfig)();
17
+ var envPrefix = 'LOOKERSDK';
18
+ var localIni = config.localIni;
19
+ (0, _nodeTest.describe)('NodeSession', () => {
20
+ var settings = new _nodeSettings.NodeSettingsIniFile(envPrefix, localIni, 'Looker');
21
+ var transport = new _nodeTransport.NodeTransport(settings);
22
+ (0, _nodeTest.describe)('isAuthenticated', () => {
23
+ (0, _nodeTest.it)('unauthenticated logout returns false', _asyncToGenerator(function* () {
24
+ var session = new _nodeSession.NodeSession(settings, transport);
25
+ (0, _expect.expect)(session.isAuthenticated()).toEqual(false);
26
+ var actual = yield session.logout();
27
+ (0, _expect.expect)(actual).toEqual(false);
28
+ (0, _expect.expect)(session.isAuthenticated()).toEqual(false);
29
+ }));
30
+ });
31
+ (0, _nodeTest.describe)('integration tests', () => {
32
+ (0, _nodeTest.it)('initializes', () => {
33
+ var session = new _nodeSession.NodeSession(settings, transport);
34
+ (0, _expect.expect)(session.settings).toEqual(settings);
35
+ (0, _expect.expect)(session.isAuthenticated()).toEqual(false);
36
+ (0, _expect.expect)(session.isSudo()).toEqual(false);
37
+ });
38
+ (0, _nodeTest.it)('default auth logs in and out with good credentials', _asyncToGenerator(function* () {
39
+ var session = new _nodeSession.NodeSession(settings, transport);
40
+ (0, _expect.expect)(session.isAuthenticated()).toEqual(false);
41
+ var token = yield session.login();
42
+ (0, _expect.expect)(token).toBeDefined();
43
+ (0, _expect.expect)(token.access_token).toBeDefined();
44
+ (0, _expect.expect)(session.isAuthenticated()).toEqual(true);
45
+ var result = yield session.logout();
46
+ (0, _expect.expect)(result).toEqual(true);
47
+ (0, _expect.expect)(session.isAuthenticated()).toEqual(false);
48
+ }));
49
+ });
50
+ (0, _nodeTest.describe)('environmental configuration', () => {
51
+ (0, _nodeTest.it)('no INI file', _asyncToGenerator(function* () {
52
+ var section = (0, _nodeSettings.ApiConfig)(fs.readFileSync(localIni, 'utf8')).Looker;
53
+ var verify_ssl = (0, _sdkRtl.boolDefault)(section.verify_ssl, false).toString();
54
+ var envPrefix = 'LOOKERSDK';
55
+ var envKey = (0, _sdkRtl.ApiConfigMap)(envPrefix);
56
+ process.env[envKey.timeout] = section.timeout || _sdkRtl.defaultTimeout.toString();
57
+ process.env[envKey.client_id] = section.client_id;
58
+ process.env[envKey.client_secret] = section.client_secret;
59
+ process.env[envKey.base_url] = section.base_url;
60
+ process.env[envKey.verify_ssl] = verify_ssl.toString();
61
+ var settings = new _nodeSettings.NodeSettings(envPrefix);
62
+ (0, _expect.expect)(settings.base_url).toEqual(section.base_url);
63
+ (0, _expect.expect)(settings.timeout.toString()).toEqual(section.timeout || _sdkRtl.defaultTimeout.toString());
64
+ (0, _expect.expect)(settings.verify_ssl.toString()).toEqual(verify_ssl);
65
+ var session = new _nodeSession.NodeSession(settings, transport);
66
+ (0, _expect.expect)(session.isAuthenticated()).toEqual(false);
67
+ var token = yield session.login();
68
+ (0, _expect.expect)(token).toBeDefined();
69
+ (0, _expect.expect)(token.access_token).toBeDefined();
70
+ (0, _expect.expect)(session.isAuthenticated()).toEqual(true);
71
+ var result = yield session.logout();
72
+ (0, _expect.expect)(result).toEqual(true);
73
+ (0, _expect.expect)(session.isAuthenticated()).toEqual(false);
74
+ delete process.env[envKey.timeout];
75
+ delete process.env[envKey.client_id];
76
+ delete process.env[envKey.client_secret];
77
+ delete process.env[envKey.base_url];
78
+ delete process.env[envKey.verify_ssl];
79
+ }));
80
+ });
81
+ });
82
+ //# sourceMappingURL=nodeSession.apitest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodeSession.apitest.js","names":["fs","_interopRequireWildcard","require","process","_nodeTest","_expect","_sdkRtl","_testUtils","_nodeTransport","_nodeSession","_nodeSettings","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","config","TestConfig","envPrefix","localIni","describe","settings","NodeSettingsIniFile","transport","NodeTransport","it","session","NodeSession","expect","isAuthenticated","toEqual","actual","logout","isSudo","token","login","toBeDefined","access_token","result","section","ApiConfig","readFileSync","Looker","verify_ssl","boolDefault","toString","envKey","ApiConfigMap","env","timeout","defaultTimeout","client_id","client_secret","base_url","NodeSettings"],"sources":["../src/nodeSession.apitest.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 * as process from 'node:process';\nimport { describe, it } from 'node:test';\nimport { expect } from 'expect';\nimport { ApiConfigMap, boolDefault, defaultTimeout } from '@looker/sdk-rtl';\nimport { TestConfig } from '@looker/sdk-rtl/src/testUtils';\nimport { NodeTransport } from './nodeTransport';\nimport { NodeSession } from './nodeSession';\nimport { ApiConfig, NodeSettings, NodeSettingsIniFile } from './nodeSettings';\n\nconst config = TestConfig();\nconst envPrefix = 'LOOKERSDK';\nconst localIni = config.localIni;\n\ndescribe('NodeSession', () => {\n const settings = new NodeSettingsIniFile(envPrefix, localIni, 'Looker');\n const transport = new NodeTransport(settings);\n\n describe('isAuthenticated', () => {\n it('unauthenticated logout returns false', async () => {\n const session = new NodeSession(settings, transport);\n expect(session.isAuthenticated()).toEqual(false);\n const actual = await session.logout();\n expect(actual).toEqual(false);\n expect(session.isAuthenticated()).toEqual(false);\n });\n });\n\n describe('integration tests', () => {\n it('initializes', () => {\n const session = new NodeSession(settings, transport);\n expect(session.settings).toEqual(settings);\n expect(session.isAuthenticated()).toEqual(false);\n expect(session.isSudo()).toEqual(false);\n });\n\n it('default auth logs in and out with good credentials', async () => {\n const session = new NodeSession(settings, transport);\n expect(session.isAuthenticated()).toEqual(false);\n const token = await session.login();\n expect(token).toBeDefined();\n expect(token.access_token).toBeDefined();\n expect(session.isAuthenticated()).toEqual(true);\n const result = await session.logout();\n expect(result).toEqual(true);\n expect(session.isAuthenticated()).toEqual(false);\n });\n });\n\n describe('environmental configuration', () => {\n it('no INI file', async () => {\n const section = ApiConfig(fs.readFileSync(localIni, 'utf8')).Looker;\n const verify_ssl = boolDefault(section.verify_ssl, false).toString();\n const envPrefix = 'LOOKERSDK';\n const envKey = ApiConfigMap(envPrefix);\n // populate environment variables\n process.env[envKey.timeout] =\n section.timeout || defaultTimeout.toString();\n process.env[envKey.client_id] = section.client_id;\n process.env[envKey.client_secret] = section.client_secret;\n process.env[envKey.base_url] = section.base_url;\n process.env[envKey.verify_ssl] = verify_ssl.toString();\n\n const settings = new NodeSettings(envPrefix);\n expect(settings.base_url).toEqual(section.base_url);\n expect(settings.timeout.toString()).toEqual(\n section.timeout || defaultTimeout.toString()\n );\n expect(settings.verify_ssl.toString()).toEqual(verify_ssl);\n\n const session = new NodeSession(settings, transport);\n expect(session.isAuthenticated()).toEqual(false);\n const token = await session.login();\n expect(token).toBeDefined();\n expect(token.access_token).toBeDefined();\n expect(session.isAuthenticated()).toEqual(true);\n const result = await session.logout();\n expect(result).toEqual(true);\n expect(session.isAuthenticated()).toEqual(false);\n\n // reset environment variables\n delete process.env[envKey.timeout];\n delete process.env[envKey.client_id];\n delete process.env[envKey.client_secret];\n delete process.env[envKey.base_url];\n delete process.env[envKey.verify_ssl];\n });\n });\n});\n"],"mappings":"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"}
@@ -114,7 +114,12 @@ class NodeSession extends _sdkRtl.AuthSession {
114
114
  client_id: clientId,
115
115
  client_secret: clientSecret
116
116
  });
117
- var token = yield _this6.ok(_this6.transport.request(strPost, "".concat(_this6.apiPath, "/login"), undefined, body));
117
+ var headers = {
118
+ 'content-type': 'application/x-www-form-urlencoded'
119
+ };
120
+ var token = yield _this6.ok(_this6.transport.request(strPost, "".concat(_this6.apiPath, "/login"), undefined, body, undefined, {
121
+ headers
122
+ }));
118
123
  _this6._authToken.setToken(token);
119
124
  }
120
125
  if (_this6.sudoId) {