@aerostack/cli 1.5.0 → 1.5.1

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.
@@ -0,0 +1,230 @@
1
+ /**
2
+ * `aerostack publish [module-path]`
3
+ *
4
+ * Reads a local function module and pushes it to the community registry.
5
+ *
6
+ * Usage:
7
+ * npx aerostack publish → uses current directory
8
+ * npx aerostack publish ./src/modules/my-fn → specific module
9
+ */
10
+ import chalk from 'chalk';
11
+ import prompts from 'prompts';
12
+ import ora from 'ora';
13
+ import { readFileSync, existsSync, readdirSync, statSync } from 'fs';
14
+ import { join, resolve, basename } from 'path';
15
+ import { createFunction, updateFunction, publishFunction, DEFAULT_REGISTRY } from '../lib/registry.js';
16
+ import { isAuthenticated } from '../lib/config.js';
17
+ function readLocalManifest(moduleDir) {
18
+ const manifestPath = join(moduleDir, 'aerostack-manifest.json');
19
+ if (existsSync(manifestPath)) {
20
+ return JSON.parse(readFileSync(manifestPath, 'utf-8'));
21
+ }
22
+ return {};
23
+ }
24
+ function readAerostackJson(moduleDir) {
25
+ const configPath = join(moduleDir, 'aerostack.json');
26
+ if (existsSync(configPath)) {
27
+ try {
28
+ return JSON.parse(readFileSync(configPath, 'utf-8'));
29
+ }
30
+ catch (e) {
31
+ console.warn(chalk.yellow(` Warning: Could not parse aerostack.json in ${moduleDir}`));
32
+ }
33
+ }
34
+ return {};
35
+ }
36
+ function readCoreFile(moduleDir) {
37
+ // Prefer core.ts, then adapter.ts, then index.ts
38
+ for (const fname of ['core.ts', 'adapter.ts', 'index.ts']) {
39
+ const p = join(moduleDir, fname);
40
+ if (existsSync(p))
41
+ return readFileSync(p, 'utf-8');
42
+ }
43
+ return '';
44
+ }
45
+ function inferCategory(moduleDir) {
46
+ const files = readdirSync(moduleDir);
47
+ const code = files
48
+ .filter(f => f.endsWith('.ts'))
49
+ .map(f => readFileSync(join(moduleDir, f), 'utf-8'))
50
+ .join('\n');
51
+ if (code.includes('stripe'))
52
+ return 'payments';
53
+ if (code.includes('drizzle') && code.includes('auth'))
54
+ return 'auth';
55
+ if (code.includes('email') || code.includes('sendgrid'))
56
+ return 'email';
57
+ return 'utility';
58
+ }
59
+ function parseArgs(args) {
60
+ const path = args.find(a => !a.startsWith('--'));
61
+ const flags = {};
62
+ for (const arg of args) {
63
+ if (arg.startsWith('--')) {
64
+ const [key, val] = arg.slice(2).split('=');
65
+ flags[key] = val || 'true';
66
+ }
67
+ }
68
+ return { path, flags };
69
+ }
70
+ export async function publishCommand(args) {
71
+ const { path: modulePath, flags } = parseArgs(args);
72
+ const registry = flags['registry'] || DEFAULT_REGISTRY;
73
+ console.log(`\n${chalk.bold.blue(' ⚡ Aerostack Publish')}\n`);
74
+ if (!isAuthenticated()) {
75
+ console.error(chalk.red(' Not logged in. Run: npx aerostack login\n'));
76
+ process.exit(1);
77
+ }
78
+ // Find module directory
79
+ let moduleDir;
80
+ if (modulePath) {
81
+ moduleDir = resolve(process.cwd(), modulePath);
82
+ }
83
+ else {
84
+ // Try current directory or look for a single module
85
+ const srcModules = join(process.cwd(), 'src', 'modules');
86
+ if (existsSync(srcModules)) {
87
+ const dirs = readdirSync(srcModules).filter(d => statSync(join(srcModules, d)).isDirectory());
88
+ if (dirs.length === 1) {
89
+ moduleDir = join(srcModules, dirs[0]);
90
+ }
91
+ else if (dirs.length > 1) {
92
+ const { selected } = await prompts({
93
+ type: 'select',
94
+ name: 'selected',
95
+ message: 'Which module to publish?',
96
+ choices: dirs.map(d => ({ title: d, value: join(srcModules, d) })),
97
+ });
98
+ moduleDir = selected;
99
+ }
100
+ else {
101
+ console.error(chalk.red(' No modules found in src/modules/\n'));
102
+ process.exit(1);
103
+ }
104
+ }
105
+ else {
106
+ moduleDir = process.cwd();
107
+ }
108
+ }
109
+ if (!existsSync(moduleDir)) {
110
+ console.error(chalk.red(` Directory not found: ${moduleDir}\n`));
111
+ process.exit(1);
112
+ }
113
+ const localManifest = readLocalManifest(moduleDir);
114
+ const moduleName = localManifest.name || basename(moduleDir);
115
+ // Read the Gateway configurations (Phase 1.7)
116
+ const aerostackConfig = readAerostackJson(moduleDir);
117
+ const aiConfig = aerostackConfig.ai_config || aerostackConfig.aiConfig;
118
+ const monetization = aerostackConfig.monetization;
119
+ // Collect all TS file content
120
+ const tsFiles = readdirSync(moduleDir)
121
+ .filter(f => f.endsWith('.ts') && f !== 'node-adapter.ts')
122
+ .map(f => ({ path: f, content: readFileSync(join(moduleDir, f), 'utf-8') }));
123
+ const primaryCode = readCoreFile(moduleDir);
124
+ if (!primaryCode) {
125
+ console.error(chalk.red(' No TypeScript source files found.\n'));
126
+ process.exit(1);
127
+ }
128
+ // Prompt for function metadata
129
+ const answers = await prompts([
130
+ {
131
+ type: 'text',
132
+ name: 'name',
133
+ message: 'Function name:',
134
+ initial: moduleName,
135
+ },
136
+ {
137
+ type: 'text',
138
+ name: 'description',
139
+ message: 'Description:',
140
+ initial: '',
141
+ validate: (v) => v.trim().length >= 10 || 'At least 10 characters required',
142
+ },
143
+ {
144
+ type: 'select',
145
+ name: 'category',
146
+ message: 'Category:',
147
+ choices: [
148
+ { title: 'Payments', value: 'payments' },
149
+ { title: 'Auth', value: 'auth' },
150
+ { title: 'Email', value: 'email' },
151
+ { title: 'Data Processing', value: 'data' },
152
+ { title: 'API Integration', value: 'api' },
153
+ { title: 'AI / ML', value: 'ai' },
154
+ { title: 'Web3', value: 'web3' },
155
+ { title: 'Utility', value: 'utility' },
156
+ { title: 'Other', value: 'other' },
157
+ ],
158
+ initial: 0,
159
+ },
160
+ {
161
+ type: 'text',
162
+ name: 'tags',
163
+ message: 'Tags (comma separated):',
164
+ initial: '',
165
+ },
166
+ {
167
+ type: 'confirm',
168
+ name: 'publishNow',
169
+ message: 'Publish immediately? (No = save as draft)',
170
+ initial: false,
171
+ },
172
+ ]);
173
+ if (!answers.name) {
174
+ console.log(chalk.yellow('\n Aborted.\n'));
175
+ process.exit(0);
176
+ }
177
+ const tags = answers.tags ? answers.tags.split(',').map((t) => t.trim()).filter(Boolean) : [];
178
+ // Upload
179
+ const spinner = ora('Uploading to registry...').start();
180
+ try {
181
+ let fnId;
182
+ let fnSlug;
183
+ if (localManifest.id) {
184
+ // Update existing
185
+ await updateFunction(registry, localManifest.id, {
186
+ name: answers.name,
187
+ description: answers.description,
188
+ code: primaryCode,
189
+ tags,
190
+ aiConfig,
191
+ monetization,
192
+ });
193
+ fnId = localManifest.id;
194
+ fnSlug = localManifest.slug || answers.name;
195
+ spinner.succeed('Function updated');
196
+ }
197
+ else {
198
+ // Create new
199
+ const created = await createFunction(registry, {
200
+ name: answers.name,
201
+ description: answers.description,
202
+ category: answers.category,
203
+ code: primaryCode,
204
+ tags,
205
+ language: 'typescript',
206
+ license: 'MIT',
207
+ aiConfig,
208
+ monetization,
209
+ });
210
+ fnId = created.id;
211
+ fnSlug = created.slug;
212
+ spinner.succeed(`Function created: ${chalk.cyan(`${created.author}/${fnSlug}`)}`);
213
+ }
214
+ if (answers.publishNow) {
215
+ const pubSpinner = ora('Publishing...').start();
216
+ const result = await publishFunction(registry, fnId);
217
+ pubSpinner.succeed(`Published! 🎉`);
218
+ console.log(`\n ${chalk.bold('Registry URL:')} ${chalk.underline(`https://hub.aerostack.dev${result.url}`)}\n`);
219
+ }
220
+ else {
221
+ console.log(`\n ${chalk.green('✓ Saved as draft.')} To publish later:`);
222
+ console.log(` ${chalk.cyan('npx aerostack publish --publish-only')}\n`);
223
+ }
224
+ }
225
+ catch (err) {
226
+ spinner.fail(err.message);
227
+ process.exit(1);
228
+ }
229
+ }
230
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Aerostack CLI — Main Entry Point
4
+ *
5
+ * Usage:
6
+ * npx aerostack init [directory] — scaffold a new project
7
+ * npx aerostack add <slug> — install a function from registry
8
+ * npx aerostack list — browse available functions
9
+ * npx aerostack publish — push local function to registry
10
+ * npx aerostack login — authenticate with Aerostack
11
+ */
12
+ export declare function run(args: string[]): Promise<void>;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG;AA8CH,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,iBA0CvC"}
package/dist/index.js ADDED
@@ -0,0 +1,93 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Aerostack CLI — Main Entry Point
4
+ *
5
+ * Usage:
6
+ * npx aerostack init [directory] — scaffold a new project
7
+ * npx aerostack add <slug> — install a function from registry
8
+ * npx aerostack list — browse available functions
9
+ * npx aerostack publish — push local function to registry
10
+ * npx aerostack login — authenticate with Aerostack
11
+ */
12
+ import chalk from 'chalk';
13
+ import { initCommand } from './commands/init.js';
14
+ import { addCommand } from './commands/add.js';
15
+ import { listCommand } from './commands/list.js';
16
+ import { publishCommand } from './commands/publish.js';
17
+ import { loginCommand } from './commands/login.js';
18
+ // args parsed inside run()
19
+ const VERSION = '1.0.0';
20
+ function printHelp() {
21
+ console.log(`
22
+ ${chalk.bold.blue(' ⚡ Aerostack CLI')} ${chalk.gray(`v${VERSION}`)}
23
+
24
+ ${chalk.bold('Usage:')}
25
+ ${chalk.cyan('npx aerostack')} <command> [options]
26
+
27
+ ${chalk.bold('Commands:')}
28
+ ${chalk.cyan('init')} [directory] Scaffold a new Aerostack project (Drizzle + Hono)
29
+ ${chalk.cyan('add')} <slug> Install a community function from the registry
30
+ ${chalk.cyan('list')} Browse available functions in the registry
31
+ ${chalk.cyan('publish')} Publish a local function to the community registry
32
+ ${chalk.cyan('login')} Authenticate with your Aerostack account
33
+
34
+ ${chalk.bold('Examples:')}
35
+ ${chalk.gray('# Create a new project')}
36
+ npx aerostack init my-backend
37
+
38
+ ${chalk.gray('# Install a community function')}
39
+ npx aerostack add stripe-checkout
40
+ npx aerostack add alice/stripe-checkout ${chalk.gray('# specific author')}
41
+ npx aerostack add stripe-checkout --runtime=node ${chalk.gray('# with Node.js adapter')}
42
+
43
+ ${chalk.gray('# Browse the registry')}
44
+ npx aerostack list --category=payments
45
+
46
+ ${chalk.gray('# Publish your function')}
47
+ npx aerostack publish ./src/modules/my-fn
48
+
49
+ ${chalk.bold('Documentation:')} ${chalk.underline('https://aerostack.dev/docs/cli')}
50
+ `);
51
+ }
52
+ export async function run(args) {
53
+ const command = args[0];
54
+ const rest = args.slice(1);
55
+ if (!command || command === '--help' || command === '-h') {
56
+ printHelp();
57
+ // If it's the Node.js handler, we exit. If falling through to Go, we wouldn't be here.
58
+ process.exit(0);
59
+ }
60
+ if (command === '--version' || command === '-v') {
61
+ console.log(VERSION);
62
+ process.exit(0);
63
+ }
64
+ try {
65
+ switch (command) {
66
+ case 'init':
67
+ await initCommand(rest);
68
+ break;
69
+ case 'add':
70
+ await addCommand(rest);
71
+ break;
72
+ case 'list':
73
+ await listCommand(rest);
74
+ break;
75
+ case 'publish':
76
+ await publishCommand(rest);
77
+ break;
78
+ case 'login':
79
+ await loginCommand(rest);
80
+ break;
81
+ default:
82
+ // Should not happen if run.js filters correctly
83
+ console.error(chalk.red(`\n Unknown command: ${command}\n`));
84
+ printHelp();
85
+ process.exit(1);
86
+ }
87
+ }
88
+ catch (err) {
89
+ console.error(chalk.red(`\n Error: ${err.message}\n`));
90
+ process.exit(1);
91
+ }
92
+ }
93
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface AerostackConfig {
2
+ token?: string;
3
+ email?: string;
4
+ registry?: string;
5
+ }
6
+ export declare function getConfig(): AerostackConfig;
7
+ export declare function saveConfig(config: AerostackConfig): void;
8
+ export declare function isAuthenticated(): boolean;
9
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,SAAS,IAAI,eAAe,CAO3C;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAGxD;AAED,wBAAgB,eAAe,IAAI,OAAO,CAEzC"}
@@ -0,0 +1,24 @@
1
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
2
+ import { homedir } from 'os';
3
+ import { join } from 'path';
4
+ const CONFIG_DIR = join(homedir(), '.aerostack');
5
+ const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
6
+ export function getConfig() {
7
+ if (!existsSync(CONFIG_FILE))
8
+ return {};
9
+ try {
10
+ return JSON.parse(readFileSync(CONFIG_FILE, 'utf-8'));
11
+ }
12
+ catch {
13
+ return {};
14
+ }
15
+ }
16
+ export function saveConfig(config) {
17
+ if (!existsSync(CONFIG_DIR))
18
+ mkdirSync(CONFIG_DIR, { recursive: true });
19
+ writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));
20
+ }
21
+ export function isAuthenticated() {
22
+ return !!getConfig().token;
23
+ }
24
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AACjD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAQpD,MAAM,UAAU,SAAS;IACrB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAuB;IAC9C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,eAAe;IAC3B,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * AST-safe injector for src/index.ts and src/db/schema.ts
3
+ *
4
+ * Uses marker comments so injections are idempotent and predictable.
5
+ * Markers set during `aerostack init` — never modifies files without them.
6
+ */
7
+ export interface InjectionResult {
8
+ modified: boolean;
9
+ reason?: string;
10
+ }
11
+ /**
12
+ * Injects an import + route into src/index.ts.
13
+ * Returns false if already injected (idempotent).
14
+ */
15
+ export declare function injectRoute(indexPath: string, opts: {
16
+ importStatement: string;
17
+ routeStatement: string;
18
+ }): InjectionResult;
19
+ /**
20
+ * Injects schema import + export re-export into src/db/schema.ts
21
+ */
22
+ export declare function injectSchema(schemaPath: string, opts: {
23
+ importStatement: string;
24
+ exportStatement: string;
25
+ }): InjectionResult;
26
+ /**
27
+ * Replace template tokens like {{PROJECT_NAME}} in a file string.
28
+ */
29
+ export declare function applyTokens(content: string, tokens: Record<string, string>): string;
30
+ //# sourceMappingURL=injector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injector.d.ts","sourceRoot":"","sources":["../../src/lib/injector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACvB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;IACF,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CAC1B,GACF,eAAe,CA+CjB;AAED;;GAEG;AACH,wBAAgB,YAAY,CACxB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE;IACF,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CAC3B,GACF,eAAe,CA8BjB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAEnF"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * AST-safe injector for src/index.ts and src/db/schema.ts
3
+ *
4
+ * Uses marker comments so injections are idempotent and predictable.
5
+ * Markers set during `aerostack init` — never modifies files without them.
6
+ */
7
+ import { readFileSync, writeFileSync, existsSync } from 'fs';
8
+ // Marker constants — must match templates/src/index.ts
9
+ const IMPORTS_MARKER = '// aerostack:imports';
10
+ const ROUTES_MARKER = '// aerostack:routes';
11
+ const SCHEMA_IMPORTS_MARKER = '// aerostack:schema-imports';
12
+ const SCHEMA_EXPORTS_MARKER = '// aerostack:schema-exports';
13
+ /**
14
+ * Injects an import + route into src/index.ts.
15
+ * Returns false if already injected (idempotent).
16
+ */
17
+ export function injectRoute(indexPath, opts) {
18
+ if (!existsSync(indexPath)) {
19
+ return { modified: false, reason: `File not found: ${indexPath}` };
20
+ }
21
+ let content = readFileSync(indexPath, 'utf-8');
22
+ // Check if already injected (idempotent)
23
+ if (content.includes(opts.importStatement)) {
24
+ return { modified: false, reason: 'Already injected' };
25
+ }
26
+ // Inject import before the marker
27
+ if (content.includes(IMPORTS_MARKER)) {
28
+ content = content.replace(IMPORTS_MARKER, `${opts.importStatement}\n${IMPORTS_MARKER}`);
29
+ }
30
+ else {
31
+ // Fallback: add near top after last existing import
32
+ const lines = content.split('\n');
33
+ let lastImportIdx = -1;
34
+ for (let i = 0; i < lines.length; i++) {
35
+ if (lines[i].startsWith('import '))
36
+ lastImportIdx = i;
37
+ }
38
+ if (lastImportIdx >= 0) {
39
+ lines.splice(lastImportIdx + 1, 0, opts.importStatement);
40
+ content = lines.join('\n');
41
+ }
42
+ }
43
+ // Inject route before the marker
44
+ if (content.includes(ROUTES_MARKER)) {
45
+ content = content.replace(ROUTES_MARKER, `${opts.routeStatement}\n${ROUTES_MARKER}`);
46
+ }
47
+ else {
48
+ // Fallback: add before export default
49
+ content = content.replace('export default app', `${opts.routeStatement}\n\nexport default app`);
50
+ }
51
+ writeFileSync(indexPath, content, 'utf-8');
52
+ return { modified: true };
53
+ }
54
+ /**
55
+ * Injects schema import + export re-export into src/db/schema.ts
56
+ */
57
+ export function injectSchema(schemaPath, opts) {
58
+ if (!existsSync(schemaPath)) {
59
+ // Non-fatal: db/schema.ts might not exist (users can run drizzle-kit directly)
60
+ return { modified: false, reason: 'db/schema.ts not found — skipping schema injection' };
61
+ }
62
+ let content = readFileSync(schemaPath, 'utf-8');
63
+ if (content.includes(opts.exportStatement)) {
64
+ return { modified: false, reason: 'Already injected' };
65
+ }
66
+ if (content.includes(SCHEMA_IMPORTS_MARKER)) {
67
+ content = content.replace(SCHEMA_IMPORTS_MARKER, `${opts.importStatement}\n${SCHEMA_IMPORTS_MARKER}`);
68
+ }
69
+ if (content.includes(SCHEMA_EXPORTS_MARKER)) {
70
+ content = content.replace(SCHEMA_EXPORTS_MARKER, `${opts.exportStatement}\n${SCHEMA_EXPORTS_MARKER}`);
71
+ }
72
+ else {
73
+ content += `\n${opts.exportStatement}\n`;
74
+ }
75
+ writeFileSync(schemaPath, content, 'utf-8');
76
+ return { modified: true };
77
+ }
78
+ /**
79
+ * Replace template tokens like {{PROJECT_NAME}} in a file string.
80
+ */
81
+ export function applyTokens(content, tokens) {
82
+ return content.replace(/\{\{(\w+)\}\}/g, (_, key) => tokens[key] ?? `{{${key}}}`);
83
+ }
84
+ //# sourceMappingURL=injector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injector.js","sourceRoot":"","sources":["../../src/lib/injector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Registry API client
3
+ * Communicates with the Aerostack community API to fetch and publish functions.
4
+ */
5
+ export declare const DEFAULT_REGISTRY = "https://api.aerostack.dev/api";
6
+ export interface FunctionManifest {
7
+ id: string;
8
+ name: string;
9
+ slug: string;
10
+ description: string;
11
+ category: string;
12
+ type: 'feature' | 'utility';
13
+ author: string;
14
+ version: string;
15
+ language: string;
16
+ starCount: number;
17
+ cloneCount: number;
18
+ license: string;
19
+ tags: string[];
20
+ npmDependencies?: string[];
21
+ envVars?: string[];
22
+ routeExport?: string;
23
+ routePath?: string;
24
+ drizzleSchema?: boolean;
25
+ aiConfig?: any;
26
+ monetization?: any;
27
+ files: Array<{
28
+ path: string;
29
+ content: string;
30
+ }>;
31
+ }
32
+ export interface FunctionListItem {
33
+ id: string;
34
+ name: string;
35
+ slug: string;
36
+ description: string;
37
+ category: string;
38
+ author_username: string;
39
+ star_count: number;
40
+ clone_count: number;
41
+ version: string;
42
+ tags: string[];
43
+ }
44
+ export declare function fetchInstallManifest(registry: string, slug: string): Promise<FunctionManifest>;
45
+ export declare function listFunctions(registry: string, opts?: {
46
+ category?: string;
47
+ search?: string;
48
+ sort?: string;
49
+ limit?: number;
50
+ }): Promise<FunctionListItem[]>;
51
+ export declare function createFunction(registry: string, payload: {
52
+ name: string;
53
+ description: string;
54
+ category: string;
55
+ code: string;
56
+ language?: string;
57
+ tags?: string[];
58
+ readme?: string;
59
+ license?: string;
60
+ aiConfig?: any;
61
+ monetization?: any;
62
+ }): Promise<{
63
+ id: string;
64
+ slug: string;
65
+ author: string;
66
+ }>;
67
+ export declare function updateFunction(registry: string, id: string, payload: Partial<{
68
+ name: string;
69
+ description: string;
70
+ code: string;
71
+ tags: string[];
72
+ readme: string;
73
+ version: string;
74
+ aiConfig?: any;
75
+ monetization?: any;
76
+ }>): Promise<void>;
77
+ export declare function publishFunction(registry: string, id: string): Promise<{
78
+ url: string;
79
+ }>;
80
+ export declare function loginToRegistry(registry: string, email: string, password: string): Promise<string>;
81
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"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"}