@nangohq/runner-sdk 0.48.3 → 0.48.4

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/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@nangohq/runner-sdk",
3
- "version": "0.48.3",
3
+ "version": "0.48.4",
4
4
  "description": "Nango's Runner SDK",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "dependencies": {
8
- "@nangohq/node": "0.48.3",
9
- "@nangohq/providers": "0.48.3",
8
+ "@nangohq/node": "0.48.4",
9
+ "@nangohq/providers": "0.48.4",
10
10
  "ajv": "8.17.1",
11
11
  "ajv-formats": "3.0.1",
12
12
  "axios": "1.7.9",
@@ -14,7 +14,7 @@
14
14
  "parse-link-header": "2.0.0"
15
15
  },
16
16
  "devDependencies": {
17
- "@nangohq/types": "0.48.3",
17
+ "@nangohq/types": "0.48.4",
18
18
  "@types/json-schema": "7.0.15",
19
19
  "json-schema": "0.4.0",
20
20
  "vitest": "2.1.8"
package/dist/sdk.d.ts DELETED
@@ -1,111 +0,0 @@
1
- import type { Nango } from '@nangohq/node';
2
- import type { AxiosResponse } from 'axios';
3
- import type { ApiKeyCredentials, ApiPublicConnectionFull, AppCredentials, AppStoreCredentials, BasicApiCredentials, BillCredentials, CustomCredentials, EnvironmentVariable, GetPublicConnection, GetPublicIntegration, JwtCredentials, MaybePromise, Metadata, NangoProps, OAuth1Token, OAuth2ClientCredentials, SetMetadata, SignatureCredentials, TableauCredentials, TbaCredentials, TwoStepCredentials, UnauthCredentials, UpdateMetadata, UserLogParameters, UserProvidedProxyConfiguration } from '@nangohq/types';
4
- import type { ValidateDataError } from './dataValidation.js';
5
- export declare const oldLevelToNewLevel: {
6
- readonly debug: "debug";
7
- readonly info: "info";
8
- readonly warn: "warn";
9
- readonly error: "error";
10
- readonly verbose: "debug";
11
- readonly silly: "debug";
12
- readonly http: "info";
13
- };
14
- export type ProxyConfiguration = Omit<UserProvidedProxyConfiguration, 'files' | 'providerConfigKey' | 'connectionId'> & {
15
- providerConfigKey?: string;
16
- connectionId?: string;
17
- };
18
- export declare class ActionError<T = Record<string, unknown>> extends Error {
19
- type: string;
20
- payload?: Record<string, unknown>;
21
- constructor(payload?: T);
22
- }
23
- export declare abstract class NangoActionBase {
24
- abstract nango: Nango;
25
- private attributes;
26
- activityLogId?: string | undefined;
27
- syncId?: string;
28
- nangoConnectionId?: number;
29
- environmentId: number;
30
- environmentName?: string;
31
- syncJobId?: number;
32
- abortSignal?: NangoProps['abortSignal'];
33
- syncConfig?: NangoProps['syncConfig'];
34
- runnerFlags: NangoProps['runnerFlags'];
35
- connectionId: string;
36
- providerConfigKey: string;
37
- provider?: string;
38
- ActionError: typeof ActionError;
39
- protected memoizedConnections: Map<string, {
40
- connection: ApiPublicConnectionFull;
41
- timestamp: number;
42
- }>;
43
- protected memoizedIntegration: Map<string, {
44
- integration: GetPublicIntegration["Success"]["data"];
45
- timestamp: number;
46
- }>;
47
- constructor(config: NangoProps);
48
- protected stringify(): string;
49
- protected proxyConfig(config: ProxyConfiguration): UserProvidedProxyConfiguration;
50
- protected throwIfAborted(): void;
51
- abstract proxy<T = any>(config: ProxyConfiguration): Promise<AxiosResponse<T>>;
52
- get<T = any>(config: Omit<ProxyConfiguration, 'method'>): Promise<AxiosResponse<T>>;
53
- post<T = any>(config: Omit<ProxyConfiguration, 'method'>): Promise<AxiosResponse<T>>;
54
- put<T = any>(config: Omit<ProxyConfiguration, 'method'>): Promise<AxiosResponse<T>>;
55
- patch<T = any>(config: Omit<ProxyConfiguration, 'method'>): Promise<AxiosResponse<T>>;
56
- delete<T = any>(config: Omit<ProxyConfiguration, 'method'>): Promise<AxiosResponse<T>>;
57
- getToken(): Promise<string | OAuth1Token | OAuth2ClientCredentials | BasicApiCredentials | ApiKeyCredentials | AppCredentials | AppStoreCredentials | UnauthCredentials | CustomCredentials | TbaCredentials | TableauCredentials | JwtCredentials | BillCredentials | TwoStepCredentials | SignatureCredentials>;
58
- /**
59
- * Get current integration
60
- */
61
- getIntegration(queries?: GetPublicIntegration['Querystring']): Promise<GetPublicIntegration['Success']['data']>;
62
- getConnection(providerConfigKeyOverride?: string, connectionIdOverride?: string): Promise<GetPublicConnection['Success']>;
63
- setMetadata(metadata: Metadata): Promise<AxiosResponse<SetMetadata['Success']>>;
64
- updateMetadata(metadata: Metadata): Promise<AxiosResponse<UpdateMetadata['Success']>>;
65
- /**
66
- * @deprecated please use setMetadata instead.
67
- */
68
- setFieldMapping(fieldMapping: Record<string, string>): Promise<AxiosResponse<object>>;
69
- getMetadata<T = Metadata>(): Promise<T>;
70
- getWebhookURL(): Promise<string | null | undefined>;
71
- /**
72
- * @deprecated please use getMetadata instead.
73
- */
74
- getFieldMapping(): Promise<Metadata>;
75
- /**
76
- * Log
77
- * @desc Log a message to the activity log which shows up in the Nango Dashboard
78
- * note that the last argument can be an object with a level property to specify the log level
79
- * @example
80
- * ```ts
81
- * await nango.log('This is a log message', { level: 'error' })
82
- * ```
83
- */
84
- abstract log(message: any, options?: UserLogParameters | {
85
- [key: string]: any;
86
- level?: never;
87
- }): MaybePromise<void>;
88
- abstract log(message: string, ...args: [any, UserLogParameters]): MaybePromise<void>;
89
- abstract log(...args: [...any]): MaybePromise<void>;
90
- getEnvironmentVariables(): Promise<EnvironmentVariable[] | null>;
91
- getFlowAttributes<A = object>(): A | null;
92
- paginate<T = any>(config: ProxyConfiguration): AsyncGenerator<T[], undefined, void>;
93
- triggerAction<In = unknown, Out = object>(providerConfigKey: string, connectionId: string, actionName: string, input?: In): Promise<Out>;
94
- abstract triggerSync(providerConfigKey: string, connectionId: string, syncName: string, fullResync?: boolean): Promise<void | string>;
95
- }
96
- export declare abstract class NangoSyncBase extends NangoActionBase {
97
- lastSyncDate?: Date;
98
- track_deletes: boolean;
99
- constructor(config: NangoProps);
100
- /**
101
- * @deprecated please use batchSave
102
- */
103
- batchSend<T = any>(results: T[], model: string): Promise<boolean | null>;
104
- abstract batchSave<T = any>(results: T[], model: string): MaybePromise<boolean>;
105
- abstract batchDelete<T = any>(results: T[], model: string): MaybePromise<boolean>;
106
- abstract batchUpdate<T = any>(results: T[], model: string): MaybePromise<boolean>;
107
- protected validateRecords(model: string, records: unknown[]): {
108
- data: any;
109
- validation: ValidateDataError[];
110
- }[];
111
- }
package/dist/sdk.js DELETED
@@ -1,303 +0,0 @@
1
- import paginateService from './paginate.service.js';
2
- import { getProvider } from '@nangohq/providers';
3
- import { AbortedSDKError, UnknownProviderSDKError } from './errors.js';
4
- import { validateData } from './dataValidation.js';
5
- export const oldLevelToNewLevel = {
6
- debug: 'debug',
7
- info: 'info',
8
- warn: 'warn',
9
- error: 'error',
10
- verbose: 'debug',
11
- silly: 'debug',
12
- http: 'info'
13
- };
14
- export class ActionError extends Error {
15
- type;
16
- payload;
17
- constructor(payload) {
18
- super();
19
- this.type = 'action_script_runtime_error';
20
- if (payload) {
21
- this.payload = payload;
22
- }
23
- }
24
- }
25
- const MEMOIZED_CONNECTION_TTL = 60000;
26
- const MEMOIZED_INTEGRATION_TTL = 10 * 60 * 1000;
27
- export class NangoActionBase {
28
- attributes = {};
29
- activityLogId;
30
- syncId;
31
- nangoConnectionId;
32
- environmentId;
33
- environmentName;
34
- syncJobId;
35
- abortSignal;
36
- syncConfig;
37
- runnerFlags;
38
- connectionId;
39
- providerConfigKey;
40
- provider;
41
- ActionError = ActionError;
42
- memoizedConnections = new Map();
43
- memoizedIntegration = new Map();
44
- constructor(config) {
45
- this.connectionId = config.connectionId;
46
- this.environmentId = config.environmentId;
47
- this.providerConfigKey = config.providerConfigKey;
48
- this.runnerFlags = config.runnerFlags;
49
- if (config.activityLogId) {
50
- this.activityLogId = config.activityLogId;
51
- }
52
- if (config.syncId) {
53
- this.syncId = config.syncId;
54
- }
55
- if (config.nangoConnectionId) {
56
- this.nangoConnectionId = config.nangoConnectionId;
57
- }
58
- if (config.syncJobId) {
59
- this.syncJobId = config.syncJobId;
60
- }
61
- if (config.environmentName) {
62
- this.environmentName = config.environmentName;
63
- }
64
- if (config.provider) {
65
- this.provider = config.provider;
66
- }
67
- if (config.attributes) {
68
- this.attributes = config.attributes;
69
- }
70
- if (config.abortSignal) {
71
- this.abortSignal = config.abortSignal;
72
- }
73
- if (config.syncConfig) {
74
- this.syncConfig = config.syncConfig;
75
- }
76
- }
77
- stringify() {
78
- return JSON.stringify(this, (key, value) => {
79
- if (key === 'secretKey') {
80
- return '********';
81
- }
82
- return value;
83
- });
84
- }
85
- proxyConfig(config) {
86
- if (!config.connectionId && this.connectionId) {
87
- config.connectionId = this.connectionId;
88
- }
89
- if (!config.providerConfigKey && this.providerConfigKey) {
90
- config.providerConfigKey = this.providerConfigKey;
91
- }
92
- if (!config.connectionId) {
93
- throw new Error('Missing connection id');
94
- }
95
- if (!config.providerConfigKey) {
96
- throw new Error('Missing provider config key');
97
- }
98
- return {
99
- method: 'GET',
100
- ...config,
101
- providerConfigKey: config.providerConfigKey,
102
- connectionId: config.connectionId,
103
- headers: {
104
- ...(config.headers || {}),
105
- 'user-agent': this.nango.userAgent
106
- }
107
- };
108
- }
109
- throwIfAborted() {
110
- if (this.abortSignal?.aborted) {
111
- throw new AbortedSDKError();
112
- }
113
- }
114
- async get(config) {
115
- return this.proxy({
116
- ...config,
117
- method: 'GET'
118
- });
119
- }
120
- async post(config) {
121
- return this.proxy({
122
- ...config,
123
- method: 'POST'
124
- });
125
- }
126
- async put(config) {
127
- return this.proxy({
128
- ...config,
129
- method: 'PUT'
130
- });
131
- }
132
- async patch(config) {
133
- return this.proxy({
134
- ...config,
135
- method: 'PATCH'
136
- });
137
- }
138
- async delete(config) {
139
- return this.proxy({
140
- ...config,
141
- method: 'DELETE'
142
- });
143
- }
144
- async getToken() {
145
- this.throwIfAborted();
146
- return this.nango.getToken(this.providerConfigKey, this.connectionId);
147
- }
148
- /**
149
- * Get current integration
150
- */
151
- async getIntegration(queries) {
152
- this.throwIfAborted();
153
- const key = queries?.include?.join(',') || 'default';
154
- const has = this.memoizedIntegration.get(key);
155
- if (has && MEMOIZED_INTEGRATION_TTL > Date.now() - has.timestamp) {
156
- return has.integration;
157
- }
158
- const { data: integration } = await this.nango.getIntegration({ uniqueKey: this.providerConfigKey }, queries);
159
- this.memoizedIntegration.set(key, { integration, timestamp: Date.now() });
160
- return integration;
161
- }
162
- async getConnection(providerConfigKeyOverride, connectionIdOverride) {
163
- this.throwIfAborted();
164
- const providerConfigKey = providerConfigKeyOverride || this.providerConfigKey;
165
- const connectionId = connectionIdOverride || this.connectionId;
166
- const credentialsPair = `${providerConfigKey}${connectionId}`;
167
- const cachedConnection = this.memoizedConnections.get(credentialsPair);
168
- if (!cachedConnection || Date.now() - cachedConnection.timestamp > MEMOIZED_CONNECTION_TTL) {
169
- const connection = await this.nango.getConnection(providerConfigKey, connectionId);
170
- this.memoizedConnections.set(credentialsPair, { connection, timestamp: Date.now() });
171
- return connection;
172
- }
173
- return cachedConnection.connection;
174
- }
175
- async setMetadata(metadata) {
176
- this.throwIfAborted();
177
- try {
178
- return await this.nango.setMetadata(this.providerConfigKey, this.connectionId, metadata);
179
- }
180
- finally {
181
- this.memoizedConnections.delete(`${this.providerConfigKey}${this.connectionId}`);
182
- }
183
- }
184
- async updateMetadata(metadata) {
185
- this.throwIfAborted();
186
- try {
187
- return await this.nango.updateMetadata(this.providerConfigKey, this.connectionId, metadata);
188
- }
189
- finally {
190
- this.memoizedConnections.delete(`${this.providerConfigKey}${this.connectionId}`);
191
- }
192
- }
193
- /**
194
- * @deprecated please use setMetadata instead.
195
- */
196
- async setFieldMapping(fieldMapping) {
197
- console.warn('setFieldMapping is deprecated. Please use setMetadata instead.');
198
- return this.setMetadata(fieldMapping);
199
- }
200
- async getMetadata() {
201
- this.throwIfAborted();
202
- return (await this.getConnection(this.providerConfigKey, this.connectionId)).metadata;
203
- }
204
- async getWebhookURL() {
205
- this.throwIfAborted();
206
- const integration = await this.getIntegration({ include: ['webhook'] });
207
- return integration.webhook_url;
208
- }
209
- /**
210
- * @deprecated please use getMetadata instead.
211
- */
212
- async getFieldMapping() {
213
- console.warn('getFieldMapping is deprecated. Please use getMetadata instead.');
214
- const metadata = await this.getMetadata();
215
- return metadata['fieldMapping'] || {};
216
- }
217
- async getEnvironmentVariables() {
218
- return await this.nango.getEnvironmentVariables();
219
- }
220
- getFlowAttributes() {
221
- if (!this.syncJobId) {
222
- throw new Error('There is no current sync to get attributes from');
223
- }
224
- return this.attributes;
225
- }
226
- async *paginate(config) {
227
- const provider = getProvider(this.provider);
228
- if (!provider) {
229
- throw new UnknownProviderSDKError({ provider: this.provider });
230
- }
231
- const templatePaginationConfig = provider.proxy?.paginate;
232
- if (!templatePaginationConfig && (!config.paginate || !config.paginate.type)) {
233
- throw Error('There was no pagination configuration for this integration or configuration passed in.');
234
- }
235
- const paginationConfig = {
236
- ...(templatePaginationConfig || {}),
237
- ...(config.paginate || {})
238
- };
239
- paginateService.validateConfiguration(paginationConfig);
240
- config.method = config.method || 'GET';
241
- const configMethod = config.method.toLocaleLowerCase();
242
- const passPaginationParamsInBody = ['post', 'put', 'patch'].includes(configMethod);
243
- const updatedBodyOrParams = (passPaginationParamsInBody ? config.data : config.params) ?? {};
244
- const limitParameterName = paginationConfig.limit_name_in_request;
245
- if (paginationConfig['limit']) {
246
- updatedBodyOrParams[limitParameterName] = paginationConfig['limit'];
247
- }
248
- const proxyConfig = this.proxyConfig(config);
249
- switch (paginationConfig.type) {
250
- case 'cursor':
251
- return yield* paginateService.cursor(proxyConfig, paginationConfig, updatedBodyOrParams, passPaginationParamsInBody, this.proxy.bind(this));
252
- case 'link':
253
- return yield* paginateService.link(proxyConfig, paginationConfig, updatedBodyOrParams, passPaginationParamsInBody, this.proxy.bind(this));
254
- case 'offset':
255
- return yield* paginateService.offset(proxyConfig, paginationConfig, updatedBodyOrParams, passPaginationParamsInBody, this.proxy.bind(this));
256
- default:
257
- throw Error(`'${paginationConfig['type']}' pagination is not supported.}`);
258
- }
259
- }
260
- async triggerAction(providerConfigKey, connectionId, actionName, input) {
261
- return await this.nango.triggerAction(providerConfigKey, connectionId, actionName, input);
262
- }
263
- }
264
- export class NangoSyncBase extends NangoActionBase {
265
- lastSyncDate;
266
- track_deletes = false;
267
- constructor(config) {
268
- super(config);
269
- if (config.lastSyncDate) {
270
- this.lastSyncDate = config.lastSyncDate;
271
- }
272
- if (config.track_deletes) {
273
- this.track_deletes = config.track_deletes;
274
- }
275
- }
276
- /**
277
- * @deprecated please use batchSave
278
- */
279
- async batchSend(results, model) {
280
- return this.batchSave(results, model);
281
- }
282
- validateRecords(model, records) {
283
- // Validate records
284
- const hasErrors = [];
285
- for (const record of records) {
286
- const validation = validateData({
287
- version: this.syncConfig?.version || '1',
288
- input: JSON.parse(JSON.stringify(record)),
289
- jsonSchema: this.syncConfig.models_json_schema,
290
- modelName: model
291
- });
292
- if (validation === true) {
293
- continue;
294
- }
295
- hasErrors.push({ data: record, validation });
296
- if (this.runnerFlags?.validateSyncRecords) {
297
- break;
298
- }
299
- }
300
- return hasErrors;
301
- }
302
- }
303
- //# sourceMappingURL=sdk.js.map
package/dist/sdk.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../lib/sdk.ts"],"names":[],"mappings":"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"}