@instantkom/cli 3.129.2

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 (227) hide show
  1. package/README.md +34 -0
  2. package/bin/run.js +3 -0
  3. package/dist/api-client.d.ts +55 -0
  4. package/dist/api-client.js +199 -0
  5. package/dist/auth/device-flow-client.d.ts +22 -0
  6. package/dist/auth/device-flow-client.js +70 -0
  7. package/dist/auth/token-resolver.d.ts +31 -0
  8. package/dist/auth/token-resolver.js +48 -0
  9. package/dist/auth/token-store.d.ts +13 -0
  10. package/dist/auth/token-store.js +39 -0
  11. package/dist/base-command.d.ts +18 -0
  12. package/dist/base-command.js +84 -0
  13. package/dist/commands/ai/reply.d.ts +18 -0
  14. package/dist/commands/ai/reply.js +46 -0
  15. package/dist/commands/auth/login.d.ts +15 -0
  16. package/dist/commands/auth/login.js +37 -0
  17. package/dist/commands/auth/logout.d.ts +14 -0
  18. package/dist/commands/auth/logout.js +17 -0
  19. package/dist/commands/auth/tokens/create.d.ts +17 -0
  20. package/dist/commands/auth/tokens/create.js +62 -0
  21. package/dist/commands/auth/tokens/list.d.ts +14 -0
  22. package/dist/commands/auth/tokens/list.js +41 -0
  23. package/dist/commands/auth/tokens/revoke.d.ts +20 -0
  24. package/dist/commands/auth/tokens/revoke.js +41 -0
  25. package/dist/commands/autocomplete/script.d.ts +11 -0
  26. package/dist/commands/autocomplete/script.js +90 -0
  27. package/dist/commands/autocomplete.d.ts +13 -0
  28. package/dist/commands/autocomplete.js +95 -0
  29. package/dist/commands/bots/create.d.ts +22 -0
  30. package/dist/commands/bots/create.js +39 -0
  31. package/dist/commands/bots/delete.d.ts +20 -0
  32. package/dist/commands/bots/delete.js +19 -0
  33. package/dist/commands/bots/env-vars/bots.d.ts +20 -0
  34. package/dist/commands/bots/env-vars/bots.js +18 -0
  35. package/dist/commands/bots/env-vars/create.d.ts +18 -0
  36. package/dist/commands/bots/env-vars/create.js +28 -0
  37. package/dist/commands/bots/env-vars/delete.d.ts +20 -0
  38. package/dist/commands/bots/env-vars/delete.js +19 -0
  39. package/dist/commands/bots/env-vars/get.d.ts +20 -0
  40. package/dist/commands/bots/env-vars/get.js +19 -0
  41. package/dist/commands/bots/env-vars/list.d.ts +18 -0
  42. package/dist/commands/bots/env-vars/list.js +28 -0
  43. package/dist/commands/bots/env-vars/update.d.ts +23 -0
  44. package/dist/commands/bots/env-vars/update.js +29 -0
  45. package/dist/commands/bots/env-vars/values/delete.d.ts +20 -0
  46. package/dist/commands/bots/env-vars/values/delete.js +18 -0
  47. package/dist/commands/bots/env-vars/values/update.d.ts +23 -0
  48. package/dist/commands/bots/env-vars/values/update.js +28 -0
  49. package/dist/commands/bots/env-vars/values.d.ts +24 -0
  50. package/dist/commands/bots/env-vars/values.js +30 -0
  51. package/dist/commands/bots/filters/create.d.ts +28 -0
  52. package/dist/commands/bots/filters/create.js +38 -0
  53. package/dist/commands/bots/filters/delete.d.ts +24 -0
  54. package/dist/commands/bots/filters/delete.js +19 -0
  55. package/dist/commands/bots/filters/get.d.ts +24 -0
  56. package/dist/commands/bots/filters/get.js +19 -0
  57. package/dist/commands/bots/filters/list.d.ts +24 -0
  58. package/dist/commands/bots/filters/list.js +30 -0
  59. package/dist/commands/bots/filters/update.d.ts +32 -0
  60. package/dist/commands/bots/filters/update.js +39 -0
  61. package/dist/commands/bots/get.d.ts +20 -0
  62. package/dist/commands/bots/get.js +19 -0
  63. package/dist/commands/bots/list.d.ts +21 -0
  64. package/dist/commands/bots/list.js +34 -0
  65. package/dist/commands/bots/matches.d.ts +23 -0
  66. package/dist/commands/bots/matches.js +28 -0
  67. package/dist/commands/bots/tags/add.d.ts +24 -0
  68. package/dist/commands/bots/tags/add.js +19 -0
  69. package/dist/commands/bots/tags/list.d.ts +20 -0
  70. package/dist/commands/bots/tags/list.js +18 -0
  71. package/dist/commands/bots/tags/remove.d.ts +24 -0
  72. package/dist/commands/bots/tags/remove.js +19 -0
  73. package/dist/commands/bots/update.d.ts +27 -0
  74. package/dist/commands/bots/update.js +36 -0
  75. package/dist/commands/broadcast/create.d.ts +25 -0
  76. package/dist/commands/broadcast/create.js +117 -0
  77. package/dist/commands/channels/create.d.ts +19 -0
  78. package/dist/commands/channels/create.js +43 -0
  79. package/dist/commands/channels/get.d.ts +20 -0
  80. package/dist/commands/channels/get.js +25 -0
  81. package/dist/commands/channels/kpis.d.ts +21 -0
  82. package/dist/commands/channels/kpis.js +29 -0
  83. package/dist/commands/channels/list.d.ts +19 -0
  84. package/dist/commands/channels/list.js +43 -0
  85. package/dist/commands/channels/update.d.ts +24 -0
  86. package/dist/commands/channels/update.js +43 -0
  87. package/dist/commands/chats/reply.d.ts +21 -0
  88. package/dist/commands/chats/reply.js +28 -0
  89. package/dist/commands/config/get.d.ts +17 -0
  90. package/dist/commands/config/get.js +29 -0
  91. package/dist/commands/config/set.d.ts +18 -0
  92. package/dist/commands/config/set.js +30 -0
  93. package/dist/commands/config/unset.d.ts +17 -0
  94. package/dist/commands/config/unset.js +25 -0
  95. package/dist/commands/contacts/create.d.ts +18 -0
  96. package/dist/commands/contacts/create.js +39 -0
  97. package/dist/commands/contacts/delete.d.ts +20 -0
  98. package/dist/commands/contacts/delete.js +25 -0
  99. package/dist/commands/contacts/export.d.ts +19 -0
  100. package/dist/commands/contacts/export.js +50 -0
  101. package/dist/commands/contacts/get.d.ts +20 -0
  102. package/dist/commands/contacts/get.js +25 -0
  103. package/dist/commands/contacts/import.d.ts +16 -0
  104. package/dist/commands/contacts/import.js +62 -0
  105. package/dist/commands/contacts/list.d.ts +25 -0
  106. package/dist/commands/contacts/list.js +71 -0
  107. package/dist/commands/contacts/update.d.ts +23 -0
  108. package/dist/commands/contacts/update.js +39 -0
  109. package/dist/commands/exports/create.d.ts +23 -0
  110. package/dist/commands/exports/create.js +69 -0
  111. package/dist/commands/exports/delete.d.ts +20 -0
  112. package/dist/commands/exports/delete.js +25 -0
  113. package/dist/commands/exports/download.d.ts +21 -0
  114. package/dist/commands/exports/download.js +37 -0
  115. package/dist/commands/exports/get.d.ts +20 -0
  116. package/dist/commands/exports/get.js +25 -0
  117. package/dist/commands/exports/list.d.ts +18 -0
  118. package/dist/commands/exports/list.js +39 -0
  119. package/dist/commands/flow/edges/create.d.ts +25 -0
  120. package/dist/commands/flow/edges/create.js +32 -0
  121. package/dist/commands/flow/edges/delete.d.ts +24 -0
  122. package/dist/commands/flow/edges/delete.js +19 -0
  123. package/dist/commands/flow/edges/get.d.ts +24 -0
  124. package/dist/commands/flow/edges/get.js +19 -0
  125. package/dist/commands/flow/edges/list.d.ts +20 -0
  126. package/dist/commands/flow/edges/list.js +18 -0
  127. package/dist/commands/flow/edges/update.d.ts +29 -0
  128. package/dist/commands/flow/edges/update.js +33 -0
  129. package/dist/commands/flow/nodes/create.d.ts +25 -0
  130. package/dist/commands/flow/nodes/create.js +32 -0
  131. package/dist/commands/flow/nodes/delete.d.ts +24 -0
  132. package/dist/commands/flow/nodes/delete.js +19 -0
  133. package/dist/commands/flow/nodes/get.d.ts +24 -0
  134. package/dist/commands/flow/nodes/get.js +19 -0
  135. package/dist/commands/flow/nodes/list.d.ts +20 -0
  136. package/dist/commands/flow/nodes/list.js +18 -0
  137. package/dist/commands/flow/nodes/update.d.ts +29 -0
  138. package/dist/commands/flow/nodes/update.js +33 -0
  139. package/dist/commands/flows/create.d.ts +20 -0
  140. package/dist/commands/flows/create.js +32 -0
  141. package/dist/commands/flows/delete.d.ts +20 -0
  142. package/dist/commands/flows/delete.js +19 -0
  143. package/dist/commands/flows/get.d.ts +20 -0
  144. package/dist/commands/flows/get.js +19 -0
  145. package/dist/commands/flows/list.d.ts +19 -0
  146. package/dist/commands/flows/list.js +30 -0
  147. package/dist/commands/flows/update.d.ts +25 -0
  148. package/dist/commands/flows/update.js +33 -0
  149. package/dist/commands/send.d.ts +23 -0
  150. package/dist/commands/send.js +129 -0
  151. package/dist/commands/status.d.ts +23 -0
  152. package/dist/commands/status.js +81 -0
  153. package/dist/commands/tail.d.ts +15 -0
  154. package/dist/commands/tail.js +36 -0
  155. package/dist/commands/templates/get.d.ts +20 -0
  156. package/dist/commands/templates/get.js +24 -0
  157. package/dist/commands/templates/list.d.ts +18 -0
  158. package/dist/commands/templates/list.js +37 -0
  159. package/dist/commands/templates/render.d.ts +21 -0
  160. package/dist/commands/templates/render.js +30 -0
  161. package/dist/commands/ticket/messages/create.d.ts +22 -0
  162. package/dist/commands/ticket/messages/create.js +26 -0
  163. package/dist/commands/ticket/messages/delete.d.ts +24 -0
  164. package/dist/commands/ticket/messages/delete.js +20 -0
  165. package/dist/commands/ticket/messages/get.d.ts +24 -0
  166. package/dist/commands/ticket/messages/get.js +19 -0
  167. package/dist/commands/ticket/messages/list.d.ts +20 -0
  168. package/dist/commands/ticket/messages/list.js +18 -0
  169. package/dist/commands/tickets/create.d.ts +22 -0
  170. package/dist/commands/tickets/create.js +34 -0
  171. package/dist/commands/tickets/delete.d.ts +21 -0
  172. package/dist/commands/tickets/delete.js +21 -0
  173. package/dist/commands/tickets/get.d.ts +21 -0
  174. package/dist/commands/tickets/get.js +21 -0
  175. package/dist/commands/tickets/list.d.ts +17 -0
  176. package/dist/commands/tickets/list.js +24 -0
  177. package/dist/commands/tickets/update.d.ts +25 -0
  178. package/dist/commands/tickets/update.js +31 -0
  179. package/dist/commands/webhooks/add.d.ts +16 -0
  180. package/dist/commands/webhooks/add.js +38 -0
  181. package/dist/commands/webhooks/list.d.ts +14 -0
  182. package/dist/commands/webhooks/list.js +18 -0
  183. package/dist/commands/webhooks/remove.d.ts +17 -0
  184. package/dist/commands/webhooks/remove.js +24 -0
  185. package/dist/commands/whoami.d.ts +15 -0
  186. package/dist/commands/whoami.js +40 -0
  187. package/dist/config/config-file.d.ts +36 -0
  188. package/dist/config/config-file.js +111 -0
  189. package/dist/config/config-path.d.ts +8 -0
  190. package/dist/config/config-path.js +25 -0
  191. package/dist/crud/csv.d.ts +6 -0
  192. package/dist/crud/csv.js +89 -0
  193. package/dist/crud/data.d.ts +4 -0
  194. package/dist/crud/data.js +38 -0
  195. package/dist/crud/request.d.ts +14 -0
  196. package/dist/crud/request.js +26 -0
  197. package/dist/errors/api-error.d.ts +6 -0
  198. package/dist/errors/api-error.js +10 -0
  199. package/dist/errors/exit-codes.d.ts +12 -0
  200. package/dist/errors/exit-codes.js +24 -0
  201. package/dist/errors/redact-token.d.ts +10 -0
  202. package/dist/errors/redact-token.js +17 -0
  203. package/dist/index.d.ts +1 -0
  204. package/dist/index.js +1 -0
  205. package/dist/output/formatter.d.ts +15 -0
  206. package/dist/output/formatter.js +57 -0
  207. package/dist/output/text-format.d.ts +13 -0
  208. package/dist/output/text-format.js +67 -0
  209. package/dist/send/api.d.ts +3 -0
  210. package/dist/send/api.js +21 -0
  211. package/dist/send/fallback.d.ts +5 -0
  212. package/dist/send/fallback.js +38 -0
  213. package/dist/send/media.d.ts +2 -0
  214. package/dist/send/media.js +41 -0
  215. package/dist/send/payload.d.ts +23 -0
  216. package/dist/send/payload.js +22 -0
  217. package/dist/send/recipient-resolver.d.ts +13 -0
  218. package/dist/send/recipient-resolver.js +28 -0
  219. package/dist/send/schedule.d.ts +1 -0
  220. package/dist/send/schedule.js +19 -0
  221. package/dist/tail/sse.d.ts +24 -0
  222. package/dist/tail/sse.js +139 -0
  223. package/dist/templates/render-template.d.ts +14 -0
  224. package/dist/templates/render-template.js +46 -0
  225. package/npm-shrinkwrap.json +11444 -0
  226. package/oclif.manifest.json +9286 -0
  227. package/package.json +157 -0
