@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,189 @@
1
+ import inquirer from 'inquirer';
2
+ import chalk from 'chalk';
3
+ /**
4
+ * Prompt user for credential input
5
+ */
6
+ export async function promptForCredentials(serviceName, fields) {
7
+ console.log();
8
+ console.log(chalk.yellow(`🔑 Enter credentials for ${serviceName}:`));
9
+ console.log();
10
+ const answers = await inquirer.prompt(fields.map((field) => ({
11
+ type: field.type || 'password',
12
+ name: field.name,
13
+ message: field.message,
14
+ mask: '*',
15
+ })));
16
+ return answers;
17
+ }
18
+ /**
19
+ * Prompt user for how to provide credentials
20
+ */
21
+ export async function promptCredentialSource(serviceName) {
22
+ const { choice } = await inquirer.prompt([
23
+ {
24
+ type: 'list',
25
+ name: 'choice',
26
+ message: `This node requires ${serviceName} credentials. How would you like to provide them?`,
27
+ choices: [
28
+ { name: 'Use existing (from .env or saved)', value: 'existing' },
29
+ { name: 'Enter now (one-time)', value: 'enter' },
30
+ { name: 'Enter and save for later', value: 'save' },
31
+ ],
32
+ },
33
+ ]);
34
+ return choice;
35
+ }
36
+ /**
37
+ * Prompt user to save credentials
38
+ */
39
+ export async function promptSaveCredentials() {
40
+ const { save } = await inquirer.prompt([
41
+ {
42
+ type: 'confirm',
43
+ name: 'save',
44
+ message: 'Would you like to save these credentials for future use?',
45
+ default: false,
46
+ },
47
+ ]);
48
+ return save;
49
+ }
50
+ /**
51
+ * Generate prompts from a Zod schema
52
+ */
53
+ export function generatePromptsFromSchema(schema, prefix = '') {
54
+ const prompts = [];
55
+ // Get the schema shape
56
+ const def = schema._def;
57
+ // Handle ZodObject
58
+ if (def.typeName === 'ZodObject' && def.shape) {
59
+ const shape = def.shape();
60
+ for (const [key, fieldSchema] of Object.entries(shape)) {
61
+ const fieldDef = fieldSchema._def;
62
+ const fullKey = prefix ? `${prefix}.${key}` : key;
63
+ // Check if optional
64
+ const isOptional = fieldDef.typeName === 'ZodOptional' || fieldDef.typeName === 'ZodDefault';
65
+ let innerDef = fieldDef;
66
+ let defaultValue = undefined;
67
+ // Unwrap optional/default
68
+ if (fieldDef.typeName === 'ZodOptional' && fieldDef.innerType) {
69
+ innerDef = fieldDef.innerType._def;
70
+ }
71
+ else if (fieldDef.typeName === 'ZodDefault' && fieldDef.innerType && fieldDef.defaultValue) {
72
+ innerDef = fieldDef.innerType._def;
73
+ defaultValue = fieldDef.defaultValue();
74
+ }
75
+ // Determine prompt type based on Zod type
76
+ let promptType = 'input';
77
+ let choices;
78
+ if (innerDef.typeName === 'ZodNumber') {
79
+ promptType = 'number';
80
+ }
81
+ else if (innerDef.typeName === 'ZodBoolean') {
82
+ promptType = 'confirm';
83
+ }
84
+ else if (innerDef.typeName === 'ZodEnum' && innerDef.values) {
85
+ promptType = 'list';
86
+ choices = innerDef.values.map((v) => ({ name: v, value: v }));
87
+ }
88
+ else if (innerDef.typeName === 'ZodArray') {
89
+ // For arrays, we'll use a comma-separated input
90
+ promptType = 'input';
91
+ }
92
+ else if (innerDef.typeName === 'ZodObject') {
93
+ // Nested objects use editor for JSON input
94
+ promptType = 'editor';
95
+ }
96
+ // Get description from schema if available
97
+ const description = fieldSchema.description || key;
98
+ prompts.push({
99
+ name: fullKey,
100
+ message: `${description}${isOptional ? ' (optional)' : ' *'}`,
101
+ type: promptType,
102
+ default: defaultValue,
103
+ choices,
104
+ required: !isOptional,
105
+ });
106
+ }
107
+ }
108
+ return prompts;
109
+ }
110
+ /**
111
+ * Prompt user for node input based on schema
112
+ */
113
+ export async function promptForNodeInput(schema, existingInput) {
114
+ const prompts = generatePromptsFromSchema(schema);
115
+ // Build inquirer questions
116
+ const questions = prompts.map((p) => {
117
+ const existingValue = existingInput?.[p.name];
118
+ const defaultVal = existingValue !== undefined ? existingValue : p.default;
119
+ const question = {
120
+ type: p.type,
121
+ name: p.name,
122
+ message: p.message,
123
+ default: defaultVal,
124
+ };
125
+ if (p.choices) {
126
+ question.choices = p.choices;
127
+ }
128
+ // For optional fields, allow empty input
129
+ if (!p.required && p.type === 'input') {
130
+ question.filter = (input) => (input === '' ? undefined : input);
131
+ }
132
+ // Handle array inputs (comma-separated)
133
+ if (p.type === 'input' && p.message.toLowerCase().includes('array')) {
134
+ question.filter = (input) => {
135
+ if (!input || input.trim() === '')
136
+ return undefined;
137
+ return input.split(',').map((s) => s.trim());
138
+ };
139
+ }
140
+ return question;
141
+ });
142
+ if (questions.length === 0) {
143
+ return {};
144
+ }
145
+ console.log();
146
+ console.log(chalk.dim('Enter node input:'));
147
+ console.log();
148
+ const answers = await inquirer.prompt(questions);
149
+ // Clean up undefined values
150
+ const cleaned = {};
151
+ for (const [key, value] of Object.entries(answers)) {
152
+ if (value !== undefined && value !== '') {
153
+ cleaned[key] = value;
154
+ }
155
+ }
156
+ return cleaned;
157
+ }
158
+ /**
159
+ * Confirm before running a node
160
+ */
161
+ export async function confirmRun(nodeType) {
162
+ const { confirm } = await inquirer.prompt([
163
+ {
164
+ type: 'confirm',
165
+ name: 'confirm',
166
+ message: `Run ${nodeType}?`,
167
+ default: true,
168
+ },
169
+ ]);
170
+ return confirm;
171
+ }
172
+ /**
173
+ * Select a node from a list
174
+ */
175
+ export async function selectNode(nodes) {
176
+ const { nodeType } = await inquirer.prompt([
177
+ {
178
+ type: 'list',
179
+ name: 'nodeType',
180
+ message: 'Select a node to run:',
181
+ choices: nodes.map((n) => ({
182
+ name: `${n.name} (${n.type}) - ${n.description}`,
183
+ value: n.type,
184
+ })),
185
+ },
186
+ ]);
187
+ return nodeType;
188
+ }
189
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/ui/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { generateMockFromSchema, generateMockOutput } from './mock-generator.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { generateMockFromSchema, generateMockOutput } from './mock-generator.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { z } from 'zod';
2
+ /**
3
+ * Generate mock data from a Zod schema
4
+ */
5
+ export declare function generateMockFromSchema(schema: z.ZodSchema): unknown;
6
+ /**
7
+ * Generate mock output for a specific node type
8
+ * Provides more realistic mock data for known node types
9
+ */
10
+ export declare function generateMockOutput(nodeType: string, outputSchema: z.ZodSchema): unknown;
11
+ //# sourceMappingURL=mock-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-generator.d.ts","sourceRoot":"","sources":["../../src/utils/mock-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,GAAG,OAAO,CAGnE;AA2GD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,CAAC,CAAC,SAAS,GACxB,OAAO,CAwGT"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Generate mock data from a Zod schema
3
+ */
4
+ export function generateMockFromSchema(schema) {
5
+ const def = schema._def;
6
+ return generateFromDef(def);
7
+ }
8
+ function generateFromDef(def) {
9
+ const typeName = def.typeName;
10
+ switch (typeName) {
11
+ case 'ZodString':
12
+ return 'mock_string';
13
+ case 'ZodNumber':
14
+ return 42;
15
+ case 'ZodBoolean':
16
+ return true;
17
+ case 'ZodNull':
18
+ return null;
19
+ case 'ZodUndefined':
20
+ return undefined;
21
+ case 'ZodLiteral':
22
+ return def.value;
23
+ case 'ZodEnum':
24
+ // Return first enum value
25
+ return def.values[0];
26
+ case 'ZodNativeEnum':
27
+ // Return first enum value
28
+ const enumObj = def.values;
29
+ return Object.values(enumObj)[0];
30
+ case 'ZodArray':
31
+ // Generate 1-3 items
32
+ const itemDef = def.type._def;
33
+ return [generateFromDef(itemDef), generateFromDef(itemDef)];
34
+ case 'ZodObject':
35
+ const shape = def.shape();
36
+ const result = {};
37
+ for (const [key, fieldSchema] of Object.entries(shape)) {
38
+ result[key] = generateFromDef(fieldSchema._def);
39
+ }
40
+ return result;
41
+ case 'ZodUnion': {
42
+ // Use first union option
43
+ const options = def.options;
44
+ const firstOpt = options?.[0];
45
+ if (firstOpt) {
46
+ return generateFromDef(firstOpt._def);
47
+ }
48
+ return null;
49
+ }
50
+ case 'ZodDiscriminatedUnion': {
51
+ // Use first option
52
+ const discOptions = def.options;
53
+ const firstOption = Array.from(discOptions.values())[0];
54
+ if (firstOption) {
55
+ return generateFromDef(firstOption._def);
56
+ }
57
+ return null;
58
+ }
59
+ case 'ZodOptional':
60
+ case 'ZodNullable':
61
+ // Generate the inner type
62
+ const innerType = def.innerType;
63
+ return generateFromDef(innerType._def);
64
+ case 'ZodDefault':
65
+ // Use the default value
66
+ return def.defaultValue();
67
+ case 'ZodRecord':
68
+ // Generate a sample record
69
+ const valueDef = def.valueType._def;
70
+ return {
71
+ key1: generateFromDef(valueDef),
72
+ key2: generateFromDef(valueDef),
73
+ };
74
+ case 'ZodTuple':
75
+ const items = def.items;
76
+ return items.map((item) => generateFromDef(item._def));
77
+ case 'ZodPromise':
78
+ // Return the unwrapped type
79
+ const promiseType = def.type;
80
+ return generateFromDef(promiseType._def);
81
+ case 'ZodEffects':
82
+ // Return the inner type
83
+ const effectsSchema = def.schema;
84
+ return generateFromDef(effectsSchema._def);
85
+ case 'ZodUnknown':
86
+ case 'ZodAny':
87
+ return { mock: 'data' };
88
+ default:
89
+ return null;
90
+ }
91
+ }
92
+ /**
93
+ * Generate mock output for a specific node type
94
+ * Provides more realistic mock data for known node types
95
+ */
96
+ export function generateMockOutput(nodeType, outputSchema) {
97
+ // Custom mocks for known node types
98
+ const customMocks = {
99
+ conditional: {
100
+ conditionMet: true,
101
+ selectedBranch: 'true',
102
+ },
103
+ end: {
104
+ terminated: true,
105
+ reason: 'Workflow completed successfully',
106
+ },
107
+ delay: {
108
+ delayed: true,
109
+ delayMs: 1000,
110
+ },
111
+ map: {
112
+ result: [
113
+ { transformed: 'item1' },
114
+ { transformed: 'item2' },
115
+ ],
116
+ },
117
+ filter: {
118
+ result: [{ passes: true }],
119
+ originalCount: 3,
120
+ filteredCount: 1,
121
+ },
122
+ http_request: {
123
+ status: 200,
124
+ data: { message: 'Mock response' },
125
+ headers: { 'content-type': 'application/json' },
126
+ },
127
+ search_contacts: {
128
+ contacts: [
129
+ {
130
+ id: 'mock_contact_1',
131
+ name: 'John Doe',
132
+ firstName: 'John',
133
+ lastName: 'Doe',
134
+ email: 'john.doe@example.com',
135
+ title: 'CTO',
136
+ company: 'Example Corp',
137
+ linkedinUrl: 'https://linkedin.com/in/johndoe',
138
+ location: 'San Francisco, CA',
139
+ },
140
+ {
141
+ id: 'mock_contact_2',
142
+ name: 'Jane Smith',
143
+ firstName: 'Jane',
144
+ lastName: 'Smith',
145
+ email: 'jane.smith@example.com',
146
+ title: 'VP Engineering',
147
+ company: 'Tech Startup',
148
+ linkedinUrl: 'https://linkedin.com/in/janesmith',
149
+ location: 'New York, NY',
150
+ },
151
+ ],
152
+ totalFound: 2,
153
+ },
154
+ reddit_monitor: {
155
+ posts: [
156
+ {
157
+ id: 'mock_post_1',
158
+ title: 'Mock Reddit Post',
159
+ author: 'mock_user',
160
+ subreddit: 'technology',
161
+ score: 150,
162
+ url: 'https://reddit.com/r/technology/mock',
163
+ createdAt: new Date().toISOString(),
164
+ },
165
+ ],
166
+ },
167
+ twitter_monitor: {
168
+ posts: [
169
+ {
170
+ id: 'mock_tweet_1',
171
+ text: 'Mock tweet content',
172
+ author: 'mockuser',
173
+ likes: 50,
174
+ retweets: 10,
175
+ createdAt: new Date().toISOString(),
176
+ },
177
+ ],
178
+ },
179
+ social_keyword_generator: {
180
+ keywords: ['ai', 'machine learning', 'automation', 'workflow'],
181
+ hashtags: ['#AI', '#ML', '#Automation'],
182
+ },
183
+ draft_emails: {
184
+ drafts: [
185
+ {
186
+ to: 'john.doe@example.com',
187
+ subject: 'Mock Email Subject',
188
+ body: 'This is a mock email body for testing purposes.',
189
+ },
190
+ ],
191
+ },
192
+ };
193
+ if (customMocks[nodeType]) {
194
+ return customMocks[nodeType];
195
+ }
196
+ // Fall back to schema-based generation
197
+ return generateMockFromSchema(outputSchema);
198
+ }
199
+ //# sourceMappingURL=mock-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-generator.js","sourceRoot":"","sources":["../../src/utils/mock-generator.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@jam-nodes/playground",
3
+ "version": "0.1.0",
4
+ "description": "CLI tool for testing jam-nodes interactively",
5
+ "type": "module",
6
+ "bin": {
7
+ "jam-playground": "./dist/index.js"
8
+ },
9
+ "main": "./dist/index.js",
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsx src/index.ts",
13
+ "clean": "rm -rf dist",
14
+ "typecheck": "tsc --noEmit",
15
+ "prepublishOnly": "npm run build"
16
+ },
17
+ "dependencies": {
18
+ "@jam-nodes/core": "*",
19
+ "@jam-nodes/nodes": "*",
20
+ "chalk": "^5.3.0",
21
+ "commander": "^12.1.0",
22
+ "conf": "^13.0.1",
23
+ "dotenv": "^16.4.5",
24
+ "inquirer": "^9.3.7",
25
+ "ora": "^8.1.1",
26
+ "zod": "^3.23.8"
27
+ },
28
+ "devDependencies": {
29
+ "@types/inquirer": "^9.0.7",
30
+ "@types/node": "^20.14.0",
31
+ "tsx": "^4.21.0",
32
+ "typescript": "^5.5.0"
33
+ },
34
+ "peerDependencies": {
35
+ "zod": "^3.0.0 || ^4.0.0"
36
+ },
37
+ "engines": {
38
+ "node": ">=18"
39
+ },
40
+ "keywords": [
41
+ "jam-nodes",
42
+ "playground",
43
+ "cli",
44
+ "workflow",
45
+ "testing"
46
+ ],
47
+ "repository": {
48
+ "type": "git",
49
+ "url": "git+https://github.com/wespreadjam/jam-nodes.git",
50
+ "directory": "packages/playground"
51
+ },
52
+ "license": "MIT"
53
+ }