primitive-admin 1.0.0

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 (38) hide show
  1. package/README.md +495 -0
  2. package/dist/bin/primitive.js +72 -0
  3. package/dist/bin/primitive.js.map +1 -0
  4. package/dist/src/commands/admins.js +268 -0
  5. package/dist/src/commands/admins.js.map +1 -0
  6. package/dist/src/commands/analytics.js +195 -0
  7. package/dist/src/commands/analytics.js.map +1 -0
  8. package/dist/src/commands/apps.js +238 -0
  9. package/dist/src/commands/apps.js.map +1 -0
  10. package/dist/src/commands/auth.js +178 -0
  11. package/dist/src/commands/auth.js.map +1 -0
  12. package/dist/src/commands/catalog.js +460 -0
  13. package/dist/src/commands/catalog.js.map +1 -0
  14. package/dist/src/commands/integrations.js +438 -0
  15. package/dist/src/commands/integrations.js.map +1 -0
  16. package/dist/src/commands/prompts.js +999 -0
  17. package/dist/src/commands/prompts.js.map +1 -0
  18. package/dist/src/commands/sync.js +598 -0
  19. package/dist/src/commands/sync.js.map +1 -0
  20. package/dist/src/commands/users.js +293 -0
  21. package/dist/src/commands/users.js.map +1 -0
  22. package/dist/src/commands/waitlist.js +176 -0
  23. package/dist/src/commands/waitlist.js.map +1 -0
  24. package/dist/src/commands/workflows.js +876 -0
  25. package/dist/src/commands/workflows.js.map +1 -0
  26. package/dist/src/lib/api-client.js +522 -0
  27. package/dist/src/lib/api-client.js.map +1 -0
  28. package/dist/src/lib/auth-flow.js +306 -0
  29. package/dist/src/lib/auth-flow.js.map +1 -0
  30. package/dist/src/lib/config.js +90 -0
  31. package/dist/src/lib/config.js.map +1 -0
  32. package/dist/src/lib/fetch.js +43 -0
  33. package/dist/src/lib/fetch.js.map +1 -0
  34. package/dist/src/lib/output.js +143 -0
  35. package/dist/src/lib/output.js.map +1 -0
  36. package/dist/src/types/index.js +2 -0
  37. package/dist/src/types/index.js.map +1 -0
  38. package/package.json +47 -0
