@looker/sdk-node 22.20.0 → 22.20.1

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 CHANGED
@@ -5,6 +5,21 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ### [22.20.1](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-node-v22.20.0...sdk-node-v22.20.1) (2022-12-09)
9
+
10
+
11
+ ### Features
12
+
13
+ * add request time tracking ([#1223](https://www.github.com/looker-open-source/sdk-codegen/issues/1223)) ([2aefe06](https://www.github.com/looker-open-source/sdk-codegen/commit/2aefe064d668e02f3af95202e4667036cba01979))
14
+
15
+
16
+ ### Dependencies
17
+
18
+ * The following workspace dependencies were updated
19
+ * dependencies
20
+ * @looker/sdk bumped from ^22.20.0 to ^22.20.1
21
+ * @looker/sdk-rtl bumped from ^21.4.0 to ^21.5.0
22
+
8
23
  ## [22.20.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-node-v22.18.0...sdk-node-v22.20.0) (2022-11-10)
9
24
 
10
25
 
@@ -418,4 +433,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
418
433
 
419
434
  ## [21.0.4]
420
435
 
421
- - introduces `@looker/node-sdk` for using the Looker TypeScript SDK with Node
436
+ - introduces `@looker/node-sdk` for using the Looker TypeScript SDK with Node
@@ -55,9 +55,12 @@ export class NodeTransport extends BaseTransport {
55
55
  var init = yield _this.initRequest(method, path, queryParams, body, authenticator, options);
56
56
  var req = rp(init).promise();
57
57
  var rawResponse;
58
+ var requestStarted = Date.now();
59
+ var responseCompleted;
58
60
 
59
61
  try {
60
62
  var res = yield req;
63
+ responseCompleted = Date.now();
61
64
  var resTyped = res;
62
65
  rawResponse = {
63
66
  method,
@@ -67,7 +70,9 @@ export class NodeTransport extends BaseTransport {
67
70
  ok: true,
68
71
  statusCode: resTyped.statusCode,
69
72
  statusMessage: resTyped.statusMessage,
70
- headers: res.headers
73
+ headers: res.headers,
74
+ requestStarted,
75
+ responseCompleted
71
76
  };
72
77
  rawResponse.ok = _this.ok(rawResponse);
73
78
  } catch (e) {
@@ -77,6 +82,8 @@ export class NodeTransport extends BaseTransport {
77
82
 
78
83
  var _body;
79
84
 
85
+ responseCompleted = Date.now();
86
+
80
87
  if (e instanceof StatusCodeError) {
81
88
  statusCode = e.statusCode;
82
89
 
@@ -104,7 +111,9 @@ export class NodeTransport extends BaseTransport {
104
111
  ok: false,
105
112
  statusCode,
106
113
  statusMessage,
107
- headers: {}
114
+ headers: {},
115
+ requestStarted,
116
+ responseCompleted
108
117
  };
109
118
  }
110
119
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/nodeTransport.ts"],"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","hash","createHash","update","Uint8Array","digest","NodeTransport","constructor","options","rawRequest","method","path","queryParams","body","authenticator","init","initRequest","req","promise","rawResponse","res","resTyped","url","contentType","String","headers","ok","statusCode","statusMessage","e","error","observer","parseResponse","mode","response","parse","result","string","match","err","request","type","requestor","props","toUpperCase","get","put","post","patch","head","stream","callback","returnPromise","streamPromise","Promise","resolve","reject","hasResolved","on","code","socket","setKeepAlive","pipe","results","all","verifySsl","verify_ssl","timeout","agentTag","requestPath","makeUrl","undefined","encoding","json","rejectUnauthorized","resolveWithFullResponse"],"mappings":";;;;;;;;;;AA0BA,OAAOA,UAAP,MAAuB,QAAvB;AAEA,OAAOC,EAAP,MAAe,SAAf;AAEA,OAAOC,EAAP,MAAe,wBAAf;AAEA,SAASC,WAAT,QAA4B,iBAA5B;AACA,SAASC,eAAT,QAAgC,+BAAhC;AACA,SACEC,aADF,EAEEC,YAFF,EAGEC,cAHF,EAIEC,YAJF,EAKEC,KALF,EAMEC,WANF,EAOEC,WAPF,EAQEC,UARF,QASO,iBATP;AAsBA,IAAMC,IAAI,GAAG,MAAb;;AAEA,IAAMC,QAAQ,GAAIC,KAAD,IAAwB;AACvC,MAAIA,KAAK,YAAYC,MAArB,EAA6B;AAC3B,WAAOA,MAAM,CAACC,IAAP,CAAYF,KAAZ,EAAmBG,QAAnB,CAA4BL,IAA5B,CAAP;AACD;;AACD,MAAIE,KAAK,YAAYI,MAArB,EAA6B;AAC3B,WAAOC,IAAI,CAACC,SAAL,CAAeN,KAAf,CAAP;AACD;;AACD,SAAOA,KAAK,CAACG,QAAN,EAAP;AACD,CARD;;AAUA,OAAO,MAAMI,cAAN,CAA4C;AACjDC,EAAAA,YAAY,CAACC,SAAD,EAA4B;AACtC,WAAOxB,UAAU,CAACyB,WAAX,CAAuBD,SAAvB,EAAkCN,QAAlC,CAA2C,KAA3C,CAAP;AACD;;AAEKQ,EAAAA,UAAU,CAACC,OAAD,EAAmC;AAAA;AACjD,UAAMC,IAAI,GAAG5B,UAAU,CAAC6B,UAAX,CAAsB,QAAtB,CAAb;AACAD,MAAAA,IAAI,CAACE,MAAL,CAAYH,OAAZ;AACA,aAAOf,UAAU,CAAC,IAAImB,UAAJ,CAAeH,IAAI,CAACI,MAAL,EAAf,CAAD,CAAjB;AAHiD;AAIlD;;AATgD;AAgBnD,OAAO,MAAMC,aAAN,SAA4B5B,aAA5B,CAA0C;AAC/C6B,EAAAA,WAAW,CAAoBC,OAApB,EAAiD;AAC1D,UAAMA,OAAN;AAD0D,SAA7BA,OAA6B,GAA7BA,OAA6B;AAE3D;;AAEKC,EAAAA,UAAU,CACdC,MADc,EAEdC,IAFc,EAGdC,WAHc,EAIdC,IAJc,EAKdC,aALc,EAMdN,OANc,EAOS;AAAA;;AAAA;AACvB,UAAMO,IAAoB,SAAS,KAAI,CAACC,WAAL,CACjCN,MADiC,EAEjCC,IAFiC,EAGjCC,WAHiC,EAIjCC,IAJiC,EAKjCC,aALiC,EAMjCN,OANiC,CAAnC;AAQA,UAAMS,GAAG,GAAG1C,EAAE,CAACwC,IAAD,CAAF,CAASG,OAAT,EAAZ;AACA,UAAIC,WAAJ;;AACA,UAAI;AACF,YAAMC,GAAG,SAASH,GAAlB;AACA,YAAMI,QAAQ,GAAGD,GAAjB;AACAD,QAAAA,WAAW,GAAG;AACZT,UAAAA,MADY;AAEZY,UAAAA,GAAG,EAAED,QAAQ,CAACC,GAAT,IAAgBP,IAAI,CAACO,GAAL,CAAS/B,QAAT,EAAhB,IAAuC,EAFhC;AAGZsB,UAAAA,IAAI,QAAQQ,QAAQ,CAACR,IAHT;AAIZU,UAAAA,WAAW,EAAEC,MAAM,CAACH,QAAQ,CAACI,OAAT,CAAiB,cAAjB,CAAD,CAJP;AAKZC,UAAAA,EAAE,EAAE,IALQ;AAMZC,UAAAA,UAAU,EAAEN,QAAQ,CAACM,UANT;AAOZC,UAAAA,aAAa,EAAEP,QAAQ,CAACO,aAPZ;AAQZH,UAAAA,OAAO,EAAEL,GAAG,CAACK;AARD,SAAd;AAWAN,QAAAA,WAAW,CAACO,EAAZ,GAAiB,KAAI,CAACA,EAAL,CAAQP,WAAR,CAAjB;AACD,OAfD,CAeE,OAAOU,CAAP,EAAe;AACf,YAAID,aAAa,aAAMlB,MAAN,cAAgBC,IAAhB,CAAjB;AACA,YAAIgB,UAAU,GAAG,GAAjB;AACA,YAAIJ,WAAW,GAAG,MAAlB;;AACA,YAAIV,KAAJ;;AACA,YAAIgB,CAAC,YAAYpD,eAAjB,EAAkC;AAChCkD,UAAAA,UAAU,GAAGE,CAAC,CAACF,UAAf;;AACA,cAAIE,CAAC,CAACC,KAAF,YAAmBzC,MAAvB,EAA+B;AAC7BwB,YAAAA,KAAI,GAAG1B,QAAQ,CAAC0C,CAAC,CAACC,KAAH,CAAf;AACAF,YAAAA,aAAa,gBAASD,UAAT,CAAb;AACD,WAHD,MAGO,IAAIE,CAAC,CAACC,KAAF,YAAmBtC,MAAvB,EAA+B;AAEpCqB,YAAAA,KAAI,GAAGgB,CAAC,CAACC,KAAT;AACAF,YAAAA,aAAa,gBAASC,CAAC,CAAC7B,OAAX,CAAb;AAEAa,YAAAA,KAAI,CAACb,OAAL,GAAe4B,aAAf;AACAL,YAAAA,WAAW,GAAG,kBAAd;AACD;AACF,SAbD,MAaO,IAAIM,CAAC,CAACC,KAAF,YAAmBzC,MAAvB,EAA+B;AACpCwB,UAAAA,KAAI,GAAG1B,QAAQ,CAAC0C,CAAC,CAACC,KAAH,CAAf;AACD,SAFM,MAEA;AACLjB,UAAAA,KAAI,GAAGpB,IAAI,CAACC,SAAL,CAAemC,CAAf,CAAP;AACAN,UAAAA,WAAW,GAAG,kBAAd;AACD;;AACDJ,QAAAA,WAAW,GAAG;AACZT,UAAAA,MADY;AAEZY,UAAAA,GAAG,EAAEP,IAAI,CAACO,GAAL,CAAS/B,QAAT,EAFO;AAGZsB,UAAAA,IAAI,EAAJA,KAHY;AAIZU,UAAAA,WAJY;AAKZG,UAAAA,EAAE,EAAE,KALQ;AAMZC,UAAAA,UANY;AAOZC,UAAAA,aAPY;AAQZH,UAAAA,OAAO,EAAE;AARG,SAAd;AAUD;;AACD,aAAO,KAAI,CAACM,QAAL,GAAgB,KAAI,CAACA,QAAL,CAAcZ,WAAd,CAAhB,GAA6CA,WAApD;AA7DuB;AA8DxB;;AAEKa,EAAAA,aAAa,CAAmBZ,GAAnB,EAAsC;AAAA;AACvD,UAAMa,IAAI,GAAGpD,YAAY,CAACuC,GAAG,CAACG,WAAL,CAAzB;AACA,UAAIW,QAAJ;AACA,UAAIJ,KAAJ;;AACA,UAAI,CAACV,GAAG,CAACM,EAAT,EAAa;AAEXI,QAAAA,KAAK,GAAGV,GAAG,CAACP,IAAZ;;AACA,YAAI,OAAOiB,KAAP,KAAiB,QAArB,EAA+B;AAC7B,cAAI;AACFA,YAAAA,KAAK,GAAGrC,IAAI,CAAC0C,KAAL,CAAWL,KAAX,CAAR;AACD,WAFD,CAEE,gBAAM;AACNA,YAAAA,KAAK,GAAG;AAAE9B,cAAAA,OAAO,4BAAqB8B,KAArB;AAAT,aAAR;AACD;AACF;;AACDI,QAAAA,QAAQ,GAAG;AAAER,UAAAA,EAAE,EAAE,KAAN;AAAaI,UAAAA;AAAb,SAAX;AACA,eAAOI,QAAP;AACD;;AACD,UAAIE,MAAM,SAAShB,GAAG,CAACP,IAAvB;;AACA,UAAIoB,IAAI,KAAKtD,YAAY,CAAC0D,MAA1B,EAAkC;AAChC,YAAIjB,GAAG,CAACG,WAAJ,CAAgBe,KAAhB,CAAsB,2BAAtB,CAAJ,EAAwD;AACtD,cAAI;AACF,gBAAIF,MAAM,YAAY/C,MAAtB,EAA8B;AAC5B+C,cAAAA,MAAM,GAAG/C,MAAM,CAACC,IAAP,CAAY8C,MAAZ,EAAoB7C,QAApB,CAA6BL,IAA7B,CAAT;AACD;;AACD,gBAAI,EAAEkD,MAAM,YAAY5C,MAApB,CAAJ,EAAiC;AAC/B4C,cAAAA,MAAM,GAAG3C,IAAI,CAAC0C,KAAL,CAAWC,MAAM,CAAC7C,QAAP,EAAX,CAAT;AACD;AACF,WAPD,CAOE,OAAOgD,GAAP,EAAY;AACZT,YAAAA,KAAK,GAAGS,GAAR;AACD;AACF,SAXD,MAWO,IAAI,CAACT,KAAL,EAAY;AAEjBM,UAAAA,MAAM,GAAGjD,QAAQ,CAACiD,MAAD,CAAjB;AACD;AACF,OAhBD,MAgBO;AACL,YAAI;AAAA;;AACFA,UAAAA,MAAM,GAAG/C,MAAM,CAACC,IAAP,YAAY8C,MAAZ,6CAAsB,EAAtB,EAA0B7C,QAA1B,CAAmC,QAAnC,CAAT;AACD,SAFD,CAEE,OAAOgD,GAAP,EAAY;AACZT,UAAAA,KAAK,GAAGS,GAAR;AACD;AACF;;AACD,UAAI,CAACT,KAAL,EAAY;AACVI,QAAAA,QAAQ,GAAG;AAAER,UAAAA,EAAE,EAAE,IAAN;AAAYtC,UAAAA,KAAK,EAAEgD;AAAnB,SAAX;AACD,OAFD,MAEO;AACLF,QAAAA,QAAQ,GAAG;AAAER,UAAAA,EAAE,EAAE,KAAN;AAAaI,UAAAA,KAAK,EAAEA;AAApB,SAAX;AACD;;AACD,aAAOI,QAAP;AA9CuD;AA+CxD;;AAEKM,EAAAA,OAAO,CACX9B,MADW,EAEXC,IAFW,EAGXC,WAHW,EAIXC,IAJW,EAKXC,aALW,EAMXN,OANW,EAO6B;AAAA;;AAAA;AACxC,UAAI;AACF,YAAMY,GAAG,SAAS,MAAI,CAACX,UAAL,CAChBC,MADgB,EAEhBC,IAFgB,EAGhBC,WAHgB,EAIhBC,IAJgB,EAKhBC,aALgB,EAMhBN,OANgB,CAAlB;AAQA,qBAAa,MAAI,CAACwB,aAAL,CAAqCZ,GAArC,CAAb;AACD,OAVD,CAUE,OAAOS,CAAP,EAAe;AACf,YAAMC,KAAgB,GAAG;AACvB9B,UAAAA,OAAO,EACL,OAAO6B,CAAC,CAAC7B,OAAT,KAAqB,QAArB,GACI6B,CAAC,CAAC7B,OADN,6DAEuD6B,CAFvD,OAFqB;AAKvBY,UAAAA,IAAI,EAAE;AALiB,SAAzB;AAOA,eAAO;AAAEX,UAAAA,KAAF;AAASJ,UAAAA,EAAE,EAAE;AAAb,SAAP;AACD;AApBuC;AAqBzC;;AAOSgB,EAAAA,SAAS,CAACC,KAAD,EAAiC;AAAA;;AAClD,QAAMjC,MAAM,oBAAGiC,KAAK,CAACjC,MAAT,kDAAG,cAAcnB,QAAd,GAAyBqD,WAAzB,EAAf;;AACA,YAAQlC,MAAR;AACE,WAAK,KAAL;AACE,eAAOpC,EAAE,CAACuE,GAAH,CAAOF,KAAP,CAAP;;AACF,WAAK,KAAL;AACE,eAAOrE,EAAE,CAACwE,GAAH,CAAOH,KAAP,CAAP;;AACF,WAAK,MAAL;AACE,eAAOrE,EAAE,CAACyE,IAAH,CAAQJ,KAAR,CAAP;;AACF,WAAK,OAAL;AACE,eAAOrE,EAAE,CAAC0E,KAAH,CAASL,KAAT,CAAP;;AACF,WAAK,QAAL;AACE,eAAOrE,EAAE,CAACwE,GAAH,CAAOH,KAAP,CAAP;;AACF,WAAK,MAAL;AACE,eAAOrE,EAAE,CAAC2E,IAAH,CAAQN,KAAR,CAAP;;AACF;AACE,eAAOrE,EAAE,CAACuE,GAAH,CAAOF,KAAP,CAAP;AAdJ;AAgBD;;AAEKO,EAAAA,MAAM,CACVC,QADU,EAEVzC,MAFU,EAGVC,IAHU,EAIVC,WAJU,EAKVC,IALU,EAMVC,aANU,EAOVN,OAPU,EAQS;AAAA;;AAAA;AACnB,UAAM0C,MAAM,GAAG,IAAI1E,WAAJ,EAAf;AACA,UAAM4E,aAAa,GAAGD,QAAQ,CAACD,MAAD,CAA9B;AACA,UAAMnC,IAAI,SAAS,MAAI,CAACC,WAAL,CACjBN,MADiB,EAEjBC,IAFiB,EAGjBC,WAHiB,EAIjBC,IAJiB,EAKjBC,aALiB,EAMjBN,OANiB,CAAnB;AASA,UAAM6C,aAAa,GAAG,IAAIC,OAAJ,CAAkB,CAACC,OAAD,EAAUC,MAAV,KAAqB;AAC3D1E,QAAAA,KAAK,+CAA+CiC,IAA/C,CAAL;AACA,YAAI0C,WAAW,GAAG,KAAlB;;AACA,YAAMxC,GAAG,GAAG,MAAI,CAACyB,SAAL,CAAe3B,IAAf,CAAZ;;AAEAE,QAAAA,GAAG,CACAyC,EADH,CACM,OADN,EACgBnB,GAAD,IAAS;AACpB,cAAIkB,WAAW,IAAKlB,GAAD,CAAaoB,IAAb,KAAsB,YAAzC,EAAuD;AACrD7E,YAAAA,KAAK,CACH,4DADG,EAEHiC,IAFG,CAAL;AAID,WALD,MAKO;AACLjC,YAAAA,KAAK,CAAC,iBAAD,EAAoByD,GAApB,CAAL;AACAiB,YAAAA,MAAM,CAACjB,GAAD,CAAN;AACD;AACF,SAXH,EAYGmB,EAZH,CAYM,QAZN,EAYgB,MAAM;AAClB5E,UAAAA,KAAK,iDAAiDiC,IAAjD,CAAL;AACD,SAdH,EAeG2C,EAfH,CAeM,QAfN,EAeiBE,MAAD,IAAY;AACxB9E,UAAAA,KAAK,yCAAyCiC,IAAzC,CAAL;AACA6C,UAAAA,MAAM,CAACC,YAAP,CAAoB,IAApB;AACD,SAlBH,EAmBGH,EAnBH,CAmBM,OAnBN,EAmBe,MAAM;AACjB5E,UAAAA,KAAK,gDAAgDiC,IAAhD,CAAL;AACD,SArBH,EAsBG2C,EAtBH,CAsBM,UAtBN,EAsBkB,MAAM;AACpB5E,UAAAA,KAAK,4CAA4CiC,IAA5C,CAAL;AACD,SAxBH,EAyBG2C,EAzBH,CAyBM,OAzBN,EAyBe,MAAM;AACjB5E,UAAAA,KAAK,mCAAmCiC,IAAnC,CAAL;AACD,SA3BH,EA4BG+C,IA5BH,CA4BQZ,MA5BR,EA6BGQ,EA7BH,CA6BM,OA7BN,EA6BgBnB,GAAD,IAAS;AACpBzD,UAAAA,KAAK,sCAAsCyD,GAAtC,CAAL;AACAiB,UAAAA,MAAM,CAACjB,GAAD,CAAN;AACD,SAhCH,EAiCGmB,EAjCH,CAiCM,QAjCN,EAiCgB,MAAM;AAClB5E,UAAAA,KAAK,yCAAyCiC,IAAzC,CAAL;AACAwC,UAAAA,OAAO;AACPE,UAAAA,WAAW,GAAG,IAAd;AACD,SArCH,EAsCGC,EAtCH,CAsCM,OAtCN,EAsCe,MAAM;AACjB5E,UAAAA,KAAK,uCAAuCiC,IAAvC,CAAL;AACD,SAxCH;AAyCD,OA9CqB,CAAtB;AAgDA,UAAMgD,OAAO,SAAST,OAAO,CAACU,GAAR,CAAY,CAACZ,aAAD,EAAgBC,aAAhB,CAAZ,CAAtB;AACA,aAAOU,OAAO,CAAC,CAAD,CAAd;AA7DmB;AA8DpB;;AAODE,EAAAA,SAAS,CAACzD,OAAD,EAAwC;AAC/C,QAAI,CAACA,OAAL,EAAcA,OAAO,GAAG,KAAKA,OAAf;AACd,WAAO,gBAAgBA,OAAhB,GAA0BA,OAAO,CAAC0D,UAAlC,GAA+C,IAAtD;AACD;;AAODC,EAAAA,OAAO,CAAC3D,OAAD,EAAgD;AACrD,QAAI,CAACA,OAAL,EAAcA,OAAO,GAAG,KAAKA,OAAf;AACd,QAAI,aAAaA,OAAb,IAAwBA,OAAO,CAAC2D,OAApC,EAA6C,OAAO3D,OAAO,CAAC2D,OAAf;AAC7C,WAAOvF,cAAP;AACD;;AAEaoC,EAAAA,WAAW,CACvBN,MADuB,EAEvBC,IAFuB,EAGvBC,WAHuB,EAIvBC,IAJuB,EAKvBC,aALuB,EAMvBN,OANuB,EAOvB;AAAA;;AAAA;AACAA,MAAAA,OAAO,GAAGA,OAAO,mCAAQ,MAAI,CAACA,OAAb,GAAyBA,OAAzB,IAAqC,MAAI,CAACA,OAA3D;;AACA,UAAI,CAACA,OAAO,CAAC4D,QAAb,EAAuB;AACrB5D,QAAAA,OAAO,CAAC4D,QAAR,GAAmBpF,WAAnB;AACD;;AACD,UAAMyC,OAAwB;AAC5B,SAAC1C,WAAD,GAAeyB,OAAO,CAAC4D;AADK,SAEzB5D,OAAO,CAACiB,OAFiB,CAA9B;;AAKA,UAAM4C,WAAW,GAAG,MAAI,CAACC,OAAL,CAAa3D,IAAb,EAAmBH,OAAnB,EAA4BI,WAA5B,CAApB;;AACA,UAAIG,IAAoB,GAAG;AACzBF,QAAAA,IAAI,EAAEA,IAAI,IAAI0D,SADW;AAEzBC,QAAAA,QAAQ,EAAE,IAFe;AAGzB/C,QAAAA,OAAO,EAAEA,OAHgB;AAIzBgD,QAAAA,IAAI,EAAE5D,IAAI,IAAI,OAAOA,IAAP,KAAgB,QAJL;AAMzBH,QAAAA,MANyB;AAQzBgE,QAAAA,kBAAkB,EAAE,MAAI,CAACT,SAAL,CAAezD,OAAf,CARK;AAWzBmE,QAAAA,uBAAuB,EAAE,IAXA;AAazBR,QAAAA,OAAO,EAAE,MAAI,CAACA,OAAL,CAAa3D,OAAb,IAAwB,IAbR;AAczBc,QAAAA,GAAG,EAAE+C;AAdoB,OAA3B;AAgBA,UAAI,cAAc7D,OAAlB,EAA2BO,IAAI,CAACyD,QAAL,GAAgBhE,OAAO,CAACgE,QAAxB;;AAE3B,UAAI1D,aAAJ,EAAmB;AAEjBC,QAAAA,IAAI,SAASD,aAAa,CAACC,IAAD,CAA1B;AACD;;AACD,aAAOA,IAAP;AAjCA;AAkCD;;AA1T8C","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 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 try {\n const res = await req\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 }\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 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 }\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"],"file":"nodeTransport.js"}
1
+ {"version":3,"sources":["../../src/nodeTransport.ts"],"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","hash","createHash","update","Uint8Array","digest","NodeTransport","constructor","options","rawRequest","method","path","queryParams","body","authenticator","init","initRequest","req","promise","rawResponse","requestStarted","Date","now","responseCompleted","res","resTyped","url","contentType","String","headers","ok","statusCode","statusMessage","e","error","observer","parseResponse","mode","response","parse","result","string","match","err","request","type","requestor","props","toUpperCase","get","put","post","patch","head","stream","callback","returnPromise","streamPromise","Promise","resolve","reject","hasResolved","on","code","socket","setKeepAlive","pipe","results","all","verifySsl","verify_ssl","timeout","agentTag","requestPath","makeUrl","undefined","encoding","json","rejectUnauthorized","resolveWithFullResponse"],"mappings":"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","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 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"],"file":"nodeTransport.js"}
@@ -74,9 +74,12 @@ class NodeTransport extends _sdkRtl.BaseTransport {
74
74
  var init = yield _this.initRequest(method, path, queryParams, body, authenticator, options);
75
75
  var req = (0, _requestPromiseNative.default)(init).promise();
76
76
  var rawResponse;
77
+ var requestStarted = Date.now();
78
+ var responseCompleted;
77
79
 
78
80
  try {
79
81
  var res = yield req;
82
+ responseCompleted = Date.now();
80
83
  var resTyped = res;
81
84
  rawResponse = {
82
85
  method,
@@ -86,7 +89,9 @@ class NodeTransport extends _sdkRtl.BaseTransport {
86
89
  ok: true,
87
90
  statusCode: resTyped.statusCode,
88
91
  statusMessage: resTyped.statusMessage,
89
- headers: res.headers
92
+ headers: res.headers,
93
+ requestStarted,
94
+ responseCompleted
90
95
  };
91
96
  rawResponse.ok = _this.ok(rawResponse);
92
97
  } catch (e) {
@@ -96,6 +101,8 @@ class NodeTransport extends _sdkRtl.BaseTransport {
96
101
 
97
102
  var _body;
98
103
 
104
+ responseCompleted = Date.now();
105
+
99
106
  if (e instanceof _errors.StatusCodeError) {
100
107
  statusCode = e.statusCode;
101
108
 
@@ -123,7 +130,9 @@ class NodeTransport extends _sdkRtl.BaseTransport {
123
130
  ok: false,
124
131
  statusCode,
125
132
  statusMessage,
126
- headers: {}
133
+ headers: {},
134
+ requestStarted,
135
+ responseCompleted
127
136
  };
128
137
  }
129
138
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/nodeTransport.ts"],"names":["utf8","asString","value","Buffer","from","toString","Object","JSON","stringify","NodeCryptoHash","secureRandom","byteCount","nodeCrypto","randomBytes","sha256Hash","message","hash","createHash","update","Uint8Array","digest","NodeTransport","BaseTransport","constructor","options","rawRequest","method","path","queryParams","body","authenticator","init","initRequest","req","promise","rawResponse","res","resTyped","url","contentType","String","headers","ok","statusCode","statusMessage","e","StatusCodeError","error","observer","parseResponse","mode","response","parse","result","ResponseMode","string","match","err","request","type","requestor","props","toUpperCase","rq","get","put","post","patch","head","stream","callback","PassThrough","returnPromise","streamPromise","Promise","resolve","reject","hasResolved","on","code","socket","setKeepAlive","pipe","results","all","verifySsl","verify_ssl","timeout","defaultTimeout","agentTag","agentPrefix","LookerAppId","requestPath","makeUrl","undefined","encoding","json","rejectUnauthorized","resolveWithFullResponse"],"mappings":"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","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 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 try {\n const res = await req\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 }\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 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 }\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"],"file":"nodeTransport.js"}
1
+ {"version":3,"sources":["../src/nodeTransport.ts"],"names":["utf8","asString","value","Buffer","from","toString","Object","JSON","stringify","NodeCryptoHash","secureRandom","byteCount","nodeCrypto","randomBytes","sha256Hash","message","hash","createHash","update","Uint8Array","digest","NodeTransport","BaseTransport","constructor","options","rawRequest","method","path","queryParams","body","authenticator","init","initRequest","req","promise","rawResponse","requestStarted","Date","now","responseCompleted","res","resTyped","url","contentType","String","headers","ok","statusCode","statusMessage","e","StatusCodeError","error","observer","parseResponse","mode","response","parse","result","ResponseMode","string","match","err","request","type","requestor","props","toUpperCase","rq","get","put","post","patch","head","stream","callback","PassThrough","returnPromise","streamPromise","Promise","resolve","reject","hasResolved","on","code","socket","setKeepAlive","pipe","results","all","verifySsl","verify_ssl","timeout","defaultTimeout","agentTag","agentPrefix","LookerAppId","requestPath","makeUrl","undefined","encoding","json","rejectUnauthorized","resolveWithFullResponse"],"mappings":"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","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 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"],"file":"nodeTransport.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@looker/sdk-node",
3
- "version": "22.20.0",
3
+ "version": "22.20.1",
4
4
  "description": "Looker SDK Runtime for Node Library",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
@@ -38,8 +38,8 @@
38
38
  "dotenv": "^8.2.0"
39
39
  },
40
40
  "dependencies": {
41
- "@looker/sdk": "^22.20.0",
42
- "@looker/sdk-rtl": "^21.4.0",
41
+ "@looker/sdk": "^22.20.1",
42
+ "@looker/sdk-rtl": "^21.5.0",
43
43
  "ini": "^1.3.8",
44
44
  "readable-stream": "^3.4.0",
45
45
  "request": "^2.88.0",
@@ -50,5 +50,5 @@
50
50
  "SDK",
51
51
  "RTL"
52
52
  ],
53
- "gitHead": "9c51de7916a40fd112b88db56f3ab9fc075a84d0"
53
+ "gitHead": "5545803533abe44ccef1f1b87e99d9f3e5bdc316"
54
54
  }