@kaa5945/slack-cli 2026.4.11

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 (320) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +620 -0
  3. package/README.zh-TW.md +620 -0
  4. package/dist/commands/bookmark.d.ts +3 -0
  5. package/dist/commands/bookmark.d.ts.map +1 -0
  6. package/dist/commands/bookmark.js +62 -0
  7. package/dist/commands/bookmark.js.map +1 -0
  8. package/dist/commands/canvas.d.ts +3 -0
  9. package/dist/commands/canvas.d.ts.map +1 -0
  10. package/dist/commands/canvas.js +92 -0
  11. package/dist/commands/canvas.js.map +1 -0
  12. package/dist/commands/channel.d.ts +3 -0
  13. package/dist/commands/channel.d.ts.map +1 -0
  14. package/dist/commands/channel.js +53 -0
  15. package/dist/commands/channel.js.map +1 -0
  16. package/dist/commands/channels.d.ts +3 -0
  17. package/dist/commands/channels.d.ts.map +1 -0
  18. package/dist/commands/channels.js +41 -0
  19. package/dist/commands/channels.js.map +1 -0
  20. package/dist/commands/config-subcommands.d.ts +17 -0
  21. package/dist/commands/config-subcommands.d.ts.map +1 -0
  22. package/dist/commands/config-subcommands.js +170 -0
  23. package/dist/commands/config-subcommands.js.map +1 -0
  24. package/dist/commands/config.d.ts +3 -0
  25. package/dist/commands/config.d.ts.map +1 -0
  26. package/dist/commands/config.js +40 -0
  27. package/dist/commands/config.js.map +1 -0
  28. package/dist/commands/delete.d.ts +3 -0
  29. package/dist/commands/delete.d.ts.map +1 -0
  30. package/dist/commands/delete.js +28 -0
  31. package/dist/commands/delete.js.map +1 -0
  32. package/dist/commands/edit.d.ts +3 -0
  33. package/dist/commands/edit.d.ts.map +1 -0
  34. package/dist/commands/edit.js +29 -0
  35. package/dist/commands/edit.js.map +1 -0
  36. package/dist/commands/history-display.d.ts +9 -0
  37. package/dist/commands/history-display.d.ts.map +1 -0
  38. package/dist/commands/history-display.js +17 -0
  39. package/dist/commands/history-display.js.map +1 -0
  40. package/dist/commands/history-validators.d.ts +5 -0
  41. package/dist/commands/history-validators.d.ts.map +1 -0
  42. package/dist/commands/history-validators.js +35 -0
  43. package/dist/commands/history-validators.js.map +1 -0
  44. package/dist/commands/history.d.ts +3 -0
  45. package/dist/commands/history.d.ts.map +1 -0
  46. package/dist/commands/history.js +141 -0
  47. package/dist/commands/history.js.map +1 -0
  48. package/dist/commands/invite.d.ts +3 -0
  49. package/dist/commands/invite.d.ts.map +1 -0
  50. package/dist/commands/invite.js +34 -0
  51. package/dist/commands/invite.js.map +1 -0
  52. package/dist/commands/join.d.ts +3 -0
  53. package/dist/commands/join.d.ts.map +1 -0
  54. package/dist/commands/join.js +25 -0
  55. package/dist/commands/join.js.map +1 -0
  56. package/dist/commands/leave.d.ts +3 -0
  57. package/dist/commands/leave.d.ts.map +1 -0
  58. package/dist/commands/leave.js +25 -0
  59. package/dist/commands/leave.js.map +1 -0
  60. package/dist/commands/members.d.ts +3 -0
  61. package/dist/commands/members.d.ts.map +1 -0
  62. package/dist/commands/members.js +53 -0
  63. package/dist/commands/members.js.map +1 -0
  64. package/dist/commands/pin.d.ts +3 -0
  65. package/dist/commands/pin.d.ts.map +1 -0
  66. package/dist/commands/pin.js +91 -0
  67. package/dist/commands/pin.js.map +1 -0
  68. package/dist/commands/reaction.d.ts +3 -0
  69. package/dist/commands/reaction.d.ts.map +1 -0
  70. package/dist/commands/reaction.js +45 -0
  71. package/dist/commands/reaction.js.map +1 -0
  72. package/dist/commands/reminder.d.ts +3 -0
  73. package/dist/commands/reminder.d.ts.map +1 -0
  74. package/dist/commands/reminder.js +78 -0
  75. package/dist/commands/reminder.js.map +1 -0
  76. package/dist/commands/scheduled.d.ts +3 -0
  77. package/dist/commands/scheduled.d.ts.map +1 -0
  78. package/dist/commands/scheduled.js +69 -0
  79. package/dist/commands/scheduled.js.map +1 -0
  80. package/dist/commands/search.d.ts +3 -0
  81. package/dist/commands/search.d.ts.map +1 -0
  82. package/dist/commands/search.js +51 -0
  83. package/dist/commands/search.js.map +1 -0
  84. package/dist/commands/send-ephemeral.d.ts +3 -0
  85. package/dist/commands/send-ephemeral.d.ts.map +1 -0
  86. package/dist/commands/send-ephemeral.js +36 -0
  87. package/dist/commands/send-ephemeral.js.map +1 -0
  88. package/dist/commands/send.d.ts +3 -0
  89. package/dist/commands/send.d.ts.map +1 -0
  90. package/dist/commands/send.js +125 -0
  91. package/dist/commands/send.js.map +1 -0
  92. package/dist/commands/unread.d.ts +3 -0
  93. package/dist/commands/unread.d.ts.map +1 -0
  94. package/dist/commands/unread.js +92 -0
  95. package/dist/commands/unread.js.map +1 -0
  96. package/dist/commands/upload.d.ts +3 -0
  97. package/dist/commands/upload.d.ts.map +1 -0
  98. package/dist/commands/upload.js +99 -0
  99. package/dist/commands/upload.js.map +1 -0
  100. package/dist/commands/users.d.ts +3 -0
  101. package/dist/commands/users.d.ts.map +1 -0
  102. package/dist/commands/users.js +138 -0
  103. package/dist/commands/users.js.map +1 -0
  104. package/dist/index.d.ts +5 -0
  105. package/dist/index.d.ts.map +1 -0
  106. package/dist/index.js +76 -0
  107. package/dist/index.js.map +1 -0
  108. package/dist/types/commands.d.ts +216 -0
  109. package/dist/types/commands.d.ts.map +1 -0
  110. package/dist/types/commands.js +3 -0
  111. package/dist/types/commands.js.map +1 -0
  112. package/dist/types/config.d.ts +18 -0
  113. package/dist/types/config.d.ts.map +1 -0
  114. package/dist/types/config.js +3 -0
  115. package/dist/types/config.js.map +1 -0
  116. package/dist/types/slack.d.ts +198 -0
  117. package/dist/types/slack.d.ts.map +1 -0
  118. package/dist/types/slack.js +3 -0
  119. package/dist/types/slack.js.map +1 -0
  120. package/dist/utils/attachment-downloader.d.ts +22 -0
  121. package/dist/utils/attachment-downloader.d.ts.map +1 -0
  122. package/dist/utils/attachment-downloader.js +138 -0
  123. package/dist/utils/attachment-downloader.js.map +1 -0
  124. package/dist/utils/channel-formatter.d.ts +13 -0
  125. package/dist/utils/channel-formatter.d.ts.map +1 -0
  126. package/dist/utils/channel-formatter.js +43 -0
  127. package/dist/utils/channel-formatter.js.map +1 -0
  128. package/dist/utils/channel-resolver.d.ts +27 -0
  129. package/dist/utils/channel-resolver.d.ts.map +1 -0
  130. package/dist/utils/channel-resolver.js +76 -0
  131. package/dist/utils/channel-resolver.js.map +1 -0
  132. package/dist/utils/client-factory.d.ts +6 -0
  133. package/dist/utils/client-factory.d.ts.map +1 -0
  134. package/dist/utils/client-factory.js +13 -0
  135. package/dist/utils/client-factory.js.map +1 -0
  136. package/dist/utils/command-support.d.ts +16 -0
  137. package/dist/utils/command-support.d.ts.map +1 -0
  138. package/dist/utils/command-support.js +29 -0
  139. package/dist/utils/command-support.js.map +1 -0
  140. package/dist/utils/command-wrapper.d.ts +6 -0
  141. package/dist/utils/command-wrapper.d.ts.map +1 -0
  142. package/dist/utils/command-wrapper.js +27 -0
  143. package/dist/utils/command-wrapper.js.map +1 -0
  144. package/dist/utils/config-helper.d.ts +8 -0
  145. package/dist/utils/config-helper.d.ts.map +1 -0
  146. package/dist/utils/config-helper.js +19 -0
  147. package/dist/utils/config-helper.js.map +1 -0
  148. package/dist/utils/constants.d.ts +64 -0
  149. package/dist/utils/constants.d.ts.map +1 -0
  150. package/dist/utils/constants.js +77 -0
  151. package/dist/utils/constants.js.map +1 -0
  152. package/dist/utils/date-utils.d.ts +4 -0
  153. package/dist/utils/date-utils.d.ts.map +1 -0
  154. package/dist/utils/date-utils.js +24 -0
  155. package/dist/utils/date-utils.js.map +1 -0
  156. package/dist/utils/error-utils.d.ts +4 -0
  157. package/dist/utils/error-utils.d.ts.map +1 -0
  158. package/dist/utils/error-utils.js +46 -0
  159. package/dist/utils/error-utils.js.map +1 -0
  160. package/dist/utils/errors.d.ts +17 -0
  161. package/dist/utils/errors.d.ts.map +1 -0
  162. package/dist/utils/errors.js +36 -0
  163. package/dist/utils/errors.js.map +1 -0
  164. package/dist/utils/format-utils.d.ts +4 -0
  165. package/dist/utils/format-utils.d.ts.map +1 -0
  166. package/dist/utils/format-utils.js +24 -0
  167. package/dist/utils/format-utils.js.map +1 -0
  168. package/dist/utils/formatters/base-formatter.d.ts +23 -0
  169. package/dist/utils/formatters/base-formatter.d.ts.map +1 -0
  170. package/dist/utils/formatters/base-formatter.js +27 -0
  171. package/dist/utils/formatters/base-formatter.js.map +1 -0
  172. package/dist/utils/formatters/bookmark-formatters.d.ts +14 -0
  173. package/dist/utils/formatters/bookmark-formatters.d.ts.map +1 -0
  174. package/dist/utils/formatters/bookmark-formatters.js +60 -0
  175. package/dist/utils/formatters/bookmark-formatters.js.map +1 -0
  176. package/dist/utils/formatters/channel-formatters.d.ts +7 -0
  177. package/dist/utils/formatters/channel-formatters.d.ts.map +1 -0
  178. package/dist/utils/formatters/channel-formatters.js +65 -0
  179. package/dist/utils/formatters/channel-formatters.js.map +1 -0
  180. package/dist/utils/formatters/channel-info-formatters.d.ts +6 -0
  181. package/dist/utils/formatters/channel-info-formatters.d.ts.map +1 -0
  182. package/dist/utils/formatters/channel-info-formatters.js +69 -0
  183. package/dist/utils/formatters/channel-info-formatters.js.map +1 -0
  184. package/dist/utils/formatters/channels-list-formatters.d.ts +6 -0
  185. package/dist/utils/formatters/channels-list-formatters.d.ts.map +1 -0
  186. package/dist/utils/formatters/channels-list-formatters.js +49 -0
  187. package/dist/utils/formatters/channels-list-formatters.js.map +1 -0
  188. package/dist/utils/formatters/history-formatters.d.ts +10 -0
  189. package/dist/utils/formatters/history-formatters.d.ts.map +1 -0
  190. package/dist/utils/formatters/history-formatters.js +87 -0
  191. package/dist/utils/formatters/history-formatters.js.map +1 -0
  192. package/dist/utils/formatters/members-formatters.d.ts +10 -0
  193. package/dist/utils/formatters/members-formatters.d.ts.map +1 -0
  194. package/dist/utils/formatters/members-formatters.js +42 -0
  195. package/dist/utils/formatters/members-formatters.js.map +1 -0
  196. package/dist/utils/formatters/message-formatters.d.ts +12 -0
  197. package/dist/utils/formatters/message-formatters.d.ts.map +1 -0
  198. package/dist/utils/formatters/message-formatters.js +95 -0
  199. package/dist/utils/formatters/message-formatters.js.map +1 -0
  200. package/dist/utils/formatters/reminder-formatters.d.ts +12 -0
  201. package/dist/utils/formatters/reminder-formatters.d.ts.map +1 -0
  202. package/dist/utils/formatters/reminder-formatters.js +64 -0
  203. package/dist/utils/formatters/reminder-formatters.js.map +1 -0
  204. package/dist/utils/formatters/search-formatters.d.ts +10 -0
  205. package/dist/utils/formatters/search-formatters.d.ts.map +1 -0
  206. package/dist/utils/formatters/search-formatters.js +87 -0
  207. package/dist/utils/formatters/search-formatters.js.map +1 -0
  208. package/dist/utils/mention-utils.d.ts +17 -0
  209. package/dist/utils/mention-utils.d.ts.map +1 -0
  210. package/dist/utils/mention-utils.js +45 -0
  211. package/dist/utils/mention-utils.js.map +1 -0
  212. package/dist/utils/option-parsers.d.ts +47 -0
  213. package/dist/utils/option-parsers.d.ts.map +1 -0
  214. package/dist/utils/option-parsers.js +75 -0
  215. package/dist/utils/option-parsers.js.map +1 -0
  216. package/dist/utils/profile-config.d.ts +19 -0
  217. package/dist/utils/profile-config.d.ts.map +1 -0
  218. package/dist/utils/profile-config.js +203 -0
  219. package/dist/utils/profile-config.js.map +1 -0
  220. package/dist/utils/schedule-utils.d.ts +3 -0
  221. package/dist/utils/schedule-utils.d.ts.map +1 -0
  222. package/dist/utils/schedule-utils.js +34 -0
  223. package/dist/utils/schedule-utils.js.map +1 -0
  224. package/dist/utils/slack-api-client.d.ts +3 -0
  225. package/dist/utils/slack-api-client.d.ts.map +1 -0
  226. package/dist/utils/slack-api-client.js +22 -0
  227. package/dist/utils/slack-api-client.js.map +1 -0
  228. package/dist/utils/slack-client-service.d.ts +66 -0
  229. package/dist/utils/slack-client-service.d.ts.map +1 -0
  230. package/dist/utils/slack-client-service.js +181 -0
  231. package/dist/utils/slack-client-service.js.map +1 -0
  232. package/dist/utils/slack-operations/base-client.d.ts +18 -0
  233. package/dist/utils/slack-operations/base-client.d.ts.map +1 -0
  234. package/dist/utils/slack-operations/base-client.js +52 -0
  235. package/dist/utils/slack-operations/base-client.js.map +1 -0
  236. package/dist/utils/slack-operations/canvas-operations.d.ts +10 -0
  237. package/dist/utils/slack-operations/canvas-operations.d.ts.map +1 -0
  238. package/dist/utils/slack-operations/canvas-operations.js +28 -0
  239. package/dist/utils/slack-operations/canvas-operations.js.map +1 -0
  240. package/dist/utils/slack-operations/channel-operations.d.ts +33 -0
  241. package/dist/utils/slack-operations/channel-operations.d.ts.map +1 -0
  242. package/dist/utils/slack-operations/channel-operations.js +276 -0
  243. package/dist/utils/slack-operations/channel-operations.js.map +1 -0
  244. package/dist/utils/slack-operations/file-operations.d.ts +19 -0
  245. package/dist/utils/slack-operations/file-operations.d.ts.map +1 -0
  246. package/dist/utils/slack-operations/file-operations.js +51 -0
  247. package/dist/utils/slack-operations/file-operations.js.map +1 -0
  248. package/dist/utils/slack-operations/index.d.ts +5 -0
  249. package/dist/utils/slack-operations/index.d.ts.map +1 -0
  250. package/dist/utils/slack-operations/index.js +12 -0
  251. package/dist/utils/slack-operations/index.js.map +1 -0
  252. package/dist/utils/slack-operations/message-history-operations.d.ts +17 -0
  253. package/dist/utils/slack-operations/message-history-operations.d.ts.map +1 -0
  254. package/dist/utils/slack-operations/message-history-operations.js +101 -0
  255. package/dist/utils/slack-operations/message-history-operations.js.map +1 -0
  256. package/dist/utils/slack-operations/message-operations.d.ts +24 -0
  257. package/dist/utils/slack-operations/message-operations.d.ts.map +1 -0
  258. package/dist/utils/slack-operations/message-operations.js +61 -0
  259. package/dist/utils/slack-operations/message-operations.js.map +1 -0
  260. package/dist/utils/slack-operations/message-permalink-operations.d.ts +10 -0
  261. package/dist/utils/slack-operations/message-permalink-operations.d.ts.map +1 -0
  262. package/dist/utils/slack-operations/message-permalink-operations.js +49 -0
  263. package/dist/utils/slack-operations/message-permalink-operations.js.map +1 -0
  264. package/dist/utils/slack-operations/message-user-resolver.d.ts +7 -0
  265. package/dist/utils/slack-operations/message-user-resolver.d.ts.map +1 -0
  266. package/dist/utils/slack-operations/message-user-resolver.js +27 -0
  267. package/dist/utils/slack-operations/message-user-resolver.js.map +1 -0
  268. package/dist/utils/slack-operations/message-write-operations.d.ts +17 -0
  269. package/dist/utils/slack-operations/message-write-operations.d.ts.map +1 -0
  270. package/dist/utils/slack-operations/message-write-operations.js +76 -0
  271. package/dist/utils/slack-operations/message-write-operations.js.map +1 -0
  272. package/dist/utils/slack-operations/pin-operations.d.ts +11 -0
  273. package/dist/utils/slack-operations/pin-operations.d.ts.map +1 -0
  274. package/dist/utils/slack-operations/pin-operations.js +34 -0
  275. package/dist/utils/slack-operations/pin-operations.js.map +1 -0
  276. package/dist/utils/slack-operations/reaction-operations.d.ts +10 -0
  277. package/dist/utils/slack-operations/reaction-operations.d.ts.map +1 -0
  278. package/dist/utils/slack-operations/reaction-operations.js +32 -0
  279. package/dist/utils/slack-operations/reaction-operations.js.map +1 -0
  280. package/dist/utils/slack-operations/reminder-operations.d.ts +10 -0
  281. package/dist/utils/slack-operations/reminder-operations.d.ts.map +1 -0
  282. package/dist/utils/slack-operations/reminder-operations.js +32 -0
  283. package/dist/utils/slack-operations/reminder-operations.js.map +1 -0
  284. package/dist/utils/slack-operations/search-operations.d.ts +11 -0
  285. package/dist/utils/slack-operations/search-operations.d.ts.map +1 -0
  286. package/dist/utils/slack-operations/search-operations.js +116 -0
  287. package/dist/utils/slack-operations/search-operations.js.map +1 -0
  288. package/dist/utils/slack-operations/star-operations.d.ts +9 -0
  289. package/dist/utils/slack-operations/star-operations.d.ts.map +1 -0
  290. package/dist/utils/slack-operations/star-operations.js +32 -0
  291. package/dist/utils/slack-operations/star-operations.js.map +1 -0
  292. package/dist/utils/slack-operations/user-operations.d.ts +12 -0
  293. package/dist/utils/slack-operations/user-operations.d.ts.map +1 -0
  294. package/dist/utils/slack-operations/user-operations.js +69 -0
  295. package/dist/utils/slack-operations/user-operations.js.map +1 -0
  296. package/dist/utils/slack-patterns.d.ts +20 -0
  297. package/dist/utils/slack-patterns.d.ts.map +1 -0
  298. package/dist/utils/slack-patterns.js +54 -0
  299. package/dist/utils/slack-patterns.js.map +1 -0
  300. package/dist/utils/terminal-sanitizer.d.ts +7 -0
  301. package/dist/utils/terminal-sanitizer.d.ts.map +1 -0
  302. package/dist/utils/terminal-sanitizer.js +51 -0
  303. package/dist/utils/terminal-sanitizer.js.map +1 -0
  304. package/dist/utils/token-crypto-service.d.ts +40 -0
  305. package/dist/utils/token-crypto-service.d.ts.map +1 -0
  306. package/dist/utils/token-crypto-service.js +273 -0
  307. package/dist/utils/token-crypto-service.js.map +1 -0
  308. package/dist/utils/token-utils.d.ts +7 -0
  309. package/dist/utils/token-utils.d.ts.map +1 -0
  310. package/dist/utils/token-utils.js +18 -0
  311. package/dist/utils/token-utils.js.map +1 -0
  312. package/dist/utils/update-notifier.d.ts +10 -0
  313. package/dist/utils/update-notifier.d.ts.map +1 -0
  314. package/dist/utils/update-notifier.js +147 -0
  315. package/dist/utils/update-notifier.js.map +1 -0
  316. package/dist/utils/validators.d.ts +147 -0
  317. package/dist/utils/validators.d.ts.map +1 -0
  318. package/dist/utils/validators.js +401 -0
  319. package/dist/utils/validators.js.map +1 -0
  320. package/package.json +58 -0
