@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,185 @@
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
+ const commander_1 = require("commander");
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const logger_1 = require("../../utils/logger");
9
+ const spinner_1 = require("../../utils/spinner");
10
+ const utils_1 = require("./utils");
11
+ const send = new commander_1.Command('send');
12
+ send
13
+ .description('Send a message via Conversation API')
14
+ .argument('[recipient]', 'Recipient phone number (e.g., +15551234567)')
15
+ .argument('[message]', 'Message text to send')
16
+ .option('-c, --channel <channel>', 'Channel (SMS, WHATSAPP, MESSENGER, etc.)', 'SMS')
17
+ .option('-a, --app <app-id>', 'Conversation App ID (uses default if configured)')
18
+ .option('-m, --media <url>', 'Media URL for media messages')
19
+ .option('--caption <text>', 'Caption for media messages')
20
+ .option('-t, --template <name>', 'Template name for template messages')
21
+ .option('-p, --params <json>', 'Template parameters as JSON string')
22
+ .option('--location', 'Send location message')
23
+ .option('--lat <latitude>', 'Latitude for location messages', parseFloat)
24
+ .option('--lng <longitude>', 'Longitude for location messages', parseFloat)
25
+ .option('-n, --name <name>', 'Location name')
26
+ .option('--json', 'Output result as JSON')
27
+ .action(async (recipient, message, options) => {
28
+ try {
29
+ const sinchClient = await (0, utils_1.getSinchClient)();
30
+ if (!recipient || (!message && !options?.media && !options?.template && !options?.location)) {
31
+ const answers = await inquirer_1.default.prompt([
32
+ {
33
+ type: 'input',
34
+ name: 'recipient',
35
+ message: 'Enter recipient phone number:',
36
+ when: !recipient,
37
+ validate: (input) => {
38
+ if (!input)
39
+ return 'Recipient is required';
40
+ if (!input.startsWith('+'))
41
+ return 'Phone number must start with +';
42
+ return true;
43
+ }
44
+ },
45
+ {
46
+ type: 'input',
47
+ name: 'message',
48
+ message: 'Enter message:',
49
+ when: !message && !options?.media && !options?.template && !options?.location,
50
+ validate: (input) => input ? true : 'Message is required'
51
+ },
52
+ {
53
+ type: 'list',
54
+ name: 'channel',
55
+ message: 'Select channel:',
56
+ choices: ['SMS', 'WHATSAPP', 'MESSENGER', 'INSTAGRAM', 'VIBER', 'TELEGRAM', 'RCS', 'LINE'],
57
+ default: options?.channel || 'SMS',
58
+ when: !options?.channel
59
+ }
60
+ ]);
61
+ recipient = recipient || answers.recipient;
62
+ message = message || answers.message;
63
+ if (answers.channel)
64
+ options = { ...options, channel: answers.channel };
65
+ }
66
+ const appId = (0, utils_1.getAppId)(options?.app);
67
+ spinner_1.spinner.start('Sending message...');
68
+ try {
69
+ let result;
70
+ if (options?.location) {
71
+ if (!options.lat || !options.lng) {
72
+ spinner_1.spinner.fail('Location messages require --lat and --lng');
73
+ process.exit(1);
74
+ }
75
+ result = await sinchClient.conversation.messages.send({
76
+ app_id: appId,
77
+ recipient: {
78
+ identified_by: {
79
+ channel_identities: [{
80
+ channel: options.channel || 'SMS',
81
+ identity: recipient
82
+ }]
83
+ }
84
+ },
85
+ location_message: {
86
+ coordinates: {
87
+ latitude: options.lat,
88
+ longitude: options.lng
89
+ },
90
+ title: options.name
91
+ }
92
+ });
93
+ }
94
+ else if (options?.template) {
95
+ const params = options.params ? JSON.parse(options.params) : {};
96
+ result = await sinchClient.conversation.messages.send({
97
+ app_id: appId,
98
+ recipient: {
99
+ identified_by: {
100
+ channel_identities: [{
101
+ channel: options.channel || 'WHATSAPP',
102
+ identity: recipient
103
+ }]
104
+ }
105
+ },
106
+ template_message: {
107
+ template_reference: {
108
+ template_id: options.template,
109
+ version: params.version || '1'
110
+ },
111
+ parameters: params
112
+ }
113
+ });
114
+ }
115
+ else if (options?.media) {
116
+ result = await sinchClient.conversation.messages.send({
117
+ app_id: appId,
118
+ recipient: {
119
+ identified_by: {
120
+ channel_identities: [{
121
+ channel: options.channel || 'WHATSAPP',
122
+ identity: recipient
123
+ }]
124
+ }
125
+ },
126
+ media_message: {
127
+ url: options.media,
128
+ caption: options.caption
129
+ }
130
+ });
131
+ }
132
+ else {
133
+ result = await sinchClient.conversation.messages.send({
134
+ app_id: appId,
135
+ recipient: {
136
+ identified_by: {
137
+ channel_identities: [{
138
+ channel: options?.channel || 'SMS',
139
+ identity: recipient
140
+ }]
141
+ }
142
+ },
143
+ text_message: {
144
+ text: message
145
+ }
146
+ });
147
+ }
148
+ spinner_1.spinner.succeed('Message sent successfully!');
149
+ if (options?.json) {
150
+ console.log(JSON.stringify(result, null, 2));
151
+ }
152
+ else {
153
+ logger_1.logger.newline();
154
+ logger_1.logger.info(`Message ID: ${result.message_id}`);
155
+ logger_1.logger.info(`Recipient: ${recipient}`);
156
+ logger_1.logger.info(`Channel: ${options?.channel || 'SMS'}`);
157
+ }
158
+ }
159
+ catch (error) {
160
+ spinner_1.spinner.fail('Failed to send message');
161
+ if (error.message?.includes('WHATSAPP') || error.message?.includes('channel not configured')) {
162
+ logger_1.logger.error(`Error: WhatsApp channel not configured for app '${appId}'`);
163
+ logger_1.logger.newline();
164
+ logger_1.logger.info('To use WhatsApp, configure WhatsApp credentials in your Conversation app:');
165
+ logger_1.logger.info(' 1. Visit https://dashboard.sinch.com/convapi/apps');
166
+ logger_1.logger.info(' 2. Add WhatsApp channel credentials');
167
+ logger_1.logger.info(' 3. Verify your WhatsApp Business Account');
168
+ logger_1.logger.newline();
169
+ logger_1.logger.info('Or use SMS (no additional setup required):');
170
+ logger_1.logger.info(` sinch conversation send ${recipient} "${message}"`);
171
+ }
172
+ else {
173
+ logger_1.logger.error(`Error: ${error.message}`);
174
+ }
175
+ process.exit(1);
176
+ }
177
+ }
178
+ catch (error) {
179
+ spinner_1.spinner.stop();
180
+ logger_1.logger.error(`Failed to send message: ${error.message}`);
181
+ process.exit(1);
182
+ }
183
+ });
184
+ module.exports = send;
185
+ //# sourceMappingURL=send.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/commands/conversations/send.ts"],"names":[],"mappings":";;;;;AAAA,yCAAoC;AACpC,wDAAgC;AAChC,+CAA4C;AAC5C,iDAA8C;AAC9C,mCAAmD;AAgBnD,MAAM,IAAI,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC,CAAC;AACjC,IAAI;KACD,WAAW,CAAC,qCAAqC,CAAC;KAClD,QAAQ,CAAC,aAAa,EAAE,6CAA6C,CAAC;KACtE,QAAQ,CAAC,WAAW,EAAE,sBAAsB,CAAC;KAC7C,MAAM,CAAC,yBAAyB,EAAE,0CAA0C,EAAE,KAAK,CAAC;KACpF,MAAM,CAAC,oBAAoB,EAAE,kDAAkD,CAAC;KAChF,MAAM,CAAC,mBAAmB,EAAE,8BAA8B,CAAC;KAC3D,MAAM,CAAC,kBAAkB,EAAE,4BAA4B,CAAC;KACxD,MAAM,CAAC,uBAAuB,EAAE,qCAAqC,CAAC;KACtE,MAAM,CAAC,qBAAqB,EAAE,oCAAoC,CAAC;KACnE,MAAM,CAAC,YAAY,EAAE,uBAAuB,CAAC;KAC7C,MAAM,CAAC,kBAAkB,EAAE,gCAAgC,EAAE,UAAU,CAAC;KACxE,MAAM,CAAC,mBAAmB,EAAE,iCAAiC,EAAE,UAAU,CAAC;KAC1E,MAAM,CAAC,mBAAmB,EAAE,eAAe,CAAC;KAC5C,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,SAAkB,EAAE,OAAgB,EAAE,OAAqB,EAAE,EAAE;IAC5E,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,IAAA,sBAAc,GAAE,CAAC;QAE3C,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,OAAO,EAAE,QAAQ,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC5F,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;gBACpC;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,+BAA+B;oBACxC,IAAI,EAAE,CAAC,SAAS;oBAChB,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;wBAC1B,IAAI,CAAC,KAAK;4BAAE,OAAO,uBAAuB,CAAC;wBAC3C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;4BAAE,OAAO,gCAAgC,CAAC;wBACpE,OAAO,IAAI,CAAC;oBACd,CAAC;iBACF;gBACD;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,gBAAgB;oBACzB,IAAI,EAAE,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,OAAO,EAAE,QAAQ,IAAI,CAAC,OAAO,EAAE,QAAQ;oBAC7E,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB;iBAClE;gBACD;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,iBAAiB;oBAC1B,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC;oBAC1F,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,KAAK;oBAClC,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO;iBACxB;aACF,CAAC,CAAC;YAEH,SAAS,GAAG,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC;YAC3C,OAAO,GAAG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;YACrC,IAAI,OAAO,CAAC,OAAO;gBAAE,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1E,CAAC;QAED,MAAM,KAAK,GAAG,IAAA,gBAAQ,EAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAErC,iBAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAEpC,IAAI,CAAC;YACH,IAAI,MAAM,CAAC;YAEX,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;gBACtB,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;oBACjC,iBAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;oBAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBAED,MAAM,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACpD,MAAM,EAAE,KAAK;oBACb,SAAS,EAAE;wBACT,aAAa,EAAE;4BACb,kBAAkB,EAAE,CAAC;oCACnB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;oCACjC,QAAQ,EAAE,SAAU;iCACrB,CAAC;yBACH;qBACF;oBACD,gBAAgB,EAAE;wBAChB,WAAW,EAAE;4BACX,QAAQ,EAAE,OAAO,CAAC,GAAG;4BACrB,SAAS,EAAE,OAAO,CAAC,GAAG;yBACvB;wBACD,KAAK,EAAE,OAAO,CAAC,IAAI;qBACpB;iBACF,CAAC,CAAC;YACL,CAAC;iBACI,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAEhE,MAAM,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACpD,MAAM,EAAE,KAAK;oBACb,SAAS,EAAE;wBACT,aAAa,EAAE;4BACb,kBAAkB,EAAE,CAAC;oCACnB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,UAAU;oCACtC,QAAQ,EAAE,SAAU;iCACrB,CAAC;yBACH;qBACF;oBACD,gBAAgB,EAAE;wBAChB,kBAAkB,EAAE;4BAClB,WAAW,EAAE,OAAO,CAAC,QAAQ;4BAC7B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,GAAG;yBAC/B;wBACD,UAAU,EAAE,MAAM;qBACnB;iBACF,CAAC,CAAC;YACL,CAAC;iBACI,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;gBACxB,MAAM,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACpD,MAAM,EAAE,KAAK;oBACb,SAAS,EAAE;wBACT,aAAa,EAAE;4BACb,kBAAkB,EAAE,CAAC;oCACnB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,UAAU;oCACtC,QAAQ,EAAE,SAAU;iCACrB,CAAC;yBACH;qBACF;oBACD,aAAa,EAAE;wBACb,GAAG,EAAE,OAAO,CAAC,KAAK;wBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;qBACzB;iBACF,CAAC,CAAC;YACL,CAAC;iBACI,CAAC;gBACJ,MAAM,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACpD,MAAM,EAAE,KAAK;oBACb,SAAS,EAAE;wBACT,aAAa,EAAE;4BACb,kBAAkB,EAAE,CAAC;oCACnB,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,KAAK;oCAClC,QAAQ,EAAE,SAAU;iCACrB,CAAC;yBACH;qBACF;oBACD,YAAY,EAAE;wBACZ,IAAI,EAAE,OAAQ;qBACf;iBACF,CAAC,CAAC;YACL,CAAC;YAED,iBAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;YAE9C,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,eAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,eAAM,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;gBAChD,eAAM,CAAC,IAAI,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;gBACvC,eAAM,CAAC,IAAI,CAAC,YAAY,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC;YACvD,CAAC;QAEH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,iBAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAEvC,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;gBAC7F,eAAM,CAAC,KAAK,CAAC,mDAAmD,KAAK,GAAG,CAAC,CAAC;gBAC1E,eAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,eAAM,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;gBACzF,eAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;gBACnE,eAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;gBACrD,eAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;gBAC1D,eAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,eAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;gBAC1D,eAAM,CAAC,IAAI,CAAC,6BAA6B,SAAS,KAAK,OAAO,GAAG,CAAC,CAAC;YACrE,CAAC;iBAAM,CAAC;gBACN,eAAM,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1C,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IAEH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,iBAAO,CAAC,IAAI,EAAE,CAAC;QACf,eAAM,CAAC,KAAK,CAAC,2BAA2B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function requireAuth(): Promise<void>;
2
+ export declare function getSinchClient(): Promise<any>;
3
+ export declare function getAppId(providedAppId?: string): string;
4
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/commands/conversations/utils.ts"],"names":[],"mappings":"AAGA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAQjD;AAED,wBAAsB,cAAc,iBAGnC;AAED,wBAAgB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAWvD"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.requireAuth = requireAuth;
4
+ exports.getSinchClient = getSinchClient;
5
+ exports.getAppId = getAppId;
6
+ const config_1 = require("../../lib/config");
7
+ const logger_1 = require("../../utils/logger");
8
+ async function requireAuth() {
9
+ await config_1.config.load();
10
+ const hasCredentials = await config_1.config.hasCredentials();
11
+ if (!hasCredentials) {
12
+ logger_1.logger.error('Not authenticated. Run "sinch auth login" first.');
13
+ process.exit(1);
14
+ }
15
+ }
16
+ async function getSinchClient() {
17
+ await requireAuth();
18
+ return await config_1.config.createSinchClient();
19
+ }
20
+ function getAppId(providedAppId) {
21
+ const appId = providedAppId || config_1.config.get('conversation-app-id');
22
+ if (!appId) {
23
+ logger_1.logger.error('No Conversation App ID configured.');
24
+ logger_1.logger.info('Set default: sinch config set conversation-app-id <id>');
25
+ logger_1.logger.info('Or specify: --app <app-id>');
26
+ process.exit(1);
27
+ }
28
+ return appId;
29
+ }
30
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/commands/conversations/utils.ts"],"names":[],"mappings":";;AAGA,kCAQC;AAED,wCAGC;AAED,4BAWC;AA7BD,6CAA0C;AAC1C,+CAA4C;AAErC,KAAK,UAAU,WAAW;IAC/B,MAAM,eAAM,CAAC,IAAI,EAAE,CAAC;IAEpB,MAAM,cAAc,GAAG,MAAM,eAAM,CAAC,cAAc,EAAE,CAAC;IACrD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,eAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,cAAc;IAClC,MAAM,WAAW,EAAE,CAAC;IACpB,OAAO,MAAM,eAAM,CAAC,iBAAiB,EAAE,CAAC;AAC1C,CAAC;AAED,SAAgB,QAAQ,CAAC,aAAsB;IAC7C,MAAM,KAAK,GAAG,aAAa,IAAI,eAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAEjE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,eAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACnD,eAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACtE,eAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=webhooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../../src/commands/conversations/webhooks.ts"],"names":[],"mappings":""}
@@ -0,0 +1,238 @@
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
+ const commander_1 = require("commander");
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const config_1 = require("../../lib/config");
9
+ const logger_1 = require("../../utils/logger");
10
+ const spinner_1 = require("../../utils/spinner");
11
+ const utils_1 = require("./utils");
12
+ const webhooks = new commander_1.Command('webhooks');
13
+ webhooks.description('Manage webhooks for Conversation apps');
14
+ webhooks
15
+ .command('list')
16
+ .description('List webhooks for a Conversation app')
17
+ .option('-a, --app <app-id>', 'Conversation App ID')
18
+ .option('--json', 'Output result as JSON')
19
+ .action(async (options) => {
20
+ try {
21
+ const appId = (0, utils_1.getAppId)(options.app);
22
+ const sinchClient = await (0, utils_1.getSinchClient)();
23
+ spinner_1.spinner.start('Fetching webhooks...');
24
+ const result = await sinchClient.conversation.webhooks.list({
25
+ app_id: appId
26
+ });
27
+ spinner_1.spinner.succeed(`Retrieved ${result.webhooks?.length || 0} webhooks`);
28
+ if (options.json) {
29
+ console.log(JSON.stringify(result, null, 2));
30
+ }
31
+ else {
32
+ logger_1.logger.newline();
33
+ if (result.webhooks && result.webhooks.length > 0) {
34
+ result.webhooks.forEach((webhook) => {
35
+ logger_1.logger.info(`[${webhook.id}]`);
36
+ logger_1.logger.info(` URL: ${webhook.target}`);
37
+ logger_1.logger.info(` Triggers: ${webhook.triggers?.join(', ') || 'N/A'}`);
38
+ logger_1.logger.info(` Secret: ${webhook.secret ? '********' : 'Not set'}`);
39
+ logger_1.logger.newline();
40
+ });
41
+ }
42
+ else {
43
+ logger_1.logger.info('No webhooks found for this app');
44
+ }
45
+ }
46
+ }
47
+ catch (error) {
48
+ spinner_1.spinner.stop();
49
+ logger_1.logger.error(`Failed to list webhooks: ${error.message}`);
50
+ process.exit(1);
51
+ }
52
+ });
53
+ webhooks
54
+ .command('create')
55
+ .description('Create a new webhook for a Conversation app')
56
+ .option('-a, --app <app-id>', 'Conversation App ID')
57
+ .option('-u, --url <url>', 'Webhook URL')
58
+ .option('-t, --triggers <triggers>', 'Comma-separated list of triggers (e.g., MESSAGE_INBOUND,MESSAGE_DELIVERY)')
59
+ .option('-s, --secret <secret>', 'Webhook secret for signature validation')
60
+ .option('--json', 'Output result as JSON')
61
+ .action(async (options) => {
62
+ try {
63
+ await config_1.config.load();
64
+ const hasCredentials = await config_1.config.hasCredentials();
65
+ if (!hasCredentials) {
66
+ logger_1.logger.error('Not authenticated. Run "sinch auth login" first.');
67
+ process.exit(1);
68
+ }
69
+ let appId = options.app;
70
+ if (!appId) {
71
+ const defaultAppId = config_1.config.get('conversation-app-id');
72
+ if (defaultAppId) {
73
+ appId = defaultAppId;
74
+ logger_1.logger.info(`Using default app: ${appId}`);
75
+ }
76
+ }
77
+ if (!appId || !options.url || !options.triggers) {
78
+ const answers = await inquirer_1.default.prompt([
79
+ {
80
+ type: 'input',
81
+ name: 'appId',
82
+ message: 'Enter Conversation App ID:',
83
+ when: !appId,
84
+ validate: (input) => input ? true : 'App ID is required'
85
+ },
86
+ {
87
+ type: 'input',
88
+ name: 'url',
89
+ message: 'Enter webhook URL:',
90
+ when: !options.url,
91
+ validate: (input) => {
92
+ if (!input)
93
+ return 'URL is required';
94
+ try {
95
+ new URL(input);
96
+ return true;
97
+ }
98
+ catch {
99
+ return 'Please enter a valid URL';
100
+ }
101
+ }
102
+ },
103
+ {
104
+ type: 'checkbox',
105
+ name: 'triggers',
106
+ message: 'Select webhook triggers:',
107
+ when: !options.triggers,
108
+ choices: [
109
+ 'MESSAGE_INBOUND',
110
+ 'MESSAGE_DELIVERY',
111
+ 'MESSAGE_SUBMIT',
112
+ 'EVENT_INBOUND',
113
+ 'CONVERSATION_START',
114
+ 'CONVERSATION_STOP',
115
+ 'CONTACT_CREATE',
116
+ 'CONTACT_DELETE',
117
+ 'CONTACT_MERGE',
118
+ 'CONTACT_UPDATE'
119
+ ],
120
+ validate: (input) => input.length > 0 ? true : 'Select at least one trigger'
121
+ },
122
+ {
123
+ type: 'input',
124
+ name: 'secret',
125
+ message: 'Enter webhook secret (optional, press enter to skip):'
126
+ }
127
+ ]);
128
+ appId = appId || answers.appId;
129
+ options.url = options.url || answers.url;
130
+ options.triggers = options.triggers || answers.triggers.join(',');
131
+ options.secret = options.secret || answers.secret;
132
+ }
133
+ const sinchClient = await (0, utils_1.getSinchClient)();
134
+ const triggers = options.triggers.split(',').map(t => t.trim());
135
+ spinner_1.spinner.start('Creating webhook...');
136
+ const webhook = await sinchClient.conversation.webhooks.create({
137
+ app_id: appId,
138
+ target: options.url,
139
+ triggers,
140
+ ...(options.secret && { secret: options.secret })
141
+ });
142
+ spinner_1.spinner.succeed('Webhook created successfully!');
143
+ if (options.json) {
144
+ console.log(JSON.stringify(webhook, null, 2));
145
+ }
146
+ else {
147
+ logger_1.logger.newline();
148
+ logger_1.logger.info(`Webhook ID: ${webhook.id}`);
149
+ logger_1.logger.info(`URL: ${webhook.target}`);
150
+ logger_1.logger.info(`Triggers: ${webhook.triggers?.join(', ')}`);
151
+ if (options.secret) {
152
+ logger_1.logger.info('Secret: ********');
153
+ }
154
+ }
155
+ }
156
+ catch (error) {
157
+ spinner_1.spinner.stop();
158
+ logger_1.logger.error(`Failed to create webhook: ${error.message}`);
159
+ process.exit(1);
160
+ }
161
+ });
162
+ webhooks
163
+ .command('update')
164
+ .description('Update a webhook')
165
+ .argument('<webhook-id>', 'Webhook ID to update')
166
+ .option('-u, --url <url>', 'New webhook URL')
167
+ .option('-t, --triggers <triggers>', 'New comma-separated list of triggers')
168
+ .option('-s, --secret <secret>', 'New webhook secret')
169
+ .option('--json', 'Output result as JSON')
170
+ .action(async (webhookId, options) => {
171
+ try {
172
+ if (!options.url && !options.triggers && !options.secret) {
173
+ logger_1.logger.error('At least one update field is required (--url, --triggers, or --secret)');
174
+ process.exit(1);
175
+ }
176
+ const sinchClient = await (0, utils_1.getSinchClient)();
177
+ const updateData = {};
178
+ if (options.url)
179
+ updateData.target = options.url;
180
+ if (options.triggers)
181
+ updateData.triggers = options.triggers.split(',').map(t => t.trim());
182
+ if (options.secret)
183
+ updateData.secret = options.secret;
184
+ spinner_1.spinner.start('Updating webhook...');
185
+ const webhook = await sinchClient.conversation.webhooks.update({
186
+ webhook_id: webhookId,
187
+ ...updateData
188
+ });
189
+ spinner_1.spinner.succeed('Webhook updated successfully!');
190
+ if (options.json) {
191
+ console.log(JSON.stringify(webhook, null, 2));
192
+ }
193
+ else {
194
+ logger_1.logger.newline();
195
+ logger_1.logger.info(`Webhook ID: ${webhook.id}`);
196
+ logger_1.logger.info(`URL: ${webhook.target}`);
197
+ logger_1.logger.info(`Triggers: ${webhook.triggers?.join(', ')}`);
198
+ }
199
+ }
200
+ catch (error) {
201
+ spinner_1.spinner.stop();
202
+ logger_1.logger.error(`Failed to update webhook: ${error.message}`);
203
+ process.exit(1);
204
+ }
205
+ });
206
+ webhooks
207
+ .command('delete')
208
+ .description('Delete a webhook')
209
+ .argument('<webhook-id>', 'Webhook ID to delete')
210
+ .action(async (webhookId) => {
211
+ try {
212
+ const { confirm } = await inquirer_1.default.prompt([
213
+ {
214
+ type: 'confirm',
215
+ name: 'confirm',
216
+ message: `Are you sure you want to delete webhook ${webhookId}?`,
217
+ default: false
218
+ }
219
+ ]);
220
+ if (!confirm) {
221
+ logger_1.logger.info('Deletion cancelled');
222
+ return;
223
+ }
224
+ const sinchClient = await (0, utils_1.getSinchClient)();
225
+ spinner_1.spinner.start('Deleting webhook...');
226
+ await sinchClient.conversation.webhooks.delete({
227
+ webhook_id: webhookId
228
+ });
229
+ spinner_1.spinner.succeed('Webhook deleted successfully');
230
+ }
231
+ catch (error) {
232
+ spinner_1.spinner.stop();
233
+ logger_1.logger.error(`Failed to delete webhook: ${error.message}`);
234
+ process.exit(1);
235
+ }
236
+ });
237
+ module.exports = webhooks;
238
+ //# sourceMappingURL=webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../../src/commands/conversations/webhooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":""}
@@ -0,0 +1,93 @@
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
+ const chalk_1 = __importDefault(require("chalk"));
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const commander_1 = require("commander");
9
+ const api_1 = require("../lib/api");
10
+ const config_1 = require("../lib/config");
11
+ const logger_1 = require("../utils/logger");
12
+ const spinner_1 = require("../utils/spinner");
13
+ const deleteCommand = new commander_1.Command('delete');
14
+ deleteCommand
15
+ .alias('del')
16
+ .description('Delete a function')
17
+ .argument('<function-id>', 'Function ID to delete')
18
+ .option('-f, --force', 'Skip confirmation')
19
+ .action(async (functionId, options) => {
20
+ try {
21
+ await config_1.config.load();
22
+ const api = new api_1.SinchAPI(config_1.config.getApiConfig());
23
+ spinner_1.spinner.start('Loading function details...');
24
+ const fn = await api.getFunction(functionId);
25
+ spinner_1.spinner.stop();
26
+ logger_1.logger.newline();
27
+ logger_1.logger.info('🗑️ Function to delete:');
28
+ logger_1.logger.info(` Name: ${chalk_1.default.cyan(fn.name)}`);
29
+ logger_1.logger.info(` ID: ${chalk_1.default.gray(fn.id)}`);
30
+ logger_1.logger.info(` Runtime: ${chalk_1.default.yellow(fn.runtime)}`);
31
+ logger_1.logger.info(` Status: ${getStatusDisplay(fn.status)}`);
32
+ logger_1.logger.info(` Created: ${new Date(fn.createdAt).toLocaleString()}`);
33
+ if (fn.containerAppUrl) {
34
+ logger_1.logger.info(` URL: ${chalk_1.default.blue(fn.containerAppUrl)}`);
35
+ }
36
+ if (!options.force) {
37
+ logger_1.logger.newline();
38
+ logger_1.logger.warn('⚠️ This action cannot be undone!');
39
+ const { confirm } = await inquirer_1.default.prompt([
40
+ {
41
+ type: 'confirm',
42
+ name: 'confirm',
43
+ message: `Are you sure you want to delete function '${fn.name}'?`,
44
+ default: false
45
+ }
46
+ ]);
47
+ if (!confirm) {
48
+ logger_1.logger.info('Deletion cancelled');
49
+ return;
50
+ }
51
+ }
52
+ spinner_1.spinner.start('Deleting function...');
53
+ await api.deleteFunction(functionId);
54
+ spinner_1.spinner.succeed(`Function '${fn.name}' deleted successfully`);
55
+ if (config_1.config.isInProject()) {
56
+ const projectConfig = config_1.config.getProjectConfig();
57
+ if (projectConfig?.functionId === functionId) {
58
+ config_1.config.set('functionId', undefined, true);
59
+ await config_1.config.saveProjectConfig();
60
+ logger_1.logger.newline();
61
+ logger_1.logger.info('💡 Removed function ID from sinch.json');
62
+ logger_1.logger.info(' Deploy again with: sinch functions deploy');
63
+ }
64
+ }
65
+ logger_1.logger.newline();
66
+ logger_1.logger.info('💡 Next steps:');
67
+ logger_1.logger.info(` • List remaining functions: ${chalk_1.default.cyan('sinch functions list')}`);
68
+ logger_1.logger.info(` • Deploy new function: ${chalk_1.default.cyan('sinch functions deploy')}`);
69
+ }
70
+ catch (error) {
71
+ spinner_1.spinner.stop();
72
+ if (error.message.includes('404') || error.message.includes('not found')) {
73
+ logger_1.logger.error(`Function '${functionId}' not found`);
74
+ logger_1.logger.info('💡 List available functions with:');
75
+ logger_1.logger.info(` ${chalk_1.default.cyan('sinch functions list')}`);
76
+ }
77
+ else {
78
+ logger_1.logger.error(`Failed to delete function: ${error.message}`);
79
+ }
80
+ process.exit(1);
81
+ }
82
+ });
83
+ function getStatusDisplay(status) {
84
+ const statusColors = {
85
+ 'Running': chalk_1.default.green('✅ Running'),
86
+ 'Failed': chalk_1.default.red('❌ Failed'),
87
+ 'Pending': chalk_1.default.yellow('⏳ Pending'),
88
+ 'Building': chalk_1.default.blue('🔨 Building')
89
+ };
90
+ return statusColors[status] || chalk_1.default.gray(status);
91
+ }
92
+ module.exports = deleteCommand;
93
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":""}