@solidnumber/cli 1.4.1 → 1.4.3

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 (39) hide show
  1. package/README.md +28 -0
  2. package/dist/commands/accounting.d.ts +6 -0
  3. package/dist/commands/accounting.d.ts.map +1 -0
  4. package/dist/commands/accounting.js +147 -0
  5. package/dist/commands/accounting.js.map +1 -0
  6. package/dist/commands/audit.d.ts +3 -0
  7. package/dist/commands/audit.d.ts.map +1 -0
  8. package/dist/commands/audit.js +93 -0
  9. package/dist/commands/audit.js.map +1 -0
  10. package/dist/commands/billing.d.ts +3 -0
  11. package/dist/commands/billing.d.ts.map +1 -0
  12. package/dist/commands/billing.js +153 -0
  13. package/dist/commands/billing.js.map +1 -0
  14. package/dist/commands/docs.d.ts.map +1 -1
  15. package/dist/commands/docs.js +69 -0
  16. package/dist/commands/docs.js.map +1 -1
  17. package/dist/commands/domains.d.ts +3 -0
  18. package/dist/commands/domains.d.ts.map +1 -0
  19. package/dist/commands/domains.js +150 -0
  20. package/dist/commands/domains.js.map +1 -0
  21. package/dist/commands/export.d.ts +6 -0
  22. package/dist/commands/export.d.ts.map +1 -0
  23. package/dist/commands/export.js +145 -0
  24. package/dist/commands/export.js.map +1 -0
  25. package/dist/commands/notifications.d.ts +3 -0
  26. package/dist/commands/notifications.d.ts.map +1 -0
  27. package/dist/commands/notifications.js +105 -0
  28. package/dist/commands/notifications.js.map +1 -0
  29. package/dist/commands/support.d.ts +6 -0
  30. package/dist/commands/support.d.ts.map +1 -0
  31. package/dist/commands/support.js +127 -0
  32. package/dist/commands/support.js.map +1 -0
  33. package/dist/commands/webhooks.d.ts +6 -0
  34. package/dist/commands/webhooks.d.ts.map +1 -0
  35. package/dist/commands/webhooks.js +129 -0
  36. package/dist/commands/webhooks.js.map +1 -0
  37. package/dist/index.js +17 -0
  38. package/dist/index.js.map +1 -1
  39. package/package.json +1 -1
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.domainsCommand = void 0;
40
+ const commander_1 = require("commander");
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const config_1 = require("../lib/config");
43
+ const api_client_1 = require("../lib/api-client");
44
+ const ui_1 = require("../lib/ui");
45
+ exports.domainsCommand = new commander_1.Command('domains')
46
+ .description('Custom domain management')
47
+ .action(async () => { exports.domainsCommand.outputHelp(); });
48
+ exports.domainsCommand.command('list').description('List configured domains')
49
+ .option('--json', 'JSON output')
50
+ .action(async (options) => {
51
+ if (!config_1.config.isLoggedIn()) {
52
+ console.error(chalk_1.default.red('Not logged in.'));
53
+ process.exit(1);
54
+ }
55
+ const ora = (await Promise.resolve().then(() => __importStar(require('ora')))).default;
56
+ const spinner = ora('Loading domains...').start();
57
+ try {
58
+ const res = await api_client_1.apiClient.get('/api/v1/domains');
59
+ spinner.stop();
60
+ if (options.json) {
61
+ console.log(JSON.stringify(res.data, null, 2));
62
+ return;
63
+ }
64
+ const domains = res.data.domains || res.data.items || [];
65
+ console.log('');
66
+ console.log(ui_1.ui.header(`Domains (${domains.length})`));
67
+ if (domains.length === 0) {
68
+ console.log(chalk_1.default.dim(' No custom domains. Use `solid domains add <domain>` to connect one.'));
69
+ }
70
+ else {
71
+ for (const d of domains) {
72
+ const ssl = d.ssl_active ? chalk_1.default.green('SSL ✓') : chalk_1.default.yellow('SSL pending');
73
+ const primary = d.is_primary ? chalk_1.default.hex('#818cf8')(' [primary]') : '';
74
+ console.log(` ${chalk_1.default.bold(d.domain)}${primary} ${ssl}`);
75
+ }
76
+ }
77
+ console.log('');
78
+ }
79
+ catch (e) {
80
+ spinner.fail(chalk_1.default.red('Failed'));
81
+ console.error((0, api_client_1.handleApiError)(e).message);
82
+ }
83
+ });
84
+ exports.domainsCommand.command('add <domain>').description('Add a custom domain')
85
+ .action(async (domain) => {
86
+ if (!config_1.config.isLoggedIn()) {
87
+ console.error(chalk_1.default.red('Not logged in.'));
88
+ process.exit(1);
89
+ }
90
+ const ora = (await Promise.resolve().then(() => __importStar(require('ora')))).default;
91
+ const spinner = ora(`Adding ${domain}...`).start();
92
+ try {
93
+ const res = await api_client_1.apiClient.post('/api/v1/domains', { domain });
94
+ spinner.stop();
95
+ const d = res.data;
96
+ console.log('');
97
+ console.log(ui_1.ui.successBox('Domain Added', [
98
+ `${chalk_1.default.dim('Domain:')} ${domain}`,
99
+ '', chalk_1.default.dim('Add this CNAME record to your DNS:'),
100
+ ` ${chalk_1.default.cyan(d.cname_target || d.dns_target || '{slug}.solidnumber.com')}`,
101
+ ]));
102
+ console.log('');
103
+ }
104
+ catch (e) {
105
+ spinner.fail(chalk_1.default.red('Failed'));
106
+ console.error((0, api_client_1.handleApiError)(e).message);
107
+ }
108
+ });
109
+ exports.domainsCommand.command('remove <domain>').description('Remove a domain')
110
+ .action(async (domain) => {
111
+ if (!config_1.config.isLoggedIn()) {
112
+ console.error(chalk_1.default.red('Not logged in.'));
113
+ process.exit(1);
114
+ }
115
+ const ora = (await Promise.resolve().then(() => __importStar(require('ora')))).default;
116
+ const spinner = ora(`Removing ${domain}...`).start();
117
+ try {
118
+ await api_client_1.apiClient.delete('/api/v1/domains', { params: { domain } });
119
+ spinner.succeed(chalk_1.default.green(`${domain} removed`));
120
+ }
121
+ catch (e) {
122
+ spinner.fail(chalk_1.default.red('Failed'));
123
+ console.error((0, api_client_1.handleApiError)(e).message);
124
+ }
125
+ });
126
+ exports.domainsCommand.command('verify <domain>').description('Check DNS status')
127
+ .action(async (domain) => {
128
+ if (!config_1.config.isLoggedIn()) {
129
+ console.error(chalk_1.default.red('Not logged in.'));
130
+ process.exit(1);
131
+ }
132
+ const ora = (await Promise.resolve().then(() => __importStar(require('ora')))).default;
133
+ const spinner = ora(`Checking ${domain}...`).start();
134
+ try {
135
+ const res = await api_client_1.apiClient.get('/api/v1/domains/verify', { params: { domain } });
136
+ spinner.stop();
137
+ const d = res.data;
138
+ if (d.verified || d.dns_verified) {
139
+ console.log(chalk_1.default.green(` ✓ ${domain} — verified`));
140
+ }
141
+ else {
142
+ console.log(chalk_1.default.yellow(` ○ ${domain} — DNS not yet propagated`));
143
+ }
144
+ }
145
+ catch (e) {
146
+ spinner.fail(chalk_1.default.red('Failed'));
147
+ console.error((0, api_client_1.handleApiError)(e).message);
148
+ }
149
+ });
150
+ //# sourceMappingURL=domains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domains.js","sourceRoot":"","sources":["../../src/commands/domains.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Export command for Solid CLI — full company data export (backup, GDPR).
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare const exportCommand: Command;
6
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,aAAa,SA8DtB,CAAC"}
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.exportCommand = void 0;
40
+ /**
41
+ * Export command for Solid CLI — full company data export (backup, GDPR).
42
+ */
43
+ const commander_1 = require("commander");
44
+ const chalk_1 = __importDefault(require("chalk"));
45
+ const fs = __importStar(require("fs"));
46
+ const path = __importStar(require("path"));
47
+ const config_1 = require("../lib/config");
48
+ const api_client_1 = require("../lib/api-client");
49
+ const ui_1 = require("../lib/ui");
50
+ exports.exportCommand = new commander_1.Command('export')
51
+ .description('Export all company data (backup, GDPR)')
52
+ .option('-d, --dir <directory>', 'Output directory', '.')
53
+ .option('--contacts-only', 'Only export CRM contacts')
54
+ .action(async (options) => {
55
+ if (!config_1.config.isLoggedIn()) {
56
+ console.error(chalk_1.default.red('Not logged in.'));
57
+ process.exit(1);
58
+ }
59
+ const companyId = config_1.config.companyId;
60
+ if (!companyId) {
61
+ console.error(chalk_1.default.red('No company selected.'));
62
+ process.exit(1);
63
+ }
64
+ const ora = (await Promise.resolve().then(() => __importStar(require('ora')))).default;
65
+ const baseDir = path.resolve(options.dir);
66
+ const ts = new Date().toISOString().split('T')[0];
67
+ const exportDir = path.join(baseDir, `solid-export-${companyId}-${ts}`);
68
+ if (!fs.existsSync(exportDir))
69
+ fs.mkdirSync(exportDir, { recursive: true });
70
+ const spinner = ora('Exporting company data...').start();
71
+ let fileCount = 0;
72
+ try {
73
+ // Company info
74
+ spinner.text = 'Exporting company info...';
75
+ try {
76
+ const r = await api_client_1.apiClient.companyInfo();
77
+ fs.writeFileSync(path.join(exportDir, 'company.json'), JSON.stringify(r.data.company, null, 2));
78
+ fileCount++;
79
+ }
80
+ catch { /* skip */ }
81
+ if (!options.contactsOnly) {
82
+ // KB
83
+ spinner.text = 'Exporting knowledge base...';
84
+ try {
85
+ const r = await api_client_1.apiClient.kbSearch('', 100);
86
+ fs.writeFileSync(path.join(exportDir, 'knowledge-base.json'), JSON.stringify(r.data.results || [], null, 2));
87
+ fileCount++;
88
+ }
89
+ catch { /* skip */ }
90
+ // Pages
91
+ spinner.text = 'Exporting pages...';
92
+ try {
93
+ const r = await api_client_1.apiClient.pagesList();
94
+ fs.writeFileSync(path.join(exportDir, 'pages.json'), JSON.stringify(r.data.pages || [], null, 2));
95
+ fileCount++;
96
+ }
97
+ catch { /* skip */ }
98
+ // Services
99
+ spinner.text = 'Exporting services...';
100
+ try {
101
+ const r = await api_client_1.apiClient.servicesList();
102
+ fs.writeFileSync(path.join(exportDir, 'services.json'), JSON.stringify(r.data.items || [], null, 2));
103
+ fileCount++;
104
+ }
105
+ catch { /* skip */ }
106
+ // Products
107
+ spinner.text = 'Exporting products...';
108
+ try {
109
+ const r = await api_client_1.apiClient.productsList();
110
+ fs.writeFileSync(path.join(exportDir, 'products.json'), JSON.stringify(r.data.items || [], null, 2));
111
+ fileCount++;
112
+ }
113
+ catch { /* skip */ }
114
+ // Agents
115
+ spinner.text = 'Exporting agents...';
116
+ try {
117
+ const r = await api_client_1.apiClient.agentsList();
118
+ fs.writeFileSync(path.join(exportDir, 'agents.json'), JSON.stringify(r.data.agents || [], null, 2));
119
+ fileCount++;
120
+ }
121
+ catch { /* skip */ }
122
+ }
123
+ // Contacts
124
+ spinner.text = 'Exporting contacts...';
125
+ try {
126
+ const r = await api_client_1.apiClient.get('/api/v1/crm/contacts/export', { params: { format: 'json' } });
127
+ fs.writeFileSync(path.join(exportDir, 'contacts.json'), JSON.stringify(r.data, null, 2));
128
+ fileCount++;
129
+ }
130
+ catch { /* skip */ }
131
+ spinner.succeed(chalk_1.default.green(`Exported ${fileCount} files`));
132
+ console.log('');
133
+ console.log(ui_1.ui.successBox('Export Complete', [
134
+ `${chalk_1.default.dim('Company:')} ${companyId}`,
135
+ `${chalk_1.default.dim('Dir:')} ${exportDir}`,
136
+ `${chalk_1.default.dim('Files:')} ${fileCount}`,
137
+ ]));
138
+ console.log('');
139
+ }
140
+ catch (e) {
141
+ spinner.fail(chalk_1.default.red('Export failed'));
142
+ console.error((0, api_client_1.handleApiError)(e).message);
143
+ }
144
+ });
145
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;GAEG;AACH,yCAAoC;AACpC,kDAA0B;AAC1B,uCAAyB;AACzB,2CAA6B;AAC7B,0CAAuC;AACvC,kDAA8D;AAC9D,kCAA+B;AAElB,QAAA,aAAa,GAAG,IAAI,mBAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,uBAAuB,EAAE,kBAAkB,EAAE,GAAG,CAAC;KACxD,MAAM,CAAC,iBAAiB,EAAE,0BAA0B,CAAC;KACrD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC,eAAM,CAAC,UAAU,EAAE,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IAC1F,MAAM,SAAS,GAAG,eAAM,CAAC,SAAS,CAAC;IACnC,IAAI,CAAC,SAAS,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IAEtF,MAAM,GAAG,GAAG,CAAC,wDAAa,KAAK,GAAC,CAAC,CAAC,OAAO,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,SAAS,IAAI,EAAE,EAAE,CAAC,CAAC;IACxE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5E,MAAM,OAAO,GAAG,GAAG,CAAC,2BAA2B,CAAC,CAAC,KAAK,EAAE,CAAC;IACzD,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,IAAI,CAAC;QACH,eAAe;QACf,OAAO,CAAC,IAAI,GAAG,2BAA2B,CAAC;QAC3C,IAAI,CAAC;YAAC,MAAM,CAAC,GAAG,MAAM,sBAAS,CAAC,WAAW,EAAE,CAAC;YAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,SAAS,CAAE,CAAC,CAAC,IAAY,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAAC,SAAS,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;QAE5L,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YAC1B,KAAK;YACL,OAAO,CAAC,IAAI,GAAG,6BAA6B,CAAC;YAC7C,IAAI,CAAC;gBAAC,MAAM,CAAC,GAAG,MAAM,sBAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAE,CAAC,CAAC,IAAY,CAAC,OAAO,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAAC,SAAS,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;YAE7M,QAAQ;YACR,OAAO,CAAC,IAAI,GAAG,oBAAoB,CAAC;YACpC,IAAI,CAAC;gBAAC,MAAM,CAAC,GAAG,MAAM,sBAAS,CAAC,SAAS,EAAE,CAAC;gBAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,SAAS,CAAE,CAAC,CAAC,IAAY,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAAC,SAAS,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;YAE5L,WAAW;YACX,OAAO,CAAC,IAAI,GAAG,uBAAuB,CAAC;YACvC,IAAI,CAAC;gBAAC,MAAM,CAAC,GAAG,MAAM,sBAAS,CAAC,YAAY,EAAE,CAAC;gBAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAE,CAAC,CAAC,IAAY,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAAC,SAAS,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;YAElM,WAAW;YACX,OAAO,CAAC,IAAI,GAAG,uBAAuB,CAAC;YACvC,IAAI,CAAC;gBAAC,MAAM,CAAC,GAAG,MAAM,sBAAS,CAAC,YAAY,EAAE,CAAC;gBAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAE,CAAC,CAAC,IAAY,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAAC,SAAS,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;YAElM,SAAS;YACT,OAAO,CAAC,IAAI,GAAG,qBAAqB,CAAC;YACrC,IAAI,CAAC;gBAAC,MAAM,CAAC,GAAG,MAAM,sBAAS,CAAC,UAAU,EAAE,CAAC;gBAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,SAAS,CAAE,CAAC,CAAC,IAAY,CAAC,MAAM,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAAC,SAAS,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;QACjM,CAAC;QAED,WAAW;QACX,OAAO,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,sBAAS,CAAC,GAAG,CAAC,6BAA6B,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YAC7F,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACzF,SAAS,EAAE,CAAC;QACd,CAAC;QAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;QAEtB,OAAO,CAAC,OAAO,CAAC,eAAK,CAAC,KAAK,CAAC,YAAY,SAAS,QAAQ,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,OAAE,CAAC,UAAU,CAAC,iBAAiB,EAAE;YAC3C,GAAG,eAAK,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE;YACxC,GAAG,eAAK,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,SAAS,EAAE;YACxC,GAAG,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,SAAS,EAAE;SACzC,CAAC,CAAC,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,IAAA,2BAAc,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;AACrG,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const notificationsCommand: Command;
3
+ //# sourceMappingURL=notifications.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/commands/notifications.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,oBAAoB,SAE4B,CAAC"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.notificationsCommand = void 0;
40
+ const commander_1 = require("commander");
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const config_1 = require("../lib/config");
43
+ const api_client_1 = require("../lib/api-client");
44
+ const ui_1 = require("../lib/ui");
45
+ exports.notificationsCommand = new commander_1.Command('notifications')
46
+ .description('View and manage notifications')
47
+ .action(async () => { exports.notificationsCommand.outputHelp(); });
48
+ exports.notificationsCommand.command('list').description('List recent notifications')
49
+ .option('--unread', 'Only unread').option('--limit <n>', 'Count', '20').option('--json', 'JSON output')
50
+ .action(async (options) => {
51
+ if (!config_1.config.isLoggedIn()) {
52
+ console.error(chalk_1.default.red('Not logged in.'));
53
+ process.exit(1);
54
+ }
55
+ const ora = (await Promise.resolve().then(() => __importStar(require('ora')))).default;
56
+ const spinner = ora('Loading notifications...').start();
57
+ try {
58
+ const params = { limit: options.limit };
59
+ if (options.unread)
60
+ params.unread_only = true;
61
+ const res = await api_client_1.apiClient.get('/api/v1/notifications', { params });
62
+ spinner.stop();
63
+ if (options.json) {
64
+ console.log(JSON.stringify(res.data, null, 2));
65
+ return;
66
+ }
67
+ const items = res.data.notifications || res.data.items || [];
68
+ console.log('');
69
+ console.log(ui_1.ui.header(`Notifications (${items.length})`));
70
+ if (items.length === 0) {
71
+ console.log(chalk_1.default.dim(' No notifications.'));
72
+ }
73
+ else {
74
+ for (const n of items) {
75
+ const read = n.is_read ? chalk_1.default.dim('○') : chalk_1.default.blue('●');
76
+ console.log(` ${read} ${n.title || n.message}`);
77
+ if (n.created_at)
78
+ console.log(chalk_1.default.dim(` ${n.created_at}`));
79
+ }
80
+ }
81
+ console.log('');
82
+ }
83
+ catch (e) {
84
+ spinner.fail(chalk_1.default.red('Failed'));
85
+ console.error((0, api_client_1.handleApiError)(e).message);
86
+ }
87
+ });
88
+ exports.notificationsCommand.command('read-all').description('Mark all as read')
89
+ .action(async () => {
90
+ if (!config_1.config.isLoggedIn()) {
91
+ console.error(chalk_1.default.red('Not logged in.'));
92
+ process.exit(1);
93
+ }
94
+ const ora = (await Promise.resolve().then(() => __importStar(require('ora')))).default;
95
+ const spinner = ora('Marking all as read...').start();
96
+ try {
97
+ await api_client_1.apiClient.post('/api/v1/notifications/read-all');
98
+ spinner.succeed(chalk_1.default.green('All notifications marked as read'));
99
+ }
100
+ catch (e) {
101
+ spinner.fail(chalk_1.default.red('Failed'));
102
+ console.error((0, api_client_1.handleApiError)(e).message);
103
+ }
104
+ });
105
+ //# sourceMappingURL=notifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/commands/notifications.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Support command for Solid CLI — customer support tickets.
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare const supportCommand: Command;
6
+ //# sourceMappingURL=support.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"support.d.ts","sourceRoot":"","sources":["../../src/commands/support.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,cAAc,SAE4B,CAAC"}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.supportCommand = void 0;
40
+ /**
41
+ * Support command for Solid CLI — customer support tickets.
42
+ */
43
+ const commander_1 = require("commander");
44
+ const chalk_1 = __importDefault(require("chalk"));
45
+ const config_1 = require("../lib/config");
46
+ const api_client_1 = require("../lib/api-client");
47
+ const ui_1 = require("../lib/ui");
48
+ exports.supportCommand = new commander_1.Command('support')
49
+ .description('Customer support tickets')
50
+ .action(async () => { exports.supportCommand.outputHelp(); });
51
+ exports.supportCommand.command('list').description('List support tickets')
52
+ .option('--status <status>', 'Filter: open, closed, pending')
53
+ .option('--limit <n>', 'Count', '20').option('--json', 'JSON output')
54
+ .action(async (options) => {
55
+ if (!config_1.config.isLoggedIn()) {
56
+ console.error(chalk_1.default.red('Not logged in.'));
57
+ process.exit(1);
58
+ }
59
+ const ora = (await Promise.resolve().then(() => __importStar(require('ora')))).default;
60
+ const spinner = ora('Loading tickets...').start();
61
+ try {
62
+ const params = { limit: options.limit };
63
+ if (options.status)
64
+ params.status = options.status;
65
+ const res = await api_client_1.apiClient.get('/api/v1/support/tickets', { params });
66
+ spinner.stop();
67
+ if (options.json) {
68
+ console.log(JSON.stringify(res.data, null, 2));
69
+ return;
70
+ }
71
+ const tickets = res.data.tickets || res.data.items || [];
72
+ console.log('');
73
+ console.log(ui_1.ui.header(`Support Tickets (${tickets.length})`));
74
+ if (tickets.length === 0) {
75
+ console.log(chalk_1.default.dim(' No tickets.'));
76
+ }
77
+ else {
78
+ for (const t of tickets) {
79
+ const s = t.status === 'open' ? chalk_1.default.green('●') : t.status === 'pending' ? chalk_1.default.yellow('●') : chalk_1.default.dim('●');
80
+ const p = t.priority === 'high' ? chalk_1.default.red(' [HIGH]') : '';
81
+ console.log(` ${s} #${t.id}${p} ${t.subject || t.title}`);
82
+ }
83
+ }
84
+ console.log('');
85
+ }
86
+ catch (e) {
87
+ spinner.fail(chalk_1.default.red('Failed'));
88
+ console.error((0, api_client_1.handleApiError)(e).message);
89
+ }
90
+ });
91
+ exports.supportCommand.command('get <id>').description('View ticket details')
92
+ .option('--json', 'JSON output')
93
+ .action(async (id, options) => {
94
+ if (!config_1.config.isLoggedIn()) {
95
+ console.error(chalk_1.default.red('Not logged in.'));
96
+ process.exit(1);
97
+ }
98
+ const ora = (await Promise.resolve().then(() => __importStar(require('ora')))).default;
99
+ const spinner = ora('Loading...').start();
100
+ try {
101
+ const res = await api_client_1.apiClient.get(`/api/v1/support/tickets/${id}`);
102
+ spinner.stop();
103
+ if (options.json) {
104
+ console.log(JSON.stringify(res.data, null, 2));
105
+ return;
106
+ }
107
+ const t = res.data;
108
+ console.log('');
109
+ console.log(ui_1.ui.header(`Ticket #${t.id || id}`));
110
+ if (t.subject || t.title)
111
+ console.log(ui_1.ui.label('Subject', t.subject || t.title));
112
+ if (t.status)
113
+ console.log(ui_1.ui.label('Status', t.status));
114
+ if (t.priority)
115
+ console.log(ui_1.ui.label('Priority', t.priority));
116
+ if (t.description || t.body) {
117
+ console.log('');
118
+ console.log(` ${t.description || t.body}`);
119
+ }
120
+ console.log('');
121
+ }
122
+ catch (e) {
123
+ spinner.fail(chalk_1.default.red('Failed'));
124
+ console.error((0, api_client_1.handleApiError)(e).message);
125
+ }
126
+ });
127
+ //# sourceMappingURL=support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"support.js","sourceRoot":"","sources":["../../src/commands/support.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Webhooks command for Solid CLI — custom webhook management.
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare const webhooksCommand: Command;
6
+ //# sourceMappingURL=webhooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../src/commands/webhooks.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,eAAe,SAE4B,CAAC"}