@@ -0,0 +1,438 @@
1
+ import { readFileSync } from "fs";
2
+ import * as TOML from "@iarna/toml";
3
+ import { ApiClient } from "../lib/api-client.js";
4
+ import { getCurrentAppId } from "../lib/config.js";
5
+ import { success, error, info, keyValue, formatTable, formatId, formatDate, formatStatus, formatDuration, json, divider, } from "../lib/output.js";
6
+ function resolveAppId(appId, options) {
7
+ const resolved = appId || options.app || getCurrentAppId();
8
+ if (!resolved) {
9
+ error("No app specified. Use <app-id>, --app, or 'primitive use <app-id>' to set context.");
10
+ process.exit(1);
11
+ }
12
+ return resolved;
13
+ }
14
+ export function registerIntegrationsCommands(program) {
15
+ const integrations = program
16
+ .command("integrations")
17
+ .description("Configure external HTTP API connections and manage secrets")
18
+ .addHelpText("after", `
19
+ Examples:
20
+ $ primitive integrations list
21
+ $ primitive integrations create --from-file weather-api.toml
22
+ $ primitive integrations test 01HXY...
23
+ $ primitive integrations secrets add 01HXY... --data '{"apiKey":"..."}'
24
+ `);
25
+ // List integrations
26
+ integrations
27
+ .command("list")
28
+ .description("List integrations")
29
+ .argument("[app-id]", "App ID (uses current app if not specified)")
30
+ .option("--app <app-id>", "App ID")
31
+ .option("--status <status>", "Filter by status: draft, active, archived")
32
+ .option("--json", "Output as JSON")
33
+ .action(async (appId, options) => {
34
+ const resolvedAppId = resolveAppId(appId, options);
35
+ const client = new ApiClient();
36
+ try {
37
+ const { items } = await client.listIntegrations(resolvedAppId, {
38
+ status: options.status,
39
+ });
40
+ if (options.json) {
41
+ json(items);
42
+ return;
43
+ }
44
+ if (!items || items.length === 0) {
45
+ info("No integrations found.");
46
+ return;
47
+ }
48
+ console.log(formatTable(items, [
49
+ { header: "ID", key: "integrationId", format: formatId },
50
+ { header: "KEY", key: "integrationKey" },
51
+ { header: "NAME", key: "displayName" },
52
+ { header: "STATUS", key: "status", format: formatStatus },
53
+ { header: "MODIFIED", key: "modifiedAt", format: formatDate },
54
+ ]));
55
+ }
56
+ catch (err) {
57
+ error(err.message);
58
+ process.exit(1);
59
+ }
60
+ });
61
+ // Create integration
62
+ integrations
63
+ .command("create")
64
+ .description("Create a new integration")
65
+ .argument("[app-id]", "App ID (uses current app if not specified)")
66
+ .option("--app <app-id>", "App ID")
67
+ .option("--key <key>", "Integration key (unique identifier)")
68
+ .option("--name <name>", "Display name")
69
+ .option("--description <desc>", "Description")
70
+ .option("--base-url <url>", "Base URL for API requests")
71
+ .option("--allowed-methods <methods>", "Comma-separated list of allowed HTTP methods")
72
+ .option("--allowed-paths <paths>", "Comma-separated list of allowed paths")
73
+ .option("--timeout-ms <ms>", "Request timeout in milliseconds")
74
+ .option("--from-file <path>", "Load integration from TOML file")
75
+ .option("--json", "Output as JSON")
76
+ .action(async (appId, options) => {
77
+ const resolvedAppId = resolveAppId(appId, options);
78
+ const client = new ApiClient();
79
+ let payload;
80
+ if (options.fromFile) {
81
+ try {
82
+ const content = readFileSync(options.fromFile, "utf-8");
83
+ const tomlData = TOML.parse(content);
84
+ payload = {
85
+ integrationKey: tomlData.integration?.key || tomlData.key,
86
+ displayName: tomlData.integration?.displayName || tomlData.displayName,
87
+ description: tomlData.integration?.description || tomlData.description,
88
+ requestConfig: tomlData.requestConfig || {},
89
+ timeoutMs: tomlData.integration?.timeoutMs || tomlData.timeoutMs,
90
+ };
91
+ }
92
+ catch (err) {
93
+ error(`Failed to read TOML file: ${err.message}`);
94
+ process.exit(1);
95
+ }
96
+ }
97
+ else {
98
+ if (!options.key || !options.name || !options.baseUrl) {
99
+ error("Required: --key, --name, --base-url (or use --from-file)");
100
+ process.exit(1);
101
+ }
102
+ payload = {
103
+ integrationKey: options.key,
104
+ displayName: options.name,
105
+ description: options.description,
106
+ requestConfig: {
107
+ baseUrl: options.baseUrl,
108
+ allowedMethods: options.allowedMethods?.split(",").map((s) => s.trim()),
109
+ allowedPaths: options.allowedPaths?.split(",").map((s) => s.trim()),
110
+ },
111
+ timeoutMs: options.timeoutMs ? parseInt(options.timeoutMs) : undefined,
112
+ };
113
+ }
114
+ try {
115
+ const result = await client.createIntegration(resolvedAppId, payload);
116
+ if (options.json) {
117
+ json(result);
118
+ return;
119
+ }
120
+ success(`Integration created: ${result.displayName}`);
121
+ keyValue("Integration ID", result.integrationId);
122
+ keyValue("Key", result.integrationKey);
123
+ }
124
+ catch (err) {
125
+ error(err.message);
126
+ process.exit(1);
127
+ }
128
+ });
129
+ // Get integration
130
+ integrations
131
+ .command("get")
132
+ .description("Get integration details")
133
+ .argument("<integration-id>", "Integration ID")
134
+ .option("--app <app-id>", "App ID (uses current app if not specified)")
135
+ .option("--json", "Output as JSON")
136
+ .action(async (integrationId, options) => {
137
+ const resolvedAppId = resolveAppId(undefined, options);
138
+ const client = new ApiClient();
139
+ try {
140
+ const result = await client.getIntegration(resolvedAppId, integrationId);
141
+ if (options.json) {
142
+ json(result);
143
+ return;
144
+ }
145
+ keyValue("Integration ID", result.integrationId);
146
+ keyValue("Key", result.integrationKey);
147
+ keyValue("Name", result.displayName);
148
+ keyValue("Description", result.description);
149
+ keyValue("Status", formatStatus(result.status));
150
+ keyValue("Timeout", result.timeoutMs ? `${result.timeoutMs}ms` : "-");
151
+ if (result.requestConfig) {
152
+ divider();
153
+ info("Request Config:");
154
+ keyValue(" Base URL", result.requestConfig.baseUrl);
155
+ keyValue(" Allowed Methods", result.requestConfig.allowedMethods?.join(", ") || "all");
156
+ keyValue(" Allowed Paths", result.requestConfig.allowedPaths?.join(", ") || "all");
157
+ keyValue(" Response Passthrough", result.requestConfig.responsePassthrough);
158
+ }
159
+ }
160
+ catch (err) {
161
+ error(err.message);
162
+ process.exit(1);
163
+ }
164
+ });
165
+ // Update integration
166
+ integrations
167
+ .command("update")
168
+ .description("Update an integration")
169
+ .argument("<integration-id>", "Integration ID")
170
+ .option("--app <app-id>", "App ID (uses current app if not specified)")
171
+ .option("--name <name>", "Display name")
172
+ .option("--description <desc>", "Description")
173
+ .option("--status <status>", "Status: draft, active, archived")
174
+ .option("--timeout-ms <ms>", "Request timeout in milliseconds")
175
+ .option("--json", "Output as JSON")
176
+ .action(async (integrationId, options) => {
177
+ const resolvedAppId = resolveAppId(undefined, options);
178
+ const payload = {};
179
+ if (options.name)
180
+ payload.displayName = options.name;
181
+ if (options.description)
182
+ payload.description = options.description;
183
+ if (options.status)
184
+ payload.status = options.status;
185
+ if (options.timeoutMs)
186
+ payload.timeoutMs = parseInt(options.timeoutMs);
187
+ if (Object.keys(payload).length === 0) {
188
+ error("No update options specified.");
189
+ process.exit(1);
190
+ }
191
+ const client = new ApiClient();
192
+ try {
193
+ const result = await client.updateIntegration(resolvedAppId, integrationId, payload);
194
+ if (options.json) {
195
+ json(result);
196
+ return;
197
+ }
198
+ success("Integration updated.");
199
+ }
200
+ catch (err) {
201
+ error(err.message);
202
+ process.exit(1);
203
+ }
204
+ });
205
+ // Delete integration
206
+ integrations
207
+ .command("delete")
208
+ .description("Delete or archive an integration")
209
+ .argument("<integration-id>", "Integration ID")
210
+ .option("--app <app-id>", "App ID (uses current app if not specified)")
211
+ .option("--hard", "Permanently delete instead of archive")
212
+ .option("-y, --yes", "Skip confirmation prompt")
213
+ .action(async (integrationId, options) => {
214
+ const resolvedAppId = resolveAppId(undefined, options);
215
+ if (!options.yes) {
216
+ const action = options.hard ? "permanently delete" : "archive";
217
+ const inquirer = await import("inquirer");
218
+ const { confirm } = await inquirer.default.prompt([
219
+ {
220
+ type: "confirm",
221
+ name: "confirm",
222
+ message: `Are you sure you want to ${action} integration ${integrationId}?`,
223
+ default: false,
224
+ },
225
+ ]);
226
+ if (!confirm) {
227
+ info("Cancelled.");
228
+ return;
229
+ }
230
+ }
231
+ const client = new ApiClient();
232
+ try {
233
+ await client.deleteIntegration(resolvedAppId, integrationId, options.hard);
234
+ success(`Integration ${options.hard ? "deleted" : "archived"}.`);
235
+ }
236
+ catch (err) {
237
+ error(err.message);
238
+ process.exit(1);
239
+ }
240
+ });
241
+ // Test integration
242
+ integrations
243
+ .command("test")
244
+ .description("Test an integration by making a request")
245
+ .argument("<integration-id>", "Integration ID")
246
+ .option("--app <app-id>", "App ID (uses current app if not specified)")
247
+ .option("--method <method>", "HTTP method", "GET")
248
+ .option("--path <path>", "Request path")
249
+ .option("--query <json>", "Query parameters as JSON")
250
+ .option("--body <json>", "Request body as JSON")
251
+ .option("--json", "Output as JSON")
252
+ .action(async (integrationId, options) => {
253
+ const resolvedAppId = resolveAppId(undefined, options);
254
+ const payload = {
255
+ method: options.method,
256
+ path: options.path,
257
+ };
258
+ if (options.query) {
259
+ try {
260
+ payload.query = JSON.parse(options.query);
261
+ }
262
+ catch {
263
+ error("Invalid JSON in --query");
264
+ process.exit(1);
265
+ }
266
+ }
267
+ if (options.body) {
268
+ try {
269
+ payload.body = JSON.parse(options.body);
270
+ }
271
+ catch {
272
+ error("Invalid JSON in --body");
273
+ process.exit(1);
274
+ }
275
+ }
276
+ const client = new ApiClient();
277
+ try {
278
+ const result = await client.testIntegration(resolvedAppId, integrationId, payload);
279
+ if (options.json) {
280
+ json(result);
281
+ return;
282
+ }
283
+ if (result.success) {
284
+ success("Test successful");
285
+ if (result.upstreamResponse) {
286
+ keyValue("Status", String(result.upstreamResponse.status));
287
+ keyValue("Duration", formatDuration(result.upstreamResponse.durationMs));
288
+ console.log("\nResponse Body:");
289
+ console.log(JSON.stringify(result.upstreamResponse.body, null, 2));
290
+ }
291
+ }
292
+ else {
293
+ error(`Test failed: ${result.message || result.errorCode}`);
294
+ if (result.traceId) {
295
+ keyValue("Trace ID", result.traceId);
296
+ }
297
+ }
298
+ }
299
+ catch (err) {
300
+ error(err.message);
301
+ process.exit(1);
302
+ }
303
+ });
304
+ // List integration logs
305
+ integrations
306
+ .command("logs")
307
+ .description("View integration request logs")
308
+ .argument("<integration-id>", "Integration ID")
309
+ .option("--app <app-id>", "App ID (uses current app if not specified)")
310
+ .option("--limit <n>", "Number of logs to show", "20")
311
+ .option("--json", "Output as JSON")
312
+ .action(async (integrationId, options) => {
313
+ const resolvedAppId = resolveAppId(undefined, options);
314
+ const client = new ApiClient();
315
+ try {
316
+ const logs = await client.listIntegrationLogs(resolvedAppId, integrationId, {
317
+ limit: parseInt(options.limit),
318
+ });
319
+ if (options.json) {
320
+ json(logs);
321
+ return;
322
+ }
323
+ if (!logs || logs.length === 0) {
324
+ info("No logs found.");
325
+ return;
326
+ }
327
+ console.log(formatTable(logs, [
328
+ { header: "TIME", key: "timestamp", format: formatDate },
329
+ { header: "METHOD", key: "method" },
330
+ { header: "PATH", key: "path" },
331
+ { header: "STATUS", key: "status" },
332
+ { header: "DURATION", key: "durationMs", format: formatDuration },
333
+ { header: "TRACE", key: "traceId", format: formatId },
334
+ ]));
335
+ }
336
+ catch (err) {
337
+ error(err.message);
338
+ process.exit(1);
339
+ }
340
+ });
341
+ // Secrets subcommand
342
+ const secrets = integrations.command("secrets").description("Manage integration secrets");
343
+ // List secrets
344
+ secrets
345
+ .command("list")
346
+ .description("List secrets for an integration")
347
+ .argument("<integration-id>", "Integration ID")
348
+ .option("--app <app-id>", "App ID (uses current app if not specified)")
349
+ .option("--json", "Output as JSON")
350
+ .action(async (integrationId, options) => {
351
+ const resolvedAppId = resolveAppId(undefined, options);
352
+ const client = new ApiClient();
353
+ try {
354
+ const secretsList = await client.listIntegrationSecrets(resolvedAppId, integrationId);
355
+ if (options.json) {
356
+ json(secretsList);
357
+ return;
358
+ }
359
+ if (!secretsList || secretsList.length === 0) {
360
+ info("No secrets found.");
361
+ return;
362
+ }
363
+ console.log(formatTable(secretsList, [
364
+ { header: "ID", key: "secretId", format: formatId },
365
+ { header: "VERSION", key: "version" },
366
+ { header: "SUMMARY", key: "secretSummary" },
367
+ { header: "STATUS", key: "status", format: formatStatus },
368
+ { header: "CREATED", key: "createdAt", format: formatDate },
369
+ ]));
370
+ }
371
+ catch (err) {
372
+ error(err.message);
373
+ process.exit(1);
374
+ }
375
+ });
376
+ // Add secret
377
+ secrets
378
+ .command("add")
379
+ .description("Add a secret to an integration")
380
+ .argument("<integration-id>", "Integration ID")
381
+ .option("--app <app-id>", "App ID (uses current app if not specified)")
382
+ .option("--data <json>", "Secret data as JSON (e.g., '{\"apiKey\":\"...\"}' )")
383
+ .option("--summary <text>", "Description of the secret")
384
+ .option("--json", "Output as JSON")
385
+ .action(async (integrationId, options) => {
386
+ const resolvedAppId = resolveAppId(undefined, options);
387
+ if (!options.data) {
388
+ error("--data is required (JSON object with secret values)");
389
+ process.exit(1);
390
+ }
391
+ let secretData;
392
+ try {
393
+ secretData = JSON.parse(options.data);
394
+ }
395
+ catch {
396
+ error("Invalid JSON in --data");
397
+ process.exit(1);
398
+ }
399
+ const client = new ApiClient();
400
+ try {
401
+ const result = await client.addIntegrationSecret(resolvedAppId, integrationId, {
402
+ secretData,
403
+ secretSummary: options.summary,
404
+ });
405
+ if (options.json) {
406
+ json(result);
407
+ return;
408
+ }
409
+ success("Secret added.");
410
+ keyValue("Secret ID", result?.secretId);
411
+ keyValue("Version", result?.version);
412
+ }
413
+ catch (err) {
414
+ error(err.message);
415
+ process.exit(1);
416
+ }
417
+ });
418
+ // Archive secret
419
+ secrets
420
+ .command("archive")
421
+ .description("Archive a secret")
422
+ .argument("<integration-id>", "Integration ID")
423
+ .argument("<secret-id>", "Secret ID")
424
+ .option("--app <app-id>", "App ID (uses current app if not specified)")
425
+ .action(async (integrationId, secretId, options) => {
426
+ const resolvedAppId = resolveAppId(undefined, options);
427
+ const client = new ApiClient();
428
+ try {
429
+ await client.archiveIntegrationSecret(resolvedAppId, integrationId, secretId);
430
+ success("Secret archived.");
431
+ }
432
+ catch (err) {
433
+ error(err.message);
434
+ process.exit(1);
435
+ }
436
+ });
437
+ }
438
+ //# sourceMappingURL=integrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrations.js","sourceRoot":"","sources":["../../../src/commands/integrations.ts"],"names":[],"mappings":"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"}