nango 0.36.13 → 0.36.15
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/cli.d.ts +16 -0
- package/dist/cli.js +338 -0
- package/dist/cli.js.map +1 -0
- package/dist/constants.d.ts +4 -0
- package/dist/constants.js +5 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.js +25 -16
- package/dist/index.js.map +1 -1
- package/dist/nango-sync.d.ts +7 -6
- package/dist/services/compile.service.d.ts +5 -0
- package/dist/services/compile.service.js +72 -0
- package/dist/services/compile.service.js.map +1 -0
- package/dist/services/config.service.d.ts +8 -0
- package/dist/services/config.service.js +73 -0
- package/dist/services/config.service.js.map +1 -0
- package/dist/services/deploy.service.d.ts +16 -0
- package/dist/services/deploy.service.js +237 -0
- package/dist/services/deploy.service.js.map +1 -0
- package/dist/services/dryrun.service.d.ts +15 -0
- package/dist/services/dryrun.service.js +149 -0
- package/dist/services/dryrun.service.js.map +1 -0
- package/dist/services/local-integration.service.d.ts +6 -0
- package/dist/services/local-integration.service.js +62 -0
- package/dist/services/local-integration.service.js.map +1 -0
- package/dist/services/model.service.d.ts +8 -0
- package/dist/services/model.service.js +162 -0
- package/dist/services/model.service.js.map +1 -0
- package/dist/services/parser.service.d.ts +6 -0
- package/dist/services/parser.service.js +79 -0
- package/dist/services/parser.service.js.map +1 -0
- package/dist/services/verification.service.d.ts +6 -0
- package/dist/services/verification.service.js +113 -0
- package/dist/services/verification.service.js.map +1 -0
- package/dist/sync.unit.test.js +93 -11
- package/dist/sync.unit.test.js.map +1 -1
- package/dist/utils.d.ts +2 -3
- package/dist/utils.js +31 -90
- package/dist/utils.js.map +1 -1
- package/docker/docker-compose.yaml +2 -2
- package/package.json +5 -3
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const version: (debug: boolean) => void;
|
|
2
|
+
export declare const generate: (debug?: boolean, inParentDirectory?: boolean) => Promise<void>;
|
|
3
|
+
/**
|
|
4
|
+
* Init
|
|
5
|
+
* If we're not currently in the nango-integrations directory create one
|
|
6
|
+
* and create an example nango.yaml file
|
|
7
|
+
*/
|
|
8
|
+
export declare const init: (debug?: boolean) => Promise<void>;
|
|
9
|
+
export declare const tscWatch: (debug?: boolean) => Promise<void>;
|
|
10
|
+
export declare const configWatch: (debug?: boolean) => void;
|
|
11
|
+
/**
|
|
12
|
+
* Docker Run
|
|
13
|
+
* @desc spawn a child process to run the docker compose located in the cli
|
|
14
|
+
* Look into https://www.npmjs.com/package/docker-compose to avoid dependency maybe?
|
|
15
|
+
*/
|
|
16
|
+
export declare const dockerRun: (debug?: boolean) => Promise<void>;
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path, { dirname } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import yaml from 'js-yaml';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import chokidar from 'chokidar';
|
|
7
|
+
import * as tsNode from 'ts-node';
|
|
8
|
+
import glob from 'glob';
|
|
9
|
+
import ejs from 'ejs';
|
|
10
|
+
import * as dotenv from 'dotenv';
|
|
11
|
+
import { spawn } from 'child_process';
|
|
12
|
+
import { nangoConfigFile, SyncConfigType, JAVASCRIPT_PRIMITIVES } from '@nangohq/shared';
|
|
13
|
+
import { NANGO_INTEGRATIONS_NAME, getNangoRootPath, printDebug } from './utils.js';
|
|
14
|
+
import configService from './services/config.service.js';
|
|
15
|
+
import modelService from './services/model.service.js';
|
|
16
|
+
import parserService from './services/parser.service.js';
|
|
17
|
+
import { NangoSyncTypesFileLocation, TYPES_FILE_NAME, exampleSyncName } from './constants.js';
|
|
18
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
19
|
+
const __dirname = dirname(__filename);
|
|
20
|
+
dotenv.config();
|
|
21
|
+
export const version = (debug) => {
|
|
22
|
+
if (debug) {
|
|
23
|
+
printDebug('Looking up the version first for a local path first then globally');
|
|
24
|
+
}
|
|
25
|
+
const packageJson = JSON.parse(fs.readFileSync(path.resolve(getNangoRootPath(debug), 'package.json'), 'utf8'));
|
|
26
|
+
const dockerComposeYaml = fs.readFileSync(path.resolve(getNangoRootPath(), 'docker/docker-compose.yaml'), 'utf8');
|
|
27
|
+
const dockerCompose = yaml.load(dockerComposeYaml);
|
|
28
|
+
const nangoServerImage = dockerCompose.services['nango-server'].image;
|
|
29
|
+
const nangoWorkerImage = dockerCompose.services['nango-worker'].image;
|
|
30
|
+
const nangoServerVersion = nangoServerImage.split(':').pop();
|
|
31
|
+
const nangoWorkerVersion = nangoWorkerImage.split(':').pop();
|
|
32
|
+
console.log(chalk.green('Nango Server version:'), nangoServerVersion);
|
|
33
|
+
console.log(chalk.green('Nango Worker version:'), nangoWorkerVersion);
|
|
34
|
+
console.log(chalk.green('Nango CLI version:'), packageJson.version);
|
|
35
|
+
};
|
|
36
|
+
export const generate = async (debug = false, inParentDirectory = false) => {
|
|
37
|
+
const dirPrefix = inParentDirectory ? `./${NANGO_INTEGRATIONS_NAME}` : '.';
|
|
38
|
+
const syncTemplateContents = fs.readFileSync(path.resolve(__dirname, './templates/sync.ejs'), 'utf8');
|
|
39
|
+
const actionTemplateContents = fs.readFileSync(path.resolve(__dirname, './templates/action.ejs'), 'utf8');
|
|
40
|
+
const githubExampleTemplateContents = fs.readFileSync(path.resolve(__dirname, './templates/github.sync.ejs'), 'utf8');
|
|
41
|
+
const configContents = fs.readFileSync(`${dirPrefix}/${nangoConfigFile}`, 'utf8');
|
|
42
|
+
const configData = yaml.load(configContents);
|
|
43
|
+
const { models, integrations } = configData;
|
|
44
|
+
const interfaceDefinitions = modelService.build(models, integrations, debug);
|
|
45
|
+
if (interfaceDefinitions) {
|
|
46
|
+
fs.writeFileSync(`${dirPrefix}/${TYPES_FILE_NAME}`, interfaceDefinitions.join('\n'));
|
|
47
|
+
}
|
|
48
|
+
if (debug) {
|
|
49
|
+
printDebug(`Interfaces from the ${nangoConfigFile} file written to ${TYPES_FILE_NAME}`);
|
|
50
|
+
}
|
|
51
|
+
// insert NangoSync types to the bottom of the file
|
|
52
|
+
const typesContent = fs.readFileSync(`${getNangoRootPath()}/${NangoSyncTypesFileLocation}`, 'utf8');
|
|
53
|
+
fs.writeFileSync(`${dirPrefix}/${TYPES_FILE_NAME}`, typesContent, { flag: 'a' });
|
|
54
|
+
const { success, error, response: config } = await configService.load(dirPrefix, debug);
|
|
55
|
+
if (!success || !config) {
|
|
56
|
+
console.log(chalk.red(error?.message));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const flowConfig = `export const NangoFlows = ${JSON.stringify(config, null, 2)} as const; \n`;
|
|
60
|
+
fs.writeFileSync(`${dirPrefix}/${TYPES_FILE_NAME}`, flowConfig, { flag: 'a' });
|
|
61
|
+
if (debug) {
|
|
62
|
+
printDebug(`NangoSync types written to ${TYPES_FILE_NAME}`);
|
|
63
|
+
}
|
|
64
|
+
const allSyncNames = {};
|
|
65
|
+
for (const standardConfig of config) {
|
|
66
|
+
const { syncs, actions } = standardConfig;
|
|
67
|
+
for (const flow of [...syncs, ...actions]) {
|
|
68
|
+
const { name, type, returns: models, input } = flow;
|
|
69
|
+
if (allSyncNames[name] === undefined) {
|
|
70
|
+
allSyncNames[name] = true;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
console.log(chalk.red(`The ${type} name ${name} is duplicated in the ${nangoConfigFile} file. All sync names must be unique.`));
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
if (debug) {
|
|
77
|
+
printDebug(`Generating ${name} integration`);
|
|
78
|
+
}
|
|
79
|
+
const flowNameCamel = name
|
|
80
|
+
.split('-')
|
|
81
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
82
|
+
.join('');
|
|
83
|
+
let ejsTemplateContents = '';
|
|
84
|
+
if (name === exampleSyncName && type === SyncConfigType.SYNC) {
|
|
85
|
+
ejsTemplateContents = githubExampleTemplateContents;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
ejsTemplateContents = type === SyncConfigType.SYNC ? syncTemplateContents : actionTemplateContents;
|
|
89
|
+
}
|
|
90
|
+
const formatModelName = (model) => {
|
|
91
|
+
if (JAVASCRIPT_PRIMITIVES.includes(model)) {
|
|
92
|
+
return '';
|
|
93
|
+
}
|
|
94
|
+
const singularModel = model.charAt(model.length - 1) === 's' ? model.slice(0, -1) : model;
|
|
95
|
+
return `${singularModel.charAt(0).toUpperCase()}${singularModel.slice(1)}`;
|
|
96
|
+
};
|
|
97
|
+
let interfaceNames;
|
|
98
|
+
let mappings;
|
|
99
|
+
if (typeof models === 'string') {
|
|
100
|
+
const formattedName = formatModelName(models);
|
|
101
|
+
interfaceNames = formattedName;
|
|
102
|
+
mappings = {
|
|
103
|
+
name: models,
|
|
104
|
+
type: formattedName
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
interfaceNames = models.map(formatModelName);
|
|
109
|
+
mappings = models.map((model) => ({
|
|
110
|
+
name: model,
|
|
111
|
+
type: formatModelName(model)
|
|
112
|
+
}));
|
|
113
|
+
}
|
|
114
|
+
const rendered = ejs.render(ejsTemplateContents, {
|
|
115
|
+
syncName: flowNameCamel,
|
|
116
|
+
interfaceFileName: TYPES_FILE_NAME.replace('.ts', ''),
|
|
117
|
+
interfaceNames,
|
|
118
|
+
mappings,
|
|
119
|
+
inputs: input && Object.keys(input).length > 0 ? input : ''
|
|
120
|
+
});
|
|
121
|
+
const stripped = rendered.replace(/^\s+/, '');
|
|
122
|
+
if (!fs.existsSync(`${dirPrefix}/${name}.ts`)) {
|
|
123
|
+
fs.writeFileSync(`${dirPrefix}/${name}.ts`, stripped);
|
|
124
|
+
if (debug) {
|
|
125
|
+
printDebug(`Created ${name}.ts file`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
if (debug) {
|
|
130
|
+
printDebug(`${name}.ts file already exists, so will not overwrite it.`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Init
|
|
138
|
+
* If we're not currently in the nango-integrations directory create one
|
|
139
|
+
* and create an example nango.yaml file
|
|
140
|
+
*/
|
|
141
|
+
export const init = async (debug = false) => {
|
|
142
|
+
const yamlData = fs.readFileSync(path.resolve(__dirname, `./templates/${nangoConfigFile}`), 'utf8');
|
|
143
|
+
// if currently in the nango-integrations directory then don't create another one
|
|
144
|
+
const cwd = process.cwd();
|
|
145
|
+
const currentDirectorySplit = cwd.split('/');
|
|
146
|
+
const currentDirectory = currentDirectorySplit[currentDirectorySplit.length - 1];
|
|
147
|
+
let dirExists = false;
|
|
148
|
+
let inParentDirectory = true;
|
|
149
|
+
if (currentDirectory === NANGO_INTEGRATIONS_NAME) {
|
|
150
|
+
dirExists = true;
|
|
151
|
+
inParentDirectory = false;
|
|
152
|
+
if (debug) {
|
|
153
|
+
printDebug(`Currently in the ${NANGO_INTEGRATIONS_NAME} directory so the directory will not be created`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (fs.existsSync(`./${NANGO_INTEGRATIONS_NAME}`)) {
|
|
157
|
+
dirExists = true;
|
|
158
|
+
console.log(chalk.red(`The ${NANGO_INTEGRATIONS_NAME} directory already exists. You should run commands from within this directory`));
|
|
159
|
+
}
|
|
160
|
+
if (!dirExists) {
|
|
161
|
+
if (debug) {
|
|
162
|
+
printDebug(`Creating the nango integrations directory at ./${NANGO_INTEGRATIONS_NAME}`);
|
|
163
|
+
}
|
|
164
|
+
fs.mkdirSync(`./${NANGO_INTEGRATIONS_NAME}`);
|
|
165
|
+
}
|
|
166
|
+
const configFileLocation = inParentDirectory ? `./${NANGO_INTEGRATIONS_NAME}/${nangoConfigFile}` : `./${nangoConfigFile}`;
|
|
167
|
+
if (!fs.existsSync(configFileLocation)) {
|
|
168
|
+
if (debug) {
|
|
169
|
+
printDebug(`Creating the ${nangoConfigFile} file at ${configFileLocation}`);
|
|
170
|
+
}
|
|
171
|
+
fs.writeFileSync(configFileLocation, yamlData);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
if (debug) {
|
|
175
|
+
printDebug(`Nango config file already exists at ${configFileLocation} so not creating a new one`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
const envFileLocation = inParentDirectory ? `./${NANGO_INTEGRATIONS_NAME}/.env` : './.env';
|
|
179
|
+
if (!fs.existsSync(envFileLocation)) {
|
|
180
|
+
if (debug) {
|
|
181
|
+
printDebug(`Creating the .env file at ${envFileLocation}`);
|
|
182
|
+
}
|
|
183
|
+
fs.writeFileSync(envFileLocation, `# Authenticates the CLI (get the keys in the dashboard's Projects Settings).
|
|
184
|
+
#NANGO_SECRET_KEY_DEV=xxxx-xxx-xxxx
|
|
185
|
+
#NANGO_SECRET_KEY_PROD=xxxx-xxx-xxxx
|
|
186
|
+
|
|
187
|
+
# Nango's instance URL (OSS: change to http://localhost:3003 or your instance URL).
|
|
188
|
+
NANGO_HOSTPORT=https://api.nango.dev # Default value
|
|
189
|
+
|
|
190
|
+
# How to handle CLI upgrades ("prompt", "auto" or "ignore").
|
|
191
|
+
NANGO_CLI_UPGRADE_MODE=prompt # Default value
|
|
192
|
+
|
|
193
|
+
# Whether to prompt before deployments.
|
|
194
|
+
NANGO_DEPLOY_AUTO_CONFIRM=false # Default value`);
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
if (debug) {
|
|
198
|
+
printDebug(`.env file already exists at ${envFileLocation} so not creating a new one`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
await generate(debug, inParentDirectory);
|
|
202
|
+
console.log(chalk.green(`Nango integrations initialized!`));
|
|
203
|
+
};
|
|
204
|
+
export const tscWatch = async (debug = false) => {
|
|
205
|
+
const tsconfig = fs.readFileSync(`${getNangoRootPath()}/tsconfig.dev.json`, 'utf8');
|
|
206
|
+
const { success, error, response: config } = await configService.load();
|
|
207
|
+
if (!success || !config) {
|
|
208
|
+
console.log(chalk.red(error?.message));
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
const modelNames = configService.getModelNames(config);
|
|
212
|
+
const watchPath = [`./*.ts`, `./${nangoConfigFile}`];
|
|
213
|
+
if (debug) {
|
|
214
|
+
printDebug(`Watching ${watchPath.join(', ')}`);
|
|
215
|
+
}
|
|
216
|
+
const watcher = chokidar.watch(watchPath, {
|
|
217
|
+
ignoreInitial: false,
|
|
218
|
+
ignored: (filePath) => {
|
|
219
|
+
return filePath === TYPES_FILE_NAME;
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
const distDir = './dist';
|
|
223
|
+
if (!fs.existsSync(distDir)) {
|
|
224
|
+
if (debug) {
|
|
225
|
+
printDebug(`Creating ${distDir} directory`);
|
|
226
|
+
}
|
|
227
|
+
fs.mkdirSync(distDir);
|
|
228
|
+
}
|
|
229
|
+
if (!fs.existsSync(`./${TYPES_FILE_NAME}`)) {
|
|
230
|
+
if (debug) {
|
|
231
|
+
printDebug(`Creating ${TYPES_FILE_NAME} file`);
|
|
232
|
+
}
|
|
233
|
+
await modelService.createModelFile();
|
|
234
|
+
}
|
|
235
|
+
watcher.on('add', (filePath) => {
|
|
236
|
+
if (filePath === nangoConfigFile) {
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
compileFile(filePath);
|
|
240
|
+
});
|
|
241
|
+
watcher.on('unlink', (filePath) => {
|
|
242
|
+
if (filePath === nangoConfigFile) {
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
const jsFilePath = `./dist/${path.basename(filePath.replace('.ts', '.js'))}`;
|
|
246
|
+
fs.unlinkSync(jsFilePath);
|
|
247
|
+
});
|
|
248
|
+
watcher.on('change', (filePath) => {
|
|
249
|
+
if (filePath === nangoConfigFile) {
|
|
250
|
+
// config file changed, re-compile each ts file
|
|
251
|
+
const integrationFiles = glob.sync(`./*.ts`);
|
|
252
|
+
for (const file of integrationFiles) {
|
|
253
|
+
// strip the file to just the last part
|
|
254
|
+
const strippedFile = file.replace(/^.*[\\\/]/, '');
|
|
255
|
+
compileFile(strippedFile);
|
|
256
|
+
}
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
compileFile(filePath);
|
|
260
|
+
});
|
|
261
|
+
function compileFile(filePath) {
|
|
262
|
+
const compiler = tsNode.create({
|
|
263
|
+
compilerOptions: JSON.parse(tsconfig).compilerOptions
|
|
264
|
+
});
|
|
265
|
+
try {
|
|
266
|
+
const providerConfiguration = config?.find((config) => [...config.syncs, ...config.actions].find((sync) => sync.name === path.basename(filePath, '.ts')));
|
|
267
|
+
if (!providerConfiguration) {
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
const syncConfig = [...providerConfiguration.syncs, ...providerConfiguration.actions].find((sync) => sync.name === path.basename(filePath, '.ts'));
|
|
271
|
+
const type = syncConfig?.type || SyncConfigType.SYNC;
|
|
272
|
+
if (!parserService.callsAreUsedCorrectly(filePath, type, modelNames)) {
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
const result = compiler.compile(fs.readFileSync(filePath, 'utf8'), filePath);
|
|
276
|
+
const jsFilePath = `./dist/${path.basename(filePath.replace('.ts', '.js'))}`;
|
|
277
|
+
fs.writeFileSync(jsFilePath, result);
|
|
278
|
+
console.log(chalk.green(`Compiled ${filePath} successfully`));
|
|
279
|
+
}
|
|
280
|
+
catch (error) {
|
|
281
|
+
console.error(`Error compiling ${filePath}:`);
|
|
282
|
+
console.error(error);
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
export const configWatch = (debug = false) => {
|
|
288
|
+
const watchPath = `./${nangoConfigFile}`;
|
|
289
|
+
if (debug) {
|
|
290
|
+
printDebug(`Watching ${watchPath}`);
|
|
291
|
+
}
|
|
292
|
+
const watcher = chokidar.watch(watchPath, { ignoreInitial: true });
|
|
293
|
+
watcher.on('change', async () => {
|
|
294
|
+
await modelService.createModelFile(true);
|
|
295
|
+
});
|
|
296
|
+
};
|
|
297
|
+
let child;
|
|
298
|
+
process.on('SIGINT', () => {
|
|
299
|
+
if (child) {
|
|
300
|
+
const dockerDown = spawn('docker', ['compose', '-f', `${getNangoRootPath()}/docker/docker-compose.yaml`, '--project-directory', '.', 'down'], {
|
|
301
|
+
stdio: 'inherit'
|
|
302
|
+
});
|
|
303
|
+
dockerDown.on('exit', () => {
|
|
304
|
+
process.exit();
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
process.exit();
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
/**
|
|
312
|
+
* Docker Run
|
|
313
|
+
* @desc spawn a child process to run the docker compose located in the cli
|
|
314
|
+
* Look into https://www.npmjs.com/package/docker-compose to avoid dependency maybe?
|
|
315
|
+
*/
|
|
316
|
+
export const dockerRun = async (debug = false) => {
|
|
317
|
+
const cwd = process.cwd();
|
|
318
|
+
const args = ['compose', '-f', `${getNangoRootPath()}/docker/docker-compose.yaml`, '--project-directory', '.', 'up', '--build'];
|
|
319
|
+
if (debug) {
|
|
320
|
+
printDebug(`Running docker with args: ${args.join(' ')}`);
|
|
321
|
+
}
|
|
322
|
+
child = spawn('docker', args, {
|
|
323
|
+
cwd,
|
|
324
|
+
detached: false,
|
|
325
|
+
stdio: 'inherit'
|
|
326
|
+
});
|
|
327
|
+
await new Promise((resolve, reject) => {
|
|
328
|
+
child?.on('exit', (code) => {
|
|
329
|
+
if (code !== 0) {
|
|
330
|
+
reject(new Error(`Error with the nango docker containers, please check your containers using 'docker ps''`));
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
resolve(true);
|
|
334
|
+
});
|
|
335
|
+
child?.on('error', reject);
|
|
336
|
+
});
|
|
337
|
+
};
|
|
338
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../lib/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../lib/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;AAC3C,MAAM,CAAC,MAAM,0BAA0B,GAAG,sBAAsB,CAAC;AACjE,MAAM,CAAC,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AAC5D,MAAM,CAAC,MAAM,eAAe,GAAG,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -8,9 +8,14 @@ import chalk from 'chalk';
|
|
|
8
8
|
import figlet from 'figlet';
|
|
9
9
|
import path from 'path';
|
|
10
10
|
import * as dotenv from 'dotenv';
|
|
11
|
-
import { nangoConfigFile
|
|
12
|
-
import { init,
|
|
13
|
-
import
|
|
11
|
+
import { nangoConfigFile } from '@nangohq/shared';
|
|
12
|
+
import { init, generate, tscWatch, configWatch, dockerRun, version } from './cli.js';
|
|
13
|
+
import deployService from './services/deploy.service.js';
|
|
14
|
+
import compileService from './services/compile.service.js';
|
|
15
|
+
import verificationService from './services/verification.service.js';
|
|
16
|
+
import dryrunService from './services/dryrun.service.js';
|
|
17
|
+
import configService from './services/config.service.js';
|
|
18
|
+
import { upgradeAction, NANGO_INTEGRATIONS_LOCATION, printDebug } from './utils.js';
|
|
14
19
|
class NangoCommand extends Command {
|
|
15
20
|
createCommand(name) {
|
|
16
21
|
const cmd = new Command(name);
|
|
@@ -86,8 +91,8 @@ program
|
|
|
86
91
|
.option('-m, --metadata [metadata]', 'Optional (for syncs only): metadata to stub for the sync script')
|
|
87
92
|
.action(async function (sync, connectionId) {
|
|
88
93
|
const { autoConfirm, debug, e: environment } = this.opts();
|
|
89
|
-
await
|
|
90
|
-
|
|
94
|
+
await verificationService.necessaryFilesExist(autoConfirm, debug);
|
|
95
|
+
dryrunService.run({ ...this.opts(), sync, connectionId }, environment, debug);
|
|
91
96
|
});
|
|
92
97
|
program
|
|
93
98
|
.command('dev')
|
|
@@ -95,7 +100,7 @@ program
|
|
|
95
100
|
.option('--no-compile-interfaces', `Watch the ${nangoConfigFile} and recompile the interfaces on change`, true)
|
|
96
101
|
.action(async function () {
|
|
97
102
|
const { compileInterfaces, autoConfirm, debug } = this.opts();
|
|
98
|
-
await
|
|
103
|
+
await verificationService.necessaryFilesExist(autoConfirm, debug, false);
|
|
99
104
|
if (compileInterfaces) {
|
|
100
105
|
configWatch(debug);
|
|
101
106
|
}
|
|
@@ -113,7 +118,7 @@ program
|
|
|
113
118
|
const options = this.opts();
|
|
114
119
|
(async (options) => {
|
|
115
120
|
const { debug } = options;
|
|
116
|
-
await
|
|
121
|
+
await deployService.prep({ ...options, env: 'production' }, environment, debug);
|
|
117
122
|
})(options);
|
|
118
123
|
});
|
|
119
124
|
// Hidden commands //
|
|
@@ -127,7 +132,7 @@ program
|
|
|
127
132
|
.action(async function (environment) {
|
|
128
133
|
const options = this.opts();
|
|
129
134
|
(async (options) => {
|
|
130
|
-
await
|
|
135
|
+
await deployService.prep({ ...options, env: 'local' }, environment, options.debug);
|
|
131
136
|
})(options);
|
|
132
137
|
});
|
|
133
138
|
program
|
|
@@ -140,7 +145,7 @@ program
|
|
|
140
145
|
.action(async function (environment) {
|
|
141
146
|
const options = this.opts();
|
|
142
147
|
(async (options) => {
|
|
143
|
-
await
|
|
148
|
+
await deployService.prep({ ...options, env: 'staging' }, environment, options.debug);
|
|
144
149
|
})(options);
|
|
145
150
|
});
|
|
146
151
|
program
|
|
@@ -148,9 +153,9 @@ program
|
|
|
148
153
|
.description('Compile the integration files to JavaScript')
|
|
149
154
|
.action(async function () {
|
|
150
155
|
const { autoConfirm, debug } = this.opts();
|
|
151
|
-
await
|
|
152
|
-
await
|
|
153
|
-
|
|
156
|
+
await verificationService.necessaryFilesExist(autoConfirm, debug);
|
|
157
|
+
await verificationService.filesMatchConfig();
|
|
158
|
+
await compileService.run(debug);
|
|
154
159
|
});
|
|
155
160
|
program
|
|
156
161
|
.command('sync:dev', { hidden: true })
|
|
@@ -158,7 +163,7 @@ program
|
|
|
158
163
|
.option('--no-compile-interfaces', `Watch the ${nangoConfigFile} and recompile the interfaces on change`, true)
|
|
159
164
|
.action(async function () {
|
|
160
165
|
const { compileInterfaces, autoConfirm, debug } = this.opts();
|
|
161
|
-
await
|
|
166
|
+
await verificationService.necessaryFilesExist(autoConfirm, debug);
|
|
162
167
|
if (compileInterfaces) {
|
|
163
168
|
configWatch(debug);
|
|
164
169
|
}
|
|
@@ -178,9 +183,13 @@ program
|
|
|
178
183
|
.description('Verify the parsed sync config and output the object for verification')
|
|
179
184
|
.action(async function () {
|
|
180
185
|
const { autoConfirm } = this.opts();
|
|
181
|
-
await
|
|
186
|
+
await verificationService.necessaryFilesExist(autoConfirm);
|
|
182
187
|
const cwd = process.cwd();
|
|
183
|
-
const config = await
|
|
188
|
+
const { success, error, response: config } = await configService.load(path.resolve(cwd, NANGO_INTEGRATIONS_LOCATION));
|
|
189
|
+
if (!success || !config) {
|
|
190
|
+
console.log(chalk.red(error?.message));
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
184
193
|
console.log(chalk.green(JSON.stringify(config, null, 2)));
|
|
185
194
|
});
|
|
186
195
|
// admin only commands
|
|
@@ -190,7 +199,7 @@ program
|
|
|
190
199
|
.arguments('environmentName')
|
|
191
200
|
.action(async function (environmentName) {
|
|
192
201
|
const { debug } = this.opts();
|
|
193
|
-
await
|
|
202
|
+
await deployService.admin(environmentName, debug);
|
|
194
203
|
});
|
|
195
204
|
program.parse();
|
|
196
205
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";AAEA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"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"}
|
package/dist/nango-sync.d.ts
CHANGED
|
@@ -68,6 +68,7 @@ export interface ProxyConfiguration {
|
|
|
68
68
|
retries?: number;
|
|
69
69
|
baseUrlOverride?: string;
|
|
70
70
|
paginate?: Partial<CursorPagination> | Partial<LinkPagination> | Partial<OffsetPagination>;
|
|
71
|
+
responseType?: 'arraybuffer' | 'blob' | 'document' | 'json' | 'text' | 'stream';
|
|
71
72
|
}
|
|
72
73
|
declare enum AuthModes {
|
|
73
74
|
OAuth1 = "OAUTH1",
|
|
@@ -76,19 +77,19 @@ declare enum AuthModes {
|
|
|
76
77
|
ApiKey = "API_KEY",
|
|
77
78
|
App = "APP"
|
|
78
79
|
}
|
|
79
|
-
interface AppCredentials {
|
|
80
|
-
type
|
|
80
|
+
interface AppCredentials extends CredentialsCommon {
|
|
81
|
+
type: AuthModes.App;
|
|
81
82
|
access_token: string;
|
|
82
83
|
expires_at?: Date | undefined;
|
|
83
84
|
raw: Record<string, any>;
|
|
84
85
|
}
|
|
85
|
-
interface BasicApiCredentials {
|
|
86
|
-
type
|
|
86
|
+
interface BasicApiCredentials extends CredentialsCommon {
|
|
87
|
+
type: AuthModes.Basic;
|
|
87
88
|
username: string;
|
|
88
89
|
password: string;
|
|
89
90
|
}
|
|
90
|
-
interface ApiKeyCredentials {
|
|
91
|
-
type
|
|
91
|
+
interface ApiKeyCredentials extends CredentialsCommon {
|
|
92
|
+
type: AuthModes.ApiKey;
|
|
92
93
|
apiKey: string;
|
|
93
94
|
}
|
|
94
95
|
interface CredentialsCommon<T = Record<string, any>> {
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import * as tsNode from 'ts-node';
|
|
3
|
+
import glob from 'glob';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import path from 'path';
|
|
6
|
+
import { SyncConfigType } from '@nangohq/shared';
|
|
7
|
+
import configService from './config.service.js';
|
|
8
|
+
import { getNangoRootPath, printDebug } from '../utils.js';
|
|
9
|
+
import { TYPES_FILE_NAME } from '../constants.js';
|
|
10
|
+
import modelService from './model.service.js';
|
|
11
|
+
import parserService from './parser.service.js';
|
|
12
|
+
class CompileService {
|
|
13
|
+
async run(debug = false, syncName) {
|
|
14
|
+
const tsconfig = fs.readFileSync(`${getNangoRootPath()}/tsconfig.dev.json`, 'utf8');
|
|
15
|
+
const distDir = './dist';
|
|
16
|
+
if (!fs.existsSync(distDir)) {
|
|
17
|
+
if (debug) {
|
|
18
|
+
printDebug(`Creating ${distDir} directory`);
|
|
19
|
+
}
|
|
20
|
+
fs.mkdirSync(distDir);
|
|
21
|
+
}
|
|
22
|
+
if (!fs.existsSync(`./${TYPES_FILE_NAME}`)) {
|
|
23
|
+
if (debug) {
|
|
24
|
+
printDebug(`Creating ${TYPES_FILE_NAME} file`);
|
|
25
|
+
}
|
|
26
|
+
await modelService.createModelFile();
|
|
27
|
+
}
|
|
28
|
+
const compiler = tsNode.create({
|
|
29
|
+
compilerOptions: JSON.parse(tsconfig).compilerOptions
|
|
30
|
+
});
|
|
31
|
+
if (debug) {
|
|
32
|
+
printDebug(`Compiler options: ${JSON.stringify(JSON.parse(tsconfig).compilerOptions, null, 2)}`);
|
|
33
|
+
}
|
|
34
|
+
const integrationFiles = syncName ? [`./${syncName}.ts`] : glob.sync(`./*.ts`);
|
|
35
|
+
let success = true;
|
|
36
|
+
const { success: loadSuccess, error, response: config } = await configService.load('', debug);
|
|
37
|
+
if (!loadSuccess || !config) {
|
|
38
|
+
console.log(chalk.red(error?.message));
|
|
39
|
+
throw new Error('Error loading config');
|
|
40
|
+
}
|
|
41
|
+
const modelNames = configService.getModelNames(config);
|
|
42
|
+
for (const filePath of integrationFiles) {
|
|
43
|
+
try {
|
|
44
|
+
const providerConfiguration = config.find((config) => [...config.syncs, ...config.actions].find((sync) => sync.name === path.basename(filePath, '.ts')));
|
|
45
|
+
if (!providerConfiguration) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
const syncConfig = [...providerConfiguration.syncs, ...providerConfiguration.actions].find((sync) => sync.name === path.basename(filePath, '.ts'));
|
|
49
|
+
const type = syncConfig?.type || SyncConfigType.SYNC;
|
|
50
|
+
if (!parserService.callsAreUsedCorrectly(filePath, type, modelNames)) {
|
|
51
|
+
if (syncName && filePath.includes(syncName)) {
|
|
52
|
+
success = false;
|
|
53
|
+
}
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
const result = compiler.compile(fs.readFileSync(filePath, 'utf8'), filePath);
|
|
57
|
+
const jsFilePath = filePath.replace(/\/[^\/]*$/, `/dist/${path.basename(filePath.replace('.ts', '.js'))}`);
|
|
58
|
+
fs.writeFileSync(jsFilePath, result);
|
|
59
|
+
console.log(chalk.green(`Compiled "${filePath}" successfully`));
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
console.error(`Error compiling "${filePath}":`);
|
|
63
|
+
console.error(error);
|
|
64
|
+
success = false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return success;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const compileService = new CompileService();
|
|
71
|
+
export default compileService;
|
|
72
|
+
//# sourceMappingURL=compile.service.js.map
|