n8nac 1.2.0 → 1.3.0-next.13

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.
Files changed (35) hide show
  1. package/dist/commands/base.d.ts +2 -0
  2. package/dist/commands/base.d.ts.map +1 -1
  3. package/dist/commands/base.js +40 -0
  4. package/dist/commands/base.js.map +1 -1
  5. package/dist/commands/credential.d.ts +48 -0
  6. package/dist/commands/credential.d.ts.map +1 -0
  7. package/dist/commands/credential.js +219 -0
  8. package/dist/commands/credential.js.map +1 -0
  9. package/dist/commands/execution.d.ts +18 -0
  10. package/dist/commands/execution.d.ts.map +1 -0
  11. package/dist/commands/execution.js +57 -0
  12. package/dist/commands/execution.js.map +1 -0
  13. package/dist/commands/init-ai.d.ts.map +1 -1
  14. package/dist/commands/init-ai.js +4 -1
  15. package/dist/commands/init-ai.js.map +1 -1
  16. package/dist/commands/test-plan.d.ts.map +1 -1
  17. package/dist/commands/test-plan.js +7 -0
  18. package/dist/commands/test-plan.js.map +1 -1
  19. package/dist/commands/test.d.ts +3 -0
  20. package/dist/commands/test.d.ts.map +1 -1
  21. package/dist/commands/test.js +36 -12
  22. package/dist/commands/test.js.map +1 -1
  23. package/dist/commands/workflow.d.ts +33 -0
  24. package/dist/commands/workflow.d.ts.map +1 -0
  25. package/dist/commands/workflow.js +143 -0
  26. package/dist/commands/workflow.js.map +1 -0
  27. package/dist/core/services/n8n-api-client.d.ts +23 -1
  28. package/dist/core/services/n8n-api-client.d.ts.map +1 -1
  29. package/dist/core/services/n8n-api-client.js +96 -2
  30. package/dist/core/services/n8n-api-client.js.map +1 -1
  31. package/dist/core/types.d.ts +24 -0
  32. package/dist/core/types.d.ts.map +1 -1
  33. package/dist/index.js +165 -1
  34. package/dist/index.js.map +1 -1
  35. package/package.json +2 -2
@@ -15,5 +15,7 @@ export declare class BaseCommand {
15
15
  * Validates that required project fields are present; exits with a clear error if not.
16
16
  */
17
17
  protected getSyncConfig(): Promise<any>;
18
+ protected formatErrorDetails(error: unknown): string;
19
+ protected exitWithError(message: string, error?: unknown): never;
18
20
  }
19
21
  //# sourceMappingURL=base.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/commands/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAmB,MAAM,kBAAkB,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D,qBAAa,WAAW;IACpB,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC;IAC/B,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC;IACtB,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IACvC,SAAS,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAQ;;IA4CnD;;OAEG;cACa,wBAAwB,IAAI,OAAO,CAAC,MAAM,CAAC;IAS3D;;;OAGG;cACa,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC;CA0BhD"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/commands/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAmB,MAAM,kBAAkB,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D,qBAAa,WAAW;IACpB,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC;IAC/B,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC;IACtB,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IACvC,SAAS,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAQ;;IA4CnD;;OAEG;cACa,wBAAwB,IAAI,OAAO,CAAC,MAAM,CAAC;IAS3D;;;OAGG;cACa,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC;IA2B7C,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAiCpD,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK;CASnE"}
@@ -80,5 +80,45 @@ export class BaseCommand {
80
80
  projectName: localConfig.projectName
81
81
  };
82
82
  }
