@nangohq/runner-sdk 0.70.1 → 0.70.3
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/dist/action.js +94 -7
- package/dist/action.js.map +1 -1
- package/dist/action.uncontrolledFetch.unit.test.d.ts +1 -0
- package/dist/action.uncontrolledFetch.unit.test.js +181 -0
- package/dist/action.uncontrolledFetch.unit.test.js.map +1 -0
- package/dist/baseUrlOverrideDenylist.d.ts +19 -0
- package/dist/baseUrlOverrideDenylist.js +112 -0
- package/dist/baseUrlOverrideDenylist.js.map +1 -0
- package/dist/sync.d.ts +1 -0
- package/dist/sync.js +4 -0
- package/dist/sync.js.map +1 -1
- package/package.json +5 -5
package/dist/action.js
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import { getProvider } from '@nangohq/providers';
|
|
2
|
+
import { getBaseUrlOverrideDenylistFromEnv, isBaseUrlOverrideDenied } from './baseUrlOverrideDenylist.js';
|
|
2
3
|
import { ActionError, ExecutionAbortedSDKError, ExecutionInterruptedSDKError, ExecutionTimeoutSDKError, UnknownProviderSDKError } from './errors.js';
|
|
3
4
|
import paginateService from './paginate.service.js';
|
|
4
5
|
const MEMOIZED_CONNECTION_TTL = 60000;
|
|
5
6
|
const MEMOIZED_INTEGRATION_TTL = 10 * 60 * 1000;
|
|
7
|
+
/** Max hops when following redirects manually (denylist checked per hop). */
|
|
8
|
+
const UNCONTROLLED_FETCH_MAX_REDIRECTS = 5;
|
|
9
|
+
const REDIRECT_STATUS_CODES = new Set([301, 302, 303, 307, 308]);
|
|
10
|
+
const ALLOWED_REDIRECT_PROTOCOLS = new Set(['http:', 'https:']);
|
|
6
11
|
export class NangoActionBase {
|
|
7
12
|
attributes = {};
|
|
8
13
|
logger;
|
|
@@ -300,15 +305,97 @@ export class NangoActionBase {
|
|
|
300
305
|
* Only use that method when you want to access resources that are unrelated to the current connection/provider.
|
|
301
306
|
*/
|
|
302
307
|
async uncontrolledFetch(options) {
|
|
303
|
-
const
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
308
|
+
const baseUrlOverrideDenylist = getBaseUrlOverrideDenylistFromEnv();
|
|
309
|
+
const throwIfDenied = (absoluteUrl) => {
|
|
310
|
+
if (baseUrlOverrideDenylist.size > 0 && isBaseUrlOverrideDenied(absoluteUrl, baseUrlOverrideDenylist)) {
|
|
311
|
+
throw new this.ActionError({
|
|
312
|
+
code: 'url_not_allowed',
|
|
313
|
+
message: 'This URL is not allowed by server configuration.'
|
|
314
|
+
});
|
|
315
|
+
}
|
|
307
316
|
};
|
|
308
|
-
|
|
309
|
-
|
|
317
|
+
throwIfDenied(options.url.toString());
|
|
318
|
+
let currentUrl = new URL(options.url.href);
|
|
319
|
+
let method = options.method || 'GET';
|
|
320
|
+
let body = options.body ?? undefined;
|
|
321
|
+
const headerBag = new Headers(options.headers);
|
|
322
|
+
for (let redirectsFollowed = 0;; redirectsFollowed++) {
|
|
323
|
+
const props = {
|
|
324
|
+
headers: new Headers(headerBag),
|
|
325
|
+
method,
|
|
326
|
+
redirect: 'manual'
|
|
327
|
+
// TODO: use agent
|
|
328
|
+
};
|
|
329
|
+
if (body) {
|
|
330
|
+
props.body = body;
|
|
331
|
+
}
|
|
332
|
+
const response = await fetch(currentUrl, props);
|
|
333
|
+
if (!REDIRECT_STATUS_CODES.has(response.status)) {
|
|
334
|
+
return response;
|
|
335
|
+
}
|
|
336
|
+
const location = response.headers.get('Location');
|
|
337
|
+
if (!location) {
|
|
338
|
+
return response;
|
|
339
|
+
}
|
|
340
|
+
// We're about to follow the redirect; we won't return this response, so cancel its body.
|
|
341
|
+
void response.body?.cancel();
|
|
342
|
+
if (redirectsFollowed >= UNCONTROLLED_FETCH_MAX_REDIRECTS) {
|
|
343
|
+
throw new this.ActionError({
|
|
344
|
+
code: 'too_many_redirects',
|
|
345
|
+
message: `Exceeded maximum of ${UNCONTROLLED_FETCH_MAX_REDIRECTS} redirects.`
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
let nextUrl;
|
|
349
|
+
try {
|
|
350
|
+
nextUrl = new URL(location, currentUrl);
|
|
351
|
+
}
|
|
352
|
+
catch {
|
|
353
|
+
throw new this.ActionError({
|
|
354
|
+
code: 'invalid_redirect',
|
|
355
|
+
message: 'Redirect Location could not be parsed as a URL.'
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
// Native fetch rejects redirects to non-HTTP(S) schemes.
|
|
359
|
+
if (!ALLOWED_REDIRECT_PROTOCOLS.has(nextUrl.protocol)) {
|
|
360
|
+
throw new this.ActionError({
|
|
361
|
+
code: 'invalid_redirect',
|
|
362
|
+
message: 'Redirect Location must use http: or https:.'
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
throwIfDenied(nextUrl.toString());
|
|
366
|
+
// Native fetch strips sensitive headers when redirecting to a different origin.
|
|
367
|
+
// Because we follow redirects manually, we must replicate that to avoid credential leaks.
|
|
368
|
+
if (currentUrl.origin !== nextUrl.origin) {
|
|
369
|
+
headerBag.delete('authorization');
|
|
370
|
+
headerBag.delete('proxy-authorization');
|
|
371
|
+
headerBag.delete('cookie');
|
|
372
|
+
}
|
|
373
|
+
// Match common fetch redirect semantics:
|
|
374
|
+
// - 303: switch to GET only if method is neither GET nor HEAD (drop body)
|
|
375
|
+
// - 301/302: switch to GET only for POST (preserve PUT/PATCH/DELETE, etc.)
|
|
376
|
+
// - 307/308: preserve method and body
|
|
377
|
+
const upperMethod = method.toUpperCase();
|
|
378
|
+
const shouldSwitchToGet = (response.status === 303 && upperMethod !== 'GET' && upperMethod !== 'HEAD') ||
|
|
379
|
+
((response.status === 301 || response.status === 302) && upperMethod === 'POST');
|
|
380
|
+
if (shouldSwitchToGet) {
|
|
381
|
+
method = 'GET';
|
|
382
|
+
body = undefined;
|
|
383
|
+
// When we rewrite to GET, drop request-body specific headers (native fetch does not forward them).
|
|
384
|
+
for (const h of [
|
|
385
|
+
'content-length',
|
|
386
|
+
'content-type',
|
|
387
|
+
'content-encoding',
|
|
388
|
+
'content-language',
|
|
389
|
+
'content-location',
|
|
390
|
+
'content-md5',
|
|
391
|
+
'content-range',
|
|
392
|
+
'transfer-encoding'
|
|
393
|
+
]) {
|
|
394
|
+
headerBag.delete(h);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
currentUrl = nextUrl;
|
|
310
398
|
}
|
|
311
|
-
return await fetch(options.url, props);
|
|
312
399
|
}
|
|
313
400
|
}
|
|
314
401
|
//# sourceMappingURL=action.js.map
|
package/dist/action.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.js","sourceRoot":"","sources":["../lib/action.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"action.js","sourceRoot":"","sources":["../lib/action.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
function makeProps() {
|
|
3
|
+
// Only the fields used by the base constructor are required for these tests.
|
|
4
|
+
return {
|
|
5
|
+
connectionId: 'connection-id',
|
|
6
|
+
environmentId: 1,
|
|
7
|
+
providerConfigKey: 'provider-config-key',
|
|
8
|
+
activityLogId: 'activity-log-id',
|
|
9
|
+
runnerFlags: {},
|
|
10
|
+
scriptType: 'action',
|
|
11
|
+
isCLI: false
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
async function makeActionInstance() {
|
|
15
|
+
const mod = await import('./action.js');
|
|
16
|
+
const { NangoActionBase } = mod;
|
|
17
|
+
class TestAction extends NangoActionBase {
|
|
18
|
+
// minimal shape for places that may touch user agent
|
|
19
|
+
nango = { userAgent: 'runner-sdk-test' };
|
|
20
|
+
proxy() {
|
|
21
|
+
throw new Error('not implemented');
|
|
22
|
+
}
|
|
23
|
+
log() {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
triggerSync() {
|
|
27
|
+
throw new Error('not implemented');
|
|
28
|
+
}
|
|
29
|
+
startSync() {
|
|
30
|
+
throw new Error('not implemented');
|
|
31
|
+
}
|
|
32
|
+
tryAcquireLock() {
|
|
33
|
+
return Promise.resolve(false);
|
|
34
|
+
}
|
|
35
|
+
async releaseLock() {
|
|
36
|
+
return Promise.resolve(false);
|
|
37
|
+
}
|
|
38
|
+
async releaseAllLocks() {
|
|
39
|
+
return Promise.resolve();
|
|
40
|
+
}
|
|
41
|
+
async getCheckpoint() {
|
|
42
|
+
return Promise.resolve(null);
|
|
43
|
+
}
|
|
44
|
+
async saveCheckpoint() {
|
|
45
|
+
return Promise.resolve();
|
|
46
|
+
}
|
|
47
|
+
async clearCheckpoint() {
|
|
48
|
+
return Promise.resolve();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return { action: new TestAction(makeProps()) };
|
|
52
|
+
}
|
|
53
|
+
describe('uncontrolledFetch', () => {
|
|
54
|
+
beforeEach(() => {
|
|
55
|
+
vi.resetModules();
|
|
56
|
+
delete process.env['NANGO_PROXY_BASE_URL_OVERRIDE_DENYLIST'];
|
|
57
|
+
delete process.env['AWS_LAMBDA_RUNTIME_API'];
|
|
58
|
+
});
|
|
59
|
+
afterEach(() => {
|
|
60
|
+
vi.restoreAllMocks();
|
|
61
|
+
vi.unstubAllGlobals();
|
|
62
|
+
delete process.env['NANGO_PROXY_BASE_URL_OVERRIDE_DENYLIST'];
|
|
63
|
+
delete process.env['AWS_LAMBDA_RUNTIME_API'];
|
|
64
|
+
});
|
|
65
|
+
it('rejects redirects to non-HTTP(S) schemes', async () => {
|
|
66
|
+
const fetchMock = vi.fn().mockResolvedValue(new Response(null, { status: 302, headers: { Location: 'data:text/plain,hello' } }));
|
|
67
|
+
vi.stubGlobal('fetch', fetchMock);
|
|
68
|
+
const { action } = await makeActionInstance();
|
|
69
|
+
await expect(action.uncontrolledFetch({ url: new URL('https://example.com/start') })).rejects.toMatchObject({
|
|
70
|
+
type: 'action_script_runtime_error',
|
|
71
|
+
payload: { code: 'invalid_redirect' }
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
it('blocks a redirect hop to a denylisted host', async () => {
|
|
75
|
+
process.env['NANGO_PROXY_BASE_URL_OVERRIDE_DENYLIST'] = JSON.stringify(['metadata.google.internal']);
|
|
76
|
+
const fetchMock = vi
|
|
77
|
+
.fn()
|
|
78
|
+
.mockResolvedValue(new Response(null, { status: 302, headers: { Location: 'https://metadata.google.internal/latest/meta-data/' } }));
|
|
79
|
+
vi.stubGlobal('fetch', fetchMock);
|
|
80
|
+
const { action } = await makeActionInstance();
|
|
81
|
+
await expect(action.uncontrolledFetch({
|
|
82
|
+
url: new URL('https://example.com/start')
|
|
83
|
+
})).rejects.toMatchObject({ type: 'action_script_runtime_error', payload: { code: 'url_not_allowed' } });
|
|
84
|
+
expect(fetchMock).toHaveBeenCalledTimes(1);
|
|
85
|
+
});
|
|
86
|
+
it('strips sensitive headers when redirecting to a different origin', async () => {
|
|
87
|
+
const fetchMock = vi
|
|
88
|
+
.fn()
|
|
89
|
+
.mockResolvedValueOnce(new Response(null, { status: 302, headers: { Location: 'https://b.example/next' } }))
|
|
90
|
+
.mockResolvedValueOnce(new Response('ok', { status: 200 }));
|
|
91
|
+
vi.stubGlobal('fetch', fetchMock);
|
|
92
|
+
const { action } = await makeActionInstance();
|
|
93
|
+
const res = await action.uncontrolledFetch({
|
|
94
|
+
url: new URL('https://a.example/start'),
|
|
95
|
+
headers: { Authorization: 'Bearer secret', 'X-Test': '1' }
|
|
96
|
+
});
|
|
97
|
+
expect(await res.text()).toBe('ok');
|
|
98
|
+
expect(fetchMock).toHaveBeenCalledTimes(2);
|
|
99
|
+
const secondCallInit = fetchMock.mock.calls[1][1];
|
|
100
|
+
const headers = secondCallInit.headers;
|
|
101
|
+
expect(headers.get('authorization')).toBeNull();
|
|
102
|
+
expect(headers.get('cookie')).toBeNull();
|
|
103
|
+
expect(headers.get('proxy-authorization')).toBeNull();
|
|
104
|
+
expect(headers.get('x-test')).toBe('1');
|
|
105
|
+
});
|
|
106
|
+
it('preserves redirect response body when status is 3xx without Location', async () => {
|
|
107
|
+
const fetchMock = vi.fn().mockResolvedValue(new Response('diagnostic payload', { status: 302 }));
|
|
108
|
+
vi.stubGlobal('fetch', fetchMock);
|
|
109
|
+
const { action } = await makeActionInstance();
|
|
110
|
+
const res = await action.uncontrolledFetch({ url: new URL('https://example.com/redirect-without-location') });
|
|
111
|
+
expect(res.status).toBe(302);
|
|
112
|
+
expect(await res.text()).toBe('diagnostic payload');
|
|
113
|
+
expect(fetchMock).toHaveBeenCalledTimes(1);
|
|
114
|
+
});
|
|
115
|
+
it('preserves non-POST methods on 301/302 redirects (e.g. PUT)', async () => {
|
|
116
|
+
const fetchMock = vi
|
|
117
|
+
.fn()
|
|
118
|
+
.mockResolvedValueOnce(new Response(null, { status: 301, headers: { Location: 'https://example.com/next' } }))
|
|
119
|
+
.mockResolvedValueOnce(new Response('ok', { status: 200 }));
|
|
120
|
+
vi.stubGlobal('fetch', fetchMock);
|
|
121
|
+
const { action } = await makeActionInstance();
|
|
122
|
+
const res = await action.uncontrolledFetch({
|
|
123
|
+
url: new URL('https://example.com/start'),
|
|
124
|
+
method: 'PUT',
|
|
125
|
+
body: 'body',
|
|
126
|
+
headers: { 'content-type': 'text/plain' }
|
|
127
|
+
});
|
|
128
|
+
expect(await res.text()).toBe('ok');
|
|
129
|
+
const secondCallInit = fetchMock.mock.calls[1][1];
|
|
130
|
+
expect(secondCallInit.method).toBe('PUT');
|
|
131
|
+
expect(secondCallInit.body).toBe('body');
|
|
132
|
+
expect(secondCallInit.headers.get('content-type')).toBe('text/plain');
|
|
133
|
+
});
|
|
134
|
+
it('rewrites POST to GET on 302 and drops request-body headers', async () => {
|
|
135
|
+
const fetchMock = vi
|
|
136
|
+
.fn()
|
|
137
|
+
.mockResolvedValueOnce(new Response(null, { status: 302, headers: { Location: 'https://example.com/next' } }))
|
|
138
|
+
.mockResolvedValueOnce(new Response('ok', { status: 200 }));
|
|
139
|
+
vi.stubGlobal('fetch', fetchMock);
|
|
140
|
+
const { action } = await makeActionInstance();
|
|
141
|
+
const res = await action.uncontrolledFetch({
|
|
142
|
+
url: new URL('https://example.com/start'),
|
|
143
|
+
method: 'POST',
|
|
144
|
+
body: 'hello',
|
|
145
|
+
headers: {
|
|
146
|
+
'content-type': 'application/json',
|
|
147
|
+
'content-language': 'en',
|
|
148
|
+
'content-encoding': 'gzip',
|
|
149
|
+
'x-test': '1'
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
expect(await res.text()).toBe('ok');
|
|
153
|
+
const secondCallInit = fetchMock.mock.calls[1][1];
|
|
154
|
+
expect(secondCallInit.method).toBe('GET');
|
|
155
|
+
expect(secondCallInit.body).toBeUndefined();
|
|
156
|
+
const headers = secondCallInit.headers;
|
|
157
|
+
expect(headers.get('content-type')).toBeNull();
|
|
158
|
+
expect(headers.get('content-language')).toBeNull();
|
|
159
|
+
expect(headers.get('content-encoding')).toBeNull();
|
|
160
|
+
expect(headers.get('x-test')).toBe('1');
|
|
161
|
+
});
|
|
162
|
+
it('preserves GET on 303 redirects (no forced rewrite)', async () => {
|
|
163
|
+
const fetchMock = vi
|
|
164
|
+
.fn()
|
|
165
|
+
.mockResolvedValueOnce(new Response(null, { status: 303, headers: { Location: 'https://example.com/next' } }))
|
|
166
|
+
.mockResolvedValueOnce(new Response(null, { status: 200 }));
|
|
167
|
+
vi.stubGlobal('fetch', fetchMock);
|
|
168
|
+
const { action } = await makeActionInstance();
|
|
169
|
+
const res = await action.uncontrolledFetch({
|
|
170
|
+
url: new URL('https://example.com/start'),
|
|
171
|
+
method: 'GET',
|
|
172
|
+
headers: { authorization: 'Bearer secret' }
|
|
173
|
+
});
|
|
174
|
+
expect(res.status).toBe(200);
|
|
175
|
+
expect(fetchMock).toHaveBeenCalledTimes(2);
|
|
176
|
+
const secondCallInit = fetchMock.mock.calls[1][1];
|
|
177
|
+
expect(secondCallInit.method).toBe('GET');
|
|
178
|
+
expect(secondCallInit.body).toBeUndefined();
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
//# sourceMappingURL=action.uncontrolledFetch.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.uncontrolledFetch.unit.test.js","sourceRoot":"","sources":["../lib/action.uncontrolledFetch.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hostname form used for denylist matching: lowercase, no bracketed IPv6 wrapper, no trailing FQDN dot.
|
|
3
|
+
*
|
|
4
|
+
* Note: WHATWG URL already normalizes IPv4 hostnames to dotted decimal (`127.0.0.1`) for octal,
|
|
5
|
+
* hexadecimal, and 32-bit integer spellings. That applies to `new URL(url).hostname` in
|
|
6
|
+
* {@link isBaseUrlOverrideDenied}. Bare denylist entries are passed through `new URL('http://…')`
|
|
7
|
+
* in {@link normalizeDenylistHost} so they use the same IPv4 rules. IPv6 literals must be bracketed
|
|
8
|
+
* when using bare form (`[::1]`), matching URL parsing.
|
|
9
|
+
*/
|
|
10
|
+
export declare function canonicalizeHostnameForDenylist(host: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Normalize a denylist entry to a lowercase hostname for comparison.
|
|
13
|
+
* Accepts full URLs (`://` present), or bare hostnames / `host:port` / IPv4 literals — bare forms are
|
|
14
|
+
* parsed with `new URL('http://…')` so IPv4 uses the same normalization as {@link isBaseUrlOverrideDenied}.
|
|
15
|
+
*/
|
|
16
|
+
export declare function normalizeDenylistHost(entry: string): string;
|
|
17
|
+
export declare function normalizeDenylist(denylist: string[] | undefined): Set<string>;
|
|
18
|
+
export declare function isBaseUrlOverrideDenied(overrideUrl: string, denylist: Set<string>): boolean;
|
|
19
|
+
export declare function getBaseUrlOverrideDenylistFromEnv(): Set<string>;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hostname form used for denylist matching: lowercase, no bracketed IPv6 wrapper, no trailing FQDN dot.
|
|
3
|
+
*
|
|
4
|
+
* Note: WHATWG URL already normalizes IPv4 hostnames to dotted decimal (`127.0.0.1`) for octal,
|
|
5
|
+
* hexadecimal, and 32-bit integer spellings. That applies to `new URL(url).hostname` in
|
|
6
|
+
* {@link isBaseUrlOverrideDenied}. Bare denylist entries are passed through `new URL('http://…')`
|
|
7
|
+
* in {@link normalizeDenylistHost} so they use the same IPv4 rules. IPv6 literals must be bracketed
|
|
8
|
+
* when using bare form (`[::1]`), matching URL parsing.
|
|
9
|
+
*/
|
|
10
|
+
export function canonicalizeHostnameForDenylist(host) {
|
|
11
|
+
let h = host.trim().toLowerCase();
|
|
12
|
+
if (h.startsWith('[') && h.endsWith(']')) {
|
|
13
|
+
h = h.slice(1, -1);
|
|
14
|
+
}
|
|
15
|
+
while (h.endsWith('.')) {
|
|
16
|
+
h = h.slice(0, -1);
|
|
17
|
+
}
|
|
18
|
+
return h;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Normalize a denylist entry to a lowercase hostname for comparison.
|
|
22
|
+
* Accepts full URLs (`://` present), or bare hostnames / `host:port` / IPv4 literals — bare forms are
|
|
23
|
+
* parsed with `new URL('http://…')` so IPv4 uses the same normalization as {@link isBaseUrlOverrideDenied}.
|
|
24
|
+
*/
|
|
25
|
+
export function normalizeDenylistHost(entry) {
|
|
26
|
+
const trimmed = entry.trim();
|
|
27
|
+
if (!trimmed) {
|
|
28
|
+
return '';
|
|
29
|
+
}
|
|
30
|
+
let host;
|
|
31
|
+
if (trimmed.includes('://')) {
|
|
32
|
+
try {
|
|
33
|
+
host = new URL(trimmed).hostname;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
host = trimmed;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
try {
|
|
41
|
+
host = new URL(`http://${trimmed}`).hostname;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
host = trimmed;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return canonicalizeHostnameForDenylist(host);
|
|
48
|
+
}
|
|
49
|
+
export function normalizeDenylist(denylist) {
|
|
50
|
+
if (!denylist?.length) {
|
|
51
|
+
return new Set();
|
|
52
|
+
}
|
|
53
|
+
return new Set(denylist.map(normalizeDenylistHost).filter(Boolean));
|
|
54
|
+
}
|
|
55
|
+
export function isBaseUrlOverrideDenied(overrideUrl, denylist) {
|
|
56
|
+
if (denylist.size === 0) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
let hostname;
|
|
60
|
+
try {
|
|
61
|
+
hostname = canonicalizeHostnameForDenylist(new URL(overrideUrl).hostname);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Fail closed when a denylist is configured but the URL cannot be parsed.
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
return denylist.has(hostname);
|
|
68
|
+
}
|
|
69
|
+
let memoizedBaseUrlOverrideDenylist = null;
|
|
70
|
+
function parseDenylistEnvValue(raw) {
|
|
71
|
+
if (!raw) {
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
const trimmed = raw.trim();
|
|
75
|
+
if (!trimmed) {
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
// Matches server behavior: env is a JSON array of strings.
|
|
79
|
+
try {
|
|
80
|
+
const parsed = JSON.parse(trimmed);
|
|
81
|
+
if (!Array.isArray(parsed)) {
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
return parsed
|
|
85
|
+
.filter((v) => typeof v === 'string')
|
|
86
|
+
.map((v) => v.trim())
|
|
87
|
+
.filter(Boolean);
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// If the env is misconfigured, fail open (denylist disabled) rather than breaking user scripts.
|
|
91
|
+
return [];
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
export function getBaseUrlOverrideDenylistFromEnv() {
|
|
95
|
+
if (memoizedBaseUrlOverrideDenylist) {
|
|
96
|
+
return memoizedBaseUrlOverrideDenylist;
|
|
97
|
+
}
|
|
98
|
+
const raw = typeof process !== 'undefined' ? process.env['NANGO_PROXY_BASE_URL_OVERRIDE_DENYLIST'] : undefined;
|
|
99
|
+
const denylist = normalizeDenylist(parseDenylistEnvValue(raw));
|
|
100
|
+
// In AWS Lambda, this env points to the internal runtime API (commonly `127.0.0.1:9001`).
|
|
101
|
+
// We always deny it to prevent accidental SSRF access from user-provided overrides.
|
|
102
|
+
const lambdaRuntimeApi = typeof process !== 'undefined' ? process.env['AWS_LAMBDA_RUNTIME_API'] : undefined;
|
|
103
|
+
if (lambdaRuntimeApi) {
|
|
104
|
+
const normalized = normalizeDenylistHost(lambdaRuntimeApi);
|
|
105
|
+
if (normalized) {
|
|
106
|
+
denylist.add(normalized);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
memoizedBaseUrlOverrideDenylist = denylist;
|
|
110
|
+
return memoizedBaseUrlOverrideDenylist;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=baseUrlOverrideDenylist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseUrlOverrideDenylist.js","sourceRoot":"","sources":["../lib/baseUrlOverrideDenylist.ts"],"names":[],"mappings":"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"}
|
package/dist/sync.d.ts
CHANGED
package/dist/sync.js
CHANGED
|
@@ -5,6 +5,7 @@ export class NangoSyncBase extends NangoActionBase {
|
|
|
5
5
|
variant = BASE_VARIANT;
|
|
6
6
|
lastSyncDate;
|
|
7
7
|
track_deletes = false;
|
|
8
|
+
emptyCache = false;
|
|
8
9
|
constructor(config) {
|
|
9
10
|
super(config);
|
|
10
11
|
if (config.lastSyncDate) {
|
|
@@ -13,6 +14,9 @@ export class NangoSyncBase extends NangoActionBase {
|
|
|
13
14
|
if (config.track_deletes) {
|
|
14
15
|
this.track_deletes = config.track_deletes;
|
|
15
16
|
}
|
|
17
|
+
if (config.emptyCache) {
|
|
18
|
+
this.emptyCache = config.emptyCache;
|
|
19
|
+
}
|
|
16
20
|
if (config.syncVariant) {
|
|
17
21
|
this.variant = config.syncVariant;
|
|
18
22
|
}
|
package/dist/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../lib/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAOnD,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC;AAEnC,MAAM,OAAgB,aAKpB,SAAQ,eAAuC;IACtC,OAAO,GAAG,YAAY,CAAC;IAE9B,YAAY,CAAQ;IACpB,aAAa,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../lib/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAOnD,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC;AAEnC,MAAM,OAAgB,aAKpB,SAAQ,eAAuC;IACtC,OAAO,GAAG,YAAY,CAAC;IAE9B,YAAY,CAAQ;IACpB,aAAa,GAAG,KAAK,CAAC;IACtB,UAAU,GAAG,KAAK,CAAC;IAEnB,YAAY,MAAkB;QAC1B,KAAK,CAAC,MAAM,CAAC,CAAC;QAEd,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QAC5C,CAAC;QAED,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC9C,CAAC;QAED,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACxC,CAAC;QAED,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,CAAC;IACL,CAAC;IAEM,aAAa,CAAC,KAAa;QAC9B,IAAI,IAAI,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,GAAG,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;IACvC,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,SAAS,CAAyD,OAAiB,EAAE,KAAiB;QAC/G,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IA6CS,eAAe,CAAC,KAAa,EAAE,OAAkB;QACvD,mBAAmB;QACnB,MAAM,SAAS,GAAqD,EAAE,CAAC;QACvE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,YAAY,CAAC;gBAC5B,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,IAAI,GAAG;gBACxC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBACzC,UAAU,EAAE,IAAI,CAAC,UAAW,CAAC,kBAAkB;gBAC/C,SAAS,EAAE,KAAK;aACnB,CAAC,CAAC;YACH,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACtB,SAAS;YACb,CAAC;YAED,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;YAE7C,IAAI,IAAI,CAAC,WAAW,EAAE,mBAAmB,EAAE,CAAC;gBACxC,MAAM;YACV,CAAC;QACL,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAES,cAAc,CAAmB,OAAY;QACnD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,OAAO,OAAO,CAAC;QACnB,CAAC;QACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAC1B,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,iBAAiB,IAAI,MAAM,EAAE,CAAC;gBACtE,OAAO,MAAM,CAAC,eAAe,CAAC;YAClC,CAAC;YAED,OAAO,MAAM,CAAC;QAClB,CAAC,CAAC,CAAC;IACP,CAAC;CACJ"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nangohq/runner-sdk",
|
|
3
|
-
"version": "0.70.
|
|
3
|
+
"version": "0.70.3",
|
|
4
4
|
"description": "Nango's Runner SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -10,17 +10,17 @@
|
|
|
10
10
|
"directory": "packages/runner-sdk"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@nangohq/node": "0.70.
|
|
14
|
-
"@nangohq/providers": "0.70.
|
|
13
|
+
"@nangohq/node": "0.70.3",
|
|
14
|
+
"@nangohq/providers": "0.70.3",
|
|
15
15
|
"ajv": "8.18.0",
|
|
16
16
|
"ajv-formats": "3.0.1",
|
|
17
17
|
"lodash-es": "4.18.1",
|
|
18
18
|
"parse-link-header": "2.0.0"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
|
-
"@nangohq/types": "0.70.
|
|
21
|
+
"@nangohq/types": "0.70.3",
|
|
22
22
|
"@types/json-schema": "7.0.15",
|
|
23
|
-
"axios": "1.15.
|
|
23
|
+
"axios": "1.15.2",
|
|
24
24
|
"json-schema": "0.4.0",
|
|
25
25
|
"vitest": "3.2.4"
|
|
26
26
|
},
|