@scalebun/cli 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 (58) hide show
  1. package/bin/scalebun.js +2 -0
  2. package/lib/api/client.d.ts +21 -0
  3. package/lib/api/client.d.ts.map +1 -0
  4. package/lib/api/client.js +151 -0
  5. package/lib/api/client.js.map +1 -0
  6. package/lib/commands/ci-init.d.ts +9 -0
  7. package/lib/commands/ci-init.d.ts.map +1 -0
  8. package/lib/commands/ci-init.js +100 -0
  9. package/lib/commands/ci-init.js.map +1 -0
  10. package/lib/commands/launch.d.ts +3 -0
  11. package/lib/commands/launch.d.ts.map +1 -0
  12. package/lib/commands/launch.js +23 -0
  13. package/lib/commands/launch.js.map +1 -0
  14. package/lib/commands/login.d.ts +10 -0
  15. package/lib/commands/login.d.ts.map +1 -0
  16. package/lib/commands/login.js +110 -0
  17. package/lib/commands/login.js.map +1 -0
  18. package/lib/commands/migrate-codepush.d.ts +13 -0
  19. package/lib/commands/migrate-codepush.d.ts.map +1 -0
  20. package/lib/commands/migrate-codepush.js +98 -0
  21. package/lib/commands/migrate-codepush.js.map +1 -0
  22. package/lib/commands/ota-bundle.d.ts +9 -0
  23. package/lib/commands/ota-bundle.d.ts.map +1 -0
  24. package/lib/commands/ota-bundle.js +87 -0
  25. package/lib/commands/ota-bundle.js.map +1 -0
  26. package/lib/commands/ota-channels.d.ts +3 -0
  27. package/lib/commands/ota-channels.d.ts.map +1 -0
  28. package/lib/commands/ota-channels.js +39 -0
  29. package/lib/commands/ota-channels.js.map +1 -0
  30. package/lib/commands/ota-delete-bundle.d.ts +3 -0
  31. package/lib/commands/ota-delete-bundle.d.ts.map +1 -0
  32. package/lib/commands/ota-delete-bundle.js +31 -0
  33. package/lib/commands/ota-delete-bundle.js.map +1 -0
  34. package/lib/commands/ota-publish.d.ts +16 -0
  35. package/lib/commands/ota-publish.d.ts.map +1 -0
  36. package/lib/commands/ota-publish.js +223 -0
  37. package/lib/commands/ota-publish.js.map +1 -0
  38. package/lib/index.d.ts +2 -0
  39. package/lib/index.d.ts.map +1 -0
  40. package/lib/index.js +39 -0
  41. package/lib/index.js.map +1 -0
  42. package/lib/utils/bundle.d.ts +37 -0
  43. package/lib/utils/bundle.d.ts.map +1 -0
  44. package/lib/utils/bundle.js +94 -0
  45. package/lib/utils/bundle.js.map +1 -0
  46. package/lib/utils/credentials.d.ts +15 -0
  47. package/lib/utils/credentials.d.ts.map +1 -0
  48. package/lib/utils/credentials.js +83 -0
  49. package/lib/utils/credentials.js.map +1 -0
  50. package/lib/utils/hash.d.ts +3 -0
  51. package/lib/utils/hash.d.ts.map +1 -0
  52. package/lib/utils/hash.js +44 -0
  53. package/lib/utils/hash.js.map +1 -0
  54. package/lib/utils/ui.d.ts +4 -0
  55. package/lib/utils/ui.d.ts.map +1 -0
  56. package/lib/utils/ui.js +51 -0
  57. package/lib/utils/ui.js.map +1 -0
  58. package/package.json +33 -0
