@sinch/cli 0.1.27-beta.0 → 0.1.28-beta.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 (133) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +198 -198
  3. package/bin/sinch +2 -2
  4. package/dist/commands/conversations/apps.d.ts +2 -0
  5. package/dist/commands/conversations/apps.d.ts.map +1 -0
  6. package/dist/commands/conversations/apps.js +162 -0
  7. package/dist/commands/conversations/apps.js.map +1 -0
  8. package/dist/commands/conversations/contacts.d.ts +2 -0
  9. package/dist/commands/conversations/contacts.d.ts.map +1 -0
  10. package/dist/commands/conversations/contacts.js +245 -0
  11. package/dist/commands/conversations/contacts.js.map +1 -0
  12. package/dist/commands/conversations/conversation.d.ts +2 -0
  13. package/dist/commands/conversations/conversation.d.ts.map +1 -0
  14. package/dist/commands/conversations/conversation.js +19 -0
  15. package/dist/commands/conversations/conversation.js.map +1 -0
  16. package/dist/commands/conversations/conversations.d.ts +2 -0
  17. package/dist/commands/conversations/conversations.d.ts.map +1 -0
  18. package/dist/commands/conversations/conversations.js +104 -0
  19. package/dist/commands/conversations/conversations.js.map +1 -0
  20. package/dist/commands/conversations/messages.d.ts +2 -0
  21. package/dist/commands/conversations/messages.d.ts.map +1 -0
  22. package/dist/commands/conversations/messages.js +107 -0
  23. package/dist/commands/conversations/messages.js.map +1 -0
  24. package/dist/commands/conversations/send.d.ts +2 -0
  25. package/dist/commands/conversations/send.d.ts.map +1 -0
  26. package/dist/commands/conversations/send.js +185 -0
  27. package/dist/commands/conversations/send.js.map +1 -0
  28. package/dist/commands/conversations/utils.d.ts +4 -0
  29. package/dist/commands/conversations/utils.d.ts.map +1 -0
  30. package/dist/commands/conversations/utils.js +30 -0
  31. package/dist/commands/conversations/utils.js.map +1 -0
  32. package/dist/commands/conversations/webhooks.d.ts +2 -0
  33. package/dist/commands/conversations/webhooks.d.ts.map +1 -0
  34. package/dist/commands/conversations/webhooks.js +238 -0
  35. package/dist/commands/conversations/webhooks.js.map +1 -0
  36. package/dist/commands/delete.d.ts +2 -0
  37. package/dist/commands/delete.d.ts.map +1 -0
  38. package/dist/commands/delete.js +93 -0
  39. package/dist/commands/delete.js.map +1 -0
  40. package/dist/commands/deploy.d.ts +2 -0
  41. package/dist/commands/deploy.d.ts.map +1 -0
  42. package/dist/commands/deploy.js +687 -0
  43. package/dist/commands/deploy.js.map +1 -0
  44. package/dist/commands/dev.d.ts +2 -0
  45. package/dist/commands/dev.d.ts.map +1 -0
  46. package/dist/commands/dev.js +460 -0
  47. package/dist/commands/dev.js.map +1 -0
  48. package/dist/commands/docs.d.ts +2 -0
  49. package/dist/commands/docs.d.ts.map +1 -0
  50. package/dist/commands/docs.js +105 -0
  51. package/dist/commands/docs.js.map +1 -0
  52. package/dist/commands/download.d.ts +2 -0
  53. package/dist/commands/download.d.ts.map +1 -0
  54. package/dist/commands/download.js +207 -0
  55. package/dist/commands/download.js.map +1 -0
  56. package/dist/commands/functions.d.ts +2 -0
  57. package/dist/commands/functions.d.ts.map +1 -0
  58. package/dist/commands/functions.js +25 -0
  59. package/dist/commands/functions.js.map +1 -0
  60. package/dist/commands/init.d.ts +2 -0
  61. package/dist/commands/init.d.ts.map +1 -0
  62. package/dist/commands/init.js +552 -0
  63. package/dist/commands/init.js.map +1 -0
  64. package/dist/commands/list.d.ts +2 -0
  65. package/dist/commands/list.d.ts.map +1 -0
  66. package/dist/commands/list.js +180 -0
  67. package/dist/commands/list.js.map +1 -0
  68. package/dist/commands/logs.d.ts +2 -0
  69. package/dist/commands/logs.d.ts.map +1 -0
  70. package/dist/commands/logs.js +1001 -0
  71. package/dist/commands/logs.js.map +1 -0
  72. package/dist/commands/secrets.d.ts +2 -0
  73. package/dist/commands/secrets.d.ts.map +1 -0
  74. package/dist/commands/secrets.js +197 -0
  75. package/dist/commands/secrets.js.map +1 -0
  76. package/dist/commands/skills.d.ts +4 -0
  77. package/dist/commands/skills.d.ts.map +1 -0
  78. package/dist/commands/skills.js +309 -0
  79. package/dist/commands/skills.js.map +1 -0
  80. package/dist/commands/status.d.ts +2 -0
  81. package/dist/commands/status.d.ts.map +1 -0
  82. package/dist/commands/status.js +145 -0
  83. package/dist/commands/status.js.map +1 -0
  84. package/dist/commands/templates.d.ts +2 -0
  85. package/dist/commands/templates.d.ts.map +1 -0
  86. package/dist/commands/templates.js +168 -0
  87. package/dist/commands/templates.js.map +1 -0
  88. package/dist/commands/voice.d.ts +2 -0
  89. package/dist/commands/voice.d.ts.map +1 -0
  90. package/dist/commands/voice.js +259 -0
  91. package/dist/commands/voice.js.map +1 -0
  92. package/dist/index.d.ts +2 -0
  93. package/dist/index.d.ts.map +1 -0
  94. package/dist/index.js +780 -325
  95. package/dist/index.js.map +1 -0
  96. package/dist/lib/api.d.ts +73 -0
  97. package/dist/lib/api.d.ts.map +1 -0
  98. package/dist/lib/api.js +455 -0
  99. package/dist/lib/api.js.map +1 -0
  100. package/dist/lib/config.d.ts +68 -0
  101. package/dist/lib/config.d.ts.map +1 -0
  102. package/dist/lib/config.js +276 -0
  103. package/dist/lib/config.js.map +1 -0
  104. package/dist/lib/conversation.d.ts +8 -0
  105. package/dist/lib/conversation.d.ts.map +1 -0
  106. package/dist/lib/conversation.js +179 -0
  107. package/dist/lib/conversation.js.map +1 -0
  108. package/dist/lib/credentials.d.ts +43 -0
  109. package/dist/lib/credentials.d.ts.map +1 -0
  110. package/dist/lib/credentials.js +365 -0
  111. package/dist/lib/credentials.js.map +1 -0
  112. package/dist/lib/docs-utils.d.ts +13 -0
  113. package/dist/lib/docs-utils.d.ts.map +1 -0
  114. package/dist/lib/docs-utils.js +115 -0
  115. package/dist/lib/docs-utils.js.map +1 -0
  116. package/dist/lib/update-check.d.ts +5 -0
  117. package/dist/lib/update-check.d.ts.map +1 -0
  118. package/dist/lib/update-check.js +114 -0
  119. package/dist/lib/update-check.js.map +1 -0
  120. package/dist/lib/voice.d.ts +3 -0
  121. package/dist/lib/voice.d.ts.map +1 -0
  122. package/dist/lib/voice.js +49 -0
  123. package/dist/lib/voice.js.map +1 -0
  124. package/dist/package.json +71 -0
  125. package/dist/utils/logger.d.ts +28 -0
  126. package/dist/utils/logger.d.ts.map +1 -0
  127. package/dist/utils/logger.js +138 -0
  128. package/dist/utils/logger.js.map +1 -0
  129. package/dist/utils/spinner.d.ts +17 -0
  130. package/dist/utils/spinner.d.ts.map +1 -0
  131. package/dist/utils/spinner.js +75 -0
  132. package/dist/utils/spinner.js.map +1 -0
  133. package/package.json +71 -71
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice.d.ts","sourceRoot":"","sources":["../../src/lib/voice.ts"],"names":[],"mappings":"AAeA,iBAAe,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDxE;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
@@ -0,0 +1,49 @@
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.updateVoiceCallbackUrl = updateVoiceCallbackUrl;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const config_1 = require("./config");
9
+ const logger_1 = require("../utils/logger");
10
+ async function updateVoiceCallbackUrl(callbackUrl) {
11
+ if (!await config_1.config.hasCredentials()) {
12
+ throw new Error('No Sinch credentials found. Run "sinch auth login" first.');
13
+ }
14
+ const appCreds = await config_1.config.getApplicationCredentials();
15
+ if (!appCreds) {
16
+ throw new Error('No application credentials found. Run "sinch auth login" first.');
17
+ }
18
+ const appKey = appCreds.applicationKey;
19
+ const url = `https://callingapi.sinch.com/v1/configuration/callbacks/applications/${appKey}/`;
20
+ const requestBody = {
21
+ url: {
22
+ primary: callbackUrl
23
+ }
24
+ };
25
+ const authString = `${appCreds.applicationKey}:${appCreds.applicationSecret}`;
26
+ const base64Auth = Buffer.from(authString).toString('base64');
27
+ await axios_1.default.post(url, requestBody, {
28
+ headers: {
29
+ Authorization: `Basic ${base64Auth}`,
30
+ 'Content-Type': 'application/json',
31
+ },
32
+ timeout: 10000,
33
+ });
34
+ await new Promise((resolve) => setTimeout(resolve, 1000));
35
+ const verifyResponse = await axios_1.default.get(url, {
36
+ headers: {
37
+ Authorization: `Basic ${base64Auth}`,
38
+ },
39
+ timeout: 10000,
40
+ });
41
+ const currentCallbacks = verifyResponse.data;
42
+ const configuredUrl = currentCallbacks?.url?.primary;
43
+ if (configuredUrl !== callbackUrl) {
44
+ logger_1.logger.debug(`Callback verification mismatch. Expected: ${callbackUrl}, Got: ${configuredUrl}`);
45
+ throw new Error(`Callback URL update verification failed. Expected: ${callbackUrl}, Got: ${configuredUrl}`);
46
+ }
47
+ logger_1.logger.debug('Voice callback URL successfully updated and verified');
48
+ }
49
+ //# sourceMappingURL=voice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice.js","sourceRoot":"","sources":["../../src/lib/voice.ts"],"names":[],"mappings":";;;;;AAuES,wDAAsB;AAvE/B,kDAA0B;AAC1B,qCAAkC;AAClC,4CAAyC;AAazC,KAAK,UAAU,sBAAsB,CAAC,WAAmB;IAEvD,IAAI,CAAC,MAAM,eAAM,CAAC,cAAc,EAAE,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IAGD,MAAM,QAAQ,GAAG,MAAM,eAAM,CAAC,yBAAyB,EAAE,CAAC;IAC1D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC;IACvC,MAAM,GAAG,GAAG,wEAAwE,MAAM,GAAG,CAAC;IAG9F,MAAM,WAAW,GAAG;QAClB,GAAG,EAAE;YACH,OAAO,EAAE,WAAW;SACrB;KACF,CAAC;IAGF,MAAM,UAAU,GAAG,GAAG,QAAQ,CAAC,cAAc,IAAI,QAAQ,CAAC,iBAAiB,EAAE,CAAC;IAC9E,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAG9D,MAAM,eAAK,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE;QACjC,OAAO,EAAE;YACP,aAAa,EAAE,SAAS,UAAU,EAAE;YACpC,cAAc,EAAE,kBAAkB;SACnC;QACD,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IAGH,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAE1D,MAAM,cAAc,GAAG,MAAM,eAAK,CAAC,GAAG,CAAwB,GAAG,EAAE;QACjE,OAAO,EAAE;YACP,aAAa,EAAE,SAAS,UAAU,EAAE;SACrC;QACD,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,cAAc,CAAC,IAAI,CAAC;IAC7C,MAAM,aAAa,GAAG,gBAAgB,EAAE,GAAG,EAAE,OAAO,CAAC;IAErD,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;QAClC,eAAM,CAAC,KAAK,CAAC,6CAA6C,WAAW,UAAU,aAAa,EAAE,CAAC,CAAC;QAChG,MAAM,IAAI,KAAK,CAAC,sDAAsD,WAAW,UAAU,aAAa,EAAE,CAAC,CAAC;IAC9G,CAAC;IAED,eAAM,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;AACvE,CAAC"}
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "@sinch/cli",
3
+ "version": "0.1.28-beta.0",
4
+ "description": "Official Sinch CLI - Manage all Sinch products from your terminal",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "sinch": "bin/sinch"
8
+ },
9
+ "scripts": {
10
+ "start": "tsx src/index.ts",
11
+ "dev": "tsx watch src/index.ts",
12
+ "build": "tsc && node scripts/post-build.js",
13
+ "build:prod": "tsup src/index.ts --format cjs --dts --clean --minify",
14
+ "typecheck": "tsc --noEmit",
15
+ "test": "jest",
16
+ "test:e2e": "jest --config tests/e2e/jest.config.js",
17
+ "test:e2e:staging": "jest --config tests/e2e/jest.config.js --env=staging",
18
+ "prepublishOnly": "npm run build"
19
+ },
20
+ "keywords": [],
21
+ "author": "Sinch <support@sinch.com> (https://www.sinch.com)",
22
+ "license": "MIT",
23
+ "private": false,
24
+ "publishConfig": {
25
+ "access": "public",
26
+ "registry": "https://registry.npmjs.org/"
27
+ },
28
+ "homepage": "https://www.sinch.com/products/apis/voice/",
29
+ "files": [
30
+ "dist/",
31
+ "bin/",
32
+ "README.md",
33
+ "LICENSE"
34
+ ],
35
+ "dependencies": {
36
+ "@sinch/sdk-core": "^1.2.1",
37
+ "adm-zip": "^0.5.10",
38
+ "axios": "^1.7.9",
39
+ "blessed": "^0.1.81",
40
+ "chalk": "^4.1.2",
41
+ "chokidar": "^3.6.0",
42
+ "cli-spinners": "^2.9.2",
43
+ "cli-table3": "^0.6.3",
44
+ "clipboardy": "^2.3.0",
45
+ "commander": "^12.1.0",
46
+ "eventsource": "^4.0.0",
47
+ "form-data": "^4.0.0",
48
+ "fs-extra": "^11.1.1",
49
+ "inquirer": "8.2.7",
50
+ "keytar": "^7.9.0",
51
+ "ora": "^4.1.1"
52
+ },
53
+ "devDependencies": {
54
+ "@types/adm-zip": "^0.5.7",
55
+ "@types/blessed": "^0.1.25",
56
+ "@types/fs-extra": "^11.0.4",
57
+ "@types/inquirer": "^9.0.9",
58
+ "@types/keytar": "^4.4.0",
59
+ "@types/node": "^24.3.0",
60
+ "execa": "^5.1.1",
61
+ "jest": "^29.7.0",
62
+ "nodemon": "^3.0.1",
63
+ "tsup": "^8.5.0",
64
+ "tsx": "^4.20.4",
65
+ "typescript": "^5.9.2"
66
+ },
67
+ "engines": {
68
+ "node": ">=20.0.0",
69
+ "npm": ">=9.0.0"
70
+ }
71
+ }
@@ -0,0 +1,28 @@
1
+ interface LoggerOptions {
2
+ verbose?: boolean;
3
+ }
4
+ interface ListOptions {
5
+ indent?: string;
6
+ bullet?: string;
7
+ }
8
+ declare class Logger {
9
+ private verbose;
10
+ private logFile;
11
+ constructor(options?: LoggerOptions);
12
+ private writeToFile;
13
+ info(message: string, ...args: any[]): void;
14
+ success(message: string, ...args: any[]): void;
15
+ warn(message: string, ...args: any[]): void;
16
+ error(message: string, ...args: any[]): void;
17
+ debug(message: string, ...args: any[]): void;
18
+ log(message: string, ...args: any[]): void;
19
+ title(message: string): void;
20
+ subtitle(message: string): void;
21
+ list(items: string[], options?: ListOptions): void;
22
+ private calculateColumnWidths;
23
+ table(headers: string[], rows: (string | number)[][]): void;
24
+ newline(): void;
25
+ }
26
+ declare const logger: Logger;
27
+ export { logger, Logger };
28
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAKA,UAAU,aAAa;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,cAAM,MAAM;IACV,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE,aAAkB;IA0BvC,OAAO,CAAC,WAAW;IAUnB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAK3C,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAK9C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAK3C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAK5C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAQ5C,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAK1C,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI/B,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,WAAgB,GAAG,IAAI;IAOtD,OAAO,CAAC,qBAAqB;IAY7B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI;IAe3D,OAAO,IAAI,IAAI;CAGhB;AAED,QAAA,MAAM,MAAM,QAAe,CAAC;AAE5B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC"}
@@ -0,0 +1,138 @@
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.Logger = exports.logger = void 0;
40
+ const chalk_1 = __importDefault(require("chalk"));
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const os = __importStar(require("os"));
44
+ class Logger {
45
+ verbose;
46
+ logFile;
47
+ constructor(options = {}) {
48
+ this.verbose = options.verbose || process.env.VERBOSE === 'true';
49
+ let functionName = 'cli';
50
+ try {
51
+ const sinchConfigPath = path.join(process.cwd(), 'sinch.json');
52
+ if (fs.existsSync(sinchConfigPath)) {
53
+ const config = JSON.parse(fs.readFileSync(sinchConfigPath, 'utf8'));
54
+ functionName = config.name || 'cli';
55
+ }
56
+ }
57
+ catch (error) {
58
+ }
59
+ this.logFile = path.join(os.tmpdir(), `sinch-${functionName}.log`);
60
+ try {
61
+ fs.writeFileSync(this.logFile, `=== Sinch CLI Debug Log - ${new Date().toISOString()} ===\n`, { flag: 'w' });
62
+ }
63
+ catch (error) {
64
+ }
65
+ }
66
+ writeToFile(level, message, ...args) {
67
+ try {
68
+ const timestamp = new Date().toISOString();
69
+ const logEntry = `[${timestamp}] ${level}: ${message} ${args.length > 0 ? JSON.stringify(args) : ''}\n`;
70
+ fs.appendFileSync(this.logFile, logEntry);
71
+ }
72
+ catch (error) {
73
+ }
74
+ }
75
+ info(message, ...args) {
76
+ console.log(chalk_1.default.blue('ℹ'), message, ...args);
77
+ this.writeToFile('INFO', message, ...args);
78
+ }
79
+ success(message, ...args) {
80
+ console.log(chalk_1.default.green('✅'), message, ...args);
81
+ this.writeToFile('SUCCESS', message, ...args);
82
+ }
83
+ warn(message, ...args) {
84
+ console.log(chalk_1.default.yellow('⚠️ '), message, ...args);
85
+ this.writeToFile('WARN', message, ...args);
86
+ }
87
+ error(message, ...args) {
88
+ console.log(chalk_1.default.red('❌'), message, ...args);
89
+ this.writeToFile('ERROR', message, ...args);
90
+ }
91
+ debug(message, ...args) {
92
+ this.writeToFile('DEBUG', message, ...args);
93
+ if (this.verbose || process.env.DEBUG) {
94
+ console.log(chalk_1.default.gray('🐛'), chalk_1.default.gray(message), ...args);
95
+ }
96
+ }
97
+ log(message, ...args) {
98
+ console.log(message, ...args);
99
+ }
100
+ title(message) {
101
+ console.log(chalk_1.default.blue.bold(`\n🎯 ${message}`));
102
+ }
103
+ subtitle(message) {
104
+ console.log(chalk_1.default.gray(`\n${message}`));
105
+ }
106
+ list(items, options = {}) {
107
+ const { indent = ' ', bullet = '•' } = options;
108
+ items.forEach(item => {
109
+ console.log(`${indent}${chalk_1.default.gray(bullet)} ${item}`);
110
+ });
111
+ }
112
+ calculateColumnWidths(headers, rows) {
113
+ const colWidths = headers.map(h => h.length);
114
+ rows.forEach(row => {
115
+ row.forEach((cell, i) => {
116
+ colWidths[i] = Math.max(colWidths[i] ?? 0, String(cell).length);
117
+ });
118
+ });
119
+ return colWidths;
120
+ }
121
+ table(headers, rows) {
122
+ const colWidths = this.calculateColumnWidths(headers, rows);
123
+ const headerRow = headers.map((h, i) => h.padEnd(colWidths[i] ?? 0)).join(' ');
124
+ console.log(chalk_1.default.bold(headerRow));
125
+ console.log(chalk_1.default.gray('-'.repeat(headerRow.length)));
126
+ rows.forEach(row => {
127
+ const rowStr = row.map((cell, i) => String(cell).padEnd(colWidths[i] ?? 0)).join(' ');
128
+ console.log(rowStr);
129
+ });
130
+ }
131
+ newline() {
132
+ console.log();
133
+ }
134
+ }
135
+ exports.Logger = Logger;
136
+ const logger = new Logger();
137
+ exports.logger = logger;
138
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ declare class Spinner {
2
+ private spinner;
3
+ private spinnerType;
4
+ start(text: string): this;
5
+ succeed(text?: string): this;
6
+ fail(text?: string): this;
7
+ info(text?: string): this;
8
+ warn(text?: string): this;
9
+ stop(): this;
10
+ update(text: string): this;
11
+ get isSpinning(): boolean;
12
+ get text(): string;
13
+ set text(value: string);
14
+ }
15
+ declare const spinner: Spinner;
16
+ export { spinner, Spinner };
17
+ //# sourceMappingURL=spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":"AAGA,cAAM,OAAO;IACX,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,WAAW,CAAoB;IAEvC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQzB,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ5B,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAQzB,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAQzB,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAQzB,IAAI,IAAI,IAAI;IAQZ,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO1B,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAIrB;CACF;AAED,QAAA,MAAM,OAAO,SAAgB,CAAC;AAE9B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,75 @@
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.Spinner = exports.spinner = void 0;
7
+ const ora_1 = __importDefault(require("ora"));
8
+ const cli_spinners_1 = __importDefault(require("cli-spinners"));
9
+ class Spinner {
10
+ spinner = null;
11
+ spinnerType = cli_spinners_1.default.dots;
12
+ start(text) {
13
+ this.spinner = (0, ora_1.default)({
14
+ text: text,
15
+ spinner: this.spinnerType
16
+ }).start();
17
+ return this;
18
+ }
19
+ succeed(text) {
20
+ if (this.spinner) {
21
+ this.spinner.succeed(text);
22
+ this.spinner = null;
23
+ }
24
+ return this;
25
+ }
26
+ fail(text) {
27
+ if (this.spinner) {
28
+ this.spinner.fail(text);
29
+ this.spinner = null;
30
+ }
31
+ return this;
32
+ }
33
+ info(text) {
34
+ if (this.spinner) {
35
+ this.spinner.info(text);
36
+ this.spinner = null;
37
+ }
38
+ return this;
39
+ }
40
+ warn(text) {
41
+ if (this.spinner) {
42
+ this.spinner.warn(text);
43
+ this.spinner = null;
44
+ }
45
+ return this;
46
+ }
47
+ stop() {
48
+ if (this.spinner) {
49
+ this.spinner.stop();
50
+ this.spinner = null;
51
+ }
52
+ return this;
53
+ }
54
+ update(text) {
55
+ if (this.spinner) {
56
+ this.spinner.text = text;
57
+ }
58
+ return this;
59
+ }
60
+ get isSpinning() {
61
+ return this.spinner?.isSpinning ?? false;
62
+ }
63
+ get text() {
64
+ return this.spinner?.text ?? '';
65
+ }
66
+ set text(value) {
67
+ if (this.spinner) {
68
+ this.spinner.text = value;
69
+ }
70
+ }
71
+ }
72
+ exports.Spinner = Spinner;
73
+ const spinner = new Spinner();
74
+ exports.spinner = spinner;
75
+ //# sourceMappingURL=spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":";;;;;;AAAA,8CAA+B;AAC/B,gEAAuC;AAEvC,MAAM,OAAO;IACH,OAAO,GAAe,IAAI,CAAC;IAC3B,WAAW,GAAG,sBAAW,CAAC,IAAI,CAAC;IAEvC,KAAK,CAAC,IAAY;QAChB,IAAI,CAAC,OAAO,GAAG,IAAA,aAAG,EAAC;YACjB,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,IAAI,CAAC,WAAW;SAC1B,CAAC,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,IAAa;QACnB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,IAAa;QAChB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,IAAa;QAChB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,IAAa;QAChB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI,KAAK,CAAC;IAC3C,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC;IAClC,CAAC;IAED,IAAI,IAAI,CAAC,KAAa;QACpB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC;QAC5B,CAAC;IACH,CAAC;CACF;AAIiB,0BAAO;AAFzB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAErB,0BAAO"}
package/package.json CHANGED
@@ -1,71 +1,71 @@
1
- {
2
- "name": "@sinch/cli",
3
- "version": "0.1.27-beta.0",
4
- "description": "Official Sinch CLI - Manage all Sinch products from your terminal",
5
- "main": "dist/index.js",
6
- "bin": {
7
- "sinch": "bin/sinch"
8
- },
9
- "scripts": {
10
- "start": "tsx src/index.ts",
11
- "dev": "tsx watch src/index.ts",
12
- "build": "tsc && node scripts/post-build.js",
13
- "build:prod": "tsup src/index.ts --format cjs --dts --clean --minify",
14
- "typecheck": "tsc --noEmit",
15
- "test": "jest",
16
- "test:e2e": "jest --config tests/e2e/jest.config.js",
17
- "test:e2e:staging": "jest --config tests/e2e/jest.config.js --env=staging",
18
- "prepublishOnly": "npm run build:prod"
19
- },
20
- "keywords": [],
21
- "author": "Sinch <support@sinch.com> (https://www.sinch.com)",
22
- "license": "MIT",
23
- "private": false,
24
- "publishConfig": {
25
- "access": "public",
26
- "registry": "https://registry.npmjs.org/"
27
- },
28
- "homepage": "https://www.sinch.com/products/apis/voice/",
29
- "files": [
30
- "dist/",
31
- "bin/",
32
- "README.md",
33
- "LICENSE"
34
- ],
35
- "dependencies": {
36
- "@sinch/sdk-core": "^1.2.1",
37
- "adm-zip": "^0.5.10",
38
- "axios": "^1.7.9",
39
- "blessed": "^0.1.81",
40
- "chalk": "^4.1.2",
41
- "chokidar": "^3.6.0",
42
- "cli-spinners": "^2.9.2",
43
- "cli-table3": "^0.6.3",
44
- "clipboardy": "^2.3.0",
45
- "commander": "^12.1.0",
46
- "eventsource": "^4.0.0",
47
- "form-data": "^4.0.0",
48
- "fs-extra": "^11.1.1",
49
- "inquirer": "8.2.7",
50
- "keytar": "^7.9.0",
51
- "ora": "^4.1.1"
52
- },
53
- "devDependencies": {
54
- "@types/adm-zip": "^0.5.7",
55
- "@types/blessed": "^0.1.25",
56
- "@types/fs-extra": "^11.0.4",
57
- "@types/inquirer": "^9.0.9",
58
- "@types/keytar": "^4.4.0",
59
- "@types/node": "^24.3.0",
60
- "execa": "^5.1.1",
61
- "jest": "^29.7.0",
62
- "nodemon": "^3.0.1",
63
- "tsup": "^8.5.0",
64
- "tsx": "^4.20.4",
65
- "typescript": "^5.9.2"
66
- },
67
- "engines": {
68
- "node": ">=20.0.0",
69
- "npm": ">=9.0.0"
70
- }
71
- }
1
+ {
2
+ "name": "@sinch/cli",
3
+ "version": "0.1.28-beta.0",
4
+ "description": "Official Sinch CLI - Manage all Sinch products from your terminal",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "sinch": "bin/sinch"
8
+ },
9
+ "scripts": {
10
+ "start": "tsx src/index.ts",
11
+ "dev": "tsx watch src/index.ts",
12
+ "build": "tsc && node scripts/post-build.js",
13
+ "build:prod": "tsup src/index.ts --format cjs --dts --clean --minify",
14
+ "typecheck": "tsc --noEmit",
15
+ "test": "jest",
16
+ "test:e2e": "jest --config tests/e2e/jest.config.js",
17
+ "test:e2e:staging": "jest --config tests/e2e/jest.config.js --env=staging",
18
+ "prepublishOnly": "npm run build"
19
+ },
20
+ "keywords": [],
21
+ "author": "Sinch <support@sinch.com> (https://www.sinch.com)",
22
+ "license": "MIT",
23
+ "private": false,
24
+ "publishConfig": {
25
+ "access": "public",
26
+ "registry": "https://registry.npmjs.org/"
27
+ },
28
+ "homepage": "https://www.sinch.com/products/apis/voice/",
29
+ "files": [
30
+ "dist/",
31
+ "bin/",
32
+ "README.md",
33
+ "LICENSE"
34
+ ],
35
+ "dependencies": {
36
+ "@sinch/sdk-core": "^1.2.1",
37
+ "adm-zip": "^0.5.10",
38
+ "axios": "^1.7.9",
39
+ "blessed": "^0.1.81",
40
+ "chalk": "^4.1.2",
41
+ "chokidar": "^3.6.0",
42
+ "cli-spinners": "^2.9.2",
43
+ "cli-table3": "^0.6.3",
44
+ "clipboardy": "^2.3.0",
45
+ "commander": "^12.1.0",
46
+ "eventsource": "^4.0.0",
47
+ "form-data": "^4.0.0",
48
+ "fs-extra": "^11.1.1",
49
+ "inquirer": "8.2.7",
50
+ "keytar": "^7.9.0",
51
+ "ora": "^4.1.1"
52
+ },
53
+ "devDependencies": {
54
+ "@types/adm-zip": "^0.5.7",
55
+ "@types/blessed": "^0.1.25",
56
+ "@types/fs-extra": "^11.0.4",
57
+ "@types/inquirer": "^9.0.9",
58
+ "@types/keytar": "^4.4.0",
59
+ "@types/node": "^24.3.0",
60
+ "execa": "^5.1.1",
61
+ "jest": "^29.7.0",
62
+ "nodemon": "^3.0.1",
63
+ "tsup": "^8.5.0",
64
+ "tsx": "^4.20.4",
65
+ "typescript": "^5.9.2"
66
+ },
67
+ "engines": {
68
+ "node": ">=20.0.0",
69
+ "npm": ">=9.0.0"
70
+ }
71
+ }