@@ -0,0 +1,43 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ import { mergeData, parseDataFlag } from '../../crud/data.js';
4
+ import { createResource } from '../../crud/request.js';
5
+ import { createCliApiClient } from '../../send/api.js';
6
+ export default class ChannelsCreate extends BaseCommand {
7
+ static description = 'Create a channel';
8
+ static flags = {
9
+ ...BaseCommand.baseFlags,
10
+ name: Flags.string({
11
+ description: 'Channel name',
12
+ required: true,
13
+ }),
14
+ 'gateway-type': Flags.integer({
15
+ description: 'Gateway type ID',
16
+ required: true,
17
+ }),
18
+ status: Flags.string({
19
+ description: 'Channel lifecycle status',
20
+ }),
21
+ description: Flags.string({
22
+ description: 'Channel description',
23
+ }),
24
+ data: Flags.string({
25
+ description: 'Additional JSON object payload',
26
+ }),
27
+ };
28
+ async run() {
29
+ const { flags } = await this.parse(ChannelsCreate);
30
+ this.flags = flags;
31
+ const payload = mergeData(parseDataFlag(flags.data), {
32
+ name: flags.name,
33
+ gatewayType: flags['gateway-type'],
34
+ status: flags.status,
35
+ description: flags.description,
36
+ });
37
+ const client = await createCliApiClient(flags);
38
+ const channel = await createResource(client, '/v1/channels', payload);
39
+ if (!flags.quiet) {
40
+ this.log(this.toFormatted(channel));
41
+ }
42
+ }
43
+ }
@@ -0,0 +1,20 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class ChannelsGet extends BaseCommand {
3
+ static description: string;
4
+ static args: {
5
+ id: import("@oclif/core/interfaces").Arg<number, {
6
+ max?: number;
7
+ min?: number;
8
+ }>;
9
+ };
10
+ static flags: {
11
+ 'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ 'no-color': import("@oclif/core/interfaces").BooleanFlag<boolean>;
16
+ profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
17
+ 'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ };
19
+ run(): Promise<void>;
20
+ }
@@ -0,0 +1,25 @@
1
+ import { Args } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ import { getResource } from '../../crud/request.js';
4
+ import { createCliApiClient } from '../../send/api.js';
5
+ export default class ChannelsGet extends BaseCommand {
6
+ static description = 'Get a channel by ID';
7
+ static args = {
8
+ id: Args.integer({
9
+ description: 'Channel ID',
10
+ required: true,
11
+ }),
12
+ };
13
+ static flags = {
14
+ ...BaseCommand.baseFlags,
15
+ };
16
+ async run() {
17
+ const { args, flags } = await this.parse(ChannelsGet);
18
+ this.flags = flags;
19
+ const client = await createCliApiClient(flags);
20
+ const channel = await getResource(client, '/v1/channels', args.id);
21
+ if (!flags.quiet) {
22
+ this.log(this.toFormatted(channel));
23
+ }
24
+ }
25
+ }
@@ -0,0 +1,21 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class ChannelsKpis extends BaseCommand {
3
+ static description: string;
4
+ static args: {
5
+ id: import("@oclif/core/interfaces").Arg<number | undefined, {
6
+ max?: number;
7
+ min?: number;
8
+ }>;
9
+ };
10
+ static flags: {
11
+ period: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ 'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
14
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
16
+ 'no-color': import("@oclif/core/interfaces").BooleanFlag<boolean>;
17
+ profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
18
+ 'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ };
20
+ run(): Promise<void>;
21
+ }
@@ -0,0 +1,29 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ import { cleanQuery } from '../../crud/data.js';
4
+ import { createCliApiClient } from '../../send/api.js';
5
+ export default class ChannelsKpis extends BaseCommand {
6
+ static description = 'Get channel KPIs';
7
+ static args = {
8
+ id: Args.integer({
9
+ description: 'Optional channel ID; omit for aggregated channel KPIs',
10
+ required: false,
11
+ }),
12
+ };
13
+ static flags = {
14
+ ...BaseCommand.baseFlags,
15
+ period: Flags.string({
16
+ description: 'KPI period',
17
+ }),
18
+ };
19
+ async run() {
20
+ const { args, flags } = await this.parse(ChannelsKpis);
21
+ this.flags = flags;
22
+ const client = await createCliApiClient(flags);
23
+ const path = args.id ? `/v1/channels/${args.id}/kpis` : '/v1/channels/kpis';
24
+ const kpis = await client.get(path, cleanQuery({ period: flags.period }));
25
+ if (!flags.quiet) {
26
+ this.log(this.toFormatted(kpis));
27
+ }
28
+ }
29
+ }
@@ -0,0 +1,19 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class ChannelsList extends BaseCommand {
3
+ static description: string;
4
+ static flags: {
5
+ page: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
6
+ limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
7
+ status: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ 'gateway-type': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ search: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ 'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
12
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ 'no-color': import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
16
+ 'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ };
18
+ run(): Promise<void>;
19
+ }
@@ -0,0 +1,43 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ import { cleanQuery } from '../../crud/data.js';
4
+ import { listResource } from '../../crud/request.js';
5
+ import { createCliApiClient } from '../../send/api.js';
6
+ export default class ChannelsList extends BaseCommand {
7
+ static description = 'List channels';
8
+ static flags = {
9
+ ...BaseCommand.baseFlags,
10
+ page: Flags.integer({
11
+ description: 'Page number',
12
+ default: 1,
13
+ }),
14
+ limit: Flags.integer({
15
+ description: 'Items per page',
16
+ default: 20,
17
+ }),
18
+ status: Flags.string({
19
+ description: 'Filter by channel status',
20
+ }),
21
+ 'gateway-type': Flags.integer({
22
+ description: 'Filter by gateway type ID',
23
+ }),
24
+ search: Flags.string({
25
+ description: 'Search by channel name',
26
+ }),
27
+ };
28
+ async run() {
29
+ const { flags } = await this.parse(ChannelsList);
30
+ this.flags = flags;
31
+ const client = await createCliApiClient(flags);
32
+ const channels = await listResource(client, '/v1/channels', cleanQuery({
33
+ page: flags.page,
34
+ limit: flags.limit,
35
+ status: flags.status,
36
+ gatewayType: flags['gateway-type'],
37
+ search: flags.search,
38
+ }));
39
+ if (!flags.quiet) {
40
+ this.log(this.toFormatted(channels));
41
+ }
42
+ }
43
+ }
@@ -0,0 +1,24 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class ChannelsUpdate extends BaseCommand {
3
+ static description: string;
4
+ static args: {
5
+ id: import("@oclif/core/interfaces").Arg<number, {
6
+ max?: number;
7
+ min?: number;
8
+ }>;
9
+ };
10
+ static flags: {
11
+ name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ status: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ data: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ 'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
17
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
18
+ quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
19
+ 'no-color': import("@oclif/core/interfaces").BooleanFlag<boolean>;
20
+ profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
21
+ 'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
22
+ };
23
+ run(): Promise<void>;
24
+ }
@@ -0,0 +1,43 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ import { mergeData, parseDataFlag } from '../../crud/data.js';
4
+ import { updateResource } from '../../crud/request.js';
5
+ import { createCliApiClient } from '../../send/api.js';
6
+ export default class ChannelsUpdate extends BaseCommand {
7
+ static description = 'Update a channel';
8
+ static args = {
9
+ id: Args.integer({
10
+ description: 'Channel ID',
11
+ required: true,
12
+ }),
13
+ };
14
+ static flags = {
15
+ ...BaseCommand.baseFlags,
16
+ name: Flags.string({
17
+ description: 'Channel name',
18
+ }),
19
+ status: Flags.string({
20
+ description: 'Channel lifecycle status',
21
+ }),
22
+ description: Flags.string({
23
+ description: 'Channel description',
24
+ }),
25
+ data: Flags.string({
26
+ description: 'Additional JSON object payload',
27
+ }),
28
+ };
29
+ async run() {
30
+ const { args, flags } = await this.parse(ChannelsUpdate);
31
+ this.flags = flags;
32
+ const payload = mergeData(parseDataFlag(flags.data), {
33
+ name: flags.name,
34
+ status: flags.status,
35
+ description: flags.description,
36
+ });
37
+ const client = await createCliApiClient(flags);
38
+ const channel = await updateResource(client, '/v1/channels', args.id, payload);
39
+ if (!flags.quiet) {
40
+ this.log(this.toFormatted(channel));
41
+ }
42
+ }
43
+ }
@@ -0,0 +1,21 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class ChatsReply extends BaseCommand {
3
+ static description: string;
4
+ static args: {
5
+ id: import("@oclif/core/interfaces").Arg<number, {
6
+ max?: number;
7
+ min?: number;
8
+ }>;
9
+ };
10
+ static flags: {
11
+ text: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
12
+ 'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
14
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
16
+ 'no-color': import("@oclif/core/interfaces").BooleanFlag<boolean>;
17
+ profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
18
+ 'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ };
20
+ run(): Promise<void>;
21
+ }
@@ -0,0 +1,28 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ import { createCliApiClient } from '../../send/api.js';
4
+ export default class ChatsReply extends BaseCommand {
5
+ static description = 'Reply in a chat';
6
+ static args = {
7
+ id: Args.integer({
8
+ description: 'Chat ID',
9
+ required: true,
10
+ }),
11
+ };
12
+ static flags = {
13
+ ...BaseCommand.baseFlags,
14
+ text: Flags.string({
15
+ description: 'Reply text',
16
+ required: true,
17
+ }),
18
+ };
19
+ async run() {
20
+ const { args, flags } = await this.parse(ChatsReply);
21
+ this.flags = flags;
22
+ const client = await createCliApiClient(flags);
23
+ const response = await client.post(`/v1/chats/${encodeURIComponent(String(args.id))}/messages`, { message: flags.text });
24
+ if (!flags.quiet) {
25
+ this.log(this.toFormatted(response));
26
+ }
27
+ }
28
+ }
@@ -0,0 +1,17 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class ConfigGet extends BaseCommand {
3
+ static description: string;
4
+ static args: {
5
+ key: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
6
+ };
7
+ static flags: {
8
+ 'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ 'no-color': import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
14
+ 'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ };
16
+ run(): Promise<void>;
17
+ }
@@ -0,0 +1,29 @@
1
+ import { Args } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ import { EXIT_CODES } from '../../errors/exit-codes.js';
4
+ import { ApiError } from '../../errors/api-error.js';
5
+ import { ConfigFile } from '../../config/config-file.js';
6
+ export default class ConfigGet extends BaseCommand {
7
+ static description = 'Get a configuration value for the current profile';
8
+ static args = {
9
+ key: Args.string({
10
+ description: 'Configuration key to retrieve',
11
+ required: true,
12
+ }),
13
+ };
14
+ static flags = {
15
+ ...BaseCommand.baseFlags,
16
+ };
17
+ async run() {
18
+ const { args, flags } = await this.parse(ConfigGet);
19
+ this.flags = flags;
20
+ const profile = flags.profile ?? 'default';
21
+ const cf = new ConfigFile();
22
+ const block = cf.read(profile);
23
+ if (!(args.key in block)) {
24
+ throw new ApiError('user_error', `Key '${args.key}' not found in profile '${profile}'.`);
25
+ }
26
+ this.log(String(block[args.key]));
27
+ this.exit(EXIT_CODES.OK);
28
+ }
29
+ }
@@ -0,0 +1,18 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class ConfigSet extends BaseCommand {
3
+ static description: string;
4
+ static args: {
5
+ key: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
6
+ value: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ 'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ 'no-color': import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
15
+ 'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ };
17
+ run(): Promise<void>;
18
+ }
@@ -0,0 +1,30 @@
1
+ import { Args } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ import { EXIT_CODES } from '../../errors/exit-codes.js';
4
+ import { ConfigFile } from '../../config/config-file.js';
5
+ export default class ConfigSet extends BaseCommand {
6
+ static description = 'Set a configuration value for the current profile';
7
+ static args = {
8
+ key: Args.string({
9
+ description: 'Configuration key to set',
10
+ required: true,
11
+ }),
12
+ value: Args.string({
13
+ description: 'Value to assign',
14
+ required: true,
15
+ }),
16
+ };
17
+ static flags = {
18
+ ...BaseCommand.baseFlags,
19
+ };
20
+ async run() {
21
+ const { args, flags } = await this.parse(ConfigSet);
22
+ this.flags = flags;
23
+ const profile = flags.profile ?? 'default';
24
+ const cf = new ConfigFile();
25
+ // ConfigFile.write() will throw ApiError for secret-shaped keys per D-38
26
+ cf.write(profile, args.key, args.value);
27
+ this.log(`Set ${args.key} in profile '${profile}'.`);
28
+ this.exit(EXIT_CODES.OK);
29
+ }
30
+ }
@@ -0,0 +1,17 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class ConfigUnset extends BaseCommand {
3
+ static description: string;
4
+ static args: {
5
+ key: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
6
+ };
7
+ static flags: {
8
+ 'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ 'no-color': import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
14
+ 'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ };
16
+ run(): Promise<void>;
17
+ }
@@ -0,0 +1,25 @@
1
+ import { Args } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ import { EXIT_CODES } from '../../errors/exit-codes.js';
4
+ import { ConfigFile } from '../../config/config-file.js';
5
+ export default class ConfigUnset extends BaseCommand {
6
+ static description = 'Remove a configuration key from the current profile';
7
+ static args = {
8
+ key: Args.string({
9
+ description: 'Configuration key to remove',
10
+ required: true,
11
+ }),
12
+ };
13
+ static flags = {
14
+ ...BaseCommand.baseFlags,
15
+ };
16
+ async run() {
17
+ const { args, flags } = await this.parse(ConfigUnset);
18
+ this.flags = flags;
19
+ const profile = flags.profile ?? 'default';
20
+ const cf = new ConfigFile();
21
+ cf.unset(profile, args.key);
22
+ this.log(`Unset ${args.key} from profile '${profile}'.`);
23
+ this.exit(EXIT_CODES.OK);
24
+ }
25
+ }
@@ -0,0 +1,18 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class ContactsCreate extends BaseCommand {
3
+ static description: string;
4
+ static flags: {
5
+ channel: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
6
+ identifier: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
7
+ name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ data: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ 'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ 'no-color': import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
15
+ 'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ };
17
+ run(): Promise<void>;
18
+ }
@@ -0,0 +1,39 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ import { mergeData, parseDataFlag } from '../../crud/data.js';
4
+ import { createResource } from '../../crud/request.js';
5
+ import { createCliApiClient } from '../../send/api.js';
6
+ export default class ContactsCreate extends BaseCommand {
7
+ static description = 'Create a contact';
8
+ static flags = {
9
+ ...BaseCommand.baseFlags,
10
+ channel: Flags.integer({
11
+ description: 'Channel ID',
12
+ required: true,
13
+ }),
14
+ identifier: Flags.string({
15
+ description: 'Unique contact identifier',
16
+ required: true,
17
+ }),
18
+ name: Flags.string({
19
+ description: 'Contact name',
20
+ }),
21
+ data: Flags.string({
22
+ description: 'Additional JSON object payload',
23
+ }),
24
+ };
25
+ async run() {
26
+ const { flags } = await this.parse(ContactsCreate);
27
+ this.flags = flags;
28
+ const payload = mergeData(parseDataFlag(flags.data), {
29
+ channelId: flags.channel,
30
+ identifier: flags.identifier,
31
+ name: flags.name,
32
+ });
33
+ const client = await createCliApiClient(flags);
34
+ const contact = await createResource(client, '/v1/contacts', payload);
35
+ if (!flags.quiet) {
36
+ this.log(this.toFormatted(contact));
37
+ }
38
+ }
39
+ }
@@ -0,0 +1,20 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class ContactsDelete extends BaseCommand {
3
+ static description: string;
4
+ static args: {
5
+ id: import("@oclif/core/interfaces").Arg<number, {
6
+ max?: number;
7
+ min?: number;
8
+ }>;
9
+ };
10
+ static flags: {
11
+ 'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ 'no-color': import("@oclif/core/interfaces").BooleanFlag<boolean>;
16
+ profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
17
+ 'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ };
19
+ run(): Promise<void>;
20
+ }
@@ -0,0 +1,25 @@
1
+ import { Args } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ import { deleteResource } from '../../crud/request.js';
4
+ import { createCliApiClient } from '../../send/api.js';
5
+ export default class ContactsDelete extends BaseCommand {
6
+ static description = 'Delete a contact';
7
+ static args = {
8
+ id: Args.integer({
9
+ description: 'Contact ID',
10
+ required: true,
11
+ }),
12
+ };
13
+ static flags = {
14
+ ...BaseCommand.baseFlags,
15
+ };
16
+ async run() {
17
+ const { args, flags } = await this.parse(ContactsDelete);
18
+ this.flags = flags;
19
+ const client = await createCliApiClient(flags);
20
+ await deleteResource(client, '/v1/contacts', args.id);
21
+ if (!flags.quiet) {
22
+ this.log(this.toFormatted({ deleted: true, id: args.id }));
23
+ }
24
+ }
25
+ }
@@ -0,0 +1,19 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class ContactsExport extends BaseCommand {
3
+ static description: string;
4
+ static flags: {
5
+ file: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
6
+ channel: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ search: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ page: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
9
+ limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
10
+ 'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
12
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ 'no-color': import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
16
+ 'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ };
18
+ run(): Promise<void>;
19
+ }