@solidnumber/cli 1.7.2 → 1.7.4
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.
- package/dist/commands/audit.js +1 -1
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/brand.js +122 -0
- package/dist/commands/brand.js.map +1 -1
- package/dist/commands/clone.d.ts.map +1 -1
- package/dist/commands/clone.js +67 -0
- package/dist/commands/clone.js.map +1 -1
- package/dist/commands/completion.d.ts.map +1 -1
- package/dist/commands/completion.js +4 -0
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/demo.d.ts +12 -0
- package/dist/commands/demo.d.ts.map +1 -0
- package/dist/commands/demo.js +260 -0
- package/dist/commands/demo.js.map +1 -0
- package/dist/commands/init.d.ts +11 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +377 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/inventory.js +5 -5
- package/dist/commands/inventory.js.map +1 -1
- package/dist/commands/payment.js +101 -0
- package/dist/commands/payment.js.map +1 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +42 -0
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/sandbox.d.ts.map +1 -1
- package/dist/commands/sandbox.js +113 -0
- package/dist/commands/sandbox.js.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +4 -4
- package/dist/lib/config.js.map +1 -1
- package/package.json +2 -1
- package/dist/__tests__/commands/auth.test.d.ts +0 -6
- package/dist/__tests__/commands/auth.test.d.ts.map +0 -1
- package/dist/__tests__/commands/auth.test.js +0 -91
- package/dist/__tests__/commands/auth.test.js.map +0 -1
- package/dist/__tests__/commands/billing.test.d.ts +0 -6
- package/dist/__tests__/commands/billing.test.d.ts.map +0 -1
- package/dist/__tests__/commands/billing.test.js +0 -141
- package/dist/__tests__/commands/billing.test.js.map +0 -1
- package/dist/__tests__/commands/company.test.d.ts +0 -6
- package/dist/__tests__/commands/company.test.d.ts.map +0 -1
- package/dist/__tests__/commands/company.test.js +0 -129
- package/dist/__tests__/commands/company.test.js.map +0 -1
- package/dist/__tests__/commands/deploy.test.d.ts +0 -8
- package/dist/__tests__/commands/deploy.test.d.ts.map +0 -1
- package/dist/__tests__/commands/deploy.test.js +0 -190
- package/dist/__tests__/commands/deploy.test.js.map +0 -1
- package/dist/__tests__/commands/history.test.d.ts +0 -8
- package/dist/__tests__/commands/history.test.d.ts.map +0 -1
- package/dist/__tests__/commands/history.test.js +0 -213
- package/dist/__tests__/commands/history.test.js.map +0 -1
- package/dist/__tests__/commands/import.test.d.ts +0 -4
- package/dist/__tests__/commands/import.test.d.ts.map +0 -1
- package/dist/__tests__/commands/import.test.js +0 -71
- package/dist/__tests__/commands/import.test.js.map +0 -1
- package/dist/__tests__/commands/logs.test.d.ts +0 -5
- package/dist/__tests__/commands/logs.test.d.ts.map +0 -1
- package/dist/__tests__/commands/logs.test.js +0 -124
- package/dist/__tests__/commands/logs.test.js.map +0 -1
- package/dist/__tests__/commands/migrate.test.d.ts +0 -9
- package/dist/__tests__/commands/migrate.test.d.ts.map +0 -1
- package/dist/__tests__/commands/migrate.test.js +0 -277
- package/dist/__tests__/commands/migrate.test.js.map +0 -1
- package/dist/__tests__/commands/pages.test.d.ts +0 -5
- package/dist/__tests__/commands/pages.test.d.ts.map +0 -1
- package/dist/__tests__/commands/pages.test.js +0 -103
- package/dist/__tests__/commands/pages.test.js.map +0 -1
- package/dist/__tests__/commands/push.test.d.ts +0 -6
- package/dist/__tests__/commands/push.test.d.ts.map +0 -1
- package/dist/__tests__/commands/push.test.js +0 -113
- package/dist/__tests__/commands/push.test.js.map +0 -1
- package/dist/__tests__/commands/sandbox.test.d.ts +0 -5
- package/dist/__tests__/commands/sandbox.test.d.ts.map +0 -1
- package/dist/__tests__/commands/sandbox.test.js +0 -132
- package/dist/__tests__/commands/sandbox.test.js.map +0 -1
- package/dist/__tests__/commands/serve.test.d.ts +0 -5
- package/dist/__tests__/commands/serve.test.d.ts.map +0 -1
- package/dist/__tests__/commands/serve.test.js +0 -115
- package/dist/__tests__/commands/serve.test.js.map +0 -1
- package/dist/__tests__/commands/site.test.d.ts +0 -5
- package/dist/__tests__/commands/site.test.d.ts.map +0 -1
- package/dist/__tests__/commands/site.test.js +0 -92
- package/dist/__tests__/commands/site.test.js.map +0 -1
- package/dist/__tests__/commands/test.test.d.ts +0 -5
- package/dist/__tests__/commands/test.test.d.ts.map +0 -1
- package/dist/__tests__/commands/test.test.js +0 -220
- package/dist/__tests__/commands/test.test.js.map +0 -1
- package/dist/__tests__/integration/smoke.test.d.ts +0 -7
- package/dist/__tests__/integration/smoke.test.d.ts.map +0 -1
- package/dist/__tests__/integration/smoke.test.js +0 -135
- package/dist/__tests__/integration/smoke.test.js.map +0 -1
- package/dist/__tests__/lib/api-client.test.d.ts +0 -6
- package/dist/__tests__/lib/api-client.test.d.ts.map +0 -1
- package/dist/__tests__/lib/api-client.test.js +0 -74
- package/dist/__tests__/lib/api-client.test.js.map +0 -1
- package/dist/__tests__/lib/company-isolation.test.d.ts +0 -19
- package/dist/__tests__/lib/company-isolation.test.d.ts.map +0 -1
- package/dist/__tests__/lib/company-isolation.test.js +0 -96
- package/dist/__tests__/lib/company-isolation.test.js.map +0 -1
- package/dist/__tests__/lib/config.test.d.ts +0 -6
- package/dist/__tests__/lib/config.test.d.ts.map +0 -1
- package/dist/__tests__/lib/config.test.js +0 -131
- package/dist/__tests__/lib/config.test.js.map +0 -1
- package/dist/__tests__/setup.d.ts +0 -4
- package/dist/__tests__/setup.d.ts.map +0 -1
- package/dist/__tests__/setup.js +0 -25
- package/dist/__tests__/setup.js.map +0 -1
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Demo company for agency prospects — the killer sales tool
|
|
4
|
+
*
|
|
5
|
+
* solid demo create plumber "Joe's Plumbing" → Live demo with AI
|
|
6
|
+
* solid demo create plumber "Joe's" --expires 72h → Auto-destroys after 72h
|
|
7
|
+
* solid demo list → Active demos
|
|
8
|
+
* solid demo convert <id> --tier starter → Convert demo to paid
|
|
9
|
+
* solid demo delete <id> → Clean up
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
44
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
45
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
46
|
+
};
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.demoCommand = void 0;
|
|
49
|
+
const commander_1 = require("commander");
|
|
50
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
51
|
+
const config_1 = require("../lib/config");
|
|
52
|
+
const api_client_1 = require("../lib/api-client");
|
|
53
|
+
const ui_1 = require("../lib/ui");
|
|
54
|
+
exports.demoCommand = new commander_1.Command('demo')
|
|
55
|
+
.description('Create live demo companies for prospects — AI answers the phone');
|
|
56
|
+
// ── Create demo ──────────────────────────────────────────────────
|
|
57
|
+
exports.demoCommand
|
|
58
|
+
.command('create <template> <name>')
|
|
59
|
+
.description('Spin up a live demo with AI agents and a real phone number')
|
|
60
|
+
.option('--expires <duration>', 'Auto-destroy after duration (e.g., 72h, 7d)', '72h')
|
|
61
|
+
.option('--password <pass>', 'Set a demo login password')
|
|
62
|
+
.option('--open', 'Open in browser after creation')
|
|
63
|
+
.action(async (template, name, options) => {
|
|
64
|
+
if (!config_1.config.isLoggedIn()) {
|
|
65
|
+
console.error(chalk_1.default.red('Not logged in. Run `solid auth login` first.'));
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
const ora = (await Promise.resolve().then(() => __importStar(require('ora')))).default;
|
|
69
|
+
const originalCompanyId = config_1.config.companyId;
|
|
70
|
+
console.log('');
|
|
71
|
+
console.log(ui_1.ui.header(`Creating Demo — ${name}`));
|
|
72
|
+
console.log('');
|
|
73
|
+
const spinner = ora('Provisioning company...').start();
|
|
74
|
+
try {
|
|
75
|
+
// Step 1: Create company
|
|
76
|
+
const createRes = await api_client_1.apiClient.companyCreate(name);
|
|
77
|
+
const company = createRes.data.company || createRes.data;
|
|
78
|
+
const companyId = company.id || company.company_id;
|
|
79
|
+
const slug = company.slug || name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
|
|
80
|
+
// Step 2: Switch and apply template
|
|
81
|
+
spinner.text = 'Applying industry template...';
|
|
82
|
+
await api_client_1.apiClient.companySwitch(companyId);
|
|
83
|
+
await api_client_1.apiClient.templateClone(template);
|
|
84
|
+
// Step 3: Configure demo mode + auto-provision phone via backend
|
|
85
|
+
spinner.text = 'Setting up demo (provisioning AI phone)...';
|
|
86
|
+
const expiresHours = parseExpires(options.expires);
|
|
87
|
+
const expiresAt = new Date(Date.now() + expiresHours * 60 * 60 * 1000);
|
|
88
|
+
let phoneNumber = null;
|
|
89
|
+
try {
|
|
90
|
+
const demoRes = await api_client_1.apiClient.post(`/api/v1/cli/companies/${companyId}/demo-setup`);
|
|
91
|
+
const demoData = demoRes.data;
|
|
92
|
+
if (demoData.phone?.phone_number) {
|
|
93
|
+
phoneNumber = demoData.phone.phone_number;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// Demo setup endpoint may not exist yet — fall back to checking existing phones
|
|
98
|
+
try {
|
|
99
|
+
const phoneRes = await api_client_1.apiClient.get('/api/v1/phone-numbers');
|
|
100
|
+
const phones = phoneRes.data.phone_numbers || [];
|
|
101
|
+
if (phones.length > 0) {
|
|
102
|
+
phoneNumber = phones[0].number || phones[0].phone_number;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
// No phone — demo still works, just without voice AI
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Switch back to original company
|
|
110
|
+
if (originalCompanyId && originalCompanyId !== companyId) {
|
|
111
|
+
await api_client_1.apiClient.companySwitch(originalCompanyId).catch(() => { });
|
|
112
|
+
config_1.config.companyId = originalCompanyId;
|
|
113
|
+
}
|
|
114
|
+
spinner.succeed(chalk_1.default.green('Demo ready'));
|
|
115
|
+
console.log('');
|
|
116
|
+
console.log(` ${chalk_1.default.bold('Company ID:')} ${companyId}`);
|
|
117
|
+
console.log(` ${chalk_1.default.bold('Template:')} ${template}`);
|
|
118
|
+
console.log(` ${chalk_1.default.bold('URL:')} ${chalk_1.default.cyan(`https://${slug}.solidnumber.com`)}`);
|
|
119
|
+
if (phoneNumber) {
|
|
120
|
+
console.log(` ${chalk_1.default.bold('AI Phone:')} ${chalk_1.default.green(phoneNumber)} ${chalk_1.default.dim('— call it live')}`);
|
|
121
|
+
}
|
|
122
|
+
console.log(` ${chalk_1.default.bold('Password:')} ${options.password || chalk_1.default.dim('(auto-generated)')}`);
|
|
123
|
+
console.log(` ${chalk_1.default.bold('Expires:')} ${expiresAt.toLocaleDateString()} ${expiresAt.toLocaleTimeString()} ${chalk_1.default.dim(`(${options.expires})`)}`);
|
|
124
|
+
console.log('');
|
|
125
|
+
console.log(chalk_1.default.dim(' Share the URL with your prospect.'));
|
|
126
|
+
if (phoneNumber) {
|
|
127
|
+
console.log(chalk_1.default.dim(' Have them call the number — AI answers as their business.'));
|
|
128
|
+
}
|
|
129
|
+
console.log('');
|
|
130
|
+
console.log(` ${chalk_1.default.dim('Convert to paid:')} ${chalk_1.default.cyan(`solid demo convert ${companyId} --tier starter`)}`);
|
|
131
|
+
console.log(` ${chalk_1.default.dim('Clean up:')} ${chalk_1.default.cyan(`solid demo delete ${companyId}`)}`);
|
|
132
|
+
console.log('');
|
|
133
|
+
if (options.open) {
|
|
134
|
+
const { exec } = await Promise.resolve().then(() => __importStar(require('child_process')));
|
|
135
|
+
exec(`open "https://${slug}.solidnumber.com"`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
spinner.fail(chalk_1.default.red('Failed to create demo'));
|
|
140
|
+
console.error((0, api_client_1.handleApiError)(error).message);
|
|
141
|
+
// Restore original company
|
|
142
|
+
if (originalCompanyId) {
|
|
143
|
+
await api_client_1.apiClient.companySwitch(originalCompanyId).catch(() => { });
|
|
144
|
+
config_1.config.companyId = originalCompanyId;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
// ── Convert demo to paid ─────────────────────────────────────────
|
|
149
|
+
exports.demoCommand
|
|
150
|
+
.command('convert <companyId>')
|
|
151
|
+
.description('Convert a demo to a paid company')
|
|
152
|
+
.option('--tier <tier>', 'Subscription tier (starter, builder, professional, enterprise)', 'starter')
|
|
153
|
+
.action(async (companyId, options) => {
|
|
154
|
+
if (!config_1.config.isLoggedIn()) {
|
|
155
|
+
console.error(chalk_1.default.red('Not logged in. Run `solid auth login` first.'));
|
|
156
|
+
process.exit(1);
|
|
157
|
+
}
|
|
158
|
+
const ora = (await Promise.resolve().then(() => __importStar(require('ora')))).default;
|
|
159
|
+
const spinner = ora(`Converting company ${companyId} to ${options.tier}...`).start();
|
|
160
|
+
try {
|
|
161
|
+
// Generate a checkout link for the company
|
|
162
|
+
const res = await api_client_1.apiClient.post('/api/v1/billing/checkout-link', {
|
|
163
|
+
company_id: parseInt(companyId),
|
|
164
|
+
tier: options.tier,
|
|
165
|
+
});
|
|
166
|
+
const data = res.data;
|
|
167
|
+
const checkoutUrl = data.url || data.checkout_url;
|
|
168
|
+
if (checkoutUrl) {
|
|
169
|
+
spinner.succeed(chalk_1.default.green('Checkout link generated'));
|
|
170
|
+
console.log('');
|
|
171
|
+
console.log(` ${chalk_1.default.bold('Tier:')} ${options.tier}`);
|
|
172
|
+
console.log(` ${chalk_1.default.bold('Checkout:')} ${chalk_1.default.cyan(checkoutUrl)}`);
|
|
173
|
+
console.log('');
|
|
174
|
+
console.log(chalk_1.default.dim(' Send this link to the client to complete payment.'));
|
|
175
|
+
console.log(chalk_1.default.dim(' Once paid, demo restrictions are removed automatically.'));
|
|
176
|
+
console.log('');
|
|
177
|
+
// Try to open in browser
|
|
178
|
+
const { exec } = await Promise.resolve().then(() => __importStar(require('child_process')));
|
|
179
|
+
exec(`open "${checkoutUrl}"`);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
spinner.succeed(chalk_1.default.green('Company converted'));
|
|
183
|
+
console.log(chalk_1.default.dim(' Demo mode disabled. Company is now active.'));
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
spinner.fail(chalk_1.default.red('Failed to convert'));
|
|
188
|
+
console.error((0, api_client_1.handleApiError)(error).message);
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
// ── List demos ───────────────────────────────────────────────────
|
|
192
|
+
exports.demoCommand
|
|
193
|
+
.command('list')
|
|
194
|
+
.description('List all companies (find your demos)')
|
|
195
|
+
.action(async () => {
|
|
196
|
+
if (!config_1.config.isLoggedIn()) {
|
|
197
|
+
console.error(chalk_1.default.red('Not logged in. Run `solid auth login` first.'));
|
|
198
|
+
process.exit(1);
|
|
199
|
+
}
|
|
200
|
+
const ora = (await Promise.resolve().then(() => __importStar(require('ora')))).default;
|
|
201
|
+
const spinner = ora('Loading companies...').start();
|
|
202
|
+
try {
|
|
203
|
+
const res = await api_client_1.apiClient.companiesList();
|
|
204
|
+
const companies = res.data.companies || [];
|
|
205
|
+
spinner.stop();
|
|
206
|
+
console.log('');
|
|
207
|
+
console.log(ui_1.ui.header(`${companies.length} Companies`));
|
|
208
|
+
console.log('');
|
|
209
|
+
for (const c of companies) {
|
|
210
|
+
const isActive = c.id === config_1.config.companyId;
|
|
211
|
+
const marker = isActive ? chalk_1.default.green('● ') : ' ';
|
|
212
|
+
console.log(`${marker}${chalk_1.default.bold(c.name)} ${chalk_1.default.dim('ID:' + c.id)} ${chalk_1.default.dim(c.role)}`);
|
|
213
|
+
}
|
|
214
|
+
console.log('');
|
|
215
|
+
console.log(chalk_1.default.dim(' Convert: solid demo convert <id> --tier starter'));
|
|
216
|
+
console.log(chalk_1.default.dim(' Delete: solid demo delete <id>'));
|
|
217
|
+
console.log('');
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
spinner.fail(chalk_1.default.red('Failed'));
|
|
221
|
+
console.error((0, api_client_1.handleApiError)(error).message);
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
// ── Delete demo ──────────────────────────────────────────────────
|
|
225
|
+
exports.demoCommand
|
|
226
|
+
.command('delete <companyId>')
|
|
227
|
+
.description('Delete a demo company')
|
|
228
|
+
.action(async (companyId) => {
|
|
229
|
+
if (!config_1.config.isLoggedIn()) {
|
|
230
|
+
console.error(chalk_1.default.red('Not logged in. Run `solid auth login` first.'));
|
|
231
|
+
process.exit(1);
|
|
232
|
+
}
|
|
233
|
+
const ora = (await Promise.resolve().then(() => __importStar(require('ora')))).default;
|
|
234
|
+
const spinner = ora(`Deleting company ${companyId}...`).start();
|
|
235
|
+
try {
|
|
236
|
+
await api_client_1.apiClient.delete(`/api/v1/cli/companies/${companyId}`);
|
|
237
|
+
spinner.succeed(chalk_1.default.green(`Company ${companyId} deleted`));
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
spinner.fail(chalk_1.default.red('Failed to delete'));
|
|
241
|
+
console.error((0, api_client_1.handleApiError)(error).message);
|
|
242
|
+
console.log(chalk_1.default.dim(' Note: Only demo/test companies can be deleted via CLI.'));
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
// ── Helpers ──────────────────────────────────────────────────────
|
|
246
|
+
function parseExpires(duration) {
|
|
247
|
+
const match = duration.match(/^(\d+)(h|d|w)$/);
|
|
248
|
+
if (!match)
|
|
249
|
+
return 72; // default 72 hours
|
|
250
|
+
const [, num, unit] = match;
|
|
251
|
+
const n = parseInt(num);
|
|
252
|
+
if (unit === 'h')
|
|
253
|
+
return n;
|
|
254
|
+
if (unit === 'd')
|
|
255
|
+
return n * 24;
|
|
256
|
+
if (unit === 'w')
|
|
257
|
+
return n * 24 * 7;
|
|
258
|
+
return 72;
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=demo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo.js","sourceRoot":"","sources":["../../src/commands/demo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project scaffolding — build apps on Solid# infrastructure
|
|
3
|
+
*
|
|
4
|
+
* solid init my-app → Interactive setup
|
|
5
|
+
* solid init my-app --type marketplace → Marketplace template
|
|
6
|
+
* solid init my-app --type saas → SaaS starter
|
|
7
|
+
* solid init my-app --type agency-dashboard → Agency management tool
|
|
8
|
+
*/
|
|
9
|
+
import { Command } from 'commander';
|
|
10
|
+
export declare const initCommand: Command;
|
|
11
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyPpC,eAAO,MAAM,WAAW,SA4FpB,CAAC"}
|
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Project scaffolding — build apps on Solid# infrastructure
|
|
4
|
+
*
|
|
5
|
+
* solid init my-app → Interactive setup
|
|
6
|
+
* solid init my-app --type marketplace → Marketplace template
|
|
7
|
+
* solid init my-app --type saas → SaaS starter
|
|
8
|
+
* solid init my-app --type agency-dashboard → Agency management tool
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
43
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
44
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
45
|
+
};
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
exports.initCommand = void 0;
|
|
48
|
+
const commander_1 = require("commander");
|
|
49
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
50
|
+
const fs = __importStar(require("fs"));
|
|
51
|
+
const path = __importStar(require("path"));
|
|
52
|
+
const config_1 = require("../lib/config");
|
|
53
|
+
const ui_1 = require("../lib/ui");
|
|
54
|
+
const APP_TYPES = {
|
|
55
|
+
basic: {
|
|
56
|
+
name: 'Basic App',
|
|
57
|
+
description: 'Simple app connected to Solid# API',
|
|
58
|
+
files: {
|
|
59
|
+
'package.json': JSON.stringify({
|
|
60
|
+
name: '{{name}}',
|
|
61
|
+
version: '0.1.0',
|
|
62
|
+
scripts: { start: 'node index.js', dev: 'node --watch index.js' },
|
|
63
|
+
dependencies: { '@solidnumber/sdk': '^1.0.0' },
|
|
64
|
+
}, null, 2),
|
|
65
|
+
'index.js': `const { SolidClient } = require('@solidnumber/sdk');
|
|
66
|
+
|
|
67
|
+
const solid = new SolidClient({
|
|
68
|
+
apiKey: process.env.SOLID_API_KEY,
|
|
69
|
+
companyId: process.env.SOLID_COMPANY_ID ? parseInt(process.env.SOLID_COMPANY_ID) : undefined,
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
async function main() {
|
|
73
|
+
// Your app starts here
|
|
74
|
+
const health = await solid.health.check();
|
|
75
|
+
console.log('Connected to Solid#:', health.data.status);
|
|
76
|
+
|
|
77
|
+
const contacts = await solid.crm.contacts();
|
|
78
|
+
console.log('Contacts:', contacts.data);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
main().catch(console.error);
|
|
82
|
+
`,
|
|
83
|
+
'.env.example': `SOLID_API_KEY=sk_solid_your_key_here
|
|
84
|
+
SOLID_COMPANY_ID=
|
|
85
|
+
`,
|
|
86
|
+
'README.md': `# {{name}}
|
|
87
|
+
|
|
88
|
+
Built on [Solid#](https://solidnumber.com) infrastructure.
|
|
89
|
+
|
|
90
|
+
## Setup
|
|
91
|
+
|
|
92
|
+
1. \`npm install\`
|
|
93
|
+
2. Copy \`.env.example\` to \`.env\` and add your API key
|
|
94
|
+
3. \`npm start\`
|
|
95
|
+
|
|
96
|
+
## Get your API key
|
|
97
|
+
|
|
98
|
+
\`\`\`bash
|
|
99
|
+
solid auth login
|
|
100
|
+
solid auth token create -n "{{name}}" -s "crm:read,pages:read,kb:read"
|
|
101
|
+
\`\`\`
|
|
102
|
+
`,
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
marketplace: {
|
|
106
|
+
name: 'Multi-Vendor Marketplace',
|
|
107
|
+
description: 'Each vendor is a Solid# company with AI agents',
|
|
108
|
+
files: {
|
|
109
|
+
'package.json': JSON.stringify({
|
|
110
|
+
name: '{{name}}',
|
|
111
|
+
version: '0.1.0',
|
|
112
|
+
scripts: { start: 'node server.js', dev: 'node --watch server.js' },
|
|
113
|
+
dependencies: { '@solidnumber/sdk': '^1.0.0', express: '^4.18.0' },
|
|
114
|
+
}, null, 2),
|
|
115
|
+
'server.js': `const express = require('express');
|
|
116
|
+
const { SolidClient } = require('@solidnumber/sdk');
|
|
117
|
+
|
|
118
|
+
const app = express();
|
|
119
|
+
const solid = new SolidClient({ apiKey: process.env.SOLID_API_KEY });
|
|
120
|
+
|
|
121
|
+
// List all vendor companies
|
|
122
|
+
app.get('/vendors', async (req, res) => {
|
|
123
|
+
const companies = await solid.companies.list();
|
|
124
|
+
res.json(companies.data);
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
// Vendor storefront — switch company context per request
|
|
128
|
+
app.get('/vendor/:companyId/products', async (req, res) => {
|
|
129
|
+
solid.switchCompany(parseInt(req.params.companyId));
|
|
130
|
+
const services = await solid.services.list();
|
|
131
|
+
res.json(services.data);
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
// Vendor AI chat
|
|
135
|
+
app.post('/vendor/:companyId/chat', express.json(), async (req, res) => {
|
|
136
|
+
solid.switchCompany(parseInt(req.params.companyId));
|
|
137
|
+
const reply = await solid.agents.chat('sarah', req.body.message);
|
|
138
|
+
res.json(reply.data);
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
app.listen(3000, () => console.log('Marketplace running on :3000'));
|
|
142
|
+
`,
|
|
143
|
+
'.env.example': `SOLID_API_KEY=sk_solid_your_key_here
|
|
144
|
+
`,
|
|
145
|
+
'README.md': `# {{name}} — Multi-Vendor Marketplace
|
|
146
|
+
|
|
147
|
+
Each vendor is a Solid# company with their own AI agents, CRM, and services.
|
|
148
|
+
|
|
149
|
+
## Architecture
|
|
150
|
+
- Each vendor = one Solid# company (created via \`solid company create\`)
|
|
151
|
+
- Vendor onboarding = \`solid clone <template> --company "Vendor Name"\`
|
|
152
|
+
- Each vendor gets AI agents, CRM, booking, payments
|
|
153
|
+
- Your app is the frontend connecting them all
|
|
154
|
+
|
|
155
|
+
## Setup
|
|
156
|
+
1. \`npm install\`
|
|
157
|
+
2. Set \`SOLID_API_KEY\` in \`.env\`
|
|
158
|
+
3. \`npm start\`
|
|
159
|
+
`,
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
saas: {
|
|
163
|
+
name: 'SaaS Starter',
|
|
164
|
+
description: 'Multi-tenant SaaS with Solid# backend',
|
|
165
|
+
files: {
|
|
166
|
+
'package.json': JSON.stringify({
|
|
167
|
+
name: '{{name}}',
|
|
168
|
+
version: '0.1.0',
|
|
169
|
+
scripts: { start: 'node server.js', dev: 'node --watch server.js' },
|
|
170
|
+
dependencies: { '@solidnumber/sdk': '^1.0.0', express: '^4.18.0' },
|
|
171
|
+
}, null, 2),
|
|
172
|
+
'server.js': `const express = require('express');
|
|
173
|
+
const { SolidClient } = require('@solidnumber/sdk');
|
|
174
|
+
|
|
175
|
+
const app = express();
|
|
176
|
+
app.use(express.json());
|
|
177
|
+
|
|
178
|
+
// Each customer = a Solid# company
|
|
179
|
+
// Your SaaS manages the companies, Solid# handles everything else
|
|
180
|
+
|
|
181
|
+
const admin = new SolidClient({ apiKey: process.env.SOLID_API_KEY });
|
|
182
|
+
|
|
183
|
+
// Onboard new customer
|
|
184
|
+
app.post('/signup', async (req, res) => {
|
|
185
|
+
const { businessName, industry } = req.body;
|
|
186
|
+
|
|
187
|
+
// Create company on Solid#
|
|
188
|
+
const company = await admin.companies.create(businessName, industry);
|
|
189
|
+
const companyId = company.data.company.id;
|
|
190
|
+
|
|
191
|
+
// Apply industry template
|
|
192
|
+
admin.switchCompany(companyId);
|
|
193
|
+
await admin.templates.clone(industry);
|
|
194
|
+
|
|
195
|
+
res.json({
|
|
196
|
+
companyId,
|
|
197
|
+
message: 'Business created with AI agents, website, CRM, and more',
|
|
198
|
+
dashboard: \`https://app.solidnumber.com/dashboard\`,
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
// Customer dashboard data
|
|
203
|
+
app.get('/customer/:id/dashboard', async (req, res) => {
|
|
204
|
+
admin.switchCompany(parseInt(req.params.id));
|
|
205
|
+
const [contacts, pages, agents] = await Promise.all([
|
|
206
|
+
admin.crm.contacts(),
|
|
207
|
+
admin.pages.list(),
|
|
208
|
+
admin.agents.list(),
|
|
209
|
+
]);
|
|
210
|
+
res.json({ contacts: contacts.data, pages: pages.data, agents: agents.data });
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
app.listen(3000, () => console.log('SaaS running on :3000'));
|
|
214
|
+
`,
|
|
215
|
+
'.env.example': `SOLID_API_KEY=sk_solid_your_key_here
|
|
216
|
+
`,
|
|
217
|
+
'README.md': `# {{name}} — SaaS on Solid#
|
|
218
|
+
|
|
219
|
+
Multi-tenant SaaS where each customer gets a full AI-powered business.
|
|
220
|
+
|
|
221
|
+
## How it works
|
|
222
|
+
- \`POST /signup\` creates a Solid# company + applies industry template
|
|
223
|
+
- Each customer gets: AI agents, CRM, website, booking, payments
|
|
224
|
+
- You build the custom UI, Solid# handles the infrastructure
|
|
225
|
+
|
|
226
|
+
## What you DON'T have to build
|
|
227
|
+
- Auth & multi-tenancy (530 tables with RLS)
|
|
228
|
+
- Payment processing (Stripe wired)
|
|
229
|
+
- AI agents (116 agents, SmartRouter, CognitiveLimiter)
|
|
230
|
+
- CRM, voice AI, website builder, SEO
|
|
231
|
+
`,
|
|
232
|
+
},
|
|
233
|
+
},
|
|
234
|
+
'agency-dashboard': {
|
|
235
|
+
name: 'Agency Dashboard',
|
|
236
|
+
description: 'Manage all client companies from one interface',
|
|
237
|
+
files: {
|
|
238
|
+
'package.json': JSON.stringify({
|
|
239
|
+
name: '{{name}}',
|
|
240
|
+
version: '0.1.0',
|
|
241
|
+
scripts: { start: 'node server.js', dev: 'node --watch server.js' },
|
|
242
|
+
dependencies: { '@solidnumber/sdk': '^1.0.0', express: '^4.18.0' },
|
|
243
|
+
}, null, 2),
|
|
244
|
+
'server.js': `const express = require('express');
|
|
245
|
+
const { SolidClient } = require('@solidnumber/sdk');
|
|
246
|
+
|
|
247
|
+
const app = express();
|
|
248
|
+
const solid = new SolidClient({ apiKey: process.env.SOLID_API_KEY });
|
|
249
|
+
|
|
250
|
+
// All clients overview
|
|
251
|
+
app.get('/clients', async (req, res) => {
|
|
252
|
+
const companies = await solid.companies.list();
|
|
253
|
+
res.json(companies.data);
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
// Client health check
|
|
257
|
+
app.get('/clients/:id/health', async (req, res) => {
|
|
258
|
+
solid.switchCompany(parseInt(req.params.id));
|
|
259
|
+
const [health, agents] = await Promise.all([
|
|
260
|
+
solid.health.check(),
|
|
261
|
+
solid.agents.list(),
|
|
262
|
+
]);
|
|
263
|
+
res.json({ health: health.data, agents: agents.data });
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
// Bulk KB update across all clients
|
|
267
|
+
app.post('/bulk/kb', express.json(), async (req, res) => {
|
|
268
|
+
const companies = await solid.companies.list();
|
|
269
|
+
const results = [];
|
|
270
|
+
for (const c of companies.data.companies) {
|
|
271
|
+
solid.switchCompany(c.id);
|
|
272
|
+
const result = await solid.kb.create(req.body).catch(e => ({ error: e.message }));
|
|
273
|
+
results.push({ company: c.name, result });
|
|
274
|
+
}
|
|
275
|
+
res.json(results);
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
app.listen(3000, () => console.log('Agency dashboard on :3000'));
|
|
279
|
+
`,
|
|
280
|
+
'.env.example': `SOLID_API_KEY=sk_solid_your_key_here
|
|
281
|
+
`,
|
|
282
|
+
'README.md': `# {{name}} — Agency Dashboard
|
|
283
|
+
|
|
284
|
+
Manage all your Solid# client companies from one place.
|
|
285
|
+
|
|
286
|
+
## Features
|
|
287
|
+
- View all clients at a glance
|
|
288
|
+
- Per-client health monitoring
|
|
289
|
+
- Bulk KB updates across all clients
|
|
290
|
+
- Revenue tracking per client
|
|
291
|
+
`,
|
|
292
|
+
},
|
|
293
|
+
},
|
|
294
|
+
};
|
|
295
|
+
exports.initCommand = new commander_1.Command('init')
|
|
296
|
+
.description('Scaffold a new app on Solid# infrastructure')
|
|
297
|
+
.argument('<name>', 'Project name')
|
|
298
|
+
.option('-t, --type <type>', 'App type (basic, marketplace, saas, agency-dashboard)', 'basic')
|
|
299
|
+
.option('--list', 'List available app types')
|
|
300
|
+
.action(async (name, options) => {
|
|
301
|
+
if (options.list) {
|
|
302
|
+
console.log('');
|
|
303
|
+
console.log(ui_1.ui.header('App Templates'));
|
|
304
|
+
console.log('');
|
|
305
|
+
for (const [key, tmpl] of Object.entries(APP_TYPES)) {
|
|
306
|
+
console.log(` ${chalk_1.default.bold.cyan(key.padEnd(20))} ${tmpl.name}`);
|
|
307
|
+
console.log(` ${' '.repeat(20)} ${chalk_1.default.dim(tmpl.description)}`);
|
|
308
|
+
}
|
|
309
|
+
console.log('');
|
|
310
|
+
console.log(chalk_1.default.dim(' Usage: solid init my-app --type marketplace'));
|
|
311
|
+
console.log('');
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
const appType = APP_TYPES[options.type];
|
|
315
|
+
if (!appType) {
|
|
316
|
+
console.error(chalk_1.default.red(`Unknown type: ${options.type}`));
|
|
317
|
+
console.log(chalk_1.default.dim(` Available: ${Object.keys(APP_TYPES).join(', ')}`));
|
|
318
|
+
process.exit(1);
|
|
319
|
+
}
|
|
320
|
+
const projectDir = path.resolve(name);
|
|
321
|
+
if (fs.existsSync(projectDir)) {
|
|
322
|
+
console.error(chalk_1.default.red(`Directory already exists: ${projectDir}`));
|
|
323
|
+
process.exit(1);
|
|
324
|
+
}
|
|
325
|
+
const ora = (await Promise.resolve().then(() => __importStar(require('ora')))).default;
|
|
326
|
+
const spinner = ora(`Scaffolding ${appType.name}...`).start();
|
|
327
|
+
fs.mkdirSync(projectDir, { recursive: true });
|
|
328
|
+
for (const [filename, content] of Object.entries(appType.files)) {
|
|
329
|
+
const filePath = path.join(projectDir, filename);
|
|
330
|
+
const rendered = content.replace(/\{\{name\}\}/g, name);
|
|
331
|
+
fs.writeFileSync(filePath, rendered);
|
|
332
|
+
}
|
|
333
|
+
// Copy .gitignore
|
|
334
|
+
fs.writeFileSync(path.join(projectDir, '.gitignore'), 'node_modules/\n.env\ndist/\n');
|
|
335
|
+
// Generate CLAUDE.md for AI context
|
|
336
|
+
const claudeMd = `# ${name}
|
|
337
|
+
|
|
338
|
+
Built on [Solid#](https://solidnumber.com) infrastructure.
|
|
339
|
+
|
|
340
|
+
## Architecture
|
|
341
|
+
- Backend: Solid# API (${config_1.config.apiUrl || 'https://api.solidnumber.com'})
|
|
342
|
+
- SDK: @solidnumber/sdk
|
|
343
|
+
- Type: ${appType.name}
|
|
344
|
+
|
|
345
|
+
## API Key
|
|
346
|
+
Set \`SOLID_API_KEY\` in \`.env\`. Create one with:
|
|
347
|
+
\`\`\`bash
|
|
348
|
+
solid auth token create -n "${name}" -s "crm:read,pages:read,kb:read,agents:read"
|
|
349
|
+
\`\`\`
|
|
350
|
+
|
|
351
|
+
## Solid# Resources
|
|
352
|
+
- API Docs: https://solidnumber.com/docs/api
|
|
353
|
+
- SDK Docs: https://solidnumber.com/docs/sdks
|
|
354
|
+
- CLI: npm i -g @solidnumber/cli
|
|
355
|
+
`;
|
|
356
|
+
fs.writeFileSync(path.join(projectDir, 'CLAUDE.md'), claudeMd);
|
|
357
|
+
spinner.succeed(chalk_1.default.green(`${appType.name} scaffolded`));
|
|
358
|
+
console.log('');
|
|
359
|
+
console.log(` ${chalk_1.default.bold('Project:')} ${name}`);
|
|
360
|
+
console.log(` ${chalk_1.default.bold('Type:')} ${appType.name}`);
|
|
361
|
+
console.log(` ${chalk_1.default.bold('Path:')} ${projectDir}`);
|
|
362
|
+
console.log('');
|
|
363
|
+
const files = Object.keys(appType.files);
|
|
364
|
+
for (const f of files) {
|
|
365
|
+
console.log(chalk_1.default.dim(` ${f}`));
|
|
366
|
+
}
|
|
367
|
+
console.log(chalk_1.default.dim(' .gitignore'));
|
|
368
|
+
console.log(chalk_1.default.dim(' CLAUDE.md'));
|
|
369
|
+
console.log('');
|
|
370
|
+
console.log(chalk_1.default.bold(' Next steps:'));
|
|
371
|
+
console.log(` ${chalk_1.default.cyan(`cd ${name}`)}`);
|
|
372
|
+
console.log(` ${chalk_1.default.cyan('npm install')}`);
|
|
373
|
+
console.log(` ${chalk_1.default.cyan('cp .env.example .env')} ${chalk_1.default.dim('← add your API key')}`);
|
|
374
|
+
console.log(` ${chalk_1.default.cyan('npm start')}`);
|
|
375
|
+
console.log('');
|
|
376
|
+
});
|
|
377
|
+
//# sourceMappingURL=init.js.map
|