83
+ formatErrorDetails(error) {
84
+ if (error && typeof error === 'object') {
85
+ const response = error.response;
86
+ const status = response?.status;
87
+ const responseData = response?.data;
88
+ let remoteMessage = '';
89
+ if (typeof responseData?.message === 'string' && responseData.message.trim().length > 0) {
90
+ remoteMessage = responseData.message.trim();
91
+ }
92
+ else if (typeof responseData === 'string' && responseData.trim().length > 0) {
93
+ remoteMessage = responseData.trim();
94
+ }
95
+ else if (responseData && typeof responseData === 'object') {
96
+ remoteMessage = JSON.stringify(responseData);
97
+ }
98
+ if (status && remoteMessage) {
99
+ return `HTTP ${status}: ${remoteMessage}`;
100
+ }
101
+ if (remoteMessage) {
102
+ return remoteMessage;
103
+ }
104
+ if (status) {
105
+ return `HTTP ${status}`;
106
+ }
107
+ }
108
+ if (error instanceof Error) {
109
+ return error.message;
110
+ }
111
+ return String(error);
112
+ }
113
+ exitWithError(message, error) {
114
+ if (error !== undefined) {
115
+ const details = this.formatErrorDetails(error);
116
+ console.error(chalk.red(`❌ ${message}: ${details}`));
117
+ }
118
+ else {
119
+ console.error(chalk.red(`❌ ${message}`));
120
+ }
121
+ process.exit(1);
122
+ }
83
123
  }
84
124
  //# sourceMappingURL=base.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/commands/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAmB,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D,MAAM,OAAO,WAAW;IACV,MAAM,CAAe;IACrB,MAAM,CAAM;IACZ,aAAa,CAAgB;IAC7B,kBAAkB,GAAkB,IAAI,CAAC;IAEnD;QACI,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;QACzC,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;QAExD,uCAAuC;QACvC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QACxC,MAAM,OAAO,GAAG,UAAU;YACtB,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;YAC/C,CAAC,CAAC,EAAE,CAAC;QACT,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,IAAI,OAAO,IAAI,EAAE,CAAC;QAE/C,+CAA+C;QAC/C,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QAC7C,MAAM,SAAS,GAAG,YAAY;YAC1B,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;YACjD,CAAC,CAAC,EAAE,CAAC;QACT,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;eAC/D,SAAS;eACT,EAAE,CAAC;QAEV,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;YAClD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,4GAA4G,CAAC,CAAC,CAAC;YAC1I,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAED,MAAM,WAAW,GAAoB;YACjC,IAAI;YACJ,MAAM;SACT,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC;QAE5C,4FAA4F;QAC5F,IAAI,CAAC,MAAM,GAAG;YACV,SAAS,EAAE,WAAW,CAAC,UAAU,IAAI,aAAa;YAClD,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE,EAAE;YACf,IAAI;SACP,CAAC;IACN,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,wBAAwB;QACpC,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,kBAAkB,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,kBAAkB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,6BAA6B,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnG,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAED;;;OAGG;IACO,KAAK,CAAC,aAAa;QACzB,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;QAExD,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtD,IAAI,CAAC,WAAW,CAAC,WAAW;YAAE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1D,IAAI,CAAC,WAAW,CAAC,UAAU;YAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAExD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7F,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,oHAAoH,CAAC,CAAC,CAAC;YAClJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAED,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAEjE,OAAO;YACH,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;YAChC,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE,EAAE;YACf,kBAAkB,EAAE,kBAAkB;YACtC,kBAAkB,EAAE,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE;YAC9D,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,WAAW,EAAE,WAAW,CAAC,WAAW;SACvC,CAAC;IACN,CAAC;CACJ"}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/commands/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { BaseCommand } from './base.js';