@@ -0,0 +1,15 @@
1
+ export interface Credentials {
2
+ apiUrl: string;
3
+ token: string;
4
+ }
5
+ /**
6
+ * Read credentials. Priority:
7
+ * 1. SCALEBUN_TOKEN + SCALEBUN_API_URL env vars (for CI)
8
+ * 2. ~/.scalebun/credentials.json (from `scalebun login`)
9
+ */
10
+ export declare function readCredentials(): Credentials | null;
11
+ /** Store credentials to ~/.scalebun/credentials.json */
12
+ export declare function writeCredentials(creds: Credentials): void;
13
+ /** Delete stored credentials. */
14
+ export declare function clearCredentials(): void;
15
+ //# sourceMappingURL=credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/utils/credentials.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,WAAW,GAAG,IAAI,CAkBpD;AAED,wDAAwD;AACxD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CASzD;AAED,iCAAiC;AACjC,wBAAgB,gBAAgB,IAAI,IAAI,CAIvC"}
@@ -0,0 +1,83 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.readCredentials = readCredentials;
37
+ exports.writeCredentials = writeCredentials;
38
+ exports.clearCredentials = clearCredentials;
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ const os = __importStar(require("os"));
42
+ const CREDENTIALS_DIR = path.join(os.homedir(), '.scalebun');
43
+ const CREDENTIALS_FILE = path.join(CREDENTIALS_DIR, 'credentials.json');
44
+ /**
45
+ * Read credentials. Priority:
46
+ * 1. SCALEBUN_TOKEN + SCALEBUN_API_URL env vars (for CI)
47
+ * 2. ~/.scalebun/credentials.json (from `scalebun login`)
48
+ */
49
+ function readCredentials() {
50
+ // CI path: env vars take precedence
51
+ const envToken = process.env.SCALEBUN_TOKEN;
52
+ const envUrl = process.env.SCALEBUN_API_URL;
53
+ if (envToken && envUrl) {
54
+ return { apiUrl: envUrl, token: envToken };
55
+ }
56
+ // Interactive path: credentials file
57
+ if (!fs.existsSync(CREDENTIALS_FILE))
58
+ return null;
59
+ try {
60
+ const raw = fs.readFileSync(CREDENTIALS_FILE, 'utf-8');
61
+ const parsed = JSON.parse(raw);
62
+ if (!parsed.apiUrl || !parsed.token)
63
+ return null;
64
+ return parsed;
65
+ }
66
+ catch {
67
+ return null;
68
+ }
69
+ }
70
+ /** Store credentials to ~/.scalebun/credentials.json */
71
+ function writeCredentials(creds) {
72
+ if (!fs.existsSync(CREDENTIALS_DIR)) {
73
+ fs.mkdirSync(CREDENTIALS_DIR, { recursive: true, mode: 0o700 });
74
+ }
75
+ fs.writeFileSync(CREDENTIALS_FILE, JSON.stringify(creds, null, 2) + '\n', { mode: 0o600 });
76
+ }
77
+ /** Delete stored credentials. */
78
+ function clearCredentials() {
79
+ if (fs.existsSync(CREDENTIALS_FILE)) {
80
+ fs.unlinkSync(CREDENTIALS_FILE);
81
+ }
82
+ }
83
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/utils/credentials.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,0CAkBC;AAGD,4CASC;AAGD,4CAIC;AAtDD,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAEzB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAC7D,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;AAOxE;;;;GAIG;AACH,SAAgB,eAAe;IAC7B,oCAAoC;IACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAC5C,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;QACvB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC7C,CAAC;IAED,qCAAqC;IACrC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACjD,OAAO,MAAqB,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,wDAAwD;AACxD,SAAgB,gBAAgB,CAAC,KAAkB;IACjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,EAAE,CAAC,aAAa,CACd,gBAAgB,EAChB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EACrC,EAAE,IAAI,EAAE,KAAK,EAAE,CAChB,CAAC;AACJ,CAAC;AAED,iCAAiC;AACjC,SAAgB,gBAAgB;IAC9B,IAAI,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACpC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAClC,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Compute SHA-256 hex digest of a file. */
2
+ export declare function sha256File(filePath: string): string;
3
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAGA,4CAA4C;AAC5C,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGnD"}
@@ -0,0 +1,44 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.sha256File = sha256File;
37
+ const crypto = __importStar(require("crypto"));
38
+ const fs = __importStar(require("fs"));
39
+ /** Compute SHA-256 hex digest of a file. */
40
+ function sha256File(filePath) {
41
+ const content = fs.readFileSync(filePath);
42
+ return crypto.createHash('sha256').update(content).digest('hex');
43
+ }
44
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,gCAGC;AAPD,+CAAiC;AACjC,uCAAyB;AAEzB,4CAA4C;AAC5C,SAAgB,UAAU,CAAC,QAAgB;IACzC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function renderBanner(): void;
2
+ export declare function renderStatus(): void;
3
+ export declare function renderCommands(): void;
4
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/utils/ui.ts"],"names":[],"mappings":"AAGA,wBAAgB,YAAY,IAAI,IAAI,CAUnC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAUnC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAmBrC"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.renderBanner = renderBanner;
7
+ exports.renderStatus = renderStatus;
8
+ exports.renderCommands = renderCommands;
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const credentials_1 = require("./credentials");
11
+ function renderBanner() {
12
+ const logo = `
13
+ ${chalk_1.default.magenta('███████╗')} ${chalk_1.default.magenta('██████╗')} ${chalk_1.default.magenta('██╗ ██╗')} ${chalk_1.default.magenta('██╗')} ${chalk_1.default.magenta('███████╗')} ${chalk_1.default.magenta('██████╗')} ${chalk_1.default.magenta('██╗ ██╗')} ${chalk_1.default.magenta('███╗ ██╗')}
14
+ ${chalk_1.default.magenta('██╔════╝')} ${chalk_1.default.magenta('██╔════╝')} ${chalk_1.default.magenta('██║ ██║')} ${chalk_1.default.magenta('██║')} ${chalk_1.default.magenta('██╔════╝')} ${chalk_1.default.magenta('██╔══██╗')} ${chalk_1.default.magenta('██║ ██║')} ${chalk_1.default.magenta('████╗ ██║')}
15
+ ${chalk_1.default.magenta('███████╗')} ${chalk_1.default.magenta('██║')} ${chalk_1.default.magenta('██║ ██║')} ${chalk_1.default.magenta('██║')} ${chalk_1.default.magenta('█████╗')} ${chalk_1.default.magenta('██████╔╝')} ${chalk_1.default.magenta('██║ ██║')} ${chalk_1.default.magenta('██╔██╗ ██║')}
16
+ ${chalk_1.default.magenta('╚════██║')} ${chalk_1.default.magenta('██║')} ${chalk_1.default.magenta('██║ ██║')} ${chalk_1.default.magenta('██║')} ${chalk_1.default.magenta('██╔══╝')} ${chalk_1.default.magenta('██╔══██╗')} ${chalk_1.default.magenta('██║ ██║')} ${chalk_1.default.magenta('██║╚██╗██║')}
17
+ ${chalk_1.default.magenta('███████║')} ${chalk_1.default.magenta('╚██████╗')} ${chalk_1.default.magenta('╚██████╔╝')} ${chalk_1.default.magenta('███████╗')} ${chalk_1.default.magenta('███████╗')} ${chalk_1.default.magenta('██████╔╝')} ${chalk_1.default.magenta('╚██████╔╝')} ${chalk_1.default.magenta('██║ ╚████║')}
18
+ `;
19
+ console.log(logo);
20
+ console.log(chalk_1.default.bold.cyan(' ⚡ Scalebun CLI') + chalk_1.default.dim(' v0.1.0 — Enterprise OTA Update & Telemetry Control Plane\n'));
21
+ }
22
+ function renderStatus() {
23
+ const creds = (0, credentials_1.readCredentials)();
24
+ console.log(chalk_1.default.gray('┌─────────────────────────────────────────────────────────────┐'));
25
+ if (creds) {
26
+ console.log(`│ ${chalk_1.default.bold.green('● AUTHENTICATED')} │`);
27
+ console.log(`│ ${chalk_1.default.dim('API Target:')} ${chalk_1.default.cyan(creds.apiUrl.padEnd(46))} │`);
28
+ }
29
+ else {
30
+ console.log(`│ ${chalk_1.default.bold.yellow('○ NOT LOGGED IN')} (Run ${chalk_1.default.cyan('scalebun login')} to authenticate) │`);
31
+ }
32
+ console.log(chalk_1.default.gray('└─────────────────────────────────────────────────────────────┘\n'));
33
+ }
34
+ function renderCommands() {
35
+ console.log(chalk_1.default.bold.white(' COMMANDS'));
36
+ console.log(` ${chalk_1.default.cyan('scalebun login')} ${chalk_1.default.dim('Authenticate with your Scalebun backend')}`);
37
+ console.log(` ${chalk_1.default.cyan('scalebun ota publish')} ${chalk_1.default.dim('Bundle, upload, & publish an OTA release (Instant or Silent)')}`);
38
+ console.log(` ${chalk_1.default.cyan('scalebun ota bundle')} ${chalk_1.default.dim('Build standalone bundle for manual upload via Web Dashboard')}`);
39
+ console.log(` ${chalk_1.default.cyan('scalebun ota channels')} ${chalk_1.default.dim('List all OTA release channels (default, staging, production)')}`);
40
+ console.log(` ${chalk_1.default.cyan('scalebun ota delete')} ${chalk_1.default.dim('Delete an OTA bundle permanently')}`);
41
+ console.log(` ${chalk_1.default.cyan('scalebun launch')} ${chalk_1.default.dim('Open CLI interactive window')}`);
42
+ console.log(` ${chalk_1.default.cyan('scalebun --help')} ${chalk_1.default.dim('Show comprehensive flag & options reference')}\n`);
43
+ console.log(chalk_1.default.bold.white(' QUICK EXAMPLES'));
44
+ console.log(chalk_1.default.gray(' # 1. Immediate Hotfix (Forces instant app restart):'));
45
+ console.log(` ${chalk_1.default.dim('$')} ${chalk_1.default.green('scalebun ota publish')} --app-id <id> --platform android --install-mode IMMEDIATE --release-note "Critical Security Patch"\n`);
46
+ console.log(chalk_1.default.gray(' # 2. Silent Background Update (Applies on next launch):'));
47
+ console.log(` ${chalk_1.default.dim('$')} ${chalk_1.default.green('scalebun ota publish')} --app-id <id> --platform android --install-mode ON_NEXT_RESTART --release-note "UI Refresh"\n`);
48
+ console.log(chalk_1.default.gray(' # 3. Package Bundle File for Dashboard Upload:'));
49
+ console.log(` ${chalk_1.default.dim('$')} ${chalk_1.default.green('scalebun ota bundle')} --platform android --output ./my-release.bundle --hermes\n`);
50
+ }
51
+ //# sourceMappingURL=ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/utils/ui.ts"],"names":[],"mappings":";;;;;AAGA,oCAUC;AAED,oCAUC;AAED,wCAmBC;AA9CD,kDAA0B;AAC1B,+CAAgD;AAEhD,SAAgB,YAAY;IAC1B,MAAM,IAAI,GAAG;GACZ,eAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,eAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,YAAY,CAAC;GACrO,eAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,eAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,YAAY,CAAC;GACvO,eAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,eAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,eAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,eAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,YAAY,CAAC;GACtO,eAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,eAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,eAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,eAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,YAAY,CAAC;GACtO,eAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,eAAK,CAAC,OAAO,CAAC,YAAY,CAAC;CAC1O,CAAC;IACA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,eAAK,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC,CAAC;AAC7H,CAAC;AAED,SAAgB,YAAY;IAC1B,MAAM,KAAK,GAAG,IAAA,6BAAe,GAAE,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC,CAAC;IAC3F,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,6CAA6C,CAAC,CAAC;QACnG,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACxF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,SAAS,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CAAC;IACzH,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC,CAAC;AAC/F,CAAC;AAED,SAAgB,cAAc;IAC5B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,eAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,EAAE,CAAC,CAAC;IAClH,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,eAAK,CAAC,GAAG,CAAC,8DAA8D,CAAC,EAAE,CAAC,CAAC;IACvI,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,eAAK,CAAC,GAAG,CAAC,6DAA6D,CAAC,EAAE,CAAC,CAAC;IACtI,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,eAAK,CAAC,GAAG,CAAC,8DAA8D,CAAC,EAAE,CAAC,CAAC;IACvI,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,eAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,EAAE,CAAC,CAAC;IAC3G,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,YAAY,eAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC;IACtG,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,YAAY,eAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,IAAI,CAAC,CAAC;IAExH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,uGAAuG,CAAC,CAAC;IAE/K,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,gGAAgG,CAAC,CAAC;IAExK,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,6DAA6D,CAAC,CAAC;AACtI,CAAC"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@scalebun/cli",
3
+ "version": "0.1.0",
4
+ "description": "Scalebun CLI — OTA bundle publishing and management",
5
+ "license": "MIT",
6
+ "bin": {
7
+ "scalebun": "./bin/scalebun.js"
8
+ },
9
+ "main": "./lib/index.js",
10
+ "types": "./lib/index.d.ts",
11
+ "files": [
12
+ "bin/",
13
+ "lib/"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "dev": "tsc --watch",
18
+ "typecheck": "tsc --noEmit",
19
+ "clean": "rm -rf lib"
20
+ },
21
+ "dependencies": {
22
+ "commander": "^12.0.0",
23
+ "chalk": "^4.1.2",
24
+ "ora": "^5.4.1"
25
+ },
26
+ "devDependencies": {
27
+ "typescript": "^5.4.0",
28
+ "@types/node": "^20.0.0"
29
+ },
30
+ "engines": {
31
+ "node": ">=18.0.0"
32
+ }
33
+ }