@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 @@
1
+ {"version":3,"file":"search-formatters.d.ts","sourceRoot":"","sources":["../../../src/utils/formatters/search-formatters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKhD,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAyFD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,oEAEnD"}
@@ -0,0 +1,87 @@
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.createSearchFormatter = createSearchFormatter;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const date_utils_1 = require("../date-utils");
9
+ const terminal_sanitizer_1 = require("../terminal-sanitizer");
10
+ const base_formatter_1 = require("./base-formatter");
11
+ class TableSearchFormatter extends base_formatter_1.AbstractFormatter {
12
+ format(options) {
13
+ const { query, matches, totalCount, page, pageCount } = options;
14
+ console.log(chalk_1.default.bold(`\nSearch results for "${query}" (${totalCount} matches)`));
15
+ if (matches.length === 0) {
16
+ console.log(chalk_1.default.yellow('No messages found'));
17
+ return;
18
+ }
19
+ if (pageCount > 1) {
20
+ console.log(chalk_1.default.gray(`Page ${page}/${pageCount}`));
21
+ }
22
+ console.log('');
23
+ matches.forEach((match) => {
24
+ const channel = match.channel.name
25
+ ? `#${(0, terminal_sanitizer_1.sanitizeTerminalText)(match.channel.name)}`
26
+ : (0, terminal_sanitizer_1.sanitizeTerminalText)(match.channel.id || 'unknown');
27
+ const username = (0, terminal_sanitizer_1.sanitizeTerminalText)(match.username || match.user || 'Unknown');
28
+ const timestamp = match.ts ? (0, date_utils_1.formatTimestampFixed)(match.ts) : '';
29
+ const text = (0, terminal_sanitizer_1.sanitizeTerminalText)(match.text || '(no text)');
30
+ console.log(`${chalk_1.default.gray(`[${timestamp}]`)} ${chalk_1.default.blue(channel)} ${chalk_1.default.cyan(username)}`);
31
+ console.log(text);
32
+ if (match.permalink) {
33
+ console.log(chalk_1.default.gray((0, terminal_sanitizer_1.sanitizeTerminalText)(match.permalink)));
34
+ }
35
+ console.log('');
36
+ });
37
+ console.log(chalk_1.default.green(`Displayed ${matches.length} of ${totalCount} match(es)`));
38
+ }
39
+ }
40
+ class SimpleSearchFormatter extends base_formatter_1.AbstractFormatter {
41
+ format(options) {
42
+ const { matches, totalCount } = options;
43
+ if (matches.length === 0) {
44
+ console.log('No messages found');
45
+ return;
46
+ }
47
+ matches.forEach((match) => {
48
+ const channel = match.channel.name
49
+ ? `#${(0, terminal_sanitizer_1.sanitizeTerminalText)(match.channel.name)}`
50
+ : (0, terminal_sanitizer_1.sanitizeTerminalText)(match.channel.id || 'unknown');
51
+ const username = (0, terminal_sanitizer_1.sanitizeTerminalText)(match.username || match.user || 'Unknown');
52
+ const timestamp = match.ts ? (0, date_utils_1.formatTimestampFixed)(match.ts) : '';
53
+ const text = (0, terminal_sanitizer_1.sanitizeTerminalText)(match.text || '(no text)');
54
+ console.log(`[${channel}] ${username} (${timestamp}): ${text}`);
55
+ });
56
+ if (totalCount > matches.length) {
57
+ console.log(`... and ${totalCount - matches.length} more match(es)`);
58
+ }
59
+ }
60
+ }
61
+ class JsonSearchFormatter extends base_formatter_1.JsonFormatter {
62
+ transform(options) {
63
+ const { query, matches, totalCount, page, pageCount } = options;
64
+ return {
65
+ query,
66
+ totalCount,
67
+ page,
68
+ pageCount,
69
+ matches: matches.map((match) => ({
70
+ channel: match.channel.name || match.channel.id || 'unknown',
71
+ username: match.username || match.user || 'Unknown',
72
+ timestamp: match.ts ? (0, date_utils_1.formatTimestampFixed)(match.ts) : '',
73
+ text: match.text || '(no text)',
74
+ permalink: match.permalink || '',
75
+ })),
76
+ };
77
+ }
78
+ }
79
+ const searchFormatterFactory = (0, base_formatter_1.createFormatterFactory)({
80
+ table: new TableSearchFormatter(),
81
+ simple: new SimpleSearchFormatter(),
82
+ json: new JsonSearchFormatter(),
83
+ });
84
+ function createSearchFormatter(format) {
85
+ return searchFormatterFactory.create(format);
86
+ }
87
+ //# sourceMappingURL=search-formatters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-formatters.js","sourceRoot":"","sources":["../../../src/utils/formatters/search-formatters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Extracts all user IDs from mentions in a text
3
+ * @param text - The text containing Slack mentions
4
+ * @returns Array of unique user IDs found in mentions
5
+ */
6
+ export declare function extractUserIdsFromMentions(text: string): string[];
7
+ /**
8
+ * Extracts all unique user IDs from an array of messages
9
+ * Includes both message authors and mentioned users
10
+ * @param messages - Array of messages to extract user IDs from
11
+ * @returns Array of unique user IDs
12
+ */
13
+ export declare function extractAllUserIds(messages: Array<{
14
+ user?: string;
15
+ text?: string;
16
+ }>): string[];
17
+ //# sourceMappingURL=mention-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mention-utils.d.ts","sourceRoot":"","sources":["../../src/utils/mention-utils.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAYjE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,EAAE,CAmB7F"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractUserIdsFromMentions = extractUserIdsFromMentions;
4
+ exports.extractAllUserIds = extractAllUserIds;
5
+ const slack_patterns_1 = require("./slack-patterns");
6
+ /**
7
+ * Extracts all user IDs from mentions in a text
8
+ * @param text - The text containing Slack mentions
9
+ * @returns Array of unique user IDs found in mentions
10
+ */
11
+ function extractUserIdsFromMentions(text) {
12
+ const userIds = [];
13
+ const matches = text.matchAll(slack_patterns_1.USER_MENTION_PATTERN);
14
+ for (const match of matches) {
15
+ const userId = match[1];
16
+ if (userId) {
17
+ userIds.push(userId);
18
+ }
19
+ }
20
+ return userIds;
21
+ }
22
+ /**
23
+ * Extracts all unique user IDs from an array of messages
24
+ * Includes both message authors and mentioned users
25
+ * @param messages - Array of messages to extract user IDs from
26
+ * @returns Array of unique user IDs
27
+ */
28
+ function extractAllUserIds(messages) {
29
+ const userIds = new Set();
30
+ for (const message of messages) {
31
+ // Add message author
32
+ if (message.user) {
33
+ userIds.add(message.user);
34
+ }
35
+ // Add mentioned users
36
+ if (message.text) {
37
+ const mentionedIds = extractUserIdsFromMentions(message.text);
38
+ for (const id of mentionedIds) {
39
+ userIds.add(id);
40
+ }
41
+ }
42
+ }
43
+ return Array.from(userIds);
44
+ }
45
+ //# sourceMappingURL=mention-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mention-utils.js","sourceRoot":"","sources":["../../src/utils/mention-utils.ts"],"names":[],"mappings":";;AAOA,gEAYC;AAQD,8CAmBC;AA9CD,qDAAwD;AAExD;;;;GAIG;AACH,SAAgB,0BAA0B,CAAC,IAAY;IACrD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,qCAAoB,CAAC,CAAC;IAEpD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,QAAiD;IACjF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,qBAAqB;QACrB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAED,sBAAsB;QACtB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,YAAY,GAAG,0BAA0B,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9D,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Common option parsing utilities to reduce duplication
3
+ */
4
+ /**
5
+ * Parse format option with default value
6
+ */
7
+ export declare function parseFormat(format?: string, defaultFormat?: string): string;
8
+ /**
9
+ * Parse limit option with default value
10
+ */
11
+ export declare function parseLimit(limit: string | undefined, defaultLimit: number): number;
12
+ /**
13
+ * Parse boolean option with default value
14
+ */
15
+ export declare function parseBoolean(value?: boolean, defaultValue?: boolean): boolean;
16
+ /**
17
+ * Parse count option with default value
18
+ */
19
+ export declare function parseCount(count: string | undefined, defaultCount: number, min?: number, max?: number): number;
20
+ /**
21
+ * Parse profile option
22
+ */
23
+ export declare function parseProfile(profile?: string): string | undefined;
24
+ /**
25
+ * Common option defaults
26
+ */
27
+ export declare const OPTION_DEFAULTS: {
28
+ readonly format: "table";
29
+ readonly limit: 100;
30
+ readonly countOnly: false;
31
+ readonly includeArchived: false;
32
+ };
33
+ /**
34
+ * Parse common list options
35
+ */
36
+ export interface ListOptions {
37
+ format?: string;
38
+ limit?: string;
39
+ countOnly?: boolean;
40
+ }
41
+ export interface ParsedListOptions {
42
+ format: string;
43
+ limit: number;
44
+ countOnly: boolean;
45
+ }
46
+ export declare function parseListOptions(options: ListOptions, defaults?: Partial<ParsedListOptions>): ParsedListOptions;
47
+ //# sourceMappingURL=option-parsers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"option-parsers.d.ts","sourceRoot":"","sources":["../../src/utils/option-parsers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,aAAa,SAAU,GAAG,MAAM,CAE5E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAElF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,YAAY,UAAQ,GAAG,OAAO,CAE3E;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,YAAY,EAAE,MAAM,EACpB,GAAG,CAAC,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,MAAM,GACX,MAAM,CAgBR;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEjE;AAED;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;CAKlB,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACpC,iBAAiB,CAanB"}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ /**
3
+ * Common option parsing utilities to reduce duplication
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.OPTION_DEFAULTS = void 0;
7
+ exports.parseFormat = parseFormat;
8
+ exports.parseLimit = parseLimit;
9
+ exports.parseBoolean = parseBoolean;
10
+ exports.parseCount = parseCount;
11
+ exports.parseProfile = parseProfile;
12
+ exports.parseListOptions = parseListOptions;
13
+ /**
14
+ * Parse format option with default value
15
+ */
16
+ function parseFormat(format, defaultFormat = 'table') {
17
+ return format || defaultFormat;
18
+ }
19
+ /**
20
+ * Parse limit option with default value
21
+ */
22
+ function parseLimit(limit, defaultLimit) {
23
+ return parseInt(limit || defaultLimit.toString(), 10);
24
+ }
25
+ /**
26
+ * Parse boolean option with default value
27
+ */
28
+ function parseBoolean(value, defaultValue = false) {
29
+ return value !== undefined ? value : defaultValue;
30
+ }
31
+ /**
32
+ * Parse count option with default value
33
+ */
34
+ function parseCount(count, defaultCount, min, max) {
35
+ const parsed = parseInt(count || defaultCount.toString(), 10);
36
+ if (isNaN(parsed)) {
37
+ return defaultCount;
38
+ }
39
+ if (min !== undefined && parsed < min) {
40
+ return min;
41
+ }
42
+ if (max !== undefined && parsed > max) {
43
+ return max;
44
+ }
45
+ return parsed;
46
+ }
47
+ /**
48
+ * Parse profile option
49
+ */
50
+ function parseProfile(profile) {
51
+ return profile;
52
+ }
53
+ /**
54
+ * Common option defaults
55
+ */
56
+ exports.OPTION_DEFAULTS = {
57
+ format: 'table',
58
+ limit: 100,
59
+ countOnly: false,
60
+ includeArchived: false,
61
+ };
62
+ function parseListOptions(options, defaults) {
63
+ const mergedDefaults = {
64
+ format: exports.OPTION_DEFAULTS.format,
65
+ limit: exports.OPTION_DEFAULTS.limit,
66
+ countOnly: exports.OPTION_DEFAULTS.countOnly,
67
+ ...defaults,
68
+ };
69
+ return {
70
+ format: parseFormat(options.format, mergedDefaults.format),
71
+ limit: parseLimit(options.limit, mergedDefaults.limit),
72
+ countOnly: parseBoolean(options.countOnly, mergedDefaults.countOnly),
73
+ };
74
+ }
75
+ //# sourceMappingURL=option-parsers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"option-parsers.js","sourceRoot":"","sources":["../../src/utils/option-parsers.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAKH,kCAEC;AAKD,gCAEC;AAKD,oCAEC;AAKD,gCAqBC;AAKD,oCAEC;AA2BD,4CAgBC;AA/FD;;GAEG;AACH,SAAgB,WAAW,CAAC,MAAe,EAAE,aAAa,GAAG,OAAO;IAClE,OAAO,MAAM,IAAI,aAAa,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,KAAyB,EAAE,YAAoB;IACxE,OAAO,QAAQ,CAAC,KAAK,IAAI,YAAY,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,KAAe,EAAE,YAAY,GAAG,KAAK;IAChE,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CACxB,KAAyB,EACzB,YAAoB,EACpB,GAAY,EACZ,GAAY;IAEZ,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,IAAI,YAAY,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IAE9D,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAClB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IAAI,GAAG,KAAK,SAAS,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QACtC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,GAAG,KAAK,SAAS,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QACtC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,OAAgB;IAC3C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACU,QAAA,eAAe,GAAG;IAC7B,MAAM,EAAE,OAAO;IACf,KAAK,EAAE,GAAG;IACV,SAAS,EAAE,KAAK;IAChB,eAAe,EAAE,KAAK;CACd,CAAC;AAiBX,SAAgB,gBAAgB,CAC9B,OAAoB,EACpB,QAAqC;IAErC,MAAM,cAAc,GAAG;QACrB,MAAM,EAAE,uBAAe,CAAC,MAAM;QAC9B,KAAK,EAAE,uBAAe,CAAC,KAAK;QAC5B,SAAS,EAAE,uBAAe,CAAC,SAAS;QACpC,GAAG,QAAQ;KACZ,CAAC;IAEF,OAAO;QACL,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC;QAC1D,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC;QACtD,SAAS,EAAE,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,SAAS,CAAC;KACrE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { Config, ConfigOptions, Profile } from '../types/config';
2
+ export declare class ProfileConfigManager {
3
+ private configPath;
4
+ private cryptoService;
5
+ constructor(options?: ConfigOptions);
6
+ setToken(token: string, profile?: string): Promise<void>;
7
+ getConfig(profile?: string): Promise<Config | null>;
8
+ listProfiles(): Promise<Profile[]>;
9
+ useProfile(profile: string): Promise<void>;
10
+ getCurrentProfile(): Promise<string>;
11
+ clearConfig(profile?: string): Promise<void>;
12
+ maskToken(token: string): string;
13
+ private decryptToken;
14
+ private getConfigStore;
15
+ private needsMigration;
16
+ private migrateOldConfig;
17
+ private saveConfigStore;
18
+ }
19
+ //# sourceMappingURL=profile-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile-config.d.ts","sourceRoot":"","sources":["../../src/utils/profile-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAe,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAMnF,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAqB;gBAE9B,OAAO,GAAE,aAAkB;IAMjC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBxD,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA0BnD,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAWlC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1C,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKpC,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BlD,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIhC,OAAO,CAAC,YAAY;YAQN,cAAc;IAsB5B,OAAO,CAAC,cAAc;YAKR,gBAAgB;YAsBhB,eAAe;CAoB9B"}
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ProfileConfigManager = void 0;
37
+ const fs = __importStar(require("fs/promises"));
38
+ const os = __importStar(require("os"));
39
+ const path = __importStar(require("path"));
40
+ const constants_1 = require("./constants");
41
+ const errors_1 = require("./errors");
42
+ const token_crypto_service_1 = require("./token-crypto-service");
43
+ const token_utils_1 = require("./token-utils");
44
+ class ProfileConfigManager {
45
+ constructor(options = {}) {
46
+ const configDir = options.configDir || path.join(os.homedir(), '.slack-cli');
47
+ this.configPath = path.join(configDir, 'config.json');
48
+ this.cryptoService = new token_crypto_service_1.TokenCryptoService();
49
+ }
50
+ async setToken(token, profile) {
51
+ const store = await this.getConfigStore();
52
+ const profileName = profile || store.defaultProfile || constants_1.DEFAULT_PROFILE_NAME;
53
+ const config = {
54
+ token: this.cryptoService.encrypt(token),
55
+ updatedAt: new Date().toISOString(),
56
+ };
57
+ store.profiles[profileName] = config;
58
+ // Set as default profile if it's the first one or explicitly setting default
59
+ if (!store.defaultProfile || profileName === constants_1.DEFAULT_PROFILE_NAME) {
60
+ store.defaultProfile = profileName;
61
+ }
62
+ await this.saveConfigStore(store);
63
+ }
64
+ async getConfig(profile) {
65
+ const store = await this.getConfigStore();
66
+ const profileName = profile || store.defaultProfile || constants_1.DEFAULT_PROFILE_NAME;
67
+ const config = store.profiles[profileName];
68
+ if (!config) {
69
+ return null;
70
+ }
71
+ const decryptedToken = this.decryptToken(config.token);
72
+ // Re-encrypt legacy or plaintext tokens and persist to disk.
73
+ if (!this.cryptoService.isCurrentFormat(config.token)) {
74
+ store.profiles[profileName] = {
75
+ ...config,
76
+ token: this.cryptoService.encrypt(decryptedToken),
77
+ };
78
+ await this.saveConfigStore(store);
79
+ }
80
+ return {
81
+ ...config,
82
+ token: decryptedToken,
83
+ };
84
+ }
85
+ async listProfiles() {
86
+ const store = await this.getConfigStore();
87
+ const currentProfile = store.defaultProfile || constants_1.DEFAULT_PROFILE_NAME;
88
+ return Object.entries(store.profiles).map(([name, config]) => ({
89
+ name,
90
+ config,
91
+ isDefault: name === currentProfile,
92
+ }));
93
+ }
94
+ async useProfile(profile) {
95
+ const store = await this.getConfigStore();
96
+ if (!store.profiles[profile]) {
97
+ throw new errors_1.ConfigurationError(`Profile "${profile}" does not exist`);
98
+ }
99
+ store.defaultProfile = profile;
100
+ await this.saveConfigStore(store);
101
+ }
102
+ async getCurrentProfile() {
103
+ const store = await this.getConfigStore();
104
+ return store.defaultProfile || constants_1.DEFAULT_PROFILE_NAME;
105
+ }
106
+ async clearConfig(profile) {
107
+ const store = await this.getConfigStore();
108
+ const profileName = profile || store.defaultProfile || constants_1.DEFAULT_PROFILE_NAME;
109
+ delete store.profiles[profileName];
110
+ // If we deleted the default profile, set a new default
111
+ if (store.defaultProfile === profileName) {
112
+ const remainingProfiles = Object.keys(store.profiles);
113
+ if (remainingProfiles.length > 0) {
114
+ store.defaultProfile = remainingProfiles[0];
115
+ }
116
+ else {
117
+ // No profiles left, delete the config file
118
+ try {
119
+ await fs.unlink(this.configPath);
120
+ }
121
+ catch (error) {
122
+ if (error && typeof error === 'object' && 'code' in error && error.code !== 'ENOENT') {
123
+ throw error;
124
+ }
125
+ }
126
+ return;
127
+ }
128
+ }
129
+ await this.saveConfigStore(store);
130
+ }
131
+ maskToken(token) {
132
+ return (0, token_utils_1.maskToken)(token);
133
+ }
134
+ decryptToken(token) {
135
+ if (this.cryptoService.isEncrypted(token)) {
136
+ return this.cryptoService.decrypt(token);
137
+ }
138
+ // Return plaintext tokens as-is for backward compatibility
139
+ return token;
140
+ }
141
+ async getConfigStore() {
142
+ try {
143
+ const data = await fs.readFile(this.configPath, 'utf-8');
144
+ const parsed = JSON.parse(data);
145
+ // Handle migration from old format
146
+ if (this.needsMigration(parsed)) {
147
+ return await this.migrateOldConfig(parsed);
148
+ }
149
+ return parsed;
150
+ }
151
+ catch (error) {
152
+ if (error && typeof error === 'object' && 'code' in error && error.code === 'ENOENT') {
153
+ return { profiles: {} };
154
+ }
155
+ if (error instanceof SyntaxError) {
156
+ throw new errors_1.ConfigurationError(constants_1.ERROR_MESSAGES.INVALID_CONFIG_FORMAT);
157
+ }
158
+ throw error;
159
+ }
160
+ }
161
+ needsMigration(data) {
162
+ const configData = data;
163
+ return Boolean(configData.token && !configData.profiles);
164
+ }
165
+ async migrateOldConfig(oldData) {
166
+ const data = oldData;
167
+ const plainToken = this.cryptoService.isEncrypted(data.token)
168
+ ? this.cryptoService.decrypt(data.token)
169
+ : data.token;
170
+ const encryptedToken = this.cryptoService.encrypt(plainToken);
171
+ const migratedConfig = {
172
+ token: encryptedToken,
173
+ updatedAt: data.updatedAt,
174
+ };
175
+ const newStore = {
176
+ profiles: { [constants_1.DEFAULT_PROFILE_NAME]: migratedConfig },
177
+ defaultProfile: constants_1.DEFAULT_PROFILE_NAME,
178
+ };
179
+ // Save migrated config
180
+ await this.saveConfigStore(newStore);
181
+ return newStore;
182
+ }
183
+ async saveConfigStore(store) {
184
+ const configDir = path.dirname(this.configPath);
185
+ await fs.mkdir(configDir, { recursive: true, mode: constants_1.FILE_PERMISSIONS.CONFIG_DIR });
186
+ const tempPath = `${this.configPath}.${process.pid}.${Date.now()}.tmp`;
187
+ const payload = JSON.stringify(store, null, 2);
188
+ await fs.writeFile(tempPath, payload, {
189
+ encoding: 'utf-8',
190
+ mode: constants_1.FILE_PERMISSIONS.CONFIG_FILE,
191
+ flag: 'wx',
192
+ });
193
+ try {
194
+ await fs.rename(tempPath, this.configPath);
195
+ }
196
+ catch (error) {
197
+ await fs.unlink(tempPath).catch(() => undefined);
198
+ throw error;
199
+ }
200
+ }
201
+ }
202
+ exports.ProfileConfigManager = ProfileConfigManager;
203
+ //# sourceMappingURL=profile-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile-config.js","sourceRoot":"","sources":["../../src/utils/profile-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function parseScheduledTimestamp(value: string): number | null;
2
+ export declare function resolvePostAt(at: string | undefined, afterMinutes: string | undefined, nowMs?: number): number | null;
3
+ //# sourceMappingURL=schedule-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule-utils.d.ts","sourceRoot":"","sources":["../../src/utils/schedule-utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAcpE;AAED,wBAAgB,aAAa,CAC3B,EAAE,EAAE,MAAM,GAAG,SAAS,EACtB,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,KAAK,SAAa,GACjB,MAAM,GAAG,IAAI,CAoBf"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseScheduledTimestamp = parseScheduledTimestamp;
4
+ exports.resolvePostAt = resolvePostAt;
5
+ function parseScheduledTimestamp(value) {
6
+ const trimmed = value.trim();
7
+ if (/^\d+$/.test(trimmed)) {
8
+ const timestamp = Number.parseInt(trimmed, 10);
9
+ return Number.isSafeInteger(timestamp) ? timestamp : null;
10
+ }
11
+ const parsedMs = Date.parse(trimmed);
12
+ if (Number.isNaN(parsedMs)) {
13
+ return null;
14
+ }
15
+ return Math.floor(parsedMs / 1000);
16
+ }
17
+ function resolvePostAt(at, afterMinutes, nowMs = Date.now()) {
18
+ if (at) {
19
+ return parseScheduledTimestamp(at);
20
+ }
21
+ if (!afterMinutes) {
22
+ return null;
23
+ }
24
+ const trimmedAfter = afterMinutes.trim();
25
+ if (!/^\d+$/.test(trimmedAfter)) {
26
+ return null;
27
+ }
28
+ const minutes = Number.parseInt(trimmedAfter, 10);
29
+ if (!Number.isSafeInteger(minutes) || minutes <= 0) {
30
+ return null;
31
+ }
32
+ return Math.floor(nowMs / 1000) + minutes * 60;
33
+ }
34
+ //# sourceMappingURL=schedule-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule-utils.js","sourceRoot":"","sources":["../../src/utils/schedule-utils.ts"],"names":[],"mappings":";;AAAA,0DAcC;AAED,sCAwBC;AAxCD,SAAgB,uBAAuB,CAAC,KAAa;IACnD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAE7B,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,SAAgB,aAAa,CAC3B,EAAsB,EACtB,YAAgC,EAChC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE;IAElB,IAAI,EAAE,EAAE,CAAC;QACP,OAAO,uBAAuB,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;IACzC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC;AACjD,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from '../types/slack';
2
+ export { SlackApiClient, slackApiClient } from './slack-client-service';
3
+ //# sourceMappingURL=slack-api-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-api-client.d.ts","sourceRoot":"","sources":["../../src/utils/slack-api-client.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,22 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.slackApiClient = exports.SlackApiClient = void 0;
18
+ __exportStar(require("../types/slack"), exports);
19
+ var slack_client_service_1 = require("./slack-client-service");
20
+ Object.defineProperty(exports, "SlackApiClient", { enumerable: true, get: function () { return slack_client_service_1.SlackApiClient; } });
21
+ Object.defineProperty(exports, "slackApiClient", { enumerable: true, get: function () { return slack_client_service_1.slackApiClient; } });
22
+ //# sourceMappingURL=slack-api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-api-client.js","sourceRoot":"","sources":["../../src/utils/slack-api-client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,+DAAwE;AAA/D,sHAAA,cAAc,OAAA;AAAE,sHAAA,cAAc,OAAA"}