@@ -0,0 +1,78 @@
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.setupReminderCommand = setupReminderCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const commander_1 = require("commander");
9
+ const client_factory_1 = require("../utils/client-factory");
10
+ const command_wrapper_1 = require("../utils/command-wrapper");
11
+ const reminder_formatters_1 = require("../utils/formatters/reminder-formatters");
12
+ const option_parsers_1 = require("../utils/option-parsers");
13
+ const schedule_utils_1 = require("../utils/schedule-utils");
14
+ const validators_1 = require("../utils/validators");
15
+ function setupReminderCommand() {
16
+ const reminderCommand = new commander_1.Command('reminder').description('Create, list, delete, or complete reminders');
17
+ const addCommand = new commander_1.Command('add')
18
+ .description('Create a new reminder')
19
+ .requiredOption('--text <text>', 'The content of the reminder')
20
+ .option('--at <datetime>', 'Absolute date/time (e.g. "2024-03-01 15:00")')
21
+ .option('--after <minutes>', 'Minutes from now')
22
+ .option('--profile <profile>', 'Use specific workspace profile')
23
+ .hook('preAction', (0, validators_1.createValidationHook)([validators_1.optionValidators.reminderTiming]))
24
+ .action((0, command_wrapper_1.wrapCommand)(async (options) => {
25
+ const profile = (0, option_parsers_1.parseProfile)(options.profile);
26
+ const client = await (0, client_factory_1.createSlackClient)(profile);
27
+ const time = (0, schedule_utils_1.resolvePostAt)(options.at, options.after);
28
+ if (time === null) {
29
+ throw new Error('Could not resolve reminder time. Use --at or --after option.');
30
+ }
31
+ const reminder = await client.addReminder(options.text, time);
32
+ const timeStr = new Date(reminder.time * 1000).toISOString();
33
+ console.log(chalk_1.default.green(`✓ Reminder created: "${reminder.text}" at ${timeStr}`));
34
+ }));
35
+ const listCommand = new commander_1.Command('list')
36
+ .description('List all reminders')
37
+ .option('--format <format>', 'Output format: table, simple, json', 'table')
38
+ .option('--profile <profile>', 'Use specific workspace profile')
39
+ .hook('preAction', (0, validators_1.createValidationHook)([validators_1.optionValidators.format]))
40
+ .action((0, command_wrapper_1.wrapCommand)(async (options) => {
41
+ const profile = (0, option_parsers_1.parseProfile)(options.profile);
42
+ const client = await (0, client_factory_1.createSlackClient)(profile);
43
+ const reminders = await client.listReminders();
44
+ if (reminders.length === 0) {
45
+ console.log('No reminders found');
46
+ return;
47
+ }
48
+ const format = (0, option_parsers_1.parseFormat)(options.format);
49
+ const formatter = (0, reminder_formatters_1.createReminderFormatter)(format);
50
+ formatter.format({ reminders });
51
+ }));
52
+ const deleteCommand = new commander_1.Command('delete')
53
+ .description('Delete a reminder')
54
+ .requiredOption('--id <reminderId>', 'Reminder ID')
55
+ .option('--profile <profile>', 'Use specific workspace profile')
56
+ .action((0, command_wrapper_1.wrapCommand)(async (options) => {
57
+ const profile = (0, option_parsers_1.parseProfile)(options.profile);
58
+ const client = await (0, client_factory_1.createSlackClient)(profile);
59
+ await client.deleteReminder(options.id);
60
+ console.log(chalk_1.default.green(`✓ Reminder deleted: ${options.id}`));
61
+ }));
62
+ const completeCommand = new commander_1.Command('complete')
63
+ .description('Mark a reminder as complete')
64
+ .requiredOption('--id <reminderId>', 'Reminder ID')
65
+ .option('--profile <profile>', 'Use specific workspace profile')
66
+ .action((0, command_wrapper_1.wrapCommand)(async (options) => {
67
+ const profile = (0, option_parsers_1.parseProfile)(options.profile);
68
+ const client = await (0, client_factory_1.createSlackClient)(profile);
69
+ await client.completeReminder(options.id);
70
+ console.log(chalk_1.default.green(`✓ Reminder completed: ${options.id}`));
71
+ }));
72
+ reminderCommand.addCommand(addCommand);
73
+ reminderCommand.addCommand(listCommand);
74
+ reminderCommand.addCommand(deleteCommand);
75
+ reminderCommand.addCommand(completeCommand);
76
+ return reminderCommand;
77
+ }
78
+ //# sourceMappingURL=reminder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reminder.js","sourceRoot":"","sources":["../../src/commands/reminder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function setupScheduledCommand(): Command;
3
+ //# sourceMappingURL=scheduled.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduled.d.ts","sourceRoot":"","sources":["../../src/commands/scheduled.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmCpC,wBAAgB,qBAAqB,IAAI,OAAO,CAiD/C"}
@@ -0,0 +1,69 @@
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.setupScheduledCommand = setupScheduledCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const commander_1 = require("commander");
9
+ const command_support_1 = require("../utils/command-support");
10
+ const command_wrapper_1 = require("../utils/command-wrapper");
11
+ const option_parsers_1 = require("../utils/option-parsers");
12
+ const terminal_sanitizer_1 = require("../utils/terminal-sanitizer");
13
+ const validators_1 = require("../utils/validators");
14
+ function formatPostAt(postAt) {
15
+ return new Date(postAt * 1000).toISOString();
16
+ }
17
+ function renderTable(messages) {
18
+ const rows = messages.map((message) => ({
19
+ id: (0, terminal_sanitizer_1.sanitizeTerminalText)(message.id),
20
+ channel: (0, terminal_sanitizer_1.sanitizeTerminalText)(message.channel_id),
21
+ post_at: formatPostAt(message.post_at),
22
+ text: (0, terminal_sanitizer_1.sanitizeTerminalText)(message.text || ''),
23
+ }));
24
+ console.table((0, terminal_sanitizer_1.sanitizeTerminalData)(rows));
25
+ }
26
+ function renderSimple(messages) {
27
+ for (const message of messages) {
28
+ console.log(`${formatPostAt(message.post_at)} ${(0, terminal_sanitizer_1.sanitizeTerminalText)(message.channel_id)} ${(0, terminal_sanitizer_1.sanitizeTerminalText)(message.id)} ${(0, terminal_sanitizer_1.sanitizeTerminalText)(message.text || '')}`);
29
+ }
30
+ }
31
+ function setupScheduledCommand() {
32
+ const scheduledCommand = new commander_1.Command('scheduled').description('Manage scheduled messages (list, cancel)');
33
+ const listCommand = new commander_1.Command('list')
34
+ .description('List scheduled messages')
35
+ .option('-c, --channel <channel>', 'Filter by channel name or ID')
36
+ .option('--limit <number>', 'Maximum number of scheduled messages to list', '50')
37
+ .option('--format <format>', 'Output format: table, simple, json', 'table')
38
+ .option('--profile <profile>', 'Use specific workspace profile')
39
+ .hook('preAction', (0, validators_1.createValidationHook)([validators_1.optionValidators.format]))
40
+ .action((0, command_wrapper_1.wrapCommand)(async (options) => {
41
+ await (0, command_support_1.withSlackClient)(options, async (client) => {
42
+ const limit = (0, option_parsers_1.parseLimit)(options.limit, 50);
43
+ const messages = await client.listScheduledMessages(options.channel, limit);
44
+ if (messages.length === 0) {
45
+ console.log('No scheduled messages found');
46
+ return;
47
+ }
48
+ (0, command_support_1.renderByFormat)(options, messages, {
49
+ table: renderTable,
50
+ simple: renderSimple,
51
+ });
52
+ });
53
+ }));
54
+ const cancelCommand = new commander_1.Command('cancel')
55
+ .description('Cancel a scheduled message')
56
+ .requiredOption('-c, --channel <channel>', 'Channel name or ID')
57
+ .requiredOption('--id <scheduledMessageId>', 'Scheduled message ID')
58
+ .option('--profile <profile>', 'Use specific workspace profile')
59
+ .action((0, command_wrapper_1.wrapCommand)(async (options) => {
60
+ await (0, command_support_1.withSlackClient)(options, async (client) => {
61
+ await client.cancelScheduledMessage(options.channel, options.id);
62
+ console.log(chalk_1.default.green(`✓ Scheduled message ${options.id} cancelled`));
63
+ });
64
+ }));
65
+ scheduledCommand.addCommand(listCommand);
66
+ scheduledCommand.addCommand(cancelCommand);
67
+ return scheduledCommand;
68
+ }
69
+ //# sourceMappingURL=scheduled.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduled.js","sourceRoot":"","sources":["../../src/commands/scheduled.ts"],"names":[],"mappings":";;;;;AAoCA,sDAiDC;AArFD,kDAA0B;AAC1B,yCAAoC;AAEpC,8DAA2E;AAC3E,8DAAuD;AACvD,4DAAqD;AACrD,oEAAyF;AACzF,oDAA6E;AAE7E,SAAS,YAAY,CAAC,MAAc;IAClC,OAAO,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,WAAW,CAClB,QAAmF;IAEnF,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACtC,EAAE,EAAE,IAAA,yCAAoB,EAAC,OAAO,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,IAAA,yCAAoB,EAAC,OAAO,CAAC,UAAU,CAAC;QACjD,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC;QACtC,IAAI,EAAE,IAAA,yCAAoB,EAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;KAC/C,CAAC,CAAC,CAAC;IAEJ,OAAO,CAAC,KAAK,CAAC,IAAA,yCAAoB,EAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,YAAY,CACnB,QAAmF;IAEnF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CACT,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAA,yCAAoB,EAAC,OAAO,CAAC,UAAU,CAAC,IAAI,IAAA,yCAAoB,EAAC,OAAO,CAAC,EAAE,CAAC,IAAI,IAAA,yCAAoB,EAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAC/J,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAgB,qBAAqB;IACnC,MAAM,gBAAgB,GAAG,IAAI,mBAAO,CAAC,WAAW,CAAC,CAAC,WAAW,CAC3D,0CAA0C,CAC3C,CAAC;IAEF,MAAM,WAAW,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC;SACpC,WAAW,CAAC,yBAAyB,CAAC;SACtC,MAAM,CAAC,yBAAyB,EAAE,8BAA8B,CAAC;SACjE,MAAM,CAAC,kBAAkB,EAAE,8CAA8C,EAAE,IAAI,CAAC;SAChF,MAAM,CAAC,mBAAmB,EAAE,oCAAoC,EAAE,OAAO,CAAC;SAC1E,MAAM,CAAC,qBAAqB,EAAE,gCAAgC,CAAC;SAC/D,IAAI,CAAC,WAAW,EAAE,IAAA,iCAAoB,EAAC,CAAC,6BAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;SAClE,MAAM,CACL,IAAA,6BAAW,EAAC,KAAK,EAAE,OAA6B,EAAE,EAAE;QAClD,MAAM,IAAA,iCAAe,EAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC9C,MAAM,KAAK,GAAG,IAAA,2BAAU,EAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAE5E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;gBAC3C,OAAO;YACT,CAAC;YAED,IAAA,gCAAc,EAAC,OAAO,EAAE,QAAQ,EAAE;gBAChC,KAAK,EAAE,WAAW;gBAClB,MAAM,EAAE,YAAY;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;IAEJ,MAAM,aAAa,GAAG,IAAI,mBAAO,CAAC,QAAQ,CAAC;SACxC,WAAW,CAAC,4BAA4B,CAAC;SACzC,cAAc,CAAC,yBAAyB,EAAE,oBAAoB,CAAC;SAC/D,cAAc,CAAC,2BAA2B,EAAE,sBAAsB,CAAC;SACnE,MAAM,CAAC,qBAAqB,EAAE,gCAAgC,CAAC;SAC/D,MAAM,CACL,IAAA,6BAAW,EAAC,KAAK,EAAE,OAA+B,EAAE,EAAE;QACpD,MAAM,IAAA,iCAAe,EAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC9C,MAAM,MAAM,CAAC,sBAAsB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,uBAAuB,OAAO,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;IAEJ,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACzC,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAE3C,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function setupSearchCommand(): Command;
3
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,kBAAkB,IAAI,OAAO,CA2D5C"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setupSearchCommand = setupSearchCommand;
4
+ const commander_1 = require("commander");
5
+ const client_factory_1 = require("../utils/client-factory");
6
+ const command_wrapper_1 = require("../utils/command-wrapper");
7
+ const constants_1 = require("../utils/constants");
8
+ const search_formatters_1 = require("../utils/formatters/search-formatters");
9
+ const option_parsers_1 = require("../utils/option-parsers");
10
+ const validators_1 = require("../utils/validators");
11
+ function setupSearchCommand() {
12
+ const searchCommand = new commander_1.Command('search')
13
+ .description('Search messages in Slack workspace')
14
+ .requiredOption('-q, --query <query>', 'Search query')
15
+ .option('--sort <sort>', 'Sort by: score or timestamp', 'score')
16
+ .option('--sort-dir <direction>', 'Sort direction: asc or desc', 'desc')
17
+ .option('-n, --number <count>', 'Number of results per page (1-100)')
18
+ .option('--page <page>', 'Page number (1-100)')
19
+ .option('--format <format>', 'Output format: table, simple, json', 'table')
20
+ .option('--profile <profile>', 'Use specific workspace profile')
21
+ .hook('preAction', (0, validators_1.createValidationHook)([
22
+ validators_1.optionValidators.searchSort,
23
+ validators_1.optionValidators.searchSortDir,
24
+ validators_1.optionValidators.searchCount,
25
+ validators_1.optionValidators.searchPage,
26
+ validators_1.optionValidators.format,
27
+ ]))
28
+ .action((0, command_wrapper_1.wrapCommand)(async (options) => {
29
+ const profile = (0, option_parsers_1.parseProfile)(options.profile);
30
+ const client = await (0, client_factory_1.createSlackClient)(profile);
31
+ const count = (0, option_parsers_1.parseCount)(options.number, constants_1.API_LIMITS.DEFAULT_SEARCH_COUNT, constants_1.API_LIMITS.MIN_SEARCH_COUNT, constants_1.API_LIMITS.MAX_SEARCH_COUNT);
32
+ const page = (0, option_parsers_1.parseCount)(options.page, constants_1.API_LIMITS.MIN_SEARCH_PAGE, constants_1.API_LIMITS.MIN_SEARCH_PAGE, constants_1.API_LIMITS.MAX_SEARCH_PAGE);
33
+ const result = await client.searchMessages(options.query, {
34
+ sort: options.sort || 'score',
35
+ sortDir: options.sortDir || 'desc',
36
+ count,
37
+ page,
38
+ });
39
+ const format = (0, option_parsers_1.parseFormat)(options.format);
40
+ const formatter = (0, search_formatters_1.createSearchFormatter)(format);
41
+ formatter.format({
42
+ query: result.query,
43
+ matches: result.matches,
44
+ totalCount: result.totalCount,
45
+ page: result.page,
46
+ pageCount: result.pageCount,
47
+ });
48
+ }));
49
+ return searchCommand;
50
+ }
51
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":";;AASA,gDA2DC;AApED,yCAAoC;AAEpC,4DAA4D;AAC5D,8DAAuD;AACvD,kDAAgD;AAChD,6EAA8E;AAC9E,4DAAgF;AAChF,oDAA6E;AAE7E,SAAgB,kBAAkB;IAChC,MAAM,aAAa,GAAG,IAAI,mBAAO,CAAC,QAAQ,CAAC;SACxC,WAAW,CAAC,oCAAoC,CAAC;SACjD,cAAc,CAAC,qBAAqB,EAAE,cAAc,CAAC;SACrD,MAAM,CAAC,eAAe,EAAE,6BAA6B,EAAE,OAAO,CAAC;SAC/D,MAAM,CAAC,wBAAwB,EAAE,6BAA6B,EAAE,MAAM,CAAC;SACvE,MAAM,CAAC,sBAAsB,EAAE,oCAAoC,CAAC;SACpE,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC;SAC9C,MAAM,CAAC,mBAAmB,EAAE,oCAAoC,EAAE,OAAO,CAAC;SAC1E,MAAM,CAAC,qBAAqB,EAAE,gCAAgC,CAAC;SAC/D,IAAI,CACH,WAAW,EACX,IAAA,iCAAoB,EAAC;QACnB,6BAAgB,CAAC,UAAU;QAC3B,6BAAgB,CAAC,aAAa;QAC9B,6BAAgB,CAAC,WAAW;QAC5B,6BAAgB,CAAC,UAAU;QAC3B,6BAAgB,CAAC,MAAM;KACxB,CAAC,CACH;SACA,MAAM,CACL,IAAA,6BAAW,EAAC,KAAK,EAAE,OAAsB,EAAE,EAAE;QAC3C,MAAM,OAAO,GAAG,IAAA,6BAAY,EAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAA,kCAAiB,EAAC,OAAO,CAAC,CAAC;QAEhD,MAAM,KAAK,GAAG,IAAA,2BAAU,EACtB,OAAO,CAAC,MAAM,EACd,sBAAU,CAAC,oBAAoB,EAC/B,sBAAU,CAAC,gBAAgB,EAC3B,sBAAU,CAAC,gBAAgB,CAC5B,CAAC;QAEF,MAAM,IAAI,GAAG,IAAA,2BAAU,EACrB,OAAO,CAAC,IAAI,EACZ,sBAAU,CAAC,eAAe,EAC1B,sBAAU,CAAC,eAAe,EAC1B,sBAAU,CAAC,eAAe,CAC3B,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE;YACxD,IAAI,EAAG,OAAO,CAAC,IAA8B,IAAI,OAAO;YACxD,OAAO,EAAG,OAAO,CAAC,OAA0B,IAAI,MAAM;YACtD,KAAK;YACL,IAAI;SACL,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAA,4BAAW,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,IAAA,yCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,SAAS,CAAC,MAAM,CAAC;YACf,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;IAEJ,OAAO,aAAa,CAAC;AACvB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function setupSendEphemeralCommand(): Command;
3
+ //# sourceMappingURL=send-ephemeral.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-ephemeral.d.ts","sourceRoot":"","sources":["../../src/commands/send-ephemeral.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,yBAAyB,IAAI,OAAO,CAkCnD"}
@@ -0,0 +1,36 @@
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.setupSendEphemeralCommand = setupSendEphemeralCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const commander_1 = require("commander");
9
+ const client_factory_1 = require("../utils/client-factory");
10
+ const command_wrapper_1 = require("../utils/command-wrapper");
11
+ const constants_1 = require("../utils/constants");
12
+ const option_parsers_1 = require("../utils/option-parsers");
13
+ const validators_1 = require("../utils/validators");
14
+ function setupSendEphemeralCommand() {
15
+ const sendEphemeralCommand = new commander_1.Command('send-ephemeral')
16
+ .description('Send an ephemeral message visible only to a specific user in a channel')
17
+ .option('-c, --channel <channel>', 'Target channel name or ID')
18
+ .option('-u, --user <user>', 'User ID who will see the ephemeral message')
19
+ .option('-m, --message <message>', 'Message to send')
20
+ .option('-t, --thread <thread>', 'Thread timestamp to reply to')
21
+ .option('--profile <profile>', 'Use specific workspace profile')
22
+ .hook('preAction', (0, validators_1.createValidationHook)([
23
+ validators_1.optionValidators.requiredChannel,
24
+ validators_1.optionValidators.requiredUser,
25
+ validators_1.optionValidators.requiredMessage,
26
+ validators_1.optionValidators.threadTimestamp,
27
+ ]))
28
+ .action((0, command_wrapper_1.wrapCommand)(async (options) => {
29
+ const profile = (0, option_parsers_1.parseProfile)(options.profile);
30
+ const client = await (0, client_factory_1.createSlackClient)(profile);
31
+ await client.sendEphemeralMessage(options.channel, options.user, options.message, options.thread);
32
+ console.log(chalk_1.default.green(`✓ ${constants_1.SUCCESS_MESSAGES.EPHEMERAL_MESSAGE_SENT(options.channel)}`));
33
+ }));
34
+ return sendEphemeralCommand;
35
+ }
36
+ //# sourceMappingURL=send-ephemeral.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-ephemeral.js","sourceRoot":"","sources":["../../src/commands/send-ephemeral.ts"],"names":[],"mappings":";;;;;AASA,8DAkCC;AA3CD,kDAA0B;AAC1B,yCAAoC;AAEpC,4DAA4D;AAC5D,8DAAuD;AACvD,kDAAsD;AACtD,4DAAuD;AACvD,oDAA6E;AAE7E,SAAgB,yBAAyB;IACvC,MAAM,oBAAoB,GAAG,IAAI,mBAAO,CAAC,gBAAgB,CAAC;SACvD,WAAW,CAAC,wEAAwE,CAAC;SACrF,MAAM,CAAC,yBAAyB,EAAE,2BAA2B,CAAC;SAC9D,MAAM,CAAC,mBAAmB,EAAE,4CAA4C,CAAC;SACzE,MAAM,CAAC,yBAAyB,EAAE,iBAAiB,CAAC;SACpD,MAAM,CAAC,uBAAuB,EAAE,8BAA8B,CAAC;SAC/D,MAAM,CAAC,qBAAqB,EAAE,gCAAgC,CAAC;SAC/D,IAAI,CACH,WAAW,EACX,IAAA,iCAAoB,EAAC;QACnB,6BAAgB,CAAC,eAAe;QAChC,6BAAgB,CAAC,YAAY;QAC7B,6BAAgB,CAAC,eAAe;QAChC,6BAAgB,CAAC,eAAe;KACjC,CAAC,CACH;SACA,MAAM,CACL,IAAA,6BAAW,EAAC,KAAK,EAAE,OAA6B,EAAE,EAAE;QAClD,MAAM,OAAO,GAAG,IAAA,6BAAY,EAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAA,kCAAiB,EAAC,OAAO,CAAC,CAAC;QAEhD,MAAM,MAAM,CAAC,oBAAoB,CAC/B,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,MAAM,CACf,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,KAAK,4BAAgB,CAAC,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5F,CAAC,CAAC,CACH,CAAC;IAEJ,OAAO,oBAAoB,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function setupSendCommand(): Command;
3
+ //# sourceMappingURL=send.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,wBAAgB,gBAAgB,IAAI,OAAO,CAmF1C"}
@@ -0,0 +1,125 @@
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.setupSendCommand = setupSendCommand;
40
+ const chalk_1 = __importDefault(require("chalk"));
41
+ const commander_1 = require("commander");
42
+ const fs = __importStar(require("fs/promises"));
43
+ const client_factory_1 = require("../utils/client-factory");
44
+ const command_wrapper_1 = require("../utils/command-wrapper");
45
+ const constants_1 = require("../utils/constants");
46
+ const error_utils_1 = require("../utils/error-utils");
47
+ const errors_1 = require("../utils/errors");
48
+ const option_parsers_1 = require("../utils/option-parsers");
49
+ const schedule_utils_1 = require("../utils/schedule-utils");
50
+ const validators_1 = require("../utils/validators");
51
+ function setupSendCommand() {
52
+ const sendCommand = new commander_1.Command('send')
53
+ .description('Send or schedule a message to a Slack channel or DM')
54
+ .option('-c, --channel <channel>', 'Target channel name or ID')
55
+ .option('--user <username>', 'Send DM to user by username')
56
+ .option('--email <email>', 'Send DM to user by email address')
57
+ .option('-m, --message <message>', 'Message to send')
58
+ .option('-f, --file <file>', 'File containing message content')
59
+ .option('-t, --thread <thread>', 'Thread timestamp to reply to')
60
+ .option('--at <time>', 'Schedule time (Unix timestamp in seconds or ISO 8601)')
61
+ .option('--after <minutes>', 'Schedule message after N minutes')
62
+ .option('--profile <profile>', 'Use specific workspace profile')
63
+ .hook('preAction', (0, validators_1.createValidationHook)([
64
+ validators_1.optionValidators.sendTarget,
65
+ validators_1.optionValidators.messageOrFile,
66
+ validators_1.optionValidators.threadTimestamp,
67
+ validators_1.optionValidators.scheduleTiming,
68
+ ]))
69
+ .action((0, command_wrapper_1.wrapCommand)(async (options) => {
70
+ // Get message content
71
+ let messageContent;
72
+ if (options.file) {
73
+ try {
74
+ messageContent = await fs.readFile(options.file, 'utf-8');
75
+ }
76
+ catch (error) {
77
+ throw new errors_1.FileError(constants_1.ERROR_MESSAGES.FILE_READ_ERROR(options.file, (0, error_utils_1.extractErrorMessage)(error)));
78
+ }
79
+ }
80
+ else {
81
+ messageContent = options.message; // This is safe because of preAction validation
82
+ }
83
+ const postAt = (0, schedule_utils_1.resolvePostAt)(options.at, options.after);
84
+ // Send message
85
+ const profile = (0, option_parsers_1.parseProfile)(options.profile);
86
+ const client = await (0, client_factory_1.createSlackClient)(profile);
87
+ // Resolve target channel
88
+ let targetChannel;
89
+ let targetLabel;
90
+ if (options.user) {
91
+ const userId = await client.resolveUserIdByName(options.user);
92
+ targetChannel = await client.openDmChannel(userId);
93
+ targetLabel = `@${options.user.replace(/^@/, '')}`;
94
+ }
95
+ else if (options.email) {
96
+ const user = await client.lookupUserByEmail(options.email);
97
+ targetChannel = await client.openDmChannel(user.id);
98
+ targetLabel = options.email;
99
+ }
100
+ else {
101
+ targetChannel = options.channel;
102
+ targetLabel = `#${options.channel}`;
103
+ }
104
+ if (postAt !== null) {
105
+ await client.scheduleMessage(targetChannel, messageContent, postAt, options.thread);
106
+ const postAtIso = new Date(postAt * 1000).toISOString();
107
+ if (options.user || options.email) {
108
+ console.log(chalk_1.default.green(`✓ Message scheduled to ${targetLabel} at ${postAtIso}`));
109
+ }
110
+ else {
111
+ console.log(chalk_1.default.green(`✓ ${constants_1.SUCCESS_MESSAGES.MESSAGE_SCHEDULED(options.channel, postAtIso)}`));
112
+ }
113
+ return;
114
+ }
115
+ await client.sendMessage(targetChannel, messageContent, options.thread);
116
+ if (options.user || options.email) {
117
+ console.log(chalk_1.default.green(`✓ DM sent to ${targetLabel}`));
118
+ }
119
+ else {
120
+ console.log(chalk_1.default.green(`✓ ${constants_1.SUCCESS_MESSAGES.MESSAGE_SENT(options.channel)}`));
121
+ }
122
+ }));
123
+ return sendCommand;
124
+ }
125
+ //# sourceMappingURL=send.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function setupUnreadCommand(): Command;
3
+ //# sourceMappingURL=unread.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unread.d.ts","sourceRoot":"","sources":["../../src/commands/unread.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmGpC,wBAAgB,kBAAkB,IAAI,OAAO,CA0B5C"}
@@ -0,0 +1,92 @@
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.setupUnreadCommand = setupUnreadCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const commander_1 = require("commander");
9
+ const client_factory_1 = require("../utils/client-factory");
10
+ const command_wrapper_1 = require("../utils/command-wrapper");
11
+ const constants_1 = require("../utils/constants");
12
+ const channel_formatters_1 = require("../utils/formatters/channel-formatters");
13
+ const message_formatters_1 = require("../utils/formatters/message-formatters");
14
+ const option_parsers_1 = require("../utils/option-parsers");
15
+ const terminal_sanitizer_1 = require("../utils/terminal-sanitizer");
16
+ async function fetchChannelUnreadData(client, channelName) {
17
+ return await client.getChannelUnread(channelName);
18
+ }
19
+ function formatChannelUnreadOutput(result, format, countOnly) {
20
+ const formatter = (0, message_formatters_1.createMessageFormatter)(format);
21
+ formatter.format({
22
+ channel: result.channel,
23
+ messages: result.messages,
24
+ users: result.users,
25
+ countOnly: countOnly,
26
+ format: format,
27
+ totalUnreadCount: result.totalUnreadCount,
28
+ displayedMessageCount: result.displayedMessageCount,
29
+ });
30
+ }
31
+ async function markChannelAsRead(client, channel) {
32
+ await client.markAsRead(channel.id);
33
+ console.log(chalk_1.default.green(`✓ Marked messages in #${(0, terminal_sanitizer_1.sanitizeTerminalText)(channel.name || '')} as read`));
34
+ }
35
+ async function handleSpecificChannelUnread(client, options) {
36
+ const result = await fetchChannelUnreadData(client, options.channel);
37
+ const format = (0, option_parsers_1.parseFormat)(options.format);
38
+ const countOnly = (0, option_parsers_1.parseBoolean)(options.countOnly);
39
+ formatChannelUnreadOutput(result, format, countOnly);
40
+ if ((0, option_parsers_1.parseBoolean)(options.markRead)) {
41
+ await markChannelAsRead(client, result.channel);
42
+ }
43
+ }
44
+ async function fetchAllUnreadChannels(client) {
45
+ return await client.listUnreadChannels();
46
+ }
47
+ function formatAllChannelsOutput(channels, format, countOnly, limit) {
48
+ const displayChannels = channels.slice(0, limit);
49
+ const formatter = (0, channel_formatters_1.createChannelFormatter)(format, countOnly);
50
+ formatter.format({ channels: displayChannels, countOnly: countOnly });
51
+ }
52
+ async function markAllChannelsAsRead(client, channels) {
53
+ for (const channel of channels) {
54
+ await client.markAsRead(channel.id);
55
+ }
56
+ console.log(chalk_1.default.green('✓ Marked all messages as read'));
57
+ }
58
+ async function handleAllChannelsUnread(client, options) {
59
+ const channels = await fetchAllUnreadChannels(client);
60
+ if (channels.length === 0) {
61
+ console.log(chalk_1.default.green('✓ No unread messages'));
62
+ return;
63
+ }
64
+ const limit = (0, option_parsers_1.parseLimit)(options.limit, constants_1.DEFAULTS.UNREAD_DISPLAY_LIMIT);
65
+ const format = (0, option_parsers_1.parseFormat)(options.format);
66
+ const countOnly = (0, option_parsers_1.parseBoolean)(options.countOnly);
67
+ formatAllChannelsOutput(channels, format, countOnly, limit);
68
+ if ((0, option_parsers_1.parseBoolean)(options.markRead)) {
69
+ await markAllChannelsAsRead(client, channels);
70
+ }
71
+ }
72
+ function setupUnreadCommand() {
73
+ const unreadCommand = new commander_1.Command('unread')
74
+ .description('Show unread messages across channels')
75
+ .option('-c, --channel <channel>', 'Show unread for a specific channel')
76
+ .option('--format <format>', 'Output format: table, simple, json', 'table')
77
+ .option('--count-only', 'Show only unread counts', false)
78
+ .option('--limit <number>', 'Maximum number of channels to display', constants_1.DEFAULTS.UNREAD_DISPLAY_LIMIT.toString())
79
+ .option('--mark-read', 'Mark messages as read after fetching', false)
80
+ .option('--profile <profile>', 'Use specific workspace profile')
81
+ .action((0, command_wrapper_1.wrapCommand)(async (options) => {
82
+ const client = await (0, client_factory_1.createSlackClient)(options.profile);
83
+ if (options.channel) {
84
+ await handleSpecificChannelUnread(client, options);
85
+ }
86
+ else {
87
+ await handleAllChannelsUnread(client, options);
88
+ }
89
+ }));
90
+ return unreadCommand;
91
+ }
92
+ //# sourceMappingURL=unread.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unread.js","sourceRoot":"","sources":["../../src/commands/unread.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function setupUploadCommand(): Command;
3
+ //# sourceMappingURL=upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/commands/upload.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,kBAAkB,IAAI,OAAO,CAyD5C"}