2
+ export declare class CredentialCommand extends BaseCommand {
3
+ private isObject;
4
+ private parseCredentialInput;
5
+ private inferConditionalBooleanDefaults;
6
+ private shouldRetryWithSchemaDefaults;
7
+ private createWithSchemaFallback;
8
+ /**
9
+ * n8nac credential schema <type>
10
+ * Print the JSON Schema for a credential type so the caller knows what fields are required.
11
+ */
12
+ schema(typeName: string, options?: {
13
+ json?: boolean;
14
+ }): Promise<void>;
15
+ /**
16
+ * n8nac credential list
17
+ * List all credentials (metadata only — secrets are never returned by the API).
18
+ */
19
+ list(options?: {
20
+ json?: boolean;
21
+ }): Promise<void>;
22
+ /**
23
+ * n8nac credential get <id>
24
+ * Print full credential metadata (no secrets) as JSON.
25
+ */
26
+ get(id: string, options?: {
27
+ json?: boolean;
28
+ }): Promise<void>;
29
+ /**
30
+ * n8nac credential create --type <type> --name <name> [--data <json>|--file <path>]
31
+ * Create a new credential from inline JSON or a file.
32
+ * Prefer --file over --data to avoid secrets appearing in shell history.
33
+ */
34
+ create(options: {
35
+ type: string;
36
+ name: string;
37
+ data?: string;
38
+ file?: string;
39
+ projectId?: string;
40
+ json?: boolean;
41
+ }): Promise<void>;
42
+ /**
43
+ * n8nac credential delete <id>
44
+ * Permanently delete a credential.
45
+ */
46
+ delete(id: string): Promise<void>;
47
+ }
48
+ //# sourceMappingURL=credential.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential.d.ts","sourceRoot":"","sources":["../../src/commands/credential.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,qBAAa,iBAAkB,SAAQ,WAAW;IAC9C,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,oBAAoB;IAuB5B,OAAO,CAAC,+BAA+B;IAmCvC,OAAO,CAAC,6BAA6B;YASvB,wBAAwB;IA+BtC;;;OAGG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/E;;;OAGG;IACG,IAAI,CAAC,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B3D;;;OAGG;IACG,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAStE;;;;OAIG;IACG,MAAM,CAAC,OAAO,EAAE;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,OAAO,CAAC;KAClB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4DjB;;;OAGG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAY1C"}
@@ -0,0 +1,219 @@
1
+ import { readFileSync } from 'fs';
2
+ import chalk from 'chalk';
3
+ import Table from 'cli-table3';
4
+ import { BaseCommand } from './base.js';
5
+ export class CredentialCommand extends BaseCommand {
6
+ isObject(value) {
7
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
8
+ }
9
+ parseCredentialInput(raw, source, filePath) {
10
+ let parsed;
11
+ try {
12
+ parsed = JSON.parse(raw);
13
+ }
14
+ catch {
15
+ if (source === '--file') {
16
+ console.error(chalk.red(`❌ Could not read or parse file: ${filePath}`));
17
+ }
18
+ else {
19
+ console.error(chalk.red('❌ --data is not valid JSON'));
20
+ }
21
+ process.exit(1);
22
+ }
23
+ if (!this.isObject(parsed)) {
24
+ const label = source === '--file' ? `JSON in ${filePath}` : '--data';
25
+ console.error(chalk.red(`❌ ${label} must be a JSON object.`));
26
+ process.exit(1);
27
+ }
28
+ return parsed;
29
+ }
30
+ inferConditionalBooleanDefaults(schema, input) {
31
+ const next = { ...input };
32
+ const applied = [];
33
+ const properties = this.isObject(schema.properties) ? schema.properties : {};
34
+ const allOf = Array.isArray(schema.allOf) ? schema.allOf : [];
35
+ for (const condition of allOf) {
36
+ if (!this.isObject(condition))
37
+ continue;
38
+ const ifBlock = this.isObject(condition.if) ? condition.if : null;
39
+ const ifProperties = ifBlock && this.isObject(ifBlock.properties) ? ifBlock.properties : {};
40
+ for (const [field, fieldRule] of Object.entries(ifProperties)) {
41
+ if (field in next)
42
+ continue;
43
+ if (!this.isObject(fieldRule))
44
+ continue;
45
+ const propertySchema = properties[field];
46
+ if (!this.isObject(propertySchema) || propertySchema.type !== 'boolean')
47
+ continue;
48
+ const enumValues = Array.isArray(fieldRule.enum) ? fieldRule.enum : [];
49
+ if (enumValues.length === 1 && enumValues[0] === true) {
50
+ next[field] = false;
51
+ applied.push({ field, value: false });
52
+ }
53
+ }
54
+ }
55
+ return { data: next, applied };
56
+ }
57
+ shouldRetryWithSchemaDefaults(error) {
58
+ if (!error || typeof error !== 'object')
59
+ return false;
60
+ const status = error.response?.status;
61
+ const message = this.formatErrorDetails(error);
62
+ return status === 400 && /does not match allOf schema|requires property/i.test(message);
63
+ }
64
+ async createWithSchemaFallback(payload, error) {
65
+ if (!this.shouldRetryWithSchemaDefaults(error)) {
66
+ return null;
67
+ }
68
+ const schema = await this.client.getCredentialSchema(payload.type);
69
+ const normalized = this.inferConditionalBooleanDefaults(schema, payload.data);
70
+ if (normalized.applied.length === 0) {
71
+ return null;
72
+ }
73
+ const result = await this.client.createCredential({
74
+ ...payload,
75
+ data: normalized.data,
76
+ });
77
+ return { result, applied: normalized.applied };
78
+ }
79
+ /**
80
+ * n8nac credential schema <type>
81
+ * Print the JSON Schema for a credential type so the caller knows what fields are required.
82
+ */
83
+ async schema(typeName, options = {}) {
84
+ try {
85
+ const schema = await this.client.getCredentialSchema(typeName);
86
+ console.log(JSON.stringify(schema, null, 2));
87
+ }
88
+ catch (error) {
89
+ this.exitWithError(`Failed to fetch credential schema for type "${typeName}"`, error);
90
+ }
91
+ }
92
+ /**
93
+ * n8nac credential list
94
+ * List all credentials (metadata only — secrets are never returned by the API).
95
+ */
96
+ async list(options = {}) {
97
+ try {
98
+ const credentials = await this.client.listCredentials();
99
+ if (options.json) {
100
+ console.log(JSON.stringify(credentials, null, 2));
101
+ return;
102
+ }
103
+ if (credentials.length === 0) {
104
+ console.log(chalk.yellow('No credentials found.'));
105
+ return;
106
+ }
107
+ const table = new Table({
108
+ head: [chalk.white('ID'), chalk.white('Name'), chalk.white('Type')],
109
+ style: { head: [], border: [] },
110
+ });
111
+ for (const cred of credentials) {
112
+ table.push([
113
+ String(cred['id'] ?? ''),
114
+ String(cred['name'] ?? ''),
115
+ String(cred['type'] ?? ''),
116
+ ]);
117
+ }
118
+ console.log(table.toString());
119
+ console.log(chalk.dim(`\nTotal: ${credentials.length} credential(s)`));
120
+ }
121
+ catch (error) {
122
+ this.exitWithError('Failed to list credentials', error);
123
+ }
124
+ }
125
+ /**
126
+ * n8nac credential get <id>
127
+ * Print full credential metadata (no secrets) as JSON.
128
+ */
129
+ async get(id, options = {}) {
130
+ try {
131
+ const credential = await this.client.getCredential(id);
132
+ console.log(JSON.stringify(credential, null, 2));
133
+ }
134
+ catch (error) {
135
+ this.exitWithError(`Failed to fetch credential ${id}`, error);
136
+ }
137
+ }
138
+ /**
139
+ * n8nac credential create --type <type> --name <name> [--data <json>|--file <path>]
140
+ * Create a new credential from inline JSON or a file.
141
+ * Prefer --file over --data to avoid secrets appearing in shell history.
142
+ */
143
+ async create(options) {
144
+ let credData;
145
+ if (options.file) {
146
+ let rawFile;
147
+ try {
148
+ rawFile = readFileSync(options.file, 'utf-8');
149
+ }
150
+ catch {
151
+ console.error(chalk.red(`❌ Could not read or parse file: ${options.file}`));
152
+ process.exit(1);
153
+ }
154
+ credData = this.parseCredentialInput(rawFile, '--file', options.file);
155
+ }
156
+ else if (options.data) {
157
+ credData = this.parseCredentialInput(options.data, '--data');
158
+ }
159
+ else {
160
+ console.error(chalk.red('❌ Provide --data <json> or --file <path> with the credential data.'));
161
+ console.error(chalk.yellow(`Tip: run \`n8nac credential schema ${options.type}\` to see required fields.`));
162
+ process.exit(1);
163
+ }
164
+ const payload = {
165
+ type: options.type,
166
+ name: options.name,
167
+ data: credData,
168
+ ...(options.projectId ? { projectId: options.projectId } : {}),
169
+ };
170
+ try {
171
+ const result = await this.client.createCredential(payload);
172
+ if (options.json) {
173
+ console.log(JSON.stringify(result, null, 2));
174
+ return;
175
+ }
176
+ console.log(chalk.green(`✅ Credential "${options.name}" created (ID: ${result['id']})`));
177
+ }
178
+ catch (error) {
179
+ try {
180
+ const fallback = await this.createWithSchemaFallback(payload, error);
181
+ if (fallback) {
182
+ if (options.json) {
183
+ console.log(JSON.stringify(fallback.result, null, 2));
184
+ return;
185
+ }
186
+ const defaultsText = fallback.applied
187
+ .map(({ field, value }) => `${field}=${String(value)}`)
188
+ .join(', ');
189
+ console.log(chalk.dim(`ℹ Applied schema defaults before retrying credential creation: ${defaultsText}`));
190
+ console.log(chalk.green(`✅ Credential "${options.name}" created (ID: ${fallback.result['id']})`));
191
+ return;
192
+ }
193
+ }
194
+ catch {
195
+ // Preserve the original validation error when schema discovery or retry fails.
196
+ }
197
+ this.exitWithError(`Failed to create credential "${options.name}"`, error);
198
+ }
199
+ }
200
+ /**
201
+ * n8nac credential delete <id>
202
+ * Permanently delete a credential.
203
+ */
204
+ async delete(id) {
205
+ try {
206
+ const ok = await this.client.deleteCredential(id);
207
+ if (ok) {
208
+ console.log(chalk.green(`✅ Credential ${id} deleted.`));
209
+ }
210
+ else {
211
+ this.exitWithError(`Failed to delete credential ${id}`);
212
+ }
213
+ }
214
+ catch (error) {
215
+ this.exitWithError(`Failed to delete credential ${id}`, error);
216
+ }
217
+ }
218
+ }
219
+ //# sourceMappingURL=credential.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential.js","sourceRoot":"","sources":["../../src/commands/credential.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { BaseCommand } from './base.js';
2
+ import { ExecutionStatus } from '../core/index.js';
3
+ export declare class ExecutionCommand extends BaseCommand {
4
+ list(options?: {
5
+ workflowId?: string;
6
+ status?: ExecutionStatus;
7
+ projectId?: string;
8
+ limit?: number;
9
+ cursor?: string;
10
+ includeData?: boolean;
11
+ json?: boolean;
12
+ }): Promise<void>;
13
+ get(id: string, options?: {
14
+ includeData?: boolean;
15
+ json?: boolean;
16
+ }): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/commands/execution.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,qBAAa,gBAAiB,SAAQ,WAAW;IACvC,IAAI,CAAC,OAAO,GAAE;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,eAAe,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,IAAI,CAAC,EAAE,OAAO,CAAC;KACb,GAAG,OAAO,CAAC,IAAI,CAAC;IA+ChB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAQhG"}
@@ -0,0 +1,57 @@
1
+ import chalk from 'chalk';
2
+ import Table from 'cli-table3';
3
+ import { BaseCommand } from './base.js';
4
+ export class ExecutionCommand extends BaseCommand {
5
+ async list(options = {}) {
6
+ try {
7
+ const result = await this.client.listExecutions(options);
8
+ if (options.json) {
9
+ console.log(JSON.stringify(result, null, 2));
10
+ return;
11
+ }
12
+ if (result.data.length === 0) {
13
+ console.log(chalk.yellow('No executions found.'));
14
+ return;
15
+ }
16
+ const table = new Table({
17
+ head: [
18
+ chalk.bold('ID'),
19
+ chalk.bold('Status'),
20
+ chalk.bold('Mode'),
21
+ chalk.bold('Workflow'),
22
+ chalk.bold('Started'),
23
+ chalk.bold('Stopped'),
24
+ ],
25
+ wordWrap: true,
26
+ });
27
+ for (const execution of result.data) {
28
+ table.push([
29
+ execution.id,
30
+ execution.status,
31
+ execution.mode,
32
+ execution.workflowId,
33
+ execution.startedAt || '-',
34
+ execution.stoppedAt || '-',
35
+ ]);
36
+ }
37
+ console.log(`\n${table.toString()}\n`);
38
+ console.log(chalk.dim(`Total returned: ${result.data.length}`));
39
+ if (result.nextCursor) {
40
+ console.log(chalk.dim(`Next cursor: ${result.nextCursor}`));
41
+ }
42
+ }
43
+ catch (error) {
44
+ this.exitWithError('Failed to list executions', error);
45
+ }
46
+ }
47
+ async get(id, options = {}) {
48
+ try {
49
+ const execution = await this.client.getExecution(id, { includeData: options.includeData });
50
+ console.log(JSON.stringify(execution, null, 2));
51
+ }
52
+ catch (error) {
53
+ this.exitWithError(`Failed to fetch execution ${id}`, error);
54
+ }
55
+ }
56
+ }
57
+ //# sourceMappingURL=execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/commands/execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAGxC,MAAM,OAAO,gBAAiB,SAAQ,WAAW;IAC7C,KAAK,CAAC,IAAI,CAAC,UAQP,EAAE;QACF,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAEzD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7C,OAAO;YACX,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;gBAClD,OAAO;YACX,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;gBACpB,IAAI,EAAE;oBACF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;oBAChB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;oBACpB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;oBAClB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;oBACtB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;oBACrB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;iBACxB;gBACD,QAAQ,EAAE,IAAI;aACjB,CAAC,CAAC;YAEH,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAClC,KAAK,CAAC,IAAI,CAAC;oBACP,SAAS,CAAC,EAAE;oBACZ,SAAS,CAAC,MAAM;oBAChB,SAAS,CAAC,IAAI;oBACd,SAAS,CAAC,UAAU;oBACpB,SAAS,CAAC,SAAS,IAAI,GAAG;oBAC1B,SAAS,CAAC,SAAS,IAAI,GAAG;iBAC7B,CAAC,CAAC;YACP,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAChE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAChE,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,aAAa,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU,EAAE,UAAqD,EAAE;QACzE,IAAI,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YAC3F,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,aAAa,CAAC,6BAA6B,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC;IACL,CAAC;CACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"init-ai.d.ts","sourceRoot":"","sources":["../../src/commands/init-ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,EAEH,eAAe,EAClB,MAAM,kBAAkB,CAAC;AAkB1B,qBAAa,eAAe;IACZ,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,OAAO;IASvB,GAAG,CAAC,OAAO,GAAE,GAAQ,EAAE,mBAAmB,CAAC,EAAE,eAAe;CA6C5E;AAGD,qBAAa,aAAc,SAAQ,eAAe;CAAI"}
1
+ {"version":3,"file":"init-ai.d.ts","sourceRoot":"","sources":["../../src/commands/init-ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,EAEH,eAAe,EAClB,MAAM,kBAAkB,CAAC;AAkB1B,qBAAa,eAAe;IACZ,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,OAAO;IAUvB,GAAG,CAAC,OAAO,GAAE,GAAQ,EAAE,mBAAmB,CAAC,EAAE,eAAe;CA+C5E;AAGD,qBAAa,aAAc,SAAQ,eAAe;CAAI"}
@@ -24,6 +24,7 @@ export class UpdateAiCommand {
24
24
  this.program
25
25
  .command('update-ai')
26
26
  .description('Update AI Context (AGENTS.md and snippets)')
27
+ .option('--cli-cmd <command>', 'Override the generated n8nac command in AGENTS.md (for local dev builds)')
27
28
  .action(async (options) => {
28
29
  await this.run(options);
29
30
  });
@@ -55,7 +56,9 @@ export class UpdateAiCommand {
55
56
  // 2. Generate Context (AGENTS.md)
56
57
  console.log(chalk.gray('\n - Generating AI context files (AGENTS.md)...'));
57
58
  const aiContextGenerator = new AiContextGenerator();
58
- await aiContextGenerator.generate(projectRoot, version, getDistTag());
59
+ await aiContextGenerator.generate(projectRoot, version, getDistTag(), {
60
+ cliCommandOverride: options.cliCmd,
61
+ });
59
62
  console.log(chalk.green(' ✅ AI context files created.'));
60
63
  console.log(chalk.green('\n✨ AI Context Updated Successfully!'));
61
64
  console.log(chalk.gray(' ✔ AGENTS.md: Complete AI agent guidelines'));
@@ -1 +1 @@
1
- {"version":3,"file":"init-ai.js","sourceRoot":"","sources":["../../src/commands/init-ai.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init-ai.js","sourceRoot":"","sources":["../../src/commands/init-ai.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"test-plan.d.ts","sourceRoot":"","sources":["../../src/commands/test-plan.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAGxC,qBAAa,eAAgB,SAAQ,WAAW;IAC5C;;;;;;;;OAQG;IACG,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAwE9E"}
1
+ {"version":3,"file":"test-plan.d.ts","sourceRoot":"","sources":["../../src/commands/test-plan.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAGxC,qBAAa,eAAgB,SAAQ,WAAW;IAC5C;;;;;;;;OAQG;IACG,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAgF9E"}
@@ -55,6 +55,13 @@ export class TestPlanCommand extends BaseCommand {
55
55
  console.log(chalk.dim('\nSuggested payload:'));
56
56
  console.log(chalk.white(JSON.stringify(plan.payload.inferred, null, 2)));
57
57
  console.log(chalk.dim(`Confidence: ${plan.payload.confidence}`));
58
+ const httpMethod = (trigger.httpMethod ?? 'POST').toUpperCase();
59
+ if (httpMethod === 'GET' || httpMethod === 'HEAD') {
60
+ console.log(chalk.dim('\nRequest hint:'));
61
+ console.log(chalk.dim(`- This trigger uses ${httpMethod}.`));
62
+ console.log(chalk.dim(`- Run \`n8nac test ${workflowId} --query '<json>'\` for explicit query params.`));
63
+ console.log(chalk.dim(`- \`--data\` also maps to query params for ${httpMethod} requests.`));
64
+ }
58
65
  if (plan.payload.fields.length > 0) {
59
66
  console.log(chalk.dim('\nObserved fields:'));
60
67
  for (const field of plan.payload.fields) {
@@ -1 +1 @@
1
- {"version":3,"file":"test-plan.js","sourceRoot":"","sources":["../../src/commands/test-plan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-plan.js","sourceRoot":"","sources":["../../src/commands/test-plan.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  import { BaseCommand } from './base.js';
2
2
  export declare class TestCommand extends BaseCommand {
3
+ private isObject;
4
+ private parseJsonOption;
3
5
  /**
4
6
  * `n8nac test <workflowId>`
5
7
  *
@@ -17,6 +19,7 @@ export declare class TestCommand extends BaseCommand {
17
19
  */
18
20
  run(workflowId: string, options: {
19
21
  data?: string;
22
+ query?: string;
20
23
  prod?: boolean;
21
24
  }): Promise<number>;
22
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAKxC,qBAAa,WAAY,SAAQ,WAAW;IAExC;;;;;;;;;;;;;;OAcG;IACG,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CA6G7F"}
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAKxC,qBAAa,WAAY,SAAQ,WAAW;IACxC,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,eAAe;IAmBvB;;;;;;;;;;;;;;OAcG;IACG,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAiH7G"}
@@ -2,6 +2,26 @@ import { BaseCommand } from './base.js';
2
2
  import chalk from 'chalk';
3
3
  import ora from 'ora';
4
4
  export class TestCommand extends BaseCommand {
5
+ isObject(value) {
6
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
7
+ }
8
+ parseJsonOption(label, raw) {
9
+ if (!raw)
10
+ return undefined;
11
+ let parsed;
12
+ try {
13
+ parsed = JSON.parse(raw);
14
+ }
15
+ catch {
16
+ console.error(chalk.red(`❌ ${label} must be valid JSON. Got: ${raw}`));
17
+ return Symbol.for('n8nac.invalid-json');
18
+ }
19
+ if (!this.isObject(parsed)) {
20
+ console.error(chalk.red(`❌ ${label} must be a JSON object.`));
21
+ return Symbol.for('n8nac.invalid-json');
22
+ }
23
+ return parsed;
24
+ }
5
25
  /**
6
26
  * `n8nac test <workflowId>`
7
27
  *
@@ -18,23 +38,19 @@ export class TestCommand extends BaseCommand {
18
38
  * 1 — fatal infrastructure error (workflow not found, no trigger, etc.)
19
39
  */
20
40
  async run(workflowId, options) {
21
- // Parse --data JSON if provided
22
- let parsedData = {};
23
- if (options.data) {
24
- try {
25
- parsedData = JSON.parse(options.data);
26
- }
27
- catch {
28
- console.error(chalk.red(`❌ --data must be valid JSON. Got: ${options.data}`));
29
- return 1;
30
- }
31
- }
41
+ const parsedData = this.parseJsonOption('--data', options.data);
42
+ if (parsedData === Symbol.for('n8nac.invalid-json'))
43
+ return 1;
44
+ const parsedQuery = this.parseJsonOption('--query', options.query);
45
+ if (parsedQuery === Symbol.for('n8nac.invalid-json'))
46
+ return 1;
32
47
  const mode = options.prod ? 'production' : 'test';
33
48
  const spinner = ora(`Testing workflow ${workflowId} (${mode} mode)...`).start();
34
49
  let result;
35
50
  try {
36
51
  result = await this.client.testWorkflow(workflowId, {
37
- data: parsedData,
52
+ data: parsedData ?? {},
53
+ query: parsedQuery,
38
54
  prod: options.prod ?? false,
39
55
  });
40
56
  }
@@ -67,6 +83,14 @@ export class TestCommand extends BaseCommand {
67
83
  : String(result.responseData);
68
84
  console.log(chalk.white(formatted));
69
85
  }
86
+ console.log('');
87
+ console.log(chalk.dim(`To inspect the resulting server-side execution:`));
88
+ console.log(chalk.dim(` • n8nac execution list --workflow-id ${workflowId} --limit 5 --json`));
89
+ console.log(chalk.dim(` • n8nac execution get <executionId> --include-data --json`));
90
+ if (options.prod) {
91
+ console.log(chalk.dim(` • A 2xx production webhook response only confirms that n8n accepted the trigger.`));
92
+ console.log(chalk.dim(` The execution itself may still fail later on the server.`));
93
+ }
70
94
  return 0;
71
95
  }
72
96
  // ── Not HTTP-triggerable (schedule, unknown, no trigger) ──────────────