@jam-nodes/playground 0.1.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 (62) hide show
  1. package/dist/commands/credentials.d.ts +6 -0
  2. package/dist/commands/credentials.d.ts.map +1 -0
  3. package/dist/commands/credentials.js +205 -0
  4. package/dist/commands/credentials.js.map +1 -0
  5. package/dist/commands/index.d.ts +5 -0
  6. package/dist/commands/index.d.ts.map +1 -0
  7. package/dist/commands/index.js +5 -0
  8. package/dist/commands/index.js.map +1 -0
  9. package/dist/commands/init.d.ts +6 -0
  10. package/dist/commands/init.d.ts.map +1 -0
  11. package/dist/commands/init.js +76 -0
  12. package/dist/commands/init.js.map +1 -0
  13. package/dist/commands/list.d.ts +6 -0
  14. package/dist/commands/list.d.ts.map +1 -0
  15. package/dist/commands/list.js +111 -0
  16. package/dist/commands/list.js.map +1 -0
  17. package/dist/commands/run.d.ts +6 -0
  18. package/dist/commands/run.d.ts.map +1 -0
  19. package/dist/commands/run.js +245 -0
  20. package/dist/commands/run.js.map +1 -0
  21. package/dist/credentials/env-provider.d.ts +54 -0
  22. package/dist/credentials/env-provider.d.ts.map +1 -0
  23. package/dist/credentials/env-provider.js +177 -0
  24. package/dist/credentials/env-provider.js.map +1 -0
  25. package/dist/credentials/index.d.ts +2 -0
  26. package/dist/credentials/index.d.ts.map +1 -0
  27. package/dist/credentials/index.js +2 -0
  28. package/dist/credentials/index.js.map +1 -0
  29. package/dist/index.d.ts +3 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +24 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/ui/index.d.ts +2 -0
  34. package/dist/ui/index.d.ts.map +1 -0
  35. package/dist/ui/index.js +2 -0
  36. package/dist/ui/index.js.map +1 -0
  37. package/dist/ui/prompts.d.ts +49 -0
  38. package/dist/ui/prompts.d.ts.map +1 -0
  39. package/dist/ui/prompts.js +189 -0
  40. package/dist/ui/prompts.js.map +1 -0
  41. package/dist/utils/index.d.ts +2 -0
  42. package/dist/utils/index.d.ts.map +1 -0
  43. package/dist/utils/index.js +2 -0
  44. package/dist/utils/index.js.map +1 -0
  45. package/dist/utils/mock-generator.d.ts +11 -0
  46. package/dist/utils/mock-generator.d.ts.map +1 -0
  47. package/dist/utils/mock-generator.js +199 -0
  48. package/dist/utils/mock-generator.js.map +1 -0
  49. package/package.json +53 -0
  50. package/src/commands/credentials.ts +242 -0
  51. package/src/commands/index.ts +4 -0
  52. package/src/commands/init.ts +80 -0
  53. package/src/commands/list.ts +124 -0
  54. package/src/commands/run.ts +273 -0
  55. package/src/credentials/env-provider.ts +208 -0
  56. package/src/credentials/index.ts +10 -0
  57. package/src/index.ts +32 -0
  58. package/src/ui/index.ts +9 -0
  59. package/src/ui/prompts.ts +259 -0
  60. package/src/utils/index.ts +1 -0
  61. package/src/utils/mock-generator.ts +227 -0
  62. package/tsconfig.json +15 -0
@@ -0,0 +1,245 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { createRegistry } from '@jam-nodes/core';
5
+ import { builtInNodes } from '@jam-nodes/nodes';
6
+ import { getCredentials, saveCredentials, getCredentialSource, } from '../credentials/index.js';
7
+ import { promptForNodeInput, promptForCredentials, promptSaveCredentials, selectNode, } from '../ui/index.js';
8
+ import { generateMockOutput } from '../utils/index.js';
9
+ // Create and populate the registry
10
+ const registry = createRegistry();
11
+ for (const node of builtInNodes) {
12
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
+ registry.register(node);
14
+ }
15
+ /**
16
+ * Service names required by each node type
17
+ */
18
+ const NODE_SERVICE_REQUIREMENTS = {
19
+ search_contacts: ['apollo'],
20
+ reddit_monitor: ['forumScout'],
21
+ twitter_monitor: ['twitter'],
22
+ linkedin_monitor: ['forumScout'],
23
+ sora_video: ['openai'],
24
+ seo_keyword_research: ['dataForSeo'],
25
+ seo_audit: ['dataForSeo'],
26
+ social_keyword_generator: ['anthropic'],
27
+ draft_emails: ['anthropic'],
28
+ social_ai_analyze: ['anthropic'],
29
+ };
30
+ /**
31
+ * Run command - executes a node with input
32
+ */
33
+ export const runCommand = new Command('run')
34
+ .description('Run a jam-node interactively')
35
+ .argument('[node-type]', 'Node type to run (interactive selection if omitted)')
36
+ .option('-i, --input <json>', 'Input as JSON string')
37
+ .option('-m, --mock', 'Use mock mode (returns sample data without calling APIs)')
38
+ .option('--no-confirm', 'Skip confirmation prompt')
39
+ .action(async (nodeType, options) => {
40
+ try {
41
+ // If no node type specified, show selection
42
+ if (!nodeType) {
43
+ const nodes = registry.getAllMetadata();
44
+ nodeType = await selectNode(nodes);
45
+ }
46
+ // Get node definition
47
+ const definition = registry.getDefinition(nodeType);
48
+ if (!definition) {
49
+ console.error(chalk.red(`Unknown node type: ${nodeType}`));
50
+ console.log(chalk.dim('Use "jam-playground list" to see available nodes'));
51
+ process.exit(1);
52
+ }
53
+ // Display node info
54
+ console.log();
55
+ console.log(chalk.bold.cyan('┌─────────────────────────────────────────────────────────────┐'));
56
+ console.log(chalk.bold.cyan('│ ') + chalk.bold(definition.name).padEnd(57) + chalk.bold.cyan('│'));
57
+ console.log(chalk.bold.cyan('│ ') + chalk.dim(definition.description.slice(0, 55)).padEnd(57) + chalk.bold.cyan('│'));
58
+ console.log(chalk.bold.cyan('└─────────────────────────────────────────────────────────────┘'));
59
+ // Mock mode notice
60
+ if (options.mock) {
61
+ console.log();
62
+ console.log(chalk.yellow('⚡ Mock mode enabled - returning sample data without API calls'));
63
+ }
64
+ // Check for required services/credentials
65
+ const requiredServices = NODE_SERVICE_REQUIREMENTS[nodeType] || [];
66
+ const credentials = {};
67
+ if (requiredServices.length > 0 && !options.mock) {
68
+ console.log();
69
+ console.log(chalk.dim(`This node requires: ${requiredServices.join(', ')}`));
70
+ for (const service of requiredServices) {
71
+ const source = await getCredentialSource(service);
72
+ if (source) {
73
+ console.log(chalk.green(`✓ ${service} credentials found (${source})`));
74
+ const creds = await getCredentials(service);
75
+ if (creds) {
76
+ credentials[service] = creds;
77
+ }
78
+ }
79
+ else {
80
+ console.log(chalk.yellow(`⚠ ${service} credentials not found`));
81
+ // Prompt for credentials
82
+ const creds = await promptForCredentials(service, [
83
+ { name: 'apiKey', message: `${service} API Key:`, type: 'password' },
84
+ ]);
85
+ credentials[service] = creds;
86
+ // Ask if they want to save
87
+ const shouldSave = await promptSaveCredentials();
88
+ if (shouldSave) {
89
+ saveCredentials(service, creds);
90
+ console.log(chalk.green(`✓ ${service} credentials saved`));
91
+ }
92
+ }
93
+ }
94
+ }
95
+ // Get input
96
+ let input;
97
+ if (options.input) {
98
+ try {
99
+ input = JSON.parse(options.input);
100
+ }
101
+ catch {
102
+ console.error(chalk.red('Invalid JSON input'));
103
+ process.exit(1);
104
+ }
105
+ }
106
+ else {
107
+ // Interactive input
108
+ input = await promptForNodeInput(definition.inputSchema);
109
+ }
110
+ // Display input summary
111
+ console.log();
112
+ console.log(chalk.dim('Input:'));
113
+ console.log(chalk.dim(JSON.stringify(input, null, 2)));
114
+ // Execute node
115
+ const spinner = ora({
116
+ text: `Executing ${definition.name}...`,
117
+ color: 'cyan',
118
+ }).start();
119
+ try {
120
+ let result;
121
+ if (options.mock) {
122
+ // Mock mode - generate sample output
123
+ await new Promise((resolve) => setTimeout(resolve, 500)); // Simulate delay
124
+ result = {
125
+ success: true,
126
+ output: generateMockOutput(nodeType, definition.outputSchema),
127
+ };
128
+ }
129
+ else {
130
+ // Create execution context
131
+ const context = {
132
+ userId: 'playground',
133
+ workflowExecutionId: `playground_${Date.now()}`,
134
+ variables: {},
135
+ resolveNestedPath: (path) => {
136
+ // Simple implementation - look in variables
137
+ const parts = path.split('.');
138
+ let current = context.variables;
139
+ for (const part of parts) {
140
+ if (current && typeof current === 'object') {
141
+ current = current[part];
142
+ }
143
+ else {
144
+ return undefined;
145
+ }
146
+ }
147
+ return current;
148
+ },
149
+ services: createMockServices(credentials),
150
+ };
151
+ // Validate input
152
+ const validatedInput = definition.inputSchema.parse(input);
153
+ // Execute
154
+ result = await definition.executor(validatedInput, context);
155
+ }
156
+ spinner.stop();
157
+ // Display result
158
+ console.log();
159
+ if (result.success) {
160
+ console.log(chalk.green.bold('✓ Success!'));
161
+ console.log();
162
+ console.log(chalk.dim('Output:'));
163
+ console.log(formatJson(result.output));
164
+ }
165
+ else {
166
+ console.log(chalk.red.bold('✗ Failed'));
167
+ console.log(chalk.red(result.error || 'Unknown error'));
168
+ }
169
+ }
170
+ catch (error) {
171
+ spinner.stop();
172
+ console.log();
173
+ console.log(chalk.red.bold('✗ Execution failed'));
174
+ console.log(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
175
+ if (error instanceof Error && error.stack) {
176
+ console.log(chalk.dim(error.stack));
177
+ }
178
+ }
179
+ }
180
+ catch (error) {
181
+ console.error(chalk.red('Error:'), error instanceof Error ? error.message : error);
182
+ process.exit(1);
183
+ }
184
+ });
185
+ /**
186
+ * Format JSON with syntax highlighting
187
+ */
188
+ function formatJson(data) {
189
+ const json = JSON.stringify(data, null, 2);
190
+ return json
191
+ .replace(/"([^"]+)":/g, chalk.cyan('"$1":'))
192
+ .replace(/: "([^"]+)"/g, ': ' + chalk.green('"$1"'))
193
+ .replace(/: (\d+)/g, ': ' + chalk.yellow('$1'))
194
+ .replace(/: (true|false)/g, ': ' + chalk.magenta('$1'))
195
+ .replace(/: (null)/g, ': ' + chalk.dim('$1'));
196
+ }
197
+ /**
198
+ * Create mock service implementations that use credentials
199
+ */
200
+ function createMockServices(credentials) {
201
+ // These are placeholder services that would need real implementations
202
+ // For playground purposes, they demonstrate the service injection pattern
203
+ return {
204
+ apollo: credentials['apollo']
205
+ ? {
206
+ searchContacts: async () => {
207
+ console.log(chalk.dim('Apollo API call would happen here...'));
208
+ return [];
209
+ },
210
+ enrichContact: async () => {
211
+ return null;
212
+ },
213
+ }
214
+ : undefined,
215
+ forumScout: credentials['forumScout']
216
+ ? {
217
+ searchReddit: async () => [],
218
+ searchLinkedIn: async () => [],
219
+ }
220
+ : undefined,
221
+ twitter: credentials['twitter']
222
+ ? {
223
+ search: async () => [],
224
+ }
225
+ : undefined,
226
+ openai: credentials['openai']
227
+ ? {
228
+ generateVideo: async () => ({ url: 'mock_url' }),
229
+ }
230
+ : undefined,
231
+ anthropic: credentials['anthropic']
232
+ ? {
233
+ complete: async () => 'mock response',
234
+ generateKeywords: async () => ['keyword1', 'keyword2'],
235
+ }
236
+ : undefined,
237
+ dataForSeo: credentials['dataForSeo']
238
+ ? {
239
+ getKeywords: async () => [],
240
+ runAudit: async () => ({ issues: [] }),
241
+ }
242
+ : undefined,
243
+ };
244
+ }
245
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Get credentials for a service.
3
+ * Checks in order:
4
+ * 1. Environment variables
5
+ * 2. Saved credentials in config store
6
+ * 3. Returns null (caller should prompt user)
7
+ *
8
+ * @param name - Service name (e.g., 'hunter', 'apollo')
9
+ * @returns Credentials object or null if not found
10
+ */
11
+ export declare function getCredentials(name: string): Promise<Record<string, string> | null>;
12
+ /**
13
+ * Save credentials for a service.
14
+ *
15
+ * @param name - Service name
16
+ * @param credentials - Credential data to save
17
+ */
18
+ export declare function saveCredentials(name: string, credentials: Record<string, string>): void;
19
+ /**
20
+ * Delete credentials for a service.
21
+ *
22
+ * @param name - Service name
23
+ * @returns True if credentials were deleted
24
+ */
25
+ export declare function deleteCredentials(name: string): boolean;
26
+ /**
27
+ * List all saved credential names.
28
+ *
29
+ * @returns Array of service names with saved credentials
30
+ */
31
+ export declare function listSavedCredentials(): string[];
32
+ /**
33
+ * Check if credentials exist for a service.
34
+ *
35
+ * @param name - Service name
36
+ * @returns True if credentials are available (env or saved)
37
+ */
38
+ export declare function hasCredentials(name: string): Promise<boolean>;
39
+ /**
40
+ * Get credential source for display.
41
+ *
42
+ * @param name - Service name
43
+ * @returns Source description or null
44
+ */
45
+ export declare function getCredentialSource(name: string): Promise<'env' | 'saved' | null>;
46
+ /**
47
+ * Clear all saved credentials.
48
+ */
49
+ export declare function clearAllCredentials(): void;
50
+ /**
51
+ * Get the path to the credential store.
52
+ */
53
+ export declare function getStorePath(): string;
54
+ //# sourceMappingURL=env-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-provider.d.ts","sourceRoot":"","sources":["../../src/credentials/env-provider.ts"],"names":[],"mappings":"AA+FA;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAexC;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,IAAI,CAEN;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOvD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAG/C;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGnE;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,CAYjC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
@@ -0,0 +1,177 @@
1
+ import Conf from 'conf';
2
+ import { config } from 'dotenv';
3
+ import * as path from 'path';
4
+ import * as fs from 'fs';
5
+ /**
6
+ * Encrypted credential store using conf
7
+ * Stores credentials in ~/.config/jam-nodes-playground/
8
+ */
9
+ const store = new Conf({
10
+ projectName: 'jam-nodes-playground',
11
+ defaults: {
12
+ credentials: {},
13
+ },
14
+ });
15
+ /**
16
+ * Load environment variables from .env files
17
+ * Searches in current directory and parent directories
18
+ */
19
+ function loadEnvFiles() {
20
+ // Load .env from current working directory
21
+ config();
22
+ // Also try .env.local
23
+ const localEnvPath = path.join(process.cwd(), '.env.local');
24
+ if (fs.existsSync(localEnvPath)) {
25
+ config({ path: localEnvPath });
26
+ }
27
+ }
28
+ // Load env files on import
29
+ loadEnvFiles();
30
+ /**
31
+ * Known credential name to environment variable mappings
32
+ */
33
+ const ENV_VAR_MAPPINGS = {
34
+ hunter: ['JAM_HUNTER_API_KEY', 'HUNTER_API_KEY'],
35
+ apollo: ['JAM_APOLLO_API_KEY', 'APOLLO_API_KEY'],
36
+ sendgrid: ['JAM_SENDGRID_API_KEY', 'SENDGRID_API_KEY'],
37
+ openai: ['JAM_OPENAI_API_KEY', 'OPENAI_API_KEY'],
38
+ anthropic: ['JAM_ANTHROPIC_API_KEY', 'ANTHROPIC_API_KEY'],
39
+ twitter: ['JAM_TWITTER_BEARER_TOKEN', 'TWITTER_BEARER_TOKEN'],
40
+ reddit: ['JAM_REDDIT_CLIENT_ID', 'REDDIT_CLIENT_ID'],
41
+ linkedin: ['JAM_LINKEDIN_ACCESS_TOKEN', 'LINKEDIN_ACCESS_TOKEN'],
42
+ dataforseo: ['JAM_DATAFORSEO_LOGIN', 'DATAFORSEO_LOGIN'],
43
+ hubspot: ['JAM_HUBSPOT_API_KEY', 'HUBSPOT_API_KEY'],
44
+ clearbit: ['JAM_CLEARBIT_API_KEY', 'CLEARBIT_API_KEY'],
45
+ dropcontact: ['JAM_DROPCONTACT_API_KEY', 'DROPCONTACT_API_KEY'],
46
+ };
47
+ /**
48
+ * Check environment variables for credentials
49
+ */
50
+ function getFromEnv(name) {
51
+ const envVars = ENV_VAR_MAPPINGS[name.toLowerCase()];
52
+ if (envVars) {
53
+ for (const varName of envVars) {
54
+ const value = process.env[varName];
55
+ if (value) {
56
+ return { apiKey: value };
57
+ }
58
+ }
59
+ }
60
+ // Try generic pattern: JAM_{NAME}_API_KEY
61
+ const genericKey = `JAM_${name.toUpperCase()}_API_KEY`;
62
+ if (process.env[genericKey]) {
63
+ return { apiKey: process.env[genericKey] };
64
+ }
65
+ // Special handling for services with multiple env vars
66
+ if (name.toLowerCase() === 'dataforseo') {
67
+ const login = process.env['JAM_DATAFORSEO_LOGIN'] || process.env['DATAFORSEO_LOGIN'];
68
+ const password = process.env['JAM_DATAFORSEO_PASSWORD'] || process.env['DATAFORSEO_PASSWORD'];
69
+ if (login && password) {
70
+ return { login, password };
71
+ }
72
+ }
73
+ if (name.toLowerCase() === 'reddit') {
74
+ const clientId = process.env['JAM_REDDIT_CLIENT_ID'] || process.env['REDDIT_CLIENT_ID'];
75
+ const clientSecret = process.env['JAM_REDDIT_CLIENT_SECRET'] || process.env['REDDIT_CLIENT_SECRET'];
76
+ if (clientId && clientSecret) {
77
+ return { clientId, clientSecret };
78
+ }
79
+ }
80
+ return null;
81
+ }
82
+ /**
83
+ * Get credentials for a service.
84
+ * Checks in order:
85
+ * 1. Environment variables
86
+ * 2. Saved credentials in config store
87
+ * 3. Returns null (caller should prompt user)
88
+ *
89
+ * @param name - Service name (e.g., 'hunter', 'apollo')
90
+ * @returns Credentials object or null if not found
91
+ */
92
+ export async function getCredentials(name) {
93
+ // 1. Check environment variables
94
+ const envCreds = getFromEnv(name);
95
+ if (envCreds) {
96
+ return envCreds;
97
+ }
98
+ // 2. Check saved credentials
99
+ const saved = store.get(`credentials.${name.toLowerCase()}`);
100
+ if (saved && Object.keys(saved).length > 0) {
101
+ return saved;
102
+ }
103
+ // 3. Return null (caller should prompt)
104
+ return null;
105
+ }
106
+ /**
107
+ * Save credentials for a service.
108
+ *
109
+ * @param name - Service name
110
+ * @param credentials - Credential data to save
111
+ */
112
+ export function saveCredentials(name, credentials) {
113
+ store.set(`credentials.${name.toLowerCase()}`, credentials);
114
+ }
115
+ /**
116
+ * Delete credentials for a service.
117
+ *
118
+ * @param name - Service name
119
+ * @returns True if credentials were deleted
120
+ */
121
+ export function deleteCredentials(name) {
122
+ const key = `credentials.${name.toLowerCase()}`;
123
+ if (store.has(key)) {
124
+ store.delete(key);
125
+ return true;
126
+ }
127
+ return false;
128
+ }
129
+ /**
130
+ * List all saved credential names.
131
+ *
132
+ * @returns Array of service names with saved credentials
133
+ */
134
+ export function listSavedCredentials() {
135
+ const credentials = store.get('credentials');
136
+ return Object.keys(credentials);
137
+ }
138
+ /**
139
+ * Check if credentials exist for a service.
140
+ *
141
+ * @param name - Service name
142
+ * @returns True if credentials are available (env or saved)
143
+ */
144
+ export async function hasCredentials(name) {
145
+ const creds = await getCredentials(name);
146
+ return creds !== null;
147
+ }
148
+ /**
149
+ * Get credential source for display.
150
+ *
151
+ * @param name - Service name
152
+ * @returns Source description or null
153
+ */
154
+ export async function getCredentialSource(name) {
155
+ const envCreds = getFromEnv(name);
156
+ if (envCreds) {
157
+ return 'env';
158
+ }
159
+ const saved = store.get(`credentials.${name.toLowerCase()}`);
160
+ if (saved && Object.keys(saved).length > 0) {
161
+ return 'saved';
162
+ }
163
+ return null;
164
+ }
165
+ /**
166
+ * Clear all saved credentials.
167
+ */
168
+ export function clearAllCredentials() {
169
+ store.set('credentials', {});
170
+ }
171
+ /**
172
+ * Get the path to the credential store.
173
+ */
174
+ export function getStorePath() {
175
+ return store.path;
176
+ }
177
+ //# sourceMappingURL=env-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-provider.js","sourceRoot":"","sources":["../../src/credentials/env-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { getCredentials, saveCredentials, deleteCredentials, listSavedCredentials, hasCredentials, getCredentialSource, clearAllCredentials, getStorePath, } from './env-provider.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/credentials/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,GACb,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { getCredentials, saveCredentials, deleteCredentials, listSavedCredentials, hasCredentials, getCredentialSource, clearAllCredentials, getStorePath, } from './env-provider.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/credentials/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,GACb,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import chalk from 'chalk';
4
+ import { listCommand, runCommand, initCommand, credentialsCommand, } from './commands/index.js';
5
+ const program = new Command()
6
+ .name('jam-playground')
7
+ .description('Test jam-nodes interactively')
8
+ .version('0.1.0');
9
+ // Add commands
10
+ program.addCommand(listCommand);
11
+ program.addCommand(runCommand);
12
+ program.addCommand(initCommand);
13
+ program.addCommand(credentialsCommand);
14
+ // Default action (no command) - show help
15
+ program.action(() => {
16
+ console.log();
17
+ console.log(chalk.bold.cyan(' jam-nodes Playground'));
18
+ console.log(chalk.dim(' Test workflow nodes interactively'));
19
+ console.log();
20
+ program.outputHelp();
21
+ });
22
+ // Parse arguments
23
+ program.parse();
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,WAAW,EACX,UAAU,EACV,WAAW,EACX,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KAC1B,IAAI,CAAC,gBAAgB,CAAC;KACtB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,eAAe;AACf,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;AAEvC,0CAA0C;AAC1C,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;IAClB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC,CAAC,CAAC;AAEH,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { promptForCredentials, promptCredentialSource, promptSaveCredentials, promptForNodeInput, confirmRun, selectNode, generatePromptsFromSchema, } from './prompts.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,yBAAyB,GAC1B,MAAM,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { promptForCredentials, promptCredentialSource, promptSaveCredentials, promptForNodeInput, confirmRun, selectNode, generatePromptsFromSchema, } from './prompts.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,yBAAyB,GAC1B,MAAM,cAAc,CAAC"}
@@ -0,0 +1,49 @@
1
+ import type { z } from 'zod';
2
+ /**
3
+ * Prompt user for credential input
4
+ */
5
+ export declare function promptForCredentials(serviceName: string, fields: Array<{
6
+ name: string;
7
+ message: string;
8
+ type?: 'input' | 'password';
9
+ }>): Promise<Record<string, string>>;
10
+ /**
11
+ * Prompt user for how to provide credentials
12
+ */
13
+ export declare function promptCredentialSource(serviceName: string): Promise<'existing' | 'enter' | 'save'>;
14
+ /**
15
+ * Prompt user to save credentials
16
+ */
17
+ export declare function promptSaveCredentials(): Promise<boolean>;
18
+ /**
19
+ * Generate prompts from a Zod schema
20
+ */
21
+ export declare function generatePromptsFromSchema(schema: z.ZodSchema, prefix?: string): Array<{
22
+ name: string;
23
+ message: string;
24
+ type: 'input' | 'number' | 'confirm' | 'list' | 'editor';
25
+ default?: unknown;
26
+ choices?: Array<{
27
+ name: string;
28
+ value: unknown;
29
+ }>;
30
+ required: boolean;
31
+ validate?: (input: unknown) => boolean | string;
32
+ }>;
33
+ /**
34
+ * Prompt user for node input based on schema
35
+ */
36
+ export declare function promptForNodeInput(schema: z.ZodSchema, existingInput?: Record<string, unknown>): Promise<Record<string, unknown>>;
37
+ /**
38
+ * Confirm before running a node
39
+ */
40
+ export declare function confirmRun(nodeType: string): Promise<boolean>;
41
+ /**
42
+ * Select a node from a list
43
+ */
44
+ export declare function selectNode(nodes: Array<{
45
+ type: string;
46
+ name: string;
47
+ description: string;
48
+ }>): Promise<string>;
49
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/ui/prompts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAU7B;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,CAAA;CAAE,CAAC,GAC5E,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAejC;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC,CAcxC;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,CAU9D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,CAAC,CAAC,SAAS,EACnB,MAAM,SAAK,GACV,KAAK,CAAC;IACP,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAClD,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,GAAG,MAAM,CAAC;CACjD,CAAC,CAqED;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,CAAC,CAAC,SAAS,EACnB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA6DlC;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUnE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,GAChE,OAAO,CAAC,MAAM,CAAC,CAajB"}