nango 0.46.0 → 0.46.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.
@@ -1,20 +1,31 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
+ import crypto from 'node:crypto';
4
+ const FILTER_HEADERS = [
5
+ 'authorization',
6
+ 'user-agent',
7
+ 'nango-proxy-user-agent',
8
+ 'accept-encoding',
9
+ 'retries',
10
+ 'host',
11
+ 'connection-id',
12
+ 'provider-config-key',
13
+ 'nango-is-sync',
14
+ 'nango-is-dry-run',
15
+ 'nango-activity-log-id',
16
+ 'content-type',
17
+ 'accept',
18
+ 'base-url-override'
19
+ ];
3
20
  export function ensureDirectoryExists(directoryName) {
4
21
  if (!fs.existsSync(directoryName)) {
5
22
  fs.mkdirSync(directoryName, { recursive: true });
6
23
  }
7
24
  }
8
- function saveResponse({ directoryName, data, customFilePath, concatenateIfExists }) {
25
+ function saveResponse({ directoryName, data, customFilePath }) {
9
26
  ensureDirectoryExists(`${directoryName}/mocks`);
10
27
  const filePath = path.join(directoryName, customFilePath);
11
28
  ensureDirectoryExists(path.dirname(filePath));
12
- if (fs.existsSync(filePath)) {
13
- const existingData = JSON.parse(fs.readFileSync(filePath, 'utf8'));
14
- if (concatenateIfExists && Array.isArray(existingData) && Array.isArray(data)) {
15
- data = data.concat(existingData);
16
- }
17
- }
18
29
  fs.writeFileSync(filePath, JSON.stringify(data, null, 2));
19
30
  }
20
31
  export function onAxiosRequestFulfilled({ response, providerConfigKey, connectionId, syncName }) {
@@ -22,36 +33,95 @@ export function onAxiosRequestFulfilled({ response, providerConfigKey, connectio
22
33
  return response;
23
34
  }
24
35
  const directoryName = `${process.env['NANGO_MOCKS_RESPONSE_DIRECTORY'] ?? ''}${providerConfigKey}`;
25
- const method = response.config.method?.toLowerCase() || 'get';
26
36
  if (response.request.path.includes(`/connection/${connectionId}?provider_config_key=${providerConfigKey}`)) {
27
37
  const connection = response.data;
28
38
  // getConnection could be getMetadata as well which would be cached
29
39
  saveResponse({
30
40
  directoryName,
31
41
  data: { metadata: connection.metadata, connection_config: connection.connection_config },
32
- customFilePath: 'mocks/nango/getConnection.json',
33
- concatenateIfExists: false
42
+ customFilePath: 'mocks/nango/getConnection.json'
34
43
  });
35
44
  saveResponse({
36
45
  directoryName,
37
46
  data: connection.metadata,
38
- customFilePath: 'mocks/nango/getMetadata.json',
39
- concatenateIfExists: false
47
+ customFilePath: 'mocks/nango/getMetadata.json'
40
48
  });
41
49
  return response;
42
50
  }
43
- const [pathname, params] = response.request.path.split('?');
44
- const strippedPath = pathname.replace('/', '');
45
- let concatenateIfExists = false;
46
- if (params && params.includes('page')) {
47
- concatenateIfExists = true;
48
- }
51
+ const requestIdentity = computeConfigIdentity(response.config);
49
52
  saveResponse({
50
53
  directoryName,
51
- data: response.data,
52
- customFilePath: `mocks/nango/${method}/${strippedPath}/${syncName}.json`,
53
- concatenateIfExists
54
+ data: {
55
+ ...requestIdentity,
56
+ response: response.data,
57
+ status: response.status,
58
+ headers: response.headers
59
+ },
60
+ customFilePath: `mocks/nango/${requestIdentity.method}/proxy/${requestIdentity.endpoint}/${syncName}/${requestIdentity.requestIdentityHash}.json`
54
61
  });
55
62
  return response;
56
63
  }
64
+ function computeConfigIdentity(config) {
65
+ const method = config.method?.toLowerCase() || 'get';
66
+ const params = sortEntries(Object.entries(config.params || {}));
67
+ const url = new URL(config.url);
68
+ const endpoint = url.pathname.replace(/^\/proxy\//, '');
69
+ const dataIdentity = computeDataIdentity(config);
70
+ let headers = [];
71
+ if (config.headers !== undefined) {
72
+ const filteredHeaders = Object.entries(config.headers).filter(([key]) => !FILTER_HEADERS.includes(key.toLowerCase()));
73
+ sortEntries(filteredHeaders);
74
+ headers = filteredHeaders;
75
+ }
76
+ // order is important to the request hash
77
+ const requestIdentity = {
78
+ method,
79
+ endpoint,
80
+ params,
81
+ headers,
82
+ data: dataIdentity
83
+ };
84
+ const requestIdentityHash = crypto.createHash('sha1').update(JSON.stringify(requestIdentity)).digest('hex');
85
+ return {
86
+ method,
87
+ endpoint,
88
+ requestIdentityHash,
89
+ requestIdentity
90
+ };
91
+ }
92
+ function sortEntries(entries) {
93
+ return entries.sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0));
94
+ }
95
+ function computeDataIdentity(config) {
96
+ const data = config.data;
97
+ if (!data) {
98
+ return undefined;
99
+ }
100
+ let dataString = '';
101
+ if (typeof data === 'string') {
102
+ dataString = data;
103
+ }
104
+ else if (Buffer.isBuffer(data)) {
105
+ dataString = data.toString('base64');
106
+ }
107
+ else {
108
+ try {
109
+ dataString = JSON.stringify(data);
110
+ }
111
+ catch (e) {
112
+ if (e instanceof Error) {
113
+ throw new Error(`Unable to compute request identity: ${e.message}`);
114
+ }
115
+ else {
116
+ throw new Error('Unable to compute request identity');
117
+ }
118
+ }
119
+ }
120
+ if (dataString.length > 1000) {
121
+ return 'sha1:' + crypto.createHash('sha1').update(dataString).digest('hex');
122
+ }
123
+ else {
124
+ return dataString;
125
+ }
126
+ }
57
127
  //# sourceMappingURL=response-saver.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"response-saver.service.js","sourceRoot":"","sources":["../../lib/services/response-saver.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAK7B,MAAM,UAAU,qBAAqB,CAAC,aAAqB;IACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAChC,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAI,EACrB,aAAa,EACb,IAAI,EACJ,cAAc,EACd,mBAAmB,EAMtB;IACG,qBAAqB,CAAC,GAAG,aAAa,QAAQ,CAAC,CAAC;IAEhD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IAC1D,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE9C,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QACnE,IAAI,mBAAmB,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5E,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACrC,CAAC;IACL,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,EACpC,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EAMX;IACG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACrB,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,MAAM,aAAa,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,IAAI,EAAE,GAAG,iBAAiB,EAAE,CAAC;IACnG,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,KAAK,CAAC;IAE9D,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,YAAY,wBAAwB,iBAAiB,EAAE,CAAC,EAAE,CAAC;QACzG,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAkB,CAAC;QAE/C,mEAAmE;QACnE,YAAY,CAAqD;YAC7D,aAAa;YACb,IAAI,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAoB,EAAE,iBAAiB,EAAE,UAAU,CAAC,iBAAiB,EAAE;YACpG,cAAc,EAAE,gCAAgC;YAChD,mBAAmB,EAAE,KAAK;SAC7B,CAAC,CAAC;QAEH,YAAY,CAAW;YACnB,aAAa;YACb,IAAI,EAAE,UAAU,CAAC,QAAoB;YACrC,cAAc,EAAE,8BAA8B;YAC9C,mBAAmB,EAAE,KAAK;SAC7B,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAE/C,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAEhC,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,mBAAmB,GAAG,IAAI,CAAC;IAC/B,CAAC;IAED,YAAY,CAAgB;QACxB,aAAa;QACb,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,cAAc,EAAE,eAAe,MAAM,IAAI,YAAY,IAAI,QAAQ,OAAO;QACxE,mBAAmB;KACtB,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"response-saver.service.js","sourceRoot":"","sources":["../../lib/services/response-saver.service.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const NANGO_VERSION = "0.46.0";
1
+ export declare const NANGO_VERSION = "0.46.1";
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const NANGO_VERSION = '0.46.0';
1
+ export const NANGO_VERSION = '0.46.1';
2
2
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nango",
3
- "version": "0.46.0",
3
+ "version": "0.46.1",
4
4
  "description": "Nango's CLI tool.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -24,8 +24,8 @@
24
24
  "@babel/parser": "^7.22.5",
25
25
  "@babel/traverse": "^7.22.5",
26
26
  "@babel/types": "^7.22.5",
27
- "@nangohq/nango-yaml": "0.46.0",
28
- "@nangohq/shared": "^0.46.0",
27
+ "@nangohq/nango-yaml": "0.46.1",
28
+ "@nangohq/shared": "^0.46.1",
29
29
  "@swc/core": "^1.5.25",
30
30
  "ajv": "^8.12.0",
31
31
  "ajv-errors": "^3.0.0",
@@ -55,7 +55,7 @@
55
55
  "@babel/core": "^7.22.1",
56
56
  "@babel/preset-env": "^7.22.4",
57
57
  "@babel/preset-typescript": "^7.21.5",
58
- "@nangohq/types": "0.46.0",
58
+ "@nangohq/types": "0.46.1",
59
59
  "@types/babel__traverse": "^7.20.1",
60
60
  "@types/babel-traverse": "^6.25.7",
61
61
  "@types/commander": "^2.12.2",