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
|
|
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
|
|
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:
|
|
52
|
-
|
|
53
|
-
|
|
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;
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
28
|
-
"@nangohq/shared": "^0.46.
|
|
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.
|
|
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",
|