agent-slack 0.6.0 → 0.7.1
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.
- package/README.md +6 -1
- package/dist/index.js +990 -28
- package/dist/index.js.map +17 -11
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/index.ts", "../src/lib/version.ts", "../src/auth/brave.ts", "../src/auth/firefox-profile.ts", "../src/auth/chromium-cookie.ts", "../src/lib/object-type-guards.ts", "../src/auth/chrome.ts", "../src/auth/curl.ts", "../src/auth/desktop.ts", "../src/lib/leveldb-reader.ts", "../src/auth/desktop-crypto.ts", "../src/auth/firefox.ts", "../src/auth/paths.ts", "../src/lib/fs.ts", "../src/auth/schema.ts", "../src/auth/keychain.ts", "../src/auth/store.ts", "../src/slack/channels.ts", "../src/cli/workspace-selector.ts", "../src/slack/client.ts", "../src/cli/context-client-resolver.ts", "../src/cli/context.ts", "../src/lib/compact-json.ts", "../src/lib/redact.ts", "../src/cli/auth-command.ts", "../src/slack/files.ts", "../src/slack/html-to-md.ts", "../src/lib/tmp-paths.ts", "../src/lib/app-dir.ts", "../src/slack/canvas.ts", "../src/cli/canvas-command.ts", "../src/slack/emoji.ts", "../src/slack/mrkdwn.ts", "../src/slack/message-api-parsing.ts", "../src/slack/render-rich-text.ts", "../src/slack/render.ts", "../src/slack/message-compact.ts", "../src/slack/messages.ts", "../src/slack/url.ts", "../src/cli/targets.ts", "../src/cli/message-url-warning.ts", "../src/slack/rich-text.ts", "../src/slack/upload.ts", "../src/cli/message-file-downloads.ts", "../src/cli/message-thread-info.ts", "../src/cli/message-read-actions.ts", "../src/cli/message-actions.ts", "../src/cli/draft-server.ts", "../src/cli/draft-actions.ts", "../src/cli/message-command.ts", "../src/slack/search-query.ts", "../src/slack/search-raw.ts", "../src/slack/search-file-ext.ts", "../src/slack/search-files.ts", "../src/slack/search-messages.ts", "../src/slack/search.ts", "../src/cli/search-command.ts", "../src/lib/update.ts", "../src/cli/update-command.ts", "../src/slack/users.ts", "../src/cli/user-command.ts", "../src/slack/channel-admin.ts", "../src/cli/channel-command.ts"],
|
|
3
|
+
"sources": ["../src/index.ts", "../src/lib/version.ts", "../src/auth/brave.ts", "../src/auth/firefox-profile.ts", "../src/auth/chromium-cookie.ts", "../src/lib/object-type-guards.ts", "../src/auth/chrome.ts", "../src/auth/curl.ts", "../src/auth/desktop.ts", "../src/lib/leveldb-reader.ts", "../src/auth/desktop-crypto.ts", "../src/auth/firefox.ts", "../src/auth/paths.ts", "../src/lib/fs.ts", "../src/auth/schema.ts", "../src/auth/keychain.ts", "../src/auth/store.ts", "../src/slack/channels.ts", "../src/cli/workspace-selector.ts", "../src/slack/client.ts", "../src/cli/context-client-resolver.ts", "../src/cli/context.ts", "../src/lib/compact-json.ts", "../src/lib/redact.ts", "../src/cli/auth-command.ts", "../src/slack/files.ts", "../src/slack/html-to-md.ts", "../src/lib/tmp-paths.ts", "../src/lib/app-dir.ts", "../src/slack/canvas.ts", "../src/cli/canvas-command.ts", "../src/slack/emoji.ts", "../src/slack/mrkdwn.ts", "../src/slack/message-api-parsing.ts", "../src/slack/render-rich-text.ts", "../src/slack/render.ts", "../src/slack/message-compact.ts", "../src/slack/messages.ts", "../src/slack/url.ts", "../src/cli/targets.ts", "../src/cli/message-url-warning.ts", "../src/slack/rich-text.ts", "../src/slack/upload.ts", "../src/cli/message-file-downloads.ts", "../src/cli/message-thread-info.ts", "../src/cli/message-read-actions.ts", "../src/cli/message-actions.ts", "../src/cli/draft-server.ts", "../src/cli/draft-actions.ts", "../src/cli/message-command.ts", "../src/slack/search-query.ts", "../src/slack/search-raw.ts", "../src/slack/search-file-ext.ts", "../src/slack/search-files.ts", "../src/slack/search-messages.ts", "../src/slack/search.ts", "../src/cli/search-command.ts", "../src/slack/later.ts", "../src/cli/later-command.ts", "../src/slack/unreads.ts", "../src/cli/unreads-command.ts", "../src/lib/update.ts", "../src/cli/update-command.ts", "../src/slack/users.ts", "../src/cli/user-command.ts", "../src/slack/channel-admin.ts", "../src/cli/channel-command.ts", "../src/slack/workflows.ts", "../src/cli/workflow-command.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import { Command } from \"commander\";\nimport { getPackageVersion } from \"./lib/version.ts\";\nimport { createCliContext } from \"./cli/context.ts\";\nimport { registerAuthCommand } from \"./cli/auth-command.ts\";\nimport { registerCanvasCommand } from \"./cli/canvas-command.ts\";\nimport { registerMessageCommand } from \"./cli/message-command.ts\";\nimport { registerSearchCommand } from \"./cli/search-command.ts\";\nimport { registerUpdateCommand } from \"./cli/update-command.ts\";\nimport { registerUserCommand } from \"./cli/user-command.ts\";\nimport { registerChannelCommand } from \"./cli/channel-command.ts\";\nimport { backgroundUpdateCheck } from \"./lib/update.ts\";\n\nconst program = new Command();\nprogram\n .name(\"agent-slack\")\n .description(\"Slack automation CLI for AI agents\")\n .version(getPackageVersion());\n\nconst ctx = createCliContext();\n\nregisterAuthCommand({ program, ctx });\nregisterMessageCommand({ program, ctx });\nregisterCanvasCommand({ program, ctx });\nregisterSearchCommand({ program, ctx });\nregisterUpdateCommand({ program });\nregisterUserCommand({ program, ctx });\nregisterChannelCommand({ program, ctx });\n\nprogram.parse(process.argv);\nif (!process.argv.slice(2).length) {\n program.outputHelp();\n}\n\n// Fire-and-forget background update check (throttled to once/24h, stderr only).\n// Skip for the update command itself to avoid duplicate output.\nconst [subcommand] = process.argv.slice(2);\nif (subcommand && subcommand !== \"update\") {\n backgroundUpdateCheck();\n}\n",
|
|
5
|
+
"import { Command } from \"commander\";\nimport { getPackageVersion } from \"./lib/version.ts\";\nimport { createCliContext } from \"./cli/context.ts\";\nimport { registerAuthCommand } from \"./cli/auth-command.ts\";\nimport { registerCanvasCommand } from \"./cli/canvas-command.ts\";\nimport { registerMessageCommand } from \"./cli/message-command.ts\";\nimport { registerSearchCommand } from \"./cli/search-command.ts\";\nimport { registerLaterCommand } from \"./cli/later-command.ts\";\nimport { registerUnreadsCommand } from \"./cli/unreads-command.ts\";\nimport { registerUpdateCommand } from \"./cli/update-command.ts\";\nimport { registerUserCommand } from \"./cli/user-command.ts\";\nimport { registerChannelCommand } from \"./cli/channel-command.ts\";\nimport { registerWorkflowCommand } from \"./cli/workflow-command.ts\";\nimport { backgroundUpdateCheck } from \"./lib/update.ts\";\n\nconst program = new Command();\nprogram\n .name(\"agent-slack\")\n .description(\"Slack automation CLI for AI agents\")\n .version(getPackageVersion());\n\nconst ctx = createCliContext();\n\nregisterAuthCommand({ program, ctx });\nregisterMessageCommand({ program, ctx });\nregisterCanvasCommand({ program, ctx });\nregisterSearchCommand({ program, ctx });\nregisterLaterCommand({ program, ctx });\nregisterUnreadsCommand({ program, ctx });\nregisterUpdateCommand({ program });\nregisterUserCommand({ program, ctx });\nregisterChannelCommand({ program, ctx });\nregisterWorkflowCommand({ program, ctx });\n\nprogram.parse(process.argv);\nif (!process.argv.slice(2).length) {\n program.outputHelp();\n}\n\n// Fire-and-forget background update check (throttled to once/24h, stderr only).\n// Skip for the update command itself to avoid duplicate output.\nconst [subcommand] = process.argv.slice(2);\nif (subcommand && subcommand !== \"update\") {\n backgroundUpdateCheck();\n}\n",
|
|
6
6
|
"import { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\n// Injected at build time via --define AGENT_SLACK_BUILD_VERSION='\"x.y.z\"'\ndeclare const AGENT_SLACK_BUILD_VERSION: string | undefined;\n\nlet cachedVersion: string | undefined;\n\nexport function getPackageVersion(): string {\n if (cachedVersion !== undefined) {\n return cachedVersion;\n }\n\n // 1. Check build-time injected version (for compiled binaries)\n if (typeof AGENT_SLACK_BUILD_VERSION === \"string\" && AGENT_SLACK_BUILD_VERSION) {\n cachedVersion = AGENT_SLACK_BUILD_VERSION;\n return cachedVersion;\n }\n\n // 2. Check environment variables\n const envVersion =\n process.env.AGENT_SLACK_VERSION?.trim() || process.env.npm_package_version?.trim();\n if (envVersion) {\n cachedVersion = envVersion;\n return cachedVersion;\n }\n\n // 3. Try to read from package.json (for development)\n try {\n let dir = dirname(fileURLToPath(import.meta.url));\n for (let i = 0; i < 6; i++) {\n const candidate = join(dir, \"package.json\");\n if (existsSync(candidate)) {\n const raw = readFileSync(candidate, \"utf8\");\n const pkg = JSON.parse(raw) as { version?: unknown };\n const v = typeof pkg.version === \"string\" ? pkg.version.trim() : \"\";\n cachedVersion = v || \"0.0.0\";\n return cachedVersion;\n }\n const next = dirname(dir);\n if (next === dir) {\n break;\n }\n dir = next;\n }\n } catch {\n // fall through\n }\n\n cachedVersion = \"0.0.0\";\n return cachedVersion;\n}\n\nexport function getUserAgent(): string {\n return `agent-slack/${getPackageVersion()}`;\n}\n",
|
|
7
7
|
"import { execFileSync } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { homedir, platform } from \"node:os\";\nimport { join } from \"node:path\";\nimport { queryReadonlySqlite } from \"./firefox-profile.ts\";\nimport { decryptChromiumCookieValue } from \"./chromium-cookie.ts\";\nimport { isRecord } from \"../lib/object-type-guards.ts\";\n\ntype BraveExtractedTeam = { url: string; name?: string; token: string };\n\nexport type BraveExtracted = {\n cookie_d: string;\n teams: BraveExtractedTeam[];\n};\n\nconst IS_MACOS = platform() === \"darwin\";\n\n// --- AppleScript helpers (for extracting teams from Brave tabs) ---\n\nfunction osascript(script: string): string {\n return execFileSync(\"osascript\", [\"-e\", script], {\n encoding: \"utf8\",\n timeout: 7000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n }).trim();\n}\n\nconst TEAM_JSON_PATHS = [\n \"JSON.stringify(JSON.parse(localStorage.localConfig_v2).teams)\",\n \"JSON.stringify(JSON.parse(localStorage.localConfig_v3).teams)\",\n \"JSON.stringify(JSON.parse(localStorage.getItem('reduxPersist:localConfig'))?.teams || {})\",\n \"JSON.stringify(window.boot_data?.teams || {})\",\n];\n\nfunction teamsScript(): string {\n const tryPaths = TEAM_JSON_PATHS.map(\n (expr) => `try { var v = ${expr}; if (v && v !== '{}' && v !== 'null') return v; } catch(e) {}`,\n );\n return `\n tell application \"Brave Browser\"\n repeat with w in windows\n repeat with t in tabs of w\n if URL of t contains \"slack.com\" then\n return execute t javascript \"(function(){ ${tryPaths.join(\" \")} return '{}'; })()\"\n end if\n end repeat\n end repeat\n return \"{}\"\n end tell\n `;\n}\n\nfunction toBraveTeam(value: unknown): BraveExtractedTeam | null {\n if (!isRecord(value)) {\n return null;\n }\n const token = typeof value.token === \"string\" ? value.token : null;\n const url = typeof value.url === \"string\" ? value.url : null;\n if (!token || !url || !token.startsWith(\"xoxc-\")) {\n return null;\n }\n const name = typeof value.name === \"string\" ? value.name : undefined;\n return { url, name, token };\n}\n\nfunction extractTeamsFromBraveTab(): BraveExtractedTeam[] {\n const teamsRaw = osascript(teamsScript());\n let teamsObj: unknown = {};\n try {\n teamsObj = JSON.parse(teamsRaw || \"{}\");\n } catch {\n teamsObj = {};\n }\n\n const teamsRecord = isRecord(teamsObj) ? teamsObj : {};\n return Object.values(teamsRecord)\n .map((t) => toBraveTeam(t))\n .filter((t): t is BraveExtractedTeam => t !== null);\n}\n\n// --- Cookie extraction from Brave's SQLite database ---\n\nconst BRAVE_COOKIES_DB = join(\n homedir(),\n \"Library\",\n \"Application Support\",\n \"BraveSoftware\",\n \"Brave-Browser\",\n \"Default\",\n \"Cookies\",\n);\n\nfunction getSafeStoragePasswords(): string[] {\n const services = [\n \"Brave Safe Storage\",\n \"Brave Browser Safe Storage\",\n \"Chrome Safe Storage\",\n \"Chromium Safe Storage\",\n ];\n const passwords: string[] = [];\n for (const service of services) {\n try {\n const out = execFileSync(\"security\", [\"find-generic-password\", \"-w\", \"-s\", service], {\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n }).trim();\n if (out) {\n passwords.push(out);\n }\n } catch {\n // continue\n }\n }\n return passwords;\n}\n\nasync function extractCookieDFromBrave(): Promise<string> {\n if (!existsSync(BRAVE_COOKIES_DB)) {\n throw new Error(`Brave Cookies DB not found: ${BRAVE_COOKIES_DB}`);\n }\n\n const rows = (await queryReadonlySqlite(\n BRAVE_COOKIES_DB,\n \"select host_key, name, value, encrypted_value from cookies where name = 'd' and host_key like '%slack.com' order by length(encrypted_value) desc\",\n )) as {\n host_key: string;\n name: string;\n value: string;\n encrypted_value: Uint8Array;\n }[];\n\n if (!rows || rows.length === 0) {\n throw new Error(\"No Slack 'd' cookie found in Brave\");\n }\n const row = rows[0]!;\n if (row.value && row.value.startsWith(\"xoxd-\")) {\n return row.value;\n }\n\n const encrypted = Buffer.from(row.encrypted_value || []);\n if (encrypted.length === 0) {\n throw new Error(\"Brave Slack 'd' cookie had no encrypted_value\");\n }\n\n const prefix = encrypted.subarray(0, 3).toString(\"utf8\");\n const data = prefix === \"v10\" || prefix === \"v11\" ? encrypted.subarray(3) : encrypted;\n const passwords = getSafeStoragePasswords();\n\n for (const password of passwords) {\n try {\n const decrypted = decryptChromiumCookieValue(data, { password, iterations: 1003 });\n const match = decrypted.match(/xoxd-[A-Za-z0-9%/+_=.-]+/);\n if (match) {\n return match[0]!;\n }\n } catch {\n // continue\n }\n }\n\n throw new Error(\"Could not decrypt Slack 'd' cookie from Brave\");\n}\n\n// --- Main export ---\n\nexport async function extractFromBrave(): Promise<BraveExtracted | null> {\n if (!IS_MACOS) {\n return null;\n }\n try {\n const teams = extractTeamsFromBraveTab();\n if (teams.length === 0) {\n return null;\n }\n\n const cookie_d = await extractCookieDFromBrave();\n if (!cookie_d || !cookie_d.startsWith(\"xoxd-\")) {\n return null;\n }\n\n return { cookie_d, teams };\n } catch {\n return null;\n }\n}\n",
|
|
8
8
|
"import { copyFile, mkdtemp, readdir, readFile, rm } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { homedir, platform } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport type SqliteRow = Record<string, unknown>;\n\nexport type ProfileCandidate = {\n name?: string;\n path: string;\n isDefault: boolean;\n};\n\nconst PLATFORM = platform();\nconst IS_MACOS = PLATFORM === \"darwin\";\nconst IS_LINUX = PLATFORM === \"linux\";\n\nexport function isMissingBunSqliteModule(error: unknown): boolean {\n if (!error || typeof error !== \"object\") {\n return false;\n }\n const err = error as { code?: unknown; message?: unknown };\n const code = typeof err.code === \"string\" ? err.code : \"\";\n const message = typeof err.message === \"string\" ? err.message : \"\";\n\n if (code === \"ERR_MODULE_NOT_FOUND\" || code === \"ERR_UNSUPPORTED_ESM_URL_SCHEME\") {\n return true;\n }\n if (!message.includes(\"bun:sqlite\")) {\n return false;\n }\n return (\n message.includes(\"Cannot find module\") ||\n message.includes(\"Unknown builtin module\") ||\n message.includes(\"unsupported URL scheme\") ||\n message.includes(\"Only URLs with a scheme in\")\n );\n}\n\nexport async function queryReadonlySqlite(dbPath: string, sql: string): Promise<SqliteRow[]> {\n try {\n const { Database } = await import(\"bun:sqlite\");\n const db = new Database(dbPath, { readonly: true });\n try {\n return db.query(sql).all() as SqliteRow[];\n } finally {\n db.close();\n }\n } catch (error) {\n if (!isMissingBunSqliteModule(error)) {\n throw error;\n }\n const { DatabaseSync } = await import(\"node:sqlite\");\n const db = new DatabaseSync(dbPath, { readOnly: true });\n try {\n return db.prepare(sql).all() as SqliteRow[];\n } finally {\n db.close();\n }\n }\n}\n\nexport function getFirefoxBaseDir(): string {\n if (IS_LINUX) {\n return join(homedir(), \".mozilla\", \"firefox\");\n }\n if (IS_MACOS) {\n return join(homedir(), \"Library\", \"Application Support\", \"Firefox\");\n }\n throw new Error(`Firefox extraction is not supported on ${PLATFORM}.`);\n}\n\nexport function parseProfilesIni(raw: string, baseDir: string): ProfileCandidate[] {\n const lines = raw.split(/\\r?\\n/);\n const profiles: {\n name?: string;\n path?: string;\n isRelative: boolean;\n isDefault: boolean;\n }[] = [];\n // Firefox can mark defaults either in [Profile*] (Default=1) or [Install*] sections.\n const installDefaults = new Set<string>();\n\n let section = \"\";\n let current: { name?: string; path?: string; isRelative: boolean; isDefault: boolean } | null =\n null;\n\n for (const lineRaw of lines) {\n const line = lineRaw.trim();\n if (!line || line.startsWith(\";\") || line.startsWith(\"#\")) {\n continue;\n }\n if (line.startsWith(\"[\") && line.endsWith(\"]\")) {\n if (current) {\n profiles.push(current);\n current = null;\n }\n section = line.slice(1, -1);\n if (section.startsWith(\"Profile\")) {\n current = { isRelative: true, isDefault: false };\n }\n continue;\n }\n\n const idx = line.indexOf(\"=\");\n if (idx === -1) {\n continue;\n }\n const key = line.slice(0, idx).trim();\n const value = line.slice(idx + 1).trim();\n\n if (section.startsWith(\"Profile\") && current) {\n if (key === \"Name\") {\n current.name = value;\n } else if (key === \"Path\") {\n current.path = value;\n } else if (key === \"IsRelative\") {\n current.isRelative = value !== \"0\";\n } else if (key === \"Default\") {\n current.isDefault = value === \"1\";\n }\n continue;\n }\n\n if (section.startsWith(\"Install\") && key === \"Default\" && value) {\n installDefaults.add(value);\n }\n }\n\n if (current) {\n profiles.push(current);\n }\n\n return profiles\n .filter((p) => Boolean(p.path))\n .map((p) => {\n const profilePath = p.isRelative ? join(baseDir, p.path!) : p.path!;\n return {\n name: p.name,\n path: profilePath,\n isDefault: p.isDefault || installDefaults.has(p.path!),\n };\n });\n}\n\nexport async function listProfileCandidates(): Promise<ProfileCandidate[]> {\n const baseDir = getFirefoxBaseDir();\n const iniPath = join(baseDir, \"profiles.ini\");\n const candidates: ProfileCandidate[] = [];\n\n if (existsSync(iniPath)) {\n const raw = await readFile(iniPath, \"utf8\");\n candidates.push(...parseProfilesIni(raw, baseDir));\n }\n\n // profiles.ini can be stale, so also scan profile directories as a fallback source.\n const dirName = IS_MACOS ? \"Profiles\" : baseDir;\n if (existsSync(dirName)) {\n const entries = await readdir(dirName, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory()) {\n continue;\n }\n const profilePath = join(dirName, entry.name);\n if (!candidates.some((c) => c.path === profilePath)) {\n candidates.push({ path: profilePath, isDefault: false });\n }\n }\n }\n\n const existing = candidates.filter((c) => existsSync(c.path));\n existing.sort((a, b) => Number(b.isDefault) - Number(a.isDefault));\n return existing;\n}\n\nexport function pickCandidatesByProfile(\n candidates: ProfileCandidate[],\n profile?: string,\n): ProfileCandidate[] {\n const selector = profile?.trim();\n if (!selector) {\n return candidates;\n }\n const normalized = selector.toLowerCase();\n const matched = candidates.filter((c) => {\n const name = c.name?.toLowerCase() ?? \"\";\n const base = c.path.split(\"/\").pop()?.toLowerCase() ?? \"\";\n const full = c.path.toLowerCase();\n return name === normalized || base === normalized || full.includes(normalized);\n });\n return matched;\n}\n\nexport async function copySqliteForRead(\n dbPath: string,\n): Promise<{ copyPath: string; cleanup: () => Promise<void> }> {\n const tmpPath = await mkdtemp(join(tmpdir(), \"agent-slack-firefox-\"));\n const base = dbPath.split(\"/\").pop() || \"db.sqlite\";\n const copyPath = join(tmpPath, base);\n await copyFile(dbPath, copyPath);\n\n // Firefox keeps recent commits in WAL/SHM while running; copy them with the DB snapshot.\n for (const suffix of [\"-wal\", \"-shm\"]) {\n const sidecar = `${dbPath}${suffix}`;\n if (!existsSync(sidecar)) {\n continue;\n }\n try {\n await copyFile(sidecar, `${copyPath}${suffix}`);\n } catch {}\n }\n\n return {\n copyPath,\n cleanup: async () => {\n try {\n await rm(tmpPath, { recursive: true, force: true });\n } catch {}\n },\n };\n}\n",
|
|
@@ -21,13 +21,13 @@
|
|
|
21
21
|
"import { CREDENTIALS_FILE, KEYCHAIN_SERVICE } from \"./paths.ts\";\nimport { readJsonFile, writeJsonFile } from \"../lib/fs.ts\";\nimport { CredentialsSchema, type Credentials, type Workspace } from \"./schema.ts\";\nimport { keychainGet, keychainSet } from \"./keychain.ts\";\nimport { platform } from \"node:os\";\n\nconst KEYCHAIN_PLACEHOLDER = \"__KEYCHAIN__\";\nconst IS_MACOS = platform() === \"darwin\";\n\nfunction normalizeWorkspaceUrl(workspaceUrl: string): string {\n const u = new URL(workspaceUrl);\n return `${u.protocol}//${u.host}`;\n}\n\nfunction isPlaceholderSecret(value: string | undefined): boolean {\n return !value || value === KEYCHAIN_PLACEHOLDER;\n}\n\nexport async function loadCredentials(): Promise<Credentials> {\n const fromFile = await readJsonFile<unknown>(CREDENTIALS_FILE);\n const parsed = CredentialsSchema.safeParse(fromFile ?? { version: 1, workspaces: [] });\n if (!parsed.success) {\n return { version: 1, workspaces: [] };\n }\n\n // Optional: hydrate browser cookie/token from keychain for security.\n const creds = parsed.data;\n const hydrated = creds.workspaces.map((w) => {\n if (w.auth.auth_type === \"browser\") {\n const account = `xoxc:${normalizeWorkspaceUrl(w.workspace_url)}`;\n const xoxc = keychainGet(account, KEYCHAIN_SERVICE);\n const xoxd = keychainGet(\"xoxd\", KEYCHAIN_SERVICE);\n return {\n ...w,\n auth: {\n auth_type: \"browser\" as const,\n xoxc_token: xoxc ?? w.auth.xoxc_token,\n xoxd_cookie: xoxd ?? w.auth.xoxd_cookie,\n },\n };\n }\n if (w.auth.auth_type === \"standard\") {\n const account = `token:${normalizeWorkspaceUrl(w.workspace_url)}`;\n const token = keychainGet(account, KEYCHAIN_SERVICE);\n return {\n ...w,\n auth: {\n auth_type: \"standard\" as const,\n token: token ?? w.auth.token,\n },\n };\n }\n return w;\n });\n\n return { ...creds, workspaces: hydrated };\n}\n\nexport async function saveCredentials(credentials: Credentials): Promise<void> {\n const payload: Credentials = {\n ...credentials,\n updated_at: new Date().toISOString(),\n workspaces: credentials.workspaces.map((w) => ({\n ...w,\n workspace_url: normalizeWorkspaceUrl(w.workspace_url),\n })),\n };\n\n // Store secrets in keychain when possible and avoid writing plaintext tokens to disk.\n // If keychain writes fail (or non-macOS), fall back to storing secrets in the file.\n const filePayload: Credentials = structuredClone(payload);\n\n if (IS_MACOS) {\n // Browser auth: xoxd is shared across workspaces, xoxc is per-workspace.\n const firstBrowser = payload.workspaces.find((w) => w.auth.auth_type === \"browser\");\n let xoxdStored = false;\n if (\n firstBrowser?.auth.auth_type === \"browser\" &&\n !isPlaceholderSecret(firstBrowser.auth.xoxd_cookie)\n ) {\n const existing = keychainGet(\"xoxd\", KEYCHAIN_SERVICE);\n xoxdStored =\n existing === firstBrowser.auth.xoxd_cookie ||\n keychainSet({\n account: \"xoxd\",\n value: firstBrowser.auth.xoxd_cookie,\n service: KEYCHAIN_SERVICE,\n });\n }\n\n for (const w of filePayload.workspaces) {\n if (w.auth.auth_type === \"browser\") {\n const account = `xoxc:${normalizeWorkspaceUrl(w.workspace_url)}`;\n const tokenStored =\n isPlaceholderSecret(w.auth.xoxc_token) ||\n keychainGet(account, KEYCHAIN_SERVICE) === w.auth.xoxc_token ||\n keychainSet({ account, value: w.auth.xoxc_token, service: KEYCHAIN_SERVICE });\n\n if (tokenStored) {\n w.auth.xoxc_token = KEYCHAIN_PLACEHOLDER;\n }\n if (xoxdStored) {\n w.auth.xoxd_cookie = KEYCHAIN_PLACEHOLDER;\n }\n }\n\n if (w.auth.auth_type === \"standard\") {\n const account = `token:${normalizeWorkspaceUrl(w.workspace_url)}`;\n const tokenStored =\n isPlaceholderSecret(w.auth.token) ||\n keychainGet(account, KEYCHAIN_SERVICE) === w.auth.token ||\n keychainSet({ account, value: w.auth.token, service: KEYCHAIN_SERVICE });\n if (tokenStored) {\n w.auth.token = KEYCHAIN_PLACEHOLDER;\n }\n }\n }\n }\n\n await writeJsonFile(CREDENTIALS_FILE, filePayload);\n}\n\nexport async function upsertWorkspace(workspace: Workspace): Promise<Workspace> {\n const creds = await loadCredentials();\n const normalizedUrl = normalizeWorkspaceUrl(workspace.workspace_url);\n const next: Workspace = { ...workspace, workspace_url: normalizedUrl };\n\n const idx = creds.workspaces.findIndex(\n (w) => normalizeWorkspaceUrl(w.workspace_url) === normalizedUrl,\n );\n if (idx === -1) {\n creds.workspaces.push(next);\n } else {\n creds.workspaces[idx] = {\n ...creds.workspaces[idx],\n ...next,\n auth: next.auth,\n };\n }\n\n if (!creds.default_workspace_url) {\n creds.default_workspace_url = normalizedUrl;\n }\n await saveCredentials(creds);\n return next;\n}\n\nexport async function upsertWorkspaces(workspaces: Workspace[]): Promise<void> {\n if (workspaces.length === 0) {\n return;\n }\n const creds = await loadCredentials();\n\n for (const workspace of workspaces) {\n const normalizedUrl = normalizeWorkspaceUrl(workspace.workspace_url);\n const next: Workspace = { ...workspace, workspace_url: normalizedUrl };\n\n const idx = creds.workspaces.findIndex(\n (w) => normalizeWorkspaceUrl(w.workspace_url) === normalizedUrl,\n );\n if (idx === -1) {\n creds.workspaces.push(next);\n } else {\n creds.workspaces[idx] = {\n ...creds.workspaces[idx],\n ...next,\n auth: next.auth,\n };\n }\n\n if (!creds.default_workspace_url) {\n creds.default_workspace_url = normalizedUrl;\n }\n }\n\n await saveCredentials(creds);\n}\n\nexport async function setDefaultWorkspace(workspaceUrl: string): Promise<void> {\n const creds = await loadCredentials();\n creds.default_workspace_url = normalizeWorkspaceUrl(workspaceUrl);\n await saveCredentials(creds);\n}\n\nexport async function removeWorkspace(workspaceUrl: string): Promise<void> {\n const creds = await loadCredentials();\n const normalized = normalizeWorkspaceUrl(workspaceUrl);\n creds.workspaces = creds.workspaces.filter(\n (w) => normalizeWorkspaceUrl(w.workspace_url) !== normalized,\n );\n if (creds.default_workspace_url === normalized) {\n creds.default_workspace_url = creds.workspaces[0]?.workspace_url;\n }\n await saveCredentials(creds);\n}\n\nexport async function resolveWorkspaceForUrl(workspaceUrl: string): Promise<Workspace | null> {\n const creds = await loadCredentials();\n const normalized = normalizeWorkspaceUrl(workspaceUrl);\n return (\n creds.workspaces.find((w) => normalizeWorkspaceUrl(w.workspace_url) === normalized) ?? null\n );\n}\n\nexport async function resolveDefaultWorkspace(): Promise<Workspace | null> {\n const creds = await loadCredentials();\n if (creds.default_workspace_url) {\n const byDefault = creds.workspaces.find((w) => w.workspace_url === creds.default_workspace_url);\n if (byDefault) {\n return byDefault;\n }\n }\n return creds.workspaces[0] ?? null;\n}\n\n// (reserved for future non-secret per-workspace metadata)\n",
|
|
22
22
|
"import type { SlackApiClient } from \"./client.ts\";\nimport { asArray, getString, isRecord } from \"../lib/object-type-guards.ts\";\n\nconst DEFAULT_CONVERSATION_TYPES = \"public_channel,private_channel,im,mpim\";\n\nexport type ConversationsPage = {\n channels: Record<string, unknown>[];\n next_cursor?: string;\n};\n\nexport function isChannelId(input: string): boolean {\n return /^[CDG][A-Z0-9]{8,}$/.test(input);\n}\n\nexport function isUserId(input: string): boolean {\n return /^U[A-Z0-9]{8,}$/.test(input);\n}\n\n/**\n * Open (or reuse) a DM channel with a user via conversations.open.\n * Returns the DM channel ID.\n */\nexport async function openDmChannel(client: SlackApiClient, userId: string): Promise<string> {\n const resp = await client.api(\"conversations.open\", { users: userId });\n const channel = isRecord(resp) ? resp.channel : null;\n const channelId = isRecord(channel) ? getString(channel.id) : undefined;\n if (!channelId) {\n throw new Error(`Could not open DM channel for user: ${userId}`);\n }\n return channelId;\n}\n\nexport function normalizeChannelInput(input: string): {\n kind: \"id\" | \"name\";\n value: string;\n} {\n const trimmed = input.trim();\n if (trimmed.startsWith(\"#\")) {\n return { kind: \"name\", value: trimmed.slice(1) };\n }\n if (isChannelId(trimmed)) {\n return { kind: \"id\", value: trimmed };\n }\n return { kind: \"name\", value: trimmed };\n}\n\nexport async function resolveChannelId(client: SlackApiClient, input: string): Promise<string> {\n const normalized = normalizeChannelInput(input);\n if (normalized.kind === \"id\") {\n return normalized.value;\n }\n\n const name = normalized.value;\n if (!name) {\n throw new Error(\"Channel name is empty\");\n }\n\n // Slack has no name→ID lookup API. conversations.list paginates the entire\n // workspace (200 at a time), which is O(channels) API calls — 3+ minutes in\n // large workspaces. search.messages with `in:#name` resolves it in one call\n // by returning a message whose metadata includes the channel ID.\n try {\n const searchResp = await client.api(\"search.messages\", {\n query: `in:#${name}`,\n count: 1,\n sort: \"timestamp\",\n sort_dir: \"desc\",\n });\n const messages = isRecord(searchResp) ? searchResp.messages : null;\n const matches = isRecord(messages) ? asArray(messages.matches).filter(isRecord) : [];\n if (matches.length > 0) {\n const channel = isRecord(matches[0]!.channel) ? matches[0]!.channel : null;\n const channelId = channel ? getString(channel.id) : undefined;\n if (channelId) {\n return channelId;\n }\n }\n } catch {\n // search may fail (e.g. token lacks search:read scope) — fall through to pagination\n }\n\n // Fallback: paginate conversations.list until we find a match\n let cursor: string | undefined;\n for (;;) {\n const resp = await client.api(\"conversations.list\", {\n exclude_archived: true,\n limit: 200,\n cursor,\n types: \"public_channel,private_channel\",\n });\n const chans = asArray(resp.channels).filter(isRecord);\n for (const c of chans) {\n if (getString(c.name) === name && getString(c.id)) {\n return getString(c.id)!;\n }\n }\n\n const meta = isRecord(resp.response_metadata) ? resp.response_metadata : null;\n const next = meta ? getString(meta.next_cursor) : undefined;\n if (!next) {\n break;\n }\n cursor = next;\n }\n\n throw new Error(`Could not resolve channel name: #${name}`);\n}\n\n/**\n * Resolve a channel/DM ID to a human-readable name via conversations.info.\n * Returns the channel name (e.g. \"general\") or DM user's display name,\n * falling back to the raw ID on failure.\n */\nexport async function resolveChannelName(\n client: SlackApiClient,\n channelId: string,\n): Promise<string> {\n try {\n const resp = await client.api(\"conversations.info\", { channel: channelId });\n const channel = isRecord(resp) ? resp.channel : null;\n if (!isRecord(channel)) {\n return channelId;\n }\n\n // DM: resolve the other user's name\n if (channel.is_im) {\n const userId = getString(channel.user);\n if (userId) {\n try {\n const userResp = await client.api(\"users.info\", { user: userId });\n const user = isRecord(userResp) ? userResp.user : null;\n const profile = isRecord(user) ? user.profile : null;\n if (isRecord(profile)) {\n return getString(profile.display_name) || getString(profile.real_name) || channelId;\n }\n } catch {\n // fall through\n }\n }\n return channelId;\n }\n\n return getString(channel.name) || channelId;\n } catch {\n return channelId;\n }\n}\n\ntype ListConversationsOptions = {\n limit?: number;\n cursor?: string;\n types?: string;\n excludeArchived?: boolean;\n};\n\nexport async function listUserConversations(\n client: SlackApiClient,\n options?: ListConversationsOptions & { user?: string },\n): Promise<ConversationsPage> {\n const resp = await client.api(\"users.conversations\", {\n user: options?.user,\n limit: normalizeConversationsLimit(options?.limit),\n cursor: options?.cursor,\n types: options?.types ?? DEFAULT_CONVERSATION_TYPES,\n exclude_archived: options?.excludeArchived ?? true,\n });\n return normalizeConversationsPage(resp);\n}\n\nexport async function listAllConversations(\n client: SlackApiClient,\n options?: ListConversationsOptions,\n): Promise<ConversationsPage> {\n const resp = await client.api(\"conversations.list\", {\n limit: normalizeConversationsLimit(options?.limit),\n cursor: options?.cursor,\n types: options?.types ?? DEFAULT_CONVERSATION_TYPES,\n exclude_archived: options?.excludeArchived ?? true,\n });\n return normalizeConversationsPage(resp);\n}\n\nexport function normalizeConversationsPage(resp: Record<string, unknown>): ConversationsPage {\n const channels = asArray(resp.channels).filter(isRecord);\n const meta = isRecord(resp.response_metadata) ? resp.response_metadata : null;\n const next = meta ? getString(meta.next_cursor) : undefined;\n return { channels, next_cursor: next };\n}\n\nfunction normalizeConversationsLimit(value: number | undefined): number {\n return Math.min(Math.max(value ?? 100, 1), 1000);\n}\n\nexport async function markConversation(\n client: SlackApiClient,\n options: { channelId: string; ts: string },\n): Promise<void> {\n const { channelId, ts } = options;\n await client.api(\"conversations.mark\", { channel: channelId, ts });\n}\n",
|
|
23
23
|
"import type { Workspace } from \"../auth/schema.ts\";\n\nexport type WorkspaceSelectorResult = {\n match: Workspace | null;\n ambiguous: Workspace[];\n};\n\nfunction normalizeUrl(u: string): string {\n const url = new URL(u);\n return `${url.protocol}//${url.host}`;\n}\n\nfunction normalizedWorkspaceCandidates(workspace: Workspace): string[] {\n let host = \"\";\n try {\n host = new URL(workspace.workspace_url).host.toLowerCase();\n } catch {\n host = \"\";\n }\n const hostWithoutSlackSuffix = host.replace(/\\.slack\\.com$/i, \"\");\n return [\n workspace.workspace_url.toLowerCase(),\n host,\n hostWithoutSlackSuffix,\n workspace.workspace_name?.toLowerCase() ?? \"\",\n workspace.team_domain?.toLowerCase() ?? \"\",\n ].filter(Boolean);\n}\n\nexport function resolveWorkspaceSelector(\n workspaces: Workspace[],\n selector: string,\n): WorkspaceSelectorResult {\n const raw = selector.trim();\n if (!raw) {\n return { match: null, ambiguous: [] };\n }\n\n try {\n const normalized = normalizeUrl(raw).toLowerCase();\n const exact = workspaces.find((w) => w.workspace_url.toLowerCase() === normalized);\n if (exact) {\n return { match: exact, ambiguous: [] };\n }\n } catch {\n // Not a URL selector; continue with fuzzy matching.\n }\n\n const needle = raw.toLowerCase();\n const matches = workspaces.filter((workspace) =>\n normalizedWorkspaceCandidates(workspace).some((candidate) => candidate.includes(needle)),\n );\n if (matches.length === 1) {\n return { match: matches[0]!, ambiguous: [] };\n }\n if (matches.length > 1) {\n return { match: null, ambiguous: matches };\n }\n return { match: null, ambiguous: [] };\n}\n",
|
|
24
|
-
"import { WebClient } from \"@slack/web-api\";\nimport { getUserAgent } from \"../lib/version.ts\";\n\nexport type SlackAuth =\n | { auth_type: \"standard\"; token: string }\n | { auth_type: \"browser\"; xoxc_token: string; xoxd_cookie: string };\n\nexport class SlackApiClient {\n private auth: SlackAuth;\n private web?: WebClient;\n private workspaceUrl?: string;\n\n constructor(auth: SlackAuth, options?: { workspaceUrl?: string }) {\n this.auth = auth;\n this.workspaceUrl = options?.workspaceUrl;\n if (auth.auth_type === \"standard\") {\n this.web = new WebClient(auth.token);\n }\n }\n\n async api(\n method: string,\n params: Record<string, unknown> = {},\n ): Promise<Record<string, unknown>> {\n if (this.auth.auth_type === \"standard\") {\n if (!this.web) {\n throw new Error(\"WebClient not initialized\");\n }\n return (await this.web.apiCall(method, params)) as unknown as Record<string, unknown>;\n }\n\n if (!this.workspaceUrl) {\n throw new Error(\n \"Browser auth requires workspace URL. Provide --workspace-url or set SLACK_WORKSPACE_URL, or call via a Slack message URL.\",\n );\n }\n const { auth } = this;\n if (auth.auth_type !== \"browser\") {\n throw new Error(\"Browser API requires browser auth\");\n }\n return this.browserApi({\n workspaceUrl: this.workspaceUrl,\n auth,\n method,\n params,\n });\n }\n\n private async browserApi(input: {\n workspaceUrl: string;\n auth: Extract<SlackAuth, { auth_type: \"browser\" }>;\n method: string;\n params: Record<string, unknown>;\n attempt?: number;\n }): Promise<Record<string, unknown>> {\n const attempt = input.attempt ?? 0;\n const url = `${input.workspaceUrl.replace(/\\/$/, \"\")}/api/${input.method}`;\n const cleanedEntries = Object.entries(input.params)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => [k, typeof v === \"object\" ? JSON.stringify(v) : String(v)]);\n const formBody = new URLSearchParams({\n token: input.auth.xoxc_token,\n ...Object.fromEntries(cleanedEntries),\n });\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n Cookie: `d=${encodeURIComponent(input.auth.xoxd_cookie)}`,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n Origin: \"https://app.slack.com\",\n \"User-Agent\": getUserAgent(),\n },\n body: formBody,\n });\n\n if (response.status === 429 && attempt < 3) {\n const retryAfter = Number(response.headers.get(\"Retry-After\") ?? \"5\");\n const delayMs = Math.min(Math.max(retryAfter, 1) * 1000, 30000);\n await new Promise((r) => setTimeout(r, delayMs));\n return this.browserApi({\n ...input,\n attempt: attempt + 1,\n });\n }\n\n const data: unknown = await response.json().catch(() => ({}));\n if (!response.ok) {\n throw new Error(`Slack HTTP ${response.status} calling ${input.method}`);\n }\n if (!isRecord(data) || data.ok !== true) {\n const error = isRecord(data) && typeof data.error === \"string\" ? data.error : null;\n throw new Error(error || `Slack API error calling ${input.method}`);\n }\n return data;\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n",
|
|
24
|
+
"import { WebClient } from \"@slack/web-api\";\nimport { getUserAgent } from \"../lib/version.ts\";\n\nexport type SlackAuth =\n | { auth_type: \"standard\"; token: string }\n | { auth_type: \"browser\"; xoxc_token: string; xoxd_cookie: string };\n\nexport class SlackApiClient {\n private auth: SlackAuth;\n private web?: WebClient;\n private workspaceUrl?: string;\n\n constructor(auth: SlackAuth, options?: { workspaceUrl?: string }) {\n this.auth = auth;\n this.workspaceUrl = options?.workspaceUrl;\n if (auth.auth_type === \"standard\") {\n this.web = new WebClient(auth.token);\n }\n }\n\n /**\n * Call a Slack API method using multipart/form-data encoding.\n * Some internal Slack APIs (e.g. saved.update) require multipart encoding\n * and silently ignore parameters sent as application/x-www-form-urlencoded.\n */\n async apiMultipart(\n method: string,\n params: Record<string, unknown> = {},\n ): Promise<Record<string, unknown>> {\n if (this.auth.auth_type === \"standard\") {\n // Standard tokens can use the normal API path\n return this.api(method, params);\n }\n if (!this.workspaceUrl) {\n throw new Error(\"Browser auth requires workspace URL.\");\n }\n const auth = this.auth as Extract<SlackAuth, { auth_type: \"browser\" }>;\n const url = `${this.workspaceUrl.replace(/\\/$/, \"\")}/api/${method}`;\n const fd = new FormData();\n fd.append(\"token\", auth.xoxc_token);\n for (const [k, v] of Object.entries(params)) {\n if (v !== undefined) {\n fd.append(k, typeof v === \"object\" ? JSON.stringify(v) : String(v));\n }\n }\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n Cookie: `d=${encodeURIComponent(auth.xoxd_cookie)}`,\n Origin: \"https://app.slack.com\",\n \"User-Agent\": getUserAgent(),\n },\n body: fd,\n });\n const data: unknown = await response.json().catch(() => ({}));\n if (!response.ok) {\n throw new Error(`Slack HTTP ${response.status} calling ${method}`);\n }\n if (!isRecord(data) || data.ok !== true) {\n const error = isRecord(data) && typeof data.error === \"string\" ? data.error : null;\n throw new Error(error || `Slack API error calling ${method}`);\n }\n return data;\n }\n\n async api(\n method: string,\n params: Record<string, unknown> = {},\n ): Promise<Record<string, unknown>> {\n if (this.auth.auth_type === \"standard\") {\n if (!this.web) {\n throw new Error(\"WebClient not initialized\");\n }\n return (await this.web.apiCall(method, params)) as unknown as Record<string, unknown>;\n }\n\n if (!this.workspaceUrl) {\n throw new Error(\n \"Browser auth requires workspace URL. Provide --workspace-url or set SLACK_WORKSPACE_URL, or call via a Slack message URL.\",\n );\n }\n const { auth } = this;\n if (auth.auth_type !== \"browser\") {\n throw new Error(\"Browser API requires browser auth\");\n }\n return this.browserApi({\n workspaceUrl: this.workspaceUrl,\n auth,\n method,\n params,\n });\n }\n\n private async browserApi(input: {\n workspaceUrl: string;\n auth: Extract<SlackAuth, { auth_type: \"browser\" }>;\n method: string;\n params: Record<string, unknown>;\n attempt?: number;\n }): Promise<Record<string, unknown>> {\n const attempt = input.attempt ?? 0;\n const url = `${input.workspaceUrl.replace(/\\/$/, \"\")}/api/${input.method}`;\n const cleanedEntries = Object.entries(input.params)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => [k, typeof v === \"object\" ? JSON.stringify(v) : String(v)]);\n const formBody = new URLSearchParams({\n token: input.auth.xoxc_token,\n ...Object.fromEntries(cleanedEntries),\n });\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n Cookie: `d=${encodeURIComponent(input.auth.xoxd_cookie)}`,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n Origin: \"https://app.slack.com\",\n \"User-Agent\": getUserAgent(),\n },\n body: formBody,\n });\n\n if (response.status === 429 && attempt < 3) {\n const retryAfter = Number(response.headers.get(\"Retry-After\") ?? \"5\");\n const delayMs = Math.min(Math.max(retryAfter, 1) * 1000, 30000);\n await new Promise((r) => setTimeout(r, delayMs));\n return this.browserApi({\n ...input,\n attempt: attempt + 1,\n });\n }\n\n const data: unknown = await response.json().catch(() => ({}));\n if (!response.ok) {\n throw new Error(`Slack HTTP ${response.status} calling ${input.method}`);\n }\n if (!isRecord(data) || data.ok !== true) {\n const error = isRecord(data) && typeof data.error === \"string\" ? data.error : null;\n throw new Error(error || `Slack API error calling ${input.method}`);\n }\n return data;\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n",
|
|
25
25
|
"import { extractFromBrave } from \"../auth/brave.ts\";\nimport { extractFromChrome } from \"../auth/chrome.ts\";\nimport { extractFromSlackDesktop } from \"../auth/desktop.ts\";\nimport { extractFromFirefox } from \"../auth/firefox.ts\";\nimport {\n loadCredentials,\n resolveDefaultWorkspace,\n resolveWorkspaceForUrl,\n upsertWorkspace,\n upsertWorkspaces,\n} from \"../auth/store.ts\";\nimport { resolveWorkspaceSelector } from \"./workspace-selector.ts\";\nimport { SlackApiClient, type SlackAuth } from \"../slack/client.ts\";\n\nexport function normalizeUrl(u: string): string {\n const url = new URL(u);\n return `${url.protocol}//${url.host}`;\n}\n\nfunction tryNormalizeUrl(u: string): string | undefined {\n try {\n return normalizeUrl(u);\n } catch {\n return undefined;\n }\n}\n\nfunction pickAuthFromEnv(): SlackAuth | null {\n const token = process.env.SLACK_TOKEN?.trim();\n if (!token) {\n return null;\n }\n if (token.startsWith(\"xoxc-\")) {\n const cookie = (process.env.SLACK_COOKIE_D || process.env.SLACK_COOKIE || \"\").trim();\n if (!cookie) {\n throw new Error(\"SLACK_TOKEN looks like xoxc- but SLACK_COOKIE_D is missing\");\n }\n return { auth_type: \"browser\", xoxc_token: token, xoxd_cookie: cookie };\n }\n return { auth_type: \"standard\", token };\n}\n\nexport async function getClientForWorkspace(workspaceUrl?: string): Promise<{\n client: SlackApiClient;\n auth: SlackAuth;\n workspace_url?: string;\n}> {\n const selector = workspaceUrl?.trim() || undefined;\n const normalizedSelectorUrl = selector ? tryNormalizeUrl(selector) : undefined;\n const selectorProvided = Boolean(selector);\n let resolvedWorkspaceUrl = normalizedSelectorUrl;\n if (selector) {\n const creds = await loadCredentials();\n const resolved = resolveWorkspaceSelector(creds.workspaces, selector);\n if (resolved.ambiguous.length > 0) {\n const options = resolved.ambiguous.map((w) => w.workspace_url).join(\", \");\n throw new Error(\n `Workspace selector \"${selector}\" is ambiguous. Matches: ${options}. Pass a more specific selector or full workspace URL.`,\n );\n }\n if (resolved.match) {\n resolvedWorkspaceUrl = resolved.match.workspace_url;\n } else if (!normalizedSelectorUrl) {\n resolvedWorkspaceUrl = undefined;\n }\n }\n\n const env = pickAuthFromEnv();\n if (env) {\n const envWorkspaceUrl = process.env.SLACK_WORKSPACE_URL?.trim();\n const urlForBrowser = resolvedWorkspaceUrl || envWorkspaceUrl;\n return {\n client: new SlackApiClient(env, { workspaceUrl: urlForBrowser }),\n auth: env,\n workspace_url: urlForBrowser,\n };\n }\n\n if (resolvedWorkspaceUrl) {\n const ws = await resolveWorkspaceForUrl(resolvedWorkspaceUrl);\n if (ws) {\n return {\n client: new SlackApiClient(ws.auth as SlackAuth, {\n workspaceUrl: ws.workspace_url,\n }),\n auth: ws.auth as SlackAuth,\n workspace_url: ws.workspace_url,\n };\n }\n }\n\n if (!selectorProvided) {\n const def = await resolveDefaultWorkspace();\n if (def) {\n return {\n client: new SlackApiClient(def.auth as SlackAuth, {\n workspaceUrl: def.workspace_url,\n }),\n auth: def.auth as SlackAuth,\n workspace_url: def.workspace_url,\n };\n }\n }\n\n try {\n const extracted = await extractFromSlackDesktop();\n await upsertWorkspaces(\n extracted.teams.map((team) => ({\n workspace_url: normalizeUrl(team.url),\n workspace_name: team.name,\n auth: {\n auth_type: \"browser\" as const,\n xoxc_token: team.token,\n xoxd_cookie: extracted.cookie_d,\n },\n })),\n );\n\n const desired = resolvedWorkspaceUrl\n ? await resolveWorkspaceForUrl(resolvedWorkspaceUrl)\n : selector\n ? resolveWorkspaceSelector((await loadCredentials()).workspaces, selector).match\n : await resolveDefaultWorkspace();\n const chosen = desired ?? (!selectorProvided ? await resolveDefaultWorkspace() : null);\n if (chosen) {\n return {\n client: new SlackApiClient(chosen.auth as SlackAuth, {\n workspaceUrl: chosen.workspace_url,\n }),\n auth: chosen.auth as SlackAuth,\n workspace_url: chosen.workspace_url,\n };\n }\n } catch {\n // Fall through to Chrome extraction.\n }\n\n // Fallback: try Chrome, Brave, then Firefox extraction.\n const browserSources: {\n cookie_d: string;\n teams: { url: string; name?: string; token: string }[];\n }[] = [];\n const chromeResult = extractFromChrome();\n if (chromeResult && chromeResult.teams.length > 0) {\n browserSources.push(chromeResult);\n }\n const braveResult = await extractFromBrave();\n if (braveResult && braveResult.teams.length > 0) {\n browserSources.push(braveResult);\n }\n const firefoxResult = await extractFromFirefox();\n if (firefoxResult && firefoxResult.teams.length > 0) {\n browserSources.push(firefoxResult);\n }\n\n for (const source of browserSources) {\n const result = await matchAndUpsertBrowserTeam({\n teams: source.teams,\n cookieD: source.cookie_d,\n selector,\n normalizedSelectorUrl,\n });\n if (result) {\n return result;\n }\n }\n\n if (selector && !normalizedSelectorUrl) {\n throw new Error(\n `No configured workspace matches selector \"${selector}\". Run \"agent-slack auth whoami\" to list available workspaces.`,\n );\n }\n\n throw new Error(\n 'No Slack credentials available. Try \"agent-slack auth import-desktop\", \"agent-slack auth import-chrome\", \"agent-slack auth import-brave\", \"agent-slack auth import-firefox\", or set SLACK_TOKEN / SLACK_COOKIE_D.',\n );\n}\n\nasync function matchAndUpsertBrowserTeam(input: {\n teams: { url: string; name?: string; token: string }[];\n cookieD: string;\n selector: string | undefined;\n normalizedSelectorUrl: string | undefined;\n}): Promise<{ client: SlackApiClient; auth: SlackAuth; workspace_url: string } | null> {\n const { teams, cookieD, selector, normalizedSelectorUrl } = input;\n let chosen = teams[0]!;\n\n if (selector) {\n const normalizedSelector = selector.toLowerCase();\n const matches = teams.filter((t) => {\n const normalizedUrl = normalizeUrl(t.url).toLowerCase();\n const host = new URL(t.url).host.toLowerCase();\n const hostWithoutSlackSuffix = host.replace(/\\.slack\\.com$/i, \"\");\n const name = t.name?.toLowerCase() ?? \"\";\n return (\n normalizedUrl.includes(normalizedSelector) ||\n host.includes(normalizedSelector) ||\n hostWithoutSlackSuffix.includes(normalizedSelector) ||\n name.includes(normalizedSelector)\n );\n });\n if (matches.length > 1) {\n throw new Error(\n `Workspace selector \"${selector}\" is ambiguous. Matches: ${matches.map((t) => normalizeUrl(t.url)).join(\", \")}. Pass a more specific selector or full workspace URL.`,\n );\n }\n if (matches.length === 1) {\n chosen = matches[0]!;\n } else if (normalizedSelectorUrl) {\n const exact = teams.find((t) => {\n try {\n return normalizeUrl(t.url) === normalizeUrl(selector);\n } catch {\n return false;\n }\n });\n if (exact) {\n chosen = exact;\n } else {\n return null;\n }\n } else {\n return null;\n }\n }\n\n const auth: SlackAuth = {\n auth_type: \"browser\",\n xoxc_token: chosen.token,\n xoxd_cookie: cookieD,\n };\n const workspaceUrl = normalizeUrl(chosen.url);\n await upsertWorkspace({\n workspace_url: workspaceUrl,\n workspace_name: chosen.name,\n auth: {\n auth_type: \"browser\",\n xoxc_token: chosen.token,\n xoxd_cookie: cookieD,\n },\n });\n return {\n client: new SlackApiClient(auth, { workspaceUrl }),\n auth,\n workspace_url: workspaceUrl,\n };\n}\n",
|
|
26
26
|
"import { extractFromBrave } from \"../auth/brave.ts\";\nimport { extractFromChrome } from \"../auth/chrome.ts\";\nimport { parseSlackCurlCommand } from \"../auth/curl.ts\";\nimport { extractFromSlackDesktop } from \"../auth/desktop.ts\";\nimport { extractFromFirefox } from \"../auth/firefox.ts\";\nimport { loadCredentials, upsertWorkspaces } from \"../auth/store.ts\";\nimport { normalizeChannelInput } from \"../slack/channels.ts\";\nimport type { SlackApiClient } from \"../slack/client.ts\";\nimport { type SlackAuth } from \"../slack/client.ts\";\nimport { getClientForWorkspace, normalizeUrl } from \"./context-client-resolver.ts\";\n\nexport type CliContext = {\n effectiveWorkspaceUrl: (flag?: string) => string | undefined;\n assertWorkspaceSpecifiedForChannelNames: (input: {\n workspaceUrl: string | undefined;\n channels: string[];\n }) => Promise<void>;\n withAutoRefresh: <T>(input: {\n workspaceUrl: string | undefined;\n work: () => Promise<T>;\n }) => Promise<T>;\n getClientForWorkspace: (workspaceUrl?: string) => Promise<{\n client: SlackApiClient;\n auth: SlackAuth;\n workspace_url?: string;\n }>;\n normalizeUrl: (u: string) => string;\n errorMessage: (err: unknown) => string;\n parseContentType: (value: unknown) => \"any\" | \"text\" | \"image\" | \"snippet\" | \"file\";\n parseCurl: (curl: string) => ReturnType<typeof parseSlackCurlCommand>;\n importDesktop: () => ReturnType<typeof extractFromSlackDesktop>;\n importChrome: () => ReturnType<typeof extractFromChrome>;\n importBrave: () => ReturnType<typeof extractFromBrave>;\n importFirefox: () => ReturnType<typeof extractFromFirefox>;\n};\n\nfunction isEnvAuthConfigured(): boolean {\n return Boolean(process.env.SLACK_TOKEN?.trim());\n}\n\nfunction effectiveWorkspaceUrl(flag?: string): string | undefined {\n return flag?.trim() || process.env.SLACK_WORKSPACE_URL?.trim() || undefined;\n}\n\nfunction errorMessage(err: unknown): string {\n return err instanceof Error ? err.message : String(err);\n}\n\nfunction parseContentType(value: unknown): \"any\" | \"text\" | \"image\" | \"snippet\" | \"file\" {\n const raw = String(value ?? \"any\").toLowerCase();\n if (raw === \"text\" || raw === \"image\" || raw === \"snippet\" || raw === \"file\") {\n return raw;\n }\n return \"any\";\n}\n\nasync function assertWorkspaceSpecifiedForChannelNames(input: {\n workspaceUrl: string | undefined;\n channels: string[];\n}): Promise<void> {\n const hasName = input.channels.some((c) => normalizeChannelInput(c).kind === \"name\");\n if (!hasName) {\n return;\n }\n\n const creds = await loadCredentials();\n if ((creds.workspaces?.length ?? 0) <= 1) {\n return;\n }\n\n if (!input.workspaceUrl) {\n throw new Error(\n 'Ambiguous channel name across multiple workspaces. Pass --workspace \"<url-or-unique-substring>\" (or set SLACK_WORKSPACE_URL).',\n );\n }\n}\n\nfunction isAuthErrorMessage(message: string): boolean {\n return /(?:^|[^a-z])(invalid_auth|token_expired)(?:$|[^a-z])/i.test(message);\n}\n\nasync function refreshFromDesktopIfPossible(): Promise<boolean> {\n if (\n process.platform !== \"darwin\" &&\n process.platform !== \"linux\" &&\n process.platform !== \"win32\"\n ) {\n return false;\n }\n try {\n const extracted = await extractFromSlackDesktop();\n await upsertWorkspaces(\n extracted.teams.map((team) => ({\n workspace_url: normalizeUrl(team.url),\n workspace_name: team.name,\n auth: {\n auth_type: \"browser\" as const,\n xoxc_token: team.token,\n xoxd_cookie: extracted.cookie_d,\n },\n })),\n );\n return true;\n } catch {\n return false;\n }\n}\n\nasync function withAutoRefresh<T>(input: {\n workspaceUrl: string | undefined;\n work: () => Promise<T>;\n}): Promise<T> {\n try {\n return await input.work();\n } catch (err: unknown) {\n const message = errorMessage(err);\n if (isEnvAuthConfigured()) {\n throw err;\n }\n if (!isAuthErrorMessage(message)) {\n throw err;\n }\n\n const refreshed = await refreshFromDesktopIfPossible();\n if (!refreshed) {\n throw err;\n }\n return await input.work();\n }\n}\n\nexport function createCliContext(): CliContext {\n return {\n effectiveWorkspaceUrl,\n assertWorkspaceSpecifiedForChannelNames,\n withAutoRefresh,\n getClientForWorkspace,\n normalizeUrl,\n errorMessage,\n parseContentType,\n parseCurl: parseSlackCurlCommand,\n importDesktop: extractFromSlackDesktop,\n importChrome: extractFromChrome,\n importBrave: extractFromBrave,\n importFirefox: extractFromFirefox,\n };\n}\n",
|
|
27
27
|
"export function pruneEmpty<T>(value: T): T {\n const pruned = pruneEmptyInternal(value);\n return (pruned === undefined ? ({} as T) : (pruned as T)) as T;\n}\n\nfunction pruneEmptyInternal(value: unknown): unknown {\n if (value === null || value === undefined) {\n return undefined;\n }\n\n if (typeof value === \"string\") {\n return value.trim() === \"\" ? undefined : value;\n }\n\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return value;\n }\n\n if (Array.isArray(value)) {\n const next = value\n .map((v) => pruneEmptyInternal(v))\n .filter((v): v is Exclude<unknown, undefined> => v !== undefined);\n return next.length === 0 ? undefined : next;\n }\n\n if (typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n const next = pruneEmptyInternal(v);\n if (next !== undefined) {\n out[k] = next;\n }\n }\n return Object.keys(out).length === 0 ? undefined : out;\n }\n\n return value;\n}\n",
|
|
28
28
|
"export function redactSecret(\n value: string,\n options?: { keepStart?: number; keepEnd?: number },\n): string {\n const keepStart = options?.keepStart ?? 6;\n const keepEnd = options?.keepEnd ?? 4;\n if (!value) {\n return value;\n }\n if (value.length <= keepStart + keepEnd + 3) {\n return \"[redacted]\";\n }\n return `${value.slice(0, keepStart)}…${value.slice(-keepEnd)}`;\n}\n",
|
|
29
29
|
"import type { Command } from \"commander\";\nimport type { CliContext } from \"./context.ts\";\nimport {\n loadCredentials,\n removeWorkspace,\n setDefaultWorkspace,\n upsertWorkspace,\n upsertWorkspaces,\n} from \"../auth/store.ts\";\nimport { pruneEmpty } from \"../lib/compact-json.ts\";\nimport { redactSecret } from \"../lib/redact.ts\";\n\nasync function runAuthTest(input: {\n ctx: CliContext;\n workspaceUrl?: string;\n}): Promise<Record<string, unknown>> {\n return input.ctx.withAutoRefresh({\n workspaceUrl: input.workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(input.workspaceUrl);\n return (await client.api(\"auth.test\", {})) as Record<string, unknown>;\n },\n });\n}\n\nexport function registerAuthCommand(input: { program: Command; ctx: CliContext }): void {\n const auth = input.program.command(\"auth\").description(\"Manage Slack authentication\");\n\n auth\n .command(\"whoami\")\n .description(\"Show configured workspaces and token sources\")\n .action(async () => {\n try {\n const creds = await loadCredentials();\n const sanitized = {\n ...creds,\n workspaces: creds.workspaces.map((w) => ({\n workspace_url: w.workspace_url,\n workspace_name: w.workspace_name,\n auth_type: w.auth.auth_type,\n token:\n w.auth.auth_type === \"standard\"\n ? redactSecret(w.auth.token)\n : redactSecret(w.auth.xoxc_token),\n cookie_d: w.auth.auth_type === \"browser\" ? redactSecret(w.auth.xoxd_cookie) : undefined,\n })),\n };\n console.log(JSON.stringify(pruneEmpty(sanitized), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n auth\n .command(\"test\")\n .description(\"Verify credentials (calls Slack auth.test)\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when you have multiple workspaces)\",\n )\n .action(async (...args) => {\n const [options] = args as [{ workspace?: string }];\n try {\n const resp = await runAuthTest({\n ctx: input.ctx,\n workspaceUrl: input.ctx.effectiveWorkspaceUrl(options.workspace),\n });\n console.log(JSON.stringify(pruneEmpty(resp), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n auth\n .command(\"import-chrome\")\n .description(\"Import xoxc/xoxd from a logged-in Slack tab in Google Chrome (macOS)\")\n .action(async () => {\n try {\n const extracted = input.ctx.importChrome();\n if (!extracted) {\n throw new Error(\n \"Could not extract tokens from Chrome. Open Slack in Chrome and ensure you're logged in.\",\n );\n }\n\n for (const team of extracted.teams) {\n await upsertWorkspace({\n workspace_url: input.ctx.normalizeUrl(team.url),\n workspace_name: team.name,\n auth: {\n auth_type: \"browser\",\n xoxc_token: team.token,\n xoxd_cookie: extracted.cookie_d,\n },\n });\n }\n console.log(`Imported ${extracted.teams.length} workspace token(s) from Chrome.`);\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n auth\n .command(\"import-brave\")\n .description(\"Import xoxc/xoxd from a logged-in Slack tab in Brave Browser (macOS)\")\n .action(async () => {\n try {\n const extracted = await input.ctx.importBrave();\n if (!extracted) {\n throw new Error(\n \"Could not extract tokens from Brave. Open Slack in Brave and ensure you're logged in.\",\n );\n }\n\n for (const team of extracted.teams) {\n await upsertWorkspace({\n workspace_url: input.ctx.normalizeUrl(team.url),\n workspace_name: team.name,\n auth: {\n auth_type: \"browser\",\n xoxc_token: team.token,\n xoxd_cookie: extracted.cookie_d,\n },\n });\n }\n console.log(`Imported ${extracted.teams.length} workspace token(s) from Brave.`);\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n auth\n .command(\"import-firefox\")\n .description(\"Import xoxc/xoxd from Firefox profile storage (macOS/Linux)\")\n .action(async () => {\n try {\n const extracted = await input.ctx.importFirefox();\n if (!extracted) {\n throw new Error(\n \"Could not extract tokens from Firefox. Open Slack in Firefox and ensure you're logged in.\",\n );\n }\n\n for (const team of extracted.teams) {\n await upsertWorkspace({\n workspace_url: input.ctx.normalizeUrl(team.url),\n workspace_name: team.name,\n auth: {\n auth_type: \"browser\",\n xoxc_token: team.token,\n xoxd_cookie: extracted.cookie_d,\n },\n });\n }\n console.log(`Imported ${extracted.teams.length} workspace token(s) from Firefox.`);\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n auth\n .command(\"parse-curl\")\n .description(\"Paste a Slack API request copied as cURL (extracts xoxc/xoxd and saves locally)\")\n .action(async () => {\n try {\n const curlInput = await new Response(process.stdin).text();\n if (!curlInput.trim()) {\n throw new Error(\"Expected cURL command on stdin\");\n }\n const parsed = input.ctx.parseCurl(curlInput);\n await upsertWorkspace({\n workspace_url: input.ctx.normalizeUrl(parsed.workspace_url),\n auth: {\n auth_type: \"browser\",\n xoxc_token: parsed.xoxc_token,\n xoxd_cookie: parsed.xoxd_cookie,\n },\n });\n console.log(`Imported tokens for ${input.ctx.normalizeUrl(parsed.workspace_url)}.`);\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n auth\n .command(\"import-desktop\")\n .description(\n \"Import xoxc token(s) + d cookie from Slack Desktop data (TypeScript; no need to quit Slack)\",\n )\n .action(async () => {\n try {\n const extracted = await input.ctx.importDesktop();\n await upsertWorkspaces(\n extracted.teams.map((team) => ({\n workspace_url: input.ctx.normalizeUrl(team.url),\n workspace_name: team.name,\n auth: {\n auth_type: \"browser\",\n xoxc_token: team.token,\n xoxd_cookie: extracted.cookie_d,\n },\n })),\n );\n const payload = {\n imported: extracted.teams.length,\n source: extracted.source,\n workspaces: extracted.teams.map((t) => ({\n workspace_url: input.ctx.normalizeUrl(t.url),\n workspace_name: t.name,\n })),\n };\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n auth\n .command(\"add\")\n .description(\"Add credentials (standard token or browser xoxc/xoxd)\")\n .requiredOption(\"--workspace-url <url>\", \"Workspace URL like https://myteam.slack.com\")\n .option(\"--token <token>\", \"Standard Slack token (xoxb/xoxp)\")\n .option(\"--xoxc <token>\", \"Browser token (xoxc-...)\")\n .option(\"--xoxd <cookie>\", \"Browser cookie d (xoxd-...)\")\n .action(async (...args) => {\n const [options] = args as [\n { workspaceUrl: string; token?: string; xoxc?: string; xoxd?: string },\n ];\n try {\n const workspaceUrl = input.ctx.normalizeUrl(options.workspaceUrl);\n if (options.token) {\n await upsertWorkspace({\n workspace_url: workspaceUrl,\n auth: { auth_type: \"standard\", token: options.token },\n });\n console.log(\"Saved standard token.\");\n return;\n }\n if (options.xoxc && options.xoxd) {\n await upsertWorkspace({\n workspace_url: workspaceUrl,\n auth: {\n auth_type: \"browser\",\n xoxc_token: options.xoxc,\n xoxd_cookie: options.xoxd,\n },\n });\n console.log(\"Saved browser tokens.\");\n return;\n }\n throw new Error(\"Provide either --token or both --xoxc and --xoxd\");\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n auth\n .command(\"set-default\")\n .description(\"Set the default workspace URL\")\n .argument(\"<workspace-url>\", \"Workspace URL like https://myteam.slack.com\")\n .action(async (...args) => {\n const [workspaceUrl] = args as [string];\n try {\n await setDefaultWorkspace(workspaceUrl);\n console.log(\"Default workspace updated.\");\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n auth\n .command(\"remove\")\n .description(\"Remove a workspace from local config\")\n .argument(\"<workspace-url>\", \"Workspace URL like https://myteam.slack.com\")\n .action(async (...args) => {\n const [workspaceUrl] = args as [string];\n try {\n await removeWorkspace(workspaceUrl);\n console.log(\"Removed workspace.\");\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n}\n",
|
|
30
|
-
"import { mkdir, writeFile } from \"node:fs/promises\";\nimport { basename, join, resolve } from \"node:path\";\nimport type { SlackAuth } from \"./client.ts\";\nimport { existsSync } from \"node:fs\";\nimport { getUserAgent } from \"../lib/version.ts\";\n\nexport async function downloadSlackFile(input: {\n auth: SlackAuth;\n url: string;\n destDir: string;\n preferredName?: string;\n options?: { allowHtml?: boolean };\n}): Promise<string> {\n const { auth, url, destDir, preferredName, options } = input;\n const absDir = resolve(destDir);\n await mkdir(absDir, { recursive: true });\n const name = sanitizeFilename(preferredName || basename(new URL(url).pathname) || \"file\");\n const path = join(absDir, name);\n\n if (existsSync(path)) {\n return path;\n }\n\n const headers: Record<string, string> = {};\n if (auth.auth_type === \"standard\") {\n headers.Authorization = `Bearer ${auth.token}`;\n } else {\n headers.Authorization = `Bearer ${auth.xoxc_token}`;\n headers.Cookie = `d=${encodeURIComponent(auth.xoxd_cookie)}`;\n headers.Referer = \"https://app.slack.com/\";\n headers[\"User-Agent\"] = getUserAgent();\n }\n\n
|
|
30
|
+
"import { mkdir, writeFile } from \"node:fs/promises\";\nimport { basename, join, resolve } from \"node:path\";\nimport type { SlackAuth } from \"./client.ts\";\nimport { existsSync } from \"node:fs\";\nimport { getUserAgent } from \"../lib/version.ts\";\n\nexport class SlackDownloadError extends Error {\n constructor(\n message: string,\n public readonly httpStatus?: number,\n ) {\n super(message);\n this.name = \"SlackDownloadError\";\n }\n}\n\nexport type DownloadResult =\n | { ok: true; path: string }\n | { ok: false; error: string; httpStatus?: number; path?: string };\n\nexport async function downloadSlackFile(input: {\n auth: SlackAuth;\n url: string;\n destDir: string;\n preferredName?: string;\n options?: { allowHtml?: boolean };\n}): Promise<string> {\n const { auth, url, destDir, preferredName, options } = input;\n const absDir = resolve(destDir);\n await mkdir(absDir, { recursive: true });\n const name = sanitizeFilename(preferredName || basename(new URL(url).pathname) || \"file\");\n const path = join(absDir, name);\n\n if (existsSync(path)) {\n return path;\n }\n\n const headers: Record<string, string> = {};\n if (auth.auth_type === \"standard\") {\n headers.Authorization = `Bearer ${auth.token}`;\n } else {\n headers.Authorization = `Bearer ${auth.xoxc_token}`;\n headers.Cookie = `d=${encodeURIComponent(auth.xoxd_cookie)}`;\n headers.Referer = \"https://app.slack.com/\";\n headers[\"User-Agent\"] = getUserAgent();\n }\n\n let resp: Response;\n try {\n resp = await fetch(url, { headers });\n } catch (err) {\n throw new SlackDownloadError(\n `Network error: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n if (!resp.ok) {\n throw new SlackDownloadError(`Failed to download file (${resp.status})`, resp.status);\n }\n const contentType = resp.headers.get(\"content-type\") || \"\";\n if (!options?.allowHtml && contentType.includes(\"text/html\")) {\n let text: string;\n try {\n text = await resp.text();\n } catch (err) {\n throw new SlackDownloadError(\n `Failed to read download response body: ${err instanceof Error ? err.message : String(err)}`,\n resp.status,\n );\n }\n throw new SlackDownloadError(\n `Downloaded HTML instead of file (auth likely failed). First bytes: ${JSON.stringify(\n text.slice(0, 120),\n )}`,\n resp.status,\n );\n }\n let arrayBuffer: ArrayBuffer;\n try {\n arrayBuffer = await resp.arrayBuffer();\n } catch (err) {\n throw new SlackDownloadError(\n `Failed to read download response body: ${err instanceof Error ? err.message : String(err)}`,\n resp.status,\n );\n }\n const buf = Buffer.from(arrayBuffer);\n await writeFile(path, buf);\n return path;\n}\n\nexport async function tryDownloadSlackFile(\n input: Parameters<typeof downloadSlackFile>[0],\n): Promise<DownloadResult> {\n try {\n const path = await downloadSlackFile(input);\n return { ok: true, path };\n } catch (err) {\n if (err instanceof SlackDownloadError) {\n return { ok: false, error: err.message, httpStatus: err.httpStatus };\n }\n throw err;\n }\n}\n\nexport async function writeDownloadErrorFile(input: {\n destDir: string;\n fileId: string;\n error: string;\n}): Promise<string> {\n const absDir = resolve(input.destDir);\n await mkdir(absDir, { recursive: true });\n const path = join(absDir, sanitizeFilename(`${input.fileId}.download-error.txt`));\n await writeFile(path, `${input.error}\\n`, \"utf8\");\n return path;\n}\n\nfunction sanitizeFilename(name: string): string {\n return name.replace(/[\\\\/<>:\"|?*]/g, \"_\");\n}\n",
|
|
31
31
|
"import TurndownService from \"turndown\";\nimport { gfm } from \"turndown-plugin-gfm\";\n\nexport function htmlToMarkdown(html: string): string {\n const service = new TurndownService({\n headingStyle: \"atx\",\n codeBlockStyle: \"fenced\",\n bulletListMarker: \"-\",\n emDelimiter: \"_\",\n });\n\n service.use(gfm);\n\n // Keep line breaks from <br>\n service.addRule(\"br\", {\n filter: \"br\",\n replacement: () => \"\\n\",\n });\n\n // Slack exports sometimes wrap content in <main> / <article>.\n // Turndown handles full documents fine, but prefer the primary content node.\n const extracted =\n extractTag(html, \"main\") ?? extractTag(html, \"article\") ?? extractTag(html, \"body\") ?? html;\n\n return service.turndown(extracted);\n}\n\nfunction extractTag(html: string, tag: string): string | null {\n const re = new RegExp(`<${tag}\\\\b[^>]*>([\\\\s\\\\S]*?)<\\\\/${tag}>`, \"i\");\n const m = html.match(re);\n return m ? m[1]! : null;\n}\n",
|
|
32
32
|
"import { join, resolve } from \"node:path\";\nimport { mkdir } from \"node:fs/promises\";\nimport { getAppDir } from \"./app-dir.ts\";\n\nexport function getDownloadsDir(): string {\n return resolve(join(getAppDir(), \"tmp\", \"downloads\"));\n}\n\nexport async function ensureDownloadsDir(): Promise<string> {\n const dir = getDownloadsDir();\n await mkdir(dir, { recursive: true });\n return dir;\n}\n",
|
|
33
33
|
"import { homedir, tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport function getAppDir(): string {\n const xdg = process.env.XDG_RUNTIME_DIR?.trim();\n if (xdg) {\n return join(xdg, \"agent-slack\");\n }\n\n const home = homedir();\n if (home) {\n return join(home, \".agent-slack\");\n }\n\n return join(tmpdir(), \"agent-slack\");\n}\n",
|
|
@@ -38,14 +38,14 @@
|
|
|
38
38
|
"import type { SlackApiClient } from \"./client.ts\";\nimport type { SlackFileSummary } from \"./messages.ts\";\nimport { getNumber, getString, isRecord } from \"../lib/object-type-guards.ts\";\n\nexport function toSlackFileSummary(value: unknown): SlackFileSummary | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = getString(value.id);\n if (!id) {\n return null;\n }\n return {\n id,\n name: getString(value.name),\n title: getString(value.title),\n mimetype: getString(value.mimetype),\n filetype: getString(value.filetype),\n mode: getString(value.mode),\n permalink: getString(value.permalink),\n url_private: getString(value.url_private),\n url_private_download: getString(value.url_private_download),\n size: getNumber(value.size),\n };\n}\n\nexport async function enrichFiles(\n client: SlackApiClient,\n files: SlackFileSummary[],\n): Promise<SlackFileSummary[]> {\n const out: SlackFileSummary[] = [];\n for (const f of files) {\n if (f.mode === \"snippet\" || !f.url_private_download) {\n try {\n const info = await client.api(\"files.info\", { file: f.id });\n const file = isRecord(info.file) ? info.file : null;\n out.push({\n ...f,\n name: f.name ?? getString(file?.name),\n title: f.title ?? getString(file?.title),\n mimetype: f.mimetype ?? getString(file?.mimetype),\n filetype: f.filetype ?? getString(file?.filetype),\n mode: f.mode ?? getString(file?.mode),\n permalink: f.permalink ?? getString(file?.permalink),\n url_private: f.url_private ?? getString(file?.url_private),\n url_private_download: f.url_private_download ?? getString(file?.url_private_download),\n snippet: {\n content: getString(file?.content),\n language: getString(file?.filetype),\n },\n });\n continue;\n } catch {\n // ignore and fall back to summary\n }\n }\n out.push(f);\n }\n return out;\n}\n",
|
|
39
39
|
"/**\n * Rich-text block rendering helpers extracted from render.ts.\n */\n\nimport { isRecord } from \"../lib/object-type-guards.ts\";\n\nfunction getString(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n\nexport function extractMrkdwnFromRichTextBlock(block: unknown): string {\n if (!isRecord(block)) {\n return \"\";\n }\n const elements = Array.isArray(block.elements) ? block.elements : [];\n const out: string[] = [];\n for (const el of elements) {\n const txt = extractMrkdwnFromRichTextElement(el);\n if (txt.trim()) {\n out.push(txt);\n }\n }\n return out.join(\"\\n\\n\");\n}\n\nfunction extractMrkdwnFromRichTextElement(el: unknown): string {\n if (!isRecord(el)) {\n return \"\";\n }\n const t = getString(el.type);\n\n if (t === \"rich_text_section\") {\n const parts: string[] = [];\n for (const child of Array.isArray(el.elements) ? el.elements : []) {\n parts.push(extractMrkdwnFromRichTextElement(child));\n }\n return parts.join(\"\");\n }\n\n if (t === \"rich_text_preformatted\") {\n const parts: string[] = [];\n for (const child of Array.isArray(el.elements) ? el.elements : []) {\n parts.push(extractMrkdwnFromRichTextElement(child));\n }\n const text = parts.join(\"\");\n return text ? `\\`\\`\\`${text}\\`\\`\\`` : \"\";\n }\n\n if (t === \"rich_text_quote\") {\n const parts: string[] = [];\n for (const child of Array.isArray(el.elements) ? el.elements : []) {\n parts.push(extractMrkdwnFromRichTextElement(child));\n }\n const text = parts.join(\"\").trim();\n if (!text) {\n return \"\";\n }\n return text\n .split(\"\\n\")\n .map((line) => `> ${line}`)\n .join(\"\\n\");\n }\n\n if (t === \"rich_text_list\") {\n const style = typeof el.style === \"string\" ? el.style : \"bullet\";\n const items: string[] = [];\n const itemEls = Array.isArray(el.elements) ? el.elements : [];\n let num = 0;\n for (const item of itemEls) {\n const txt = extractMrkdwnFromRichTextElement(item).trim();\n if (!txt) {\n continue;\n }\n num++;\n const prefix = style === \"ordered\" ? `${num}. ` : \"- \";\n items.push(`${prefix}${txt}`);\n }\n return items.join(\"\\n\");\n }\n\n if (t === \"text\") {\n const raw = getString(el.text);\n const style = isRecord(el.style) ? el.style : null;\n if (!style) {\n return raw;\n }\n let text = raw;\n if (style.code) {\n text = `\\`${text}\\``;\n }\n if (style.bold) {\n text = `*${text}*`;\n }\n if (style.italic) {\n text = `_${text}_`;\n }\n if (style.strike) {\n text = `~${text}~`;\n }\n return text;\n }\n\n if (t === \"link\") {\n const url = getString(el.url);\n const text = getString(el.text);\n if (!url) {\n return text;\n }\n return text ? `<${url}|${text}>` : url;\n }\n\n if (t === \"emoji\") {\n const name = getString(el.name);\n return name ? `:${name}:` : \"\";\n }\n\n if (t === \"user\") {\n const userId = getString(el.user_id);\n return userId ? `<@${userId}>` : \"\";\n }\n\n if (t === \"channel\") {\n const channelId = getString(el.channel_id);\n return channelId ? `<#${channelId}>` : \"\";\n }\n\n return \"\";\n}\n",
|
|
40
40
|
"import { slackMrkdwnToMarkdown } from \"./mrkdwn.ts\";\nimport { extractMrkdwnFromRichTextBlock } from \"./render-rich-text.ts\";\n\ntype UnknownRecord = Record<string, unknown>;\ntype RenderState = { depth: number; seen: WeakSet<object> };\nconst MAX_ATTACHMENT_DEPTH = 8;\n\nexport function renderSlackMessageContent(msg: unknown): string {\n const msgObj = isRecord(msg) ? msg : {};\n const blockMrkdwn = extractMrkdwnFromBlocks(msgObj.blocks);\n const attachmentMrkdwn = extractMrkdwnFromAttachments(msgObj.attachments, {\n depth: 0,\n seen: new WeakSet<object>(),\n });\n const combined = [blockMrkdwn.trim(), attachmentMrkdwn.trim()].filter(Boolean).join(\"\\n\\n\");\n if (combined) {\n return slackMrkdwnToMarkdown(combined).trim();\n }\n\n const text = getString(msgObj.text).trim();\n if (text) {\n return slackMrkdwnToMarkdown(text).trim();\n }\n\n return \"\";\n}\n\nfunction extractMrkdwnFromBlocks(blocks: unknown): string {\n if (!Array.isArray(blocks)) {\n return \"\";\n }\n\n const out: string[] = [];\n for (const b of blocks) {\n if (!isRecord(b)) {\n continue;\n }\n const type = getString(b.type);\n if (type === \"section\") {\n const text = isRecord(b.text) ? b.text : null;\n const textType = text ? getString(text.type) : \"\";\n if (textType === \"mrkdwn\" || textType === \"plain_text\") {\n out.push(getString(text?.text));\n }\n if (Array.isArray(b.fields)) {\n for (const f of b.fields) {\n if (!isRecord(f)) {\n continue;\n }\n const fieldType = getString(f.type);\n if (fieldType === \"mrkdwn\" || fieldType === \"plain_text\") {\n out.push(getString(f.text));\n }\n }\n }\n // Buttons often carry the only URL (e.g. \"View Progress\")\n const accessory = isRecord(b.accessory) ? b.accessory : null;\n if (getString(accessory?.type) === \"button\") {\n const label = getString((accessory?.text as UnknownRecord | undefined)?.text);\n const url = getString(accessory?.url);\n if (url) {\n out.push(label ? `${label}: ${url}` : url);\n }\n }\n continue;\n }\n if (type === \"actions\" && Array.isArray(b.elements)) {\n for (const el of b.elements) {\n if (!isRecord(el)) {\n continue;\n }\n if (getString(el.type) === \"button\") {\n const label = getString((el.text as UnknownRecord | undefined)?.text);\n const url = getString(el.url);\n if (url) {\n out.push(label ? `${label}: ${url}` : url);\n }\n }\n }\n continue;\n }\n if (type === \"context\" && Array.isArray(b.elements)) {\n for (const el of b.elements) {\n if (!isRecord(el)) {\n continue;\n }\n const elType = getString(el.type);\n if (elType === \"mrkdwn\") {\n out.push(getString(el.text));\n }\n if (elType === \"plain_text\") {\n out.push(getString(el.text));\n }\n }\n continue;\n }\n if (type === \"image\") {\n const alt = getString(b.alt_text);\n const url = getString(b.image_url);\n if (url) {\n out.push(alt ? `${alt}: ${url}` : url);\n }\n continue;\n }\n if (type === \"rich_text\") {\n const rich = extractMrkdwnFromRichTextBlock(b);\n if (rich.trim()) {\n out.push(rich);\n }\n continue;\n }\n }\n\n return out.join(\"\\n\\n\");\n}\n\nfunction extractMrkdwnFromAttachments(attachments: unknown, state: RenderState): string {\n if (state.depth >= MAX_ATTACHMENT_DEPTH) {\n return \"\";\n }\n if (!Array.isArray(attachments)) {\n return \"\";\n }\n\n const parts: string[] = [];\n for (const a of attachments) {\n if (!isRecord(a)) {\n continue;\n }\n if (state.seen.has(a)) {\n continue;\n }\n state.seen.add(a);\n\n const isSharedMessage = Boolean(\n a.is_share || (a.is_msg_unfurl && Array.isArray(a.message_blocks)),\n );\n\n const chunk: string[] = [];\n\n if (isSharedMessage) {\n chunk.push(formatForwardHeader(a));\n\n const body =\n extractForwardedMessageBody(a, state).trim() ||\n extractMrkdwnFromAttachments(a.attachments, nextState(state)).trim() ||\n getString(a.text).trim();\n if (body) {\n chunk.push(quoteMarkdown(body));\n }\n\n if (chunk.length > 0) {\n parts.push(chunk.join(\"\\n\"));\n }\n continue;\n }\n\n const blocks = extractMrkdwnFromBlocks(a.blocks);\n if (blocks.trim()) {\n chunk.push(blocks);\n }\n const pretext = getString(a.pretext);\n if (pretext) {\n chunk.push(pretext);\n }\n const title = getString(a.title);\n const titleLink = getString(a.title_link);\n if (titleLink && title) {\n chunk.push(`<${titleLink}|${title}>`);\n } else if (title) {\n chunk.push(title);\n } else if (titleLink) {\n chunk.push(titleLink);\n }\n const text = getString(a.text);\n if (text) {\n chunk.push(text);\n }\n if (Array.isArray(a.fields)) {\n for (const f of a.fields) {\n if (!isRecord(f)) {\n continue;\n }\n const fieldTitle = getString(f.title);\n const value = getString(f.value);\n if (fieldTitle && value) {\n chunk.push(`${fieldTitle}\\n${value}`);\n } else if (fieldTitle) {\n chunk.push(fieldTitle);\n } else if (value) {\n chunk.push(value);\n }\n }\n }\n const fallback = getString(a.fallback);\n if (chunk.length === 0 && fallback) {\n chunk.push(fallback);\n }\n const nestedAttachments = extractMrkdwnFromAttachments(a.attachments, nextState(state));\n if (nestedAttachments.trim()) {\n chunk.push(nestedAttachments);\n }\n if (chunk.length > 0) {\n parts.push(uniqueTexts(chunk).join(\"\\n\"));\n }\n }\n return uniqueTexts(parts).join(\"\\n\\n\");\n}\n\nfunction formatForwardHeader(a: Record<string, unknown>): string {\n const authorName = getString(a.author_name);\n const authorLink = getString(a.author_link);\n const fromUrl = getString(a.from_url);\n\n const authorPart = authorName && authorLink ? `<${authorLink}|${authorName}>` : authorName || \"\";\n const sourcePart = fromUrl ? `<${fromUrl}|original>` : \"\";\n\n if (authorPart && sourcePart) {\n return `*Forwarded from ${authorPart} | ${sourcePart}*`;\n }\n if (authorPart) {\n return `*Forwarded from ${authorPart}*`;\n }\n if (sourcePart) {\n return `*Forwarded message | ${sourcePart}*`;\n }\n return \"*Forwarded message*\";\n}\n\nfunction extractForwardedMessageBody(\n attachment: Record<string, unknown>,\n state: RenderState,\n): string {\n const messageBlocks = attachment.message_blocks;\n const topLevelFiles = extractFileMentions(attachment.files).trim();\n if (!Array.isArray(messageBlocks)) {\n return topLevelFiles;\n }\n const out: string[] = [];\n for (const mb of messageBlocks) {\n if (!isRecord(mb)) {\n continue;\n }\n const message = isRecord(mb.message) ? mb.message : null;\n if (!message) {\n continue;\n }\n const messageText = getString(message.text).trim();\n const blocksContent = extractMrkdwnFromBlocks(message.blocks).trim();\n const attachmentsContent = extractMrkdwnFromAttachments(\n message.attachments,\n nextState(state),\n ).trim();\n const fileMentions = extractFileMentions(message.files).trim();\n const content = uniqueTexts([\n blocksContent,\n attachmentsContent,\n messageText,\n fileMentions,\n ]).join(\"\\n\\n\");\n if (content) {\n out.push(content);\n }\n }\n return uniqueTexts([topLevelFiles, ...out]).join(\"\\n\");\n}\n\nfunction nextState(state: RenderState): RenderState {\n return { depth: state.depth + 1, seen: state.seen };\n}\n\nfunction quoteMarkdown(text: string): string {\n return text\n .split(\"\\n\")\n .map((line) => `> ${line}`)\n .join(\"\\n\");\n}\n\nfunction uniqueTexts(values: string[]): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n for (const value of values) {\n const text = value.trim();\n if (!text || seen.has(text)) {\n continue;\n }\n seen.add(text);\n out.push(text);\n }\n return out;\n}\n\nfunction extractFileMentions(files: unknown): string {\n if (!Array.isArray(files)) {\n return \"\";\n }\n const lines: string[] = [];\n for (const f of files) {\n if (!isRecord(f)) {\n continue;\n }\n const name = getString(f.title) || getString(f.name) || \"file\";\n const url =\n getString(f.permalink) || getString(f.url_private_download) || getString(f.url_private);\n if (url) {\n lines.push(`<${url}|${name}>`);\n continue;\n }\n lines.push(name);\n }\n return uniqueTexts(lines).join(\"\\n\");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction getString(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n",
|
|
41
|
-
"import type { SlackMessageSummary } from \"./messages.ts\";\nimport { renderSlackMessageContent } from \"./render.ts\";\nimport { getNumber, getString, isRecord } from \"../lib/object-type-guards.ts\";\n\nexport type CompactSlackMessage = {\n channel_id: string;\n ts: string;\n thread_ts?: string;\n author?: { user_id?: string; bot_id?: string };\n content?: string;\n files?: {\n mimetype?: string;\n mode?: string;\n path
|
|
41
|
+
"import type { SlackMessageSummary } from \"./messages.ts\";\nimport type { DownloadResult } from \"./files.ts\";\nimport { renderSlackMessageContent } from \"./render.ts\";\nimport { getNumber, getString, isRecord } from \"../lib/object-type-guards.ts\";\n\nexport type CompactSlackMessage = {\n channel_id: string;\n ts: string;\n thread_ts?: string;\n author?: { user_id?: string; bot_id?: string };\n content?: string;\n files?: {\n name?: string;\n mimetype?: string;\n mode?: string;\n path?: string;\n error?: string;\n }[];\n reactions?: {\n name: string;\n users: string[];\n count?: number;\n }[];\n forwarded_threads?: {\n url: string;\n thread_ts: string;\n channel_id?: string;\n reply_count?: number;\n }[];\n};\n\nexport function toCompactMessage(\n msg: SlackMessageSummary,\n input?: {\n maxSnippetChars?: number;\n maxBodyChars?: number;\n includeReactions?: boolean;\n downloadedPaths?: Record<string, DownloadResult>;\n },\n): CompactSlackMessage {\n const maxBodyChars = input?.maxBodyChars ?? 8000;\n const includeReactions = input?.includeReactions ?? false;\n\n const rendered = renderSlackMessageContent(msg);\n const content =\n maxBodyChars >= 0 && rendered.length > maxBodyChars\n ? `${rendered.slice(0, maxBodyChars)}\\n…`\n : rendered;\n\n const files = msg.files\n ?.map((f) => {\n const entry = input?.downloadedPaths?.[f.id];\n if (!entry) {\n return null;\n }\n return entry.ok\n ? { name: f.name, mimetype: f.mimetype, mode: f.mode, path: entry.path }\n : {\n name: f.name,\n mimetype: f.mimetype,\n mode: f.mode,\n path: entry.path,\n error: entry.error,\n };\n })\n .filter((f): f is NonNullable<typeof f> => Boolean(f));\n\n return {\n channel_id: msg.channel_id,\n ts: msg.ts,\n thread_ts: msg.thread_ts ?? ((msg.reply_count ?? 0) > 0 ? msg.ts : undefined),\n author: msg.user || msg.bot_id ? { user_id: msg.user, bot_id: msg.bot_id } : undefined,\n content: content ? content : undefined,\n files: files && files.length > 0 ? files : undefined,\n reactions: includeReactions ? compactReactions(msg.reactions) : undefined,\n forwarded_threads: extractForwardedThreads(msg.attachments),\n };\n}\n\nexport function compactReactions(\n reactions: unknown[] | undefined,\n): Array<{ name: string; users: string[]; count?: number }> | undefined {\n if (!Array.isArray(reactions) || reactions.length === 0) {\n return undefined;\n }\n const out: { name: string; users: string[]; count?: number }[] = [];\n for (const r of reactions) {\n if (!isRecord(r)) {\n continue;\n }\n const name = getString(r.name)?.trim() ?? \"\";\n if (!name) {\n continue;\n }\n const users = Array.isArray(r.users)\n ? r.users.map((u) => String(u)).filter((u) => /^U[A-Z0-9]{8,}$/.test(u))\n : [];\n const count = typeof r.count === \"number\" && r.count !== users.length ? r.count : undefined;\n out.push({ name, users, count });\n }\n return out.length ? out : undefined;\n}\n\nexport function extractForwardedThreads(attachments: unknown[] | undefined):\n | {\n url: string;\n thread_ts: string;\n channel_id?: string;\n reply_count?: number;\n }[]\n | undefined {\n if (!Array.isArray(attachments) || attachments.length === 0) {\n return undefined;\n }\n const out: {\n url: string;\n thread_ts: string;\n channel_id?: string;\n reply_count?: number;\n }[] = [];\n const seen = new Set<string>();\n for (const attachment of attachments) {\n if (!isRecord(attachment)) {\n continue;\n }\n const fromUrl = getString(attachment.from_url)?.trim();\n if (!fromUrl) {\n continue;\n }\n let parsed: URL;\n try {\n parsed = new URL(fromUrl);\n } catch {\n continue;\n }\n const threadTs = parsed.searchParams.get(\"thread_ts\")?.trim();\n if (!threadTs || !/^\\d{6,}\\.\\d{6}$/.test(threadTs)) {\n continue;\n }\n const channelId = parsed.searchParams.get(\"cid\")?.trim();\n const replyCount = getNumber(attachment.reply_count);\n const key = `${fromUrl}::${threadTs}`;\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n out.push({\n url: fromUrl,\n thread_ts: threadTs,\n channel_id: channelId || undefined,\n reply_count: replyCount,\n });\n }\n return out.length ? out : undefined;\n}\n",
|
|
42
42
|
"import type { SlackMessageRef } from \"./url.ts\";\nimport type { SlackApiClient } from \"./client.ts\";\nimport { slackMrkdwnToMarkdown } from \"./mrkdwn.ts\";\nimport { asArray, getNumber, getString, isRecord } from \"../lib/object-type-guards.ts\";\nimport { enrichFiles, toSlackFileSummary } from \"./message-api-parsing.ts\";\n\nexport type SlackFileSummary = {\n id: string;\n name?: string;\n title?: string;\n mimetype?: string;\n filetype?: string;\n mode?: string;\n permalink?: string;\n url_private?: string;\n url_private_download?: string;\n size?: number;\n snippet?: {\n content?: string;\n language?: string;\n };\n};\n\nexport type SlackMessageSummary = {\n channel_id: string;\n ts: string;\n thread_ts?: string;\n reply_count?: number;\n user?: string;\n bot_id?: string;\n text: string;\n markdown: string;\n blocks?: unknown[];\n attachments?: unknown[];\n files?: SlackFileSummary[];\n reactions?: unknown[];\n};\n\nexport async function fetchMessage(\n client: SlackApiClient,\n input: { ref: SlackMessageRef; includeReactions?: boolean },\n): Promise<SlackMessageSummary> {\n const history = await client.api(\"conversations.history\", {\n channel: input.ref.channel_id,\n latest: input.ref.message_ts,\n inclusive: true,\n limit: 5,\n include_all_metadata: input.includeReactions ? true : undefined,\n });\n const historyMessages = asArray(history.messages);\n let msg = historyMessages.find(\n (m): m is Record<string, unknown> => isRecord(m) && getString(m.ts) === input.ref.message_ts,\n );\n\n // Thread replies are not guaranteed to appear in channel history. If the URL\n // includes ?thread_ts=..., scan the thread directly.\n if (!msg && input.ref.thread_ts_hint) {\n msg = await findMessageInThread(client, {\n channelId: input.ref.channel_id,\n threadTs: input.ref.thread_ts_hint,\n targetTs: input.ref.message_ts,\n includeReactions: input.includeReactions,\n });\n }\n\n // Fallback: if the message_ts is actually the thread root, replies can still\n // be fetched via conversations.replies even if history is missing it.\n if (!msg) {\n try {\n const rootResp = await client.api(\"conversations.replies\", {\n channel: input.ref.channel_id,\n ts: input.ref.message_ts,\n limit: 1,\n include_all_metadata: input.includeReactions ? true : undefined,\n });\n const [root] = asArray(rootResp.messages);\n if (isRecord(root) && getString(root.ts) === input.ref.message_ts) {\n msg = root;\n }\n } catch {\n // ignore\n }\n }\n\n if (!msg) {\n throw new Error(\"Message not found (no access or wrong URL)\");\n }\n\n const files = asArray(msg.files)\n .map((f) => toSlackFileSummary(f))\n .filter((f): f is SlackFileSummary => f !== null);\n const enrichedFiles = files.length > 0 ? await enrichFiles(client, files) : undefined;\n\n const text = getString(msg.text) ?? \"\";\n const ts = getString(msg.ts) ?? input.ref.message_ts;\n const blocks = Array.isArray(msg.blocks) ? (msg.blocks as unknown[]) : undefined;\n const attachments = Array.isArray(msg.attachments) ? (msg.attachments as unknown[]) : undefined;\n const reactions = Array.isArray(msg.reactions) ? (msg.reactions as unknown[]) : undefined;\n return {\n channel_id: input.ref.channel_id,\n ts,\n thread_ts: getString(msg.thread_ts),\n reply_count: getNumber(msg.reply_count),\n user: getString(msg.user),\n bot_id: getString(msg.bot_id),\n text,\n markdown: slackMrkdwnToMarkdown(text),\n blocks,\n attachments,\n files: enrichedFiles,\n reactions,\n };\n}\n\nasync function findMessageInThread(\n client: SlackApiClient,\n input: {\n channelId: string;\n threadTs: string;\n targetTs: string;\n includeReactions?: boolean;\n },\n): Promise<Record<string, unknown> | undefined> {\n let cursor: string | undefined;\n for (;;) {\n const resp = await client.api(\"conversations.replies\", {\n channel: input.channelId,\n ts: input.threadTs,\n limit: 200,\n cursor,\n include_all_metadata: input.includeReactions ? true : undefined,\n });\n const messages = asArray(resp.messages);\n const found = messages.find(\n (m): m is Record<string, unknown> => isRecord(m) && getString(m.ts) === input.targetTs,\n );\n if (found) {\n return found;\n }\n const meta = isRecord(resp.response_metadata) ? resp.response_metadata : null;\n const next = meta ? getString(meta.next_cursor) : undefined;\n if (!next) {\n break;\n }\n cursor = next;\n }\n return undefined;\n}\n\nexport async function fetchChannelHistory(\n client: SlackApiClient,\n input: {\n channelId: string;\n limit?: number;\n latest?: string;\n oldest?: string;\n includeReactions?: boolean;\n withReactions?: string[];\n withoutReactions?: string[];\n },\n): Promise<SlackMessageSummary[]> {\n const raw = input.limit ?? 25;\n const limit = Number.isFinite(raw) ? Math.min(Math.max(raw, 1), 200) : 25;\n const out: SlackMessageSummary[] = [];\n const withReactions = input.withReactions ?? [];\n const withoutReactions = input.withoutReactions ?? [];\n const hasReactionFilters = withReactions.length > 0 || withoutReactions.length > 0;\n const pageLimit = hasReactionFilters ? 200 : limit;\n\n let cursorLatest = input.latest;\n for (;;) {\n const resp = await client.api(\"conversations.history\", {\n channel: input.channelId,\n limit: pageLimit,\n latest: cursorLatest,\n oldest: input.oldest,\n include_all_metadata: input.includeReactions || hasReactionFilters ? true : undefined,\n });\n const messages = asArray(resp.messages);\n if (messages.length === 0) {\n break;\n }\n for (const m of messages) {\n if (!isRecord(m)) {\n continue;\n }\n if (\n hasReactionFilters &&\n !passesReactionNameFilters(m, {\n withReactions,\n withoutReactions,\n })\n ) {\n continue;\n }\n const files = asArray(m.files)\n .map((f) => toSlackFileSummary(f))\n .filter((f): f is SlackFileSummary => f !== null);\n const enrichedFiles = files.length > 0 ? await enrichFiles(client, files) : undefined;\n\n const text = getString(m.text) ?? \"\";\n out.push({\n channel_id: input.channelId,\n ts: getString(m.ts) ?? \"\",\n thread_ts: getString(m.thread_ts),\n reply_count: getNumber(m.reply_count),\n user: getString(m.user),\n bot_id: getString(m.bot_id),\n text,\n markdown: slackMrkdwnToMarkdown(text),\n blocks: Array.isArray(m.blocks) ? (m.blocks as unknown[]) : undefined,\n attachments: Array.isArray(m.attachments) ? (m.attachments as unknown[]) : undefined,\n files: enrichedFiles,\n reactions: Array.isArray(m.reactions) ? (m.reactions as unknown[]) : undefined,\n });\n if (out.length >= limit) {\n break;\n }\n }\n\n if (out.length >= limit || !hasReactionFilters) {\n break;\n }\n\n if (!resp.has_more) {\n break;\n }\n\n const last = messages.at(-1);\n const nextLatest = isRecord(last) ? getString(last.ts) : undefined;\n if (!nextLatest || nextLatest === cursorLatest) {\n break;\n }\n cursorLatest = nextLatest;\n }\n\n // conversations.history returns newest-first; normalize to chronological.\n out.sort((a, b) => Number.parseFloat(a.ts) - Number.parseFloat(b.ts));\n return out;\n}\n\nexport function passesReactionNameFilters(\n msg: Record<string, unknown>,\n input: { withReactions?: string[]; withoutReactions?: string[] },\n): boolean {\n const withReactions = input.withReactions ?? [];\n const withoutReactions = input.withoutReactions ?? [];\n const names = new Set<string>();\n for (const r of asArray(msg.reactions)) {\n if (!isRecord(r)) {\n continue;\n }\n const name = getString(r.name)?.trim();\n if (name) {\n names.add(name);\n }\n }\n if (withReactions.some((name) => !names.has(name))) {\n return false;\n }\n if (withoutReactions.some((name) => names.has(name))) {\n return false;\n }\n return true;\n}\n\nexport async function fetchThread(\n client: SlackApiClient,\n input: { channelId: string; threadTs: string; includeReactions?: boolean },\n): Promise<SlackMessageSummary[]> {\n const out: SlackMessageSummary[] = [];\n let cursor: string | undefined;\n\n for (;;) {\n const resp = await client.api(\"conversations.replies\", {\n channel: input.channelId,\n ts: input.threadTs,\n limit: 200,\n cursor,\n include_all_metadata: input.includeReactions ? true : undefined,\n });\n const messages = asArray(resp.messages);\n for (const m of messages) {\n if (!isRecord(m)) {\n continue;\n }\n const files = asArray(m.files)\n .map((f) => toSlackFileSummary(f))\n .filter((f): f is SlackFileSummary => f !== null);\n const enrichedFiles = files.length > 0 ? await enrichFiles(client, files) : undefined;\n\n const text = getString(m.text) ?? \"\";\n out.push({\n channel_id: input.channelId,\n ts: getString(m.ts) ?? \"\",\n thread_ts: getString(m.thread_ts),\n reply_count: getNumber(m.reply_count),\n user: getString(m.user),\n bot_id: getString(m.bot_id),\n text,\n markdown: slackMrkdwnToMarkdown(text),\n blocks: Array.isArray(m.blocks) ? (m.blocks as unknown[]) : undefined,\n attachments: Array.isArray(m.attachments) ? (m.attachments as unknown[]) : undefined,\n files: enrichedFiles,\n reactions: Array.isArray(m.reactions) ? (m.reactions as unknown[]) : undefined,\n });\n }\n const meta = isRecord(resp.response_metadata) ? resp.response_metadata : null;\n const next = meta ? getString(meta.next_cursor) : undefined;\n if (!next) {\n break;\n }\n cursor = next;\n }\n\n // Slack returns newest-first for some methods; normalize to chronological.\n out.sort((a, b) => Number.parseFloat(a.ts) - Number.parseFloat(b.ts));\n return out;\n}\n\nexport { toCompactMessage, type CompactSlackMessage } from \"./message-compact.ts\";\n",
|
|
43
43
|
"export type SlackMessageRef = {\n workspace_url: string;\n channel_id: string;\n message_ts: string; // \"1234567890.123456\"\n thread_ts_hint?: string; // from URL query (?thread_ts=...)\n raw: string;\n /** True if the URL looks like it may have been truncated by shell & interpretation */\n possiblyTruncated?: boolean;\n};\n\nexport function parseSlackMessageUrl(input: string): SlackMessageRef {\n let url: URL;\n try {\n url = new URL(input);\n } catch {\n throw new Error(`Invalid URL: ${input}`);\n }\n\n if (!/\\.slack\\.com$/i.test(url.hostname)) {\n throw new Error(`Not a Slack workspace URL: ${url.hostname}`);\n }\n\n const parts = url.pathname.split(\"/\").filter(Boolean);\n // /archives/<channel>/p<digits>\n if (parts.length < 3 || parts[0] !== \"archives\") {\n throw new Error(`Unsupported Slack URL path: ${url.pathname}`);\n }\n\n const channel_id = parts[1]!;\n const messagePart = parts[2]!;\n const match = messagePart.match(/^p(\\d{7,})$/);\n if (!match) {\n throw new Error(`Unsupported Slack message id: ${messagePart}`);\n }\n\n const digits = match[1]!;\n if (digits.length <= 6) {\n throw new Error(`Invalid Slack message id: ${messagePart}`);\n }\n const seconds = digits.slice(0, -6);\n const micros = digits.slice(-6);\n const message_ts = `${seconds}.${micros}`;\n\n const threadTsParam = url.searchParams.get(\"thread_ts\");\n const thread_ts_hint =\n threadTsParam && /^\\d{6,}\\.\\d{6}$/.test(threadTsParam) ? threadTsParam : undefined;\n\n // Slack URLs with thread_ts typically also have cid param. If thread_ts exists but\n // cid doesn't, the URL was likely truncated by shell interpreting & as background.\n const hasCid = url.searchParams.has(\"cid\");\n const possiblyTruncated = Boolean(threadTsParam && !hasCid);\n\n const workspace_url = `${url.protocol}//${url.host}`;\n return { workspace_url, channel_id, message_ts, thread_ts_hint, raw: input, possiblyTruncated };\n}\n",
|
|
44
44
|
"import { parseSlackMessageUrl, type SlackMessageRef } from \"../slack/url.ts\";\nimport { isChannelId, isUserId } from \"../slack/channels.ts\";\n\nexport type MsgTarget =\n | { kind: \"url\"; ref: SlackMessageRef }\n | { kind: \"channel\"; channel: string }\n | { kind: \"user\"; userId: string };\n\nexport function parseMsgTarget(input: string): MsgTarget {\n const trimmed = input.trim();\n if (!trimmed) {\n throw new Error(\"Missing target\");\n }\n\n try {\n const ref = parseSlackMessageUrl(trimmed);\n return { kind: \"url\", ref };\n } catch {\n // not a slack message URL\n }\n\n if (isUserId(trimmed)) {\n return { kind: \"user\", userId: trimmed };\n }\n if (trimmed.startsWith(\"#\")) {\n return { kind: \"channel\", channel: trimmed };\n }\n if (isChannelId(trimmed)) {\n return { kind: \"channel\", channel: trimmed };\n }\n\n // Allow bare channel names (\"general\") for convenience.\n return { kind: \"channel\", channel: `#${trimmed}` };\n}\n",
|
|
45
45
|
"export function warnOnTruncatedSlackUrl(ref: { possiblyTruncated?: boolean }): void {\n if (ref.possiblyTruncated) {\n console.error(\n 'Hint: URL may have been truncated by shell. Quote URLs containing \"&\":\\n' +\n ' agent-slack message get \"https://...?thread_ts=...&cid=...\"',\n );\n }\n}\n",
|
|
46
46
|
"type InlineStyle = { bold?: true; italic?: true; strike?: true; code?: true };\n\ntype InlineElement =\n | { type: \"text\"; text: string; style?: InlineStyle }\n | { type: \"link\"; url: string; text?: string; style?: InlineStyle };\n\ntype RichTextElement =\n | { type: \"rich_text_section\"; elements: InlineElement[] }\n | {\n type: \"rich_text_list\";\n style: \"bullet\" | \"ordered\";\n indent?: number;\n elements: RichTextListItem[];\n }\n | { type: \"rich_text_preformatted\"; elements: InlineElement[] }\n | { type: \"rich_text_quote\"; elements: InlineElement[] };\n\ntype RichTextListItem = {\n type: \"rich_text_section\";\n elements: InlineElement[];\n};\n\ntype RichTextBlock = {\n type: \"rich_text\";\n elements: RichTextElement[];\n};\n\nconst BULLET_RE = /^(\\s*)[•◦▪▫▸‣●○◆◇\\-*]\\s+(.*)$/;\nconst ORDERED_RE = /^(\\s*)\\d+[.)]\\s+(.*)$/;\nconst CODE_BLOCK_START = /^```/;\nconst BLOCKQUOTE_RE = /^> (.*)$/;\n\n/**\n * Parse mrkdwn inline formatting into Slack rich_text inline elements.\n *\n * Handles: *bold*, _italic_, ~strike~, `code`, <url|label>, <url>\n */\nexport function parseInlineElements(text: string): InlineElement[] {\n const elements: InlineElement[] = [];\n const re = /`([^`]+)`|\\*([^*]+)\\*|_([^_]+)_|~([^~]+)~|<([^>|]+)\\|([^>]+)>|<([^>|]+)>/g;\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = re.exec(text)) !== null) {\n if (match.index > lastIndex) {\n elements.push({ type: \"text\", text: text.slice(lastIndex, match.index) });\n }\n\n const [, code, bold, italic, strike, linkUrl, linkText, bareUrl] = match;\n if (code != null) {\n elements.push({ type: \"text\", text: code, style: { code: true } });\n } else if (bold != null) {\n elements.push({ type: \"text\", text: bold, style: { bold: true } });\n } else if (italic != null) {\n elements.push({ type: \"text\", text: italic, style: { italic: true } });\n } else if (strike != null) {\n elements.push({ type: \"text\", text: strike, style: { strike: true } });\n } else if (linkUrl != null && linkText != null) {\n elements.push({ type: \"link\", url: linkUrl, text: linkText });\n } else if (bareUrl != null) {\n elements.push({ type: \"link\", url: bareUrl });\n }\n\n lastIndex = match.index + match[0].length;\n }\n\n if (lastIndex < text.length) {\n elements.push({ type: \"text\", text: text.slice(lastIndex) });\n }\n\n return elements.length > 0 ? elements : [{ type: \"text\", text }];\n}\n\n/**\n * Convert mrkdwn text to Slack rich_text blocks when bullet or numbered\n * lists are detected. Returns `null` when the text contains no lists,\n * so the caller can fall back to plain `text`.\n */\nexport function textToRichTextBlocks(text: string): RichTextBlock[] | null {\n const lines = text.split(\"\\n\");\n const elements: RichTextElement[] = [];\n let hasLists = false;\n let idx = 0;\n\n while (idx < lines.length) {\n const line = lines[idx]!;\n\n // Code block\n if (CODE_BLOCK_START.test(line)) {\n idx++; // skip opening ```\n const codeLines: string[] = [];\n while (idx < lines.length && !CODE_BLOCK_START.test(lines[idx]!)) {\n codeLines.push(lines[idx]!);\n idx++;\n }\n if (idx < lines.length) {\n idx++;\n } // skip closing ```\n elements.push({\n type: \"rich_text_preformatted\",\n elements: [{ type: \"text\", text: codeLines.join(\"\\n\") }],\n });\n continue;\n }\n\n // Blockquote\n const quoteMatch = line.match(BLOCKQUOTE_RE);\n if (quoteMatch) {\n const quoteLines: string[] = [];\n while (idx < lines.length) {\n const qm = lines[idx]!.match(BLOCKQUOTE_RE);\n if (!qm) {\n break;\n }\n quoteLines.push(qm[1]!);\n idx++;\n }\n elements.push({\n type: \"rich_text_quote\",\n elements: parseInlineElements(quoteLines.join(\"\\n\")),\n });\n continue;\n }\n\n // Bullet list\n if (BULLET_RE.test(line)) {\n hasLists = true;\n idx = collectList({ lines, startIdx: idx, style: \"bullet\", pattern: BULLET_RE, elements });\n continue;\n }\n\n // Ordered list\n if (ORDERED_RE.test(line)) {\n hasLists = true;\n idx = collectList({ lines, startIdx: idx, style: \"ordered\", pattern: ORDERED_RE, elements });\n continue;\n }\n\n // Plain text — collect consecutive non-special lines\n const textLines: string[] = [];\n while (idx < lines.length) {\n const l = lines[idx]!;\n if (\n BULLET_RE.test(l) ||\n ORDERED_RE.test(l) ||\n CODE_BLOCK_START.test(l) ||\n BLOCKQUOTE_RE.test(l)\n ) {\n break;\n }\n textLines.push(l);\n idx++;\n }\n const content = textLines.join(\"\\n\");\n if (content.trim()) {\n elements.push({\n type: \"rich_text_section\",\n elements: parseInlineElements(content.endsWith(\"\\n\") ? content : `${content}\\n`),\n });\n }\n }\n\n if (!hasLists) {\n return null;\n }\n\n return [{ type: \"rich_text\", elements }];\n}\n\nfunction collectList(input: {\n lines: string[];\n startIdx: number;\n style: \"bullet\" | \"ordered\";\n pattern: RegExp;\n elements: RichTextElement[];\n}): number {\n const { lines, startIdx, style, pattern, elements } = input;\n let idx = startIdx;\n\n // Determine base indent from the first bullet in this group\n const firstMatch = lines[startIdx]!.match(pattern)!;\n const baseIndent = firstMatch[1]!.length;\n\n let currentIndent = -1;\n let currentItems: RichTextListItem[] = [];\n\n while (idx < lines.length) {\n const match = lines[idx]!.match(pattern);\n if (!match) {\n break;\n }\n\n // Anything significantly deeper (>= baseIndent + 2) is a sub-bullet\n const indent = match[1]!.length >= baseIndent + 2 ? 1 : 0;\n const content = match[2]!;\n\n if (currentIndent !== -1 && indent !== currentIndent) {\n elements.push({\n type: \"rich_text_list\",\n style,\n ...(currentIndent > 0 ? { indent: currentIndent } : {}),\n elements: currentItems,\n });\n currentItems = [];\n }\n\n currentIndent = indent;\n currentItems.push({\n type: \"rich_text_section\",\n elements: parseInlineElements(content),\n });\n idx++;\n }\n\n if (currentItems.length > 0) {\n elements.push({\n type: \"rich_text_list\",\n style,\n ...(currentIndent > 0 ? { indent: currentIndent } : {}),\n elements: currentItems,\n });\n }\n\n return idx;\n}\n",
|
|
47
47
|
"import { readFile, stat, realpath } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport type { SlackApiClient } from \"./client.ts\";\nimport { getString, isRecord } from \"../lib/object-type-guards.ts\";\n\nconst MAX_FILE_SIZE = 100 * 1024 * 1024; // 100 MB — Slack's upload limit\n\nexport async function uploadLocalFileToSlack(input: {\n client: SlackApiClient;\n channelId: string;\n filePath: string;\n threadTs?: string;\n initialComment?: string;\n}): Promise<void> {\n const resolvedPath = await realpath(input.filePath);\n const fileStats = await stat(resolvedPath);\n if (!fileStats.isFile()) {\n throw new Error(`Attachment path is not a file: ${input.filePath}`);\n }\n if (fileStats.size > MAX_FILE_SIZE) {\n throw new Error(\n `File too large (${Math.round(fileStats.size / 1024 / 1024)}MB). Slack allows up to 100MB.`,\n );\n }\n\n const bytes = await readFile(resolvedPath);\n const filename = basename(resolvedPath);\n\n const uploadInitResp = await input.client.api(\"files.getUploadURLExternal\", {\n filename,\n length: bytes.length,\n });\n\n if (isRecord(uploadInitResp) && uploadInitResp.ok === false) {\n const errMsg = typeof uploadInitResp.error === \"string\" ? uploadInitResp.error : \"unknown\";\n throw new Error(`Slack files.getUploadURLExternal failed: ${errMsg}`);\n }\n\n const uploadUrl = getString(uploadInitResp.upload_url);\n const fileId = getString(uploadInitResp.file_id);\n if (!uploadUrl || !fileId) {\n throw new Error(\"Slack did not return an upload URL for file attachment\");\n }\n\n const uploadResp = await fetch(uploadUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/octet-stream\",\n \"Content-Length\": String(bytes.length),\n },\n body: bytes,\n });\n if (!uploadResp.ok) {\n const body = await uploadResp.text().catch(() => \"\");\n throw new Error(\n `Failed to upload attachment bytes (HTTP ${uploadResp.status})${body ? `: ${body}` : \"\"}`,\n );\n }\n\n const completeResp = await input.client.api(\"files.completeUploadExternal\", {\n files: [{ id: fileId, title: filename }],\n channel_id: input.channelId,\n thread_ts: input.threadTs,\n initial_comment: input.initialComment?.trim() || undefined,\n });\n\n if (!isRecord(completeResp) || completeResp.ok !== true) {\n const errMsg =\n isRecord(completeResp) && typeof completeResp.error === \"string\"\n ? completeResp.error\n : \"unknown\";\n throw new Error(`Slack files.completeUploadExternal failed: ${errMsg}`);\n }\n}\n",
|
|
48
|
-
"import type { SlackAuth } from \"../slack/client.ts\";\nimport type { SlackMessageSummary } from \"../slack/messages.ts\";\nimport { ensureDownloadsDir } from \"../lib/tmp-paths.ts\";\nimport { downloadSlackFile
|
|
48
|
+
"import type { SlackAuth } from \"../slack/client.ts\";\nimport type { SlackMessageSummary } from \"../slack/messages.ts\";\nimport { ensureDownloadsDir } from \"../lib/tmp-paths.ts\";\nimport {\n type DownloadResult,\n SlackDownloadError,\n downloadSlackFile,\n tryDownloadSlackFile,\n writeDownloadErrorFile,\n} from \"../slack/files.ts\";\nimport { htmlToMarkdown } from \"../slack/html-to-md.ts\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nfunction inferFileExtension(file: {\n mimetype?: string;\n filetype?: string;\n name?: string;\n title?: string;\n}): string | null {\n const mt = (file.mimetype || \"\").toLowerCase();\n const ft = (file.filetype || \"\").toLowerCase();\n\n if (mt === \"image/png\" || ft === \"png\") {\n return \"png\";\n }\n if (mt === \"image/jpeg\" || mt === \"image/jpg\" || ft === \"jpg\" || ft === \"jpeg\") {\n return \"jpg\";\n }\n if (mt === \"image/webp\" || ft === \"webp\") {\n return \"webp\";\n }\n if (mt === \"image/gif\" || ft === \"gif\") {\n return \"gif\";\n }\n\n if (mt === \"text/plain\" || ft === \"text\") {\n return \"txt\";\n }\n if (mt === \"text/markdown\" || ft === \"markdown\" || ft === \"md\") {\n return \"md\";\n }\n if (mt === \"application/json\" || ft === \"json\") {\n return \"json\";\n }\n\n const name = file.name || file.title || \"\";\n const match = name.match(/\\.([A-Za-z0-9]{1,10})$/);\n return match ? match[1]!.toLowerCase() : null;\n}\n\nconst CANVAS_MODES = new Set([\"canvas\", \"quip\", \"docs\"]);\n\nfunction looksLikeAuthPage(html: string): boolean {\n return /<form[^>]+signin|data-qa=\"signin|<title>[^<]*Sign\\s*in/i.test(html);\n}\n\nasync function downloadCanvasAsMarkdown(input: {\n auth: SlackAuth;\n fileId: string;\n url: string;\n destDir: string;\n}): Promise<string> {\n const htmlPath = await downloadSlackFile({\n auth: input.auth,\n url: input.url,\n destDir: input.destDir,\n preferredName: `${input.fileId}.html`,\n options: { allowHtml: true },\n });\n const html = await readFile(htmlPath, \"utf8\");\n if (looksLikeAuthPage(html)) {\n throw new SlackDownloadError(\n \"Downloaded auth/login page instead of canvas content (token may be expired)\",\n );\n }\n\n const markdown = htmlToMarkdown(html).trim();\n const safeName = `${input.fileId.replace(/[\\\\/<>\"|?*]/g, \"_\")}.md`;\n const markdownPath = join(input.destDir, safeName);\n await writeFile(markdownPath, markdown, \"utf8\");\n return markdownPath;\n}\n\nexport async function downloadMessageFiles(input: {\n auth: SlackAuth;\n messages: SlackMessageSummary[];\n}): Promise<Record<string, DownloadResult>> {\n const downloadedPaths: Record<string, DownloadResult> = {};\n const downloadsDir = await ensureDownloadsDir();\n\n for (const message of input.messages) {\n for (const file of message.files ?? []) {\n if (downloadedPaths[file.id]) {\n continue;\n }\n\n const isCanvas = file.mode != null && CANVAS_MODES.has(file.mode);\n const url = isCanvas\n ? file.url_private || file.url_private_download\n : file.url_private_download || file.url_private;\n if (!url) {\n continue;\n }\n\n if (isCanvas) {\n try {\n const path = await downloadCanvasAsMarkdown({\n auth: input.auth,\n fileId: file.id,\n url,\n destDir: downloadsDir,\n });\n downloadedPaths[file.id] = { ok: true, path };\n } catch (err) {\n if (!(err instanceof SlackDownloadError)) {\n throw err;\n }\n const path = await writeDownloadErrorFile({\n destDir: downloadsDir,\n fileId: file.id,\n error: err.message,\n });\n downloadedPaths[file.id] = {\n ok: false,\n error: err.message,\n httpStatus: err.httpStatus,\n path,\n };\n console.error(`Warning: skipping file ${file.id}: ${err.message}`);\n }\n } else {\n const ext = inferFileExtension(file);\n const result = await tryDownloadSlackFile({\n auth: input.auth,\n url,\n destDir: downloadsDir,\n preferredName: `${file.id}${ext ? `.${ext}` : \"\"}`,\n });\n if (!result.ok) {\n downloadedPaths[file.id] = {\n ...result,\n path: await writeDownloadErrorFile({\n destDir: downloadsDir,\n fileId: file.id,\n error: result.error,\n }),\n };\n console.error(`Warning: skipping file ${file.id}: ${result.error}`);\n } else {\n downloadedPaths[file.id] = result;\n }\n }\n }\n }\n\n return downloadedPaths;\n}\n",
|
|
49
49
|
"import type { CompactSlackMessage } from \"../slack/messages.ts\";\nimport { asArray, isRecord } from \"../lib/object-type-guards.ts\";\n\nfunction getNumber(value: unknown): number | undefined {\n return typeof value === \"number\" ? value : undefined;\n}\n\nexport async function getThreadSummary(\n client: { api: (method: string, params?: Record<string, unknown>) => Promise<unknown> },\n input: {\n channelId: string;\n msg: { ts: string; thread_ts?: string; reply_count?: number };\n },\n): Promise<{ ts: string; length: number } | null> {\n const replyCount = input.msg.reply_count ?? 0;\n const rootTs = input.msg.thread_ts ?? (replyCount > 0 ? input.msg.ts : null);\n if (!rootTs) {\n return null;\n }\n\n if (!input.msg.thread_ts && replyCount > 0) {\n return { ts: rootTs, length: 1 + replyCount };\n }\n\n const resp = await client.api(\"conversations.replies\", {\n channel: input.channelId,\n ts: rootTs,\n limit: 1,\n });\n const [root] = asArray(isRecord(resp) ? resp.messages : undefined);\n const rootReplyCount = isRecord(root) ? getNumber(root.reply_count) : undefined;\n if (rootReplyCount === undefined) {\n return { ts: rootTs, length: 1 };\n }\n return { ts: rootTs, length: 1 + rootReplyCount };\n}\n\nexport function toThreadListMessage(\n m: CompactSlackMessage,\n): Omit<CompactSlackMessage, \"channel_id\" | \"thread_ts\"> {\n const { channel_id: _channelId, thread_ts: _threadTs, ...rest } = m;\n return rest;\n}\n",
|
|
50
50
|
"import type { CliContext } from \"./context.ts\";\nimport {\n fetchMessage,\n fetchThread,\n fetchChannelHistory,\n toCompactMessage,\n} from \"../slack/messages.ts\";\nimport { pruneEmpty } from \"../lib/compact-json.ts\";\nimport { parseMsgTarget } from \"./targets.ts\";\nimport { resolveChannelId } from \"../slack/channels.ts\";\nimport { downloadMessageFiles } from \"./message-file-downloads.ts\";\nimport { warnOnTruncatedSlackUrl } from \"./message-url-warning.ts\";\nimport { getThreadSummary, toThreadListMessage } from \"./message-thread-info.ts\";\nimport type { MessageCommandOptions } from \"./message-actions.ts\";\nimport {\n parseLimit,\n parseReactionFilters,\n requireOldestWhenReactionFiltersUsed,\n} from \"./message-actions.ts\";\n\nexport async function handleMessageGet(input: {\n ctx: CliContext;\n targetInput: string;\n options: MessageCommandOptions;\n}): Promise<Record<string, unknown>> {\n const target = parseMsgTarget(input.targetInput);\n if (target.kind === \"user\") {\n throw new Error(\n \"message get does not support user ID targets. Use a channel name, channel ID, or message URL.\",\n );\n }\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options.workspace);\n\n return input.ctx.withAutoRefresh({\n workspaceUrl: target.kind === \"url\" ? target.ref.workspace_url : workspaceUrl,\n work: async () => {\n if (target.kind === \"url\") {\n const { ref } = target;\n warnOnTruncatedSlackUrl(ref);\n const { client, auth } = await input.ctx.getClientForWorkspace(ref.workspace_url);\n const includeReactions = Boolean(input.options.includeReactions);\n const msg = await fetchMessage(client, { ref, includeReactions });\n const thread = await getThreadSummary(client, { channelId: ref.channel_id, msg });\n const downloadedPaths = await downloadMessageFiles({ auth, messages: [msg] });\n const maxBodyChars = Number.parseInt(input.options.maxBodyChars, 10);\n const message = toCompactMessage(msg, { maxBodyChars, includeReactions, downloadedPaths });\n return pruneEmpty({ message, thread }) as Record<string, unknown>;\n }\n\n const ts = input.options.ts?.trim();\n if (!ts) {\n throw new Error('When targeting a channel, you must pass --ts \"<seconds>.<micros>\"');\n }\n\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [target.channel],\n });\n\n const includeReactions = Boolean(input.options.includeReactions);\n const { client, auth, workspace_url } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, target.channel);\n const ref = {\n workspace_url: workspace_url ?? workspaceUrl ?? \"\",\n channel_id: channelId,\n message_ts: ts,\n thread_ts_hint: input.options.threadTs?.trim() || undefined,\n raw: input.targetInput,\n };\n\n const msg = await fetchMessage(client, { ref, includeReactions });\n const thread = await getThreadSummary(client, { channelId, msg });\n const downloadedPaths = await downloadMessageFiles({ auth, messages: [msg] });\n const maxBodyChars = Number.parseInt(input.options.maxBodyChars, 10);\n const message = toCompactMessage(msg, { maxBodyChars, includeReactions, downloadedPaths });\n return pruneEmpty({ message, thread }) as Record<string, unknown>;\n },\n });\n}\n\nexport async function handleMessageList(input: {\n ctx: CliContext;\n targetInput: string;\n options: MessageCommandOptions;\n}): Promise<Record<string, unknown>> {\n const target = parseMsgTarget(input.targetInput);\n if (target.kind === \"user\") {\n throw new Error(\n \"message list does not support user ID targets. Use a channel name, channel ID, or message URL.\",\n );\n }\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options.workspace);\n\n return input.ctx.withAutoRefresh({\n workspaceUrl: target.kind === \"url\" ? target.ref.workspace_url : workspaceUrl,\n work: async () => {\n const withReactions = parseReactionFilters(input.options.withReaction);\n const withoutReactions = parseReactionFilters(input.options.withoutReaction);\n const hasReactionFilters = withReactions.length > 0 || withoutReactions.length > 0;\n\n if (target.kind === \"url\") {\n if (hasReactionFilters) {\n throw new Error(\n \"Reaction filters are only supported for channel history mode (not message URL thread mode)\",\n );\n }\n const { ref } = target;\n warnOnTruncatedSlackUrl(ref);\n const { client, auth } = await input.ctx.getClientForWorkspace(ref.workspace_url);\n const includeReactions = Boolean(input.options.includeReactions);\n const msg = await fetchMessage(client, { ref, includeReactions });\n const rootTs = msg.thread_ts ?? msg.ts;\n const threadMessages = await fetchThread(client, {\n channelId: ref.channel_id,\n threadTs: rootTs,\n includeReactions,\n });\n const downloadedPaths = await downloadMessageFiles({ auth, messages: threadMessages });\n const maxBodyChars = Number.parseInt(input.options.maxBodyChars, 10);\n return pruneEmpty({\n messages: threadMessages\n .map((m) => toCompactMessage(m, { maxBodyChars, includeReactions, downloadedPaths }))\n .map(toThreadListMessage),\n }) as Record<string, unknown>;\n }\n\n const { client, auth, workspace_url } = await input.ctx.getClientForWorkspace(workspaceUrl);\n\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [target.channel],\n });\n\n const channelId = await resolveChannelId(client, target.channel);\n\n const threadTs = input.options.threadTs?.trim();\n const ts = input.options.ts?.trim();\n\n // No thread specifier → list recent channel messages\n if (!threadTs && !ts) {\n const includeReactions = Boolean(input.options.includeReactions);\n const limit = parseLimit(input.options.limit);\n const oldest = requireOldestWhenReactionFiltersUsed({\n oldest: input.options.oldest,\n withReactions,\n withoutReactions,\n });\n const channelMessages = await fetchChannelHistory(client, {\n channelId,\n limit,\n latest: input.options.latest?.trim(),\n oldest,\n includeReactions: includeReactions || hasReactionFilters,\n withReactions,\n withoutReactions,\n });\n const downloadedPaths = await downloadMessageFiles({ auth, messages: channelMessages });\n const maxBodyChars = Number.parseInt(input.options.maxBodyChars, 10);\n return pruneEmpty({\n channel_id: channelId,\n messages: channelMessages.map((m) =>\n toCompactMessage(m, { maxBodyChars, includeReactions, downloadedPaths }),\n ),\n }) as Record<string, unknown>;\n }\n\n if (hasReactionFilters) {\n throw new Error(\n \"Reaction filters are only supported for channel history mode (without --thread-ts/--ts)\",\n );\n }\n\n const rootTs =\n threadTs ??\n (await (async () => {\n const ref = {\n workspace_url: workspace_url ?? workspaceUrl ?? \"\",\n channel_id: channelId,\n message_ts: ts!,\n raw: input.targetInput,\n };\n const includeReactions = Boolean(input.options.includeReactions);\n const msg = await fetchMessage(client, { ref, includeReactions });\n return msg.thread_ts ?? msg.ts;\n })());\n\n const includeReactions = Boolean(input.options.includeReactions);\n const threadMessages = await fetchThread(client, {\n channelId,\n threadTs: rootTs,\n includeReactions,\n });\n const downloadedPaths = await downloadMessageFiles({ auth, messages: threadMessages });\n const maxBodyChars = Number.parseInt(input.options.maxBodyChars, 10);\n return pruneEmpty({\n messages: threadMessages\n .map((m) => toCompactMessage(m, { maxBodyChars, includeReactions, downloadedPaths }))\n .map(toThreadListMessage),\n }) as Record<string, unknown>;\n },\n });\n}\n",
|
|
51
51
|
"import type { CliContext } from \"./context.ts\";\nimport { fetchMessage } from \"../slack/messages.ts\";\nimport { parseMsgTarget } from \"./targets.ts\";\nimport { resolveChannelId, openDmChannel } from \"../slack/channels.ts\";\nimport { normalizeSlackReactionName } from \"../slack/emoji.ts\";\nimport { warnOnTruncatedSlackUrl } from \"./message-url-warning.ts\";\nimport { textToRichTextBlocks } from \"../slack/rich-text.ts\";\nimport type { SlackApiClient } from \"../slack/client.ts\";\nimport { uploadLocalFileToSlack } from \"../slack/upload.ts\";\n\nexport type MessageCommandOptions = {\n maxBodyChars: string;\n workspace?: string;\n ts?: string;\n threadTs?: string;\n limit?: string;\n oldest?: string;\n latest?: string;\n withReaction?: string[];\n withoutReaction?: string[];\n includeReactions?: boolean;\n};\n\nexport function parseLimit(raw: string | undefined): number | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const n = Number.parseInt(raw, 10);\n if (!Number.isFinite(n) || n < 1) {\n throw new Error(`Invalid --limit value \"${raw}\": must be a positive integer`);\n }\n return n;\n}\n\nexport function requireMessageTs(raw: string | undefined): string {\n const ts = raw?.trim();\n if (!ts) {\n throw new Error('When targeting a channel, you must pass --ts \"<seconds>.<micros>\"');\n }\n return ts;\n}\n\nexport function parseReactionFilters(raw: string[] | undefined): string[] {\n if (!Array.isArray(raw) || raw.length === 0) {\n return [];\n }\n const out: string[] = [];\n for (const value of raw) {\n const normalized = normalizeSlackReactionName(String(value));\n if (!out.includes(normalized)) {\n out.push(normalized);\n }\n }\n return out;\n}\n\nexport function requireOldestWhenReactionFiltersUsed(input: {\n oldest?: string;\n withReactions: string[];\n withoutReactions: string[];\n}): string | undefined {\n const hasReactionFilters = input.withReactions.length > 0 || input.withoutReactions.length > 0;\n const oldest = input.oldest?.trim();\n if (!hasReactionFilters) {\n return oldest;\n }\n if (!oldest) {\n throw new Error(\n 'Reaction filters require --oldest \"<seconds>.<micros>\" to bound scan size. Example: --oldest \"1770165109.628379\"',\n );\n }\n return oldest;\n}\n\nexport async function sendMessage(input: {\n ctx: CliContext;\n targetInput: string;\n text: string;\n options: { workspace?: string; threadTs?: string; attach?: string[] };\n}): Promise<Record<string, unknown>> {\n const target = parseMsgTarget(String(input.targetInput));\n const blocks = input.text ? textToRichTextBlocks(input.text) : null;\n const attachPaths = normalizeAttachPaths(input.options.attach);\n\n if (target.kind === \"url\") {\n const { ref } = target;\n warnOnTruncatedSlackUrl(ref);\n await input.ctx.withAutoRefresh({\n workspaceUrl: ref.workspace_url,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(ref.workspace_url);\n const msg = await fetchMessage(client, { ref });\n const threadTs = msg.thread_ts ?? msg.ts;\n await sendMessageToChannel({\n client,\n channelId: ref.channel_id,\n text: input.text,\n blocks,\n threadTs,\n attachPaths,\n });\n },\n });\n return { ok: true };\n }\n\n if (target.kind === \"user\") {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options.workspace);\n await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const dmChannelId = await openDmChannel(client, target.userId);\n await sendMessageToChannel({\n client,\n channelId: dmChannelId,\n text: input.text,\n blocks,\n attachPaths,\n });\n },\n });\n return { ok: true };\n }\n\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options.workspace);\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [String(target.channel)],\n });\n await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, String(target.channel));\n await sendMessageToChannel({\n client,\n channelId,\n text: input.text,\n blocks,\n threadTs: input.options.threadTs ? String(input.options.threadTs) : undefined,\n attachPaths,\n });\n },\n });\n return { ok: true };\n}\n\nfunction normalizeAttachPaths(raw: string[] | undefined): string[] {\n if (!Array.isArray(raw) || raw.length === 0) {\n return [];\n }\n const out: string[] = [];\n for (const p of raw.map((v) => String(v).trim()).filter(Boolean)) {\n if (!out.includes(p)) {\n out.push(p);\n }\n }\n return out;\n}\n\nasync function sendMessageToChannel(input: {\n client: SlackApiClient;\n channelId: string;\n text: string;\n blocks?: unknown[] | null;\n threadTs?: string;\n attachPaths: string[];\n}): Promise<void> {\n if (input.attachPaths.length === 0) {\n await input.client.api(\"chat.postMessage\", {\n channel: input.channelId,\n text: input.text,\n thread_ts: input.threadTs,\n ...(input.blocks ? { blocks: input.blocks } : {}),\n });\n return;\n }\n\n if (input.blocks) {\n process.stderr.write(\n \"Warning: rich text formatting is not supported with file attachments; sending as plain text.\\n\",\n );\n }\n\n let initialComment = input.text;\n for (const filePath of input.attachPaths) {\n await uploadLocalFileToSlack({\n client: input.client,\n channelId: input.channelId,\n filePath,\n threadTs: input.threadTs,\n initialComment,\n });\n initialComment = \"\";\n }\n}\n\nexport async function editMessage(input: {\n ctx: CliContext;\n targetInput: string;\n text: string;\n options: { workspace?: string; ts?: string };\n}): Promise<Record<string, unknown>> {\n const target = parseMsgTarget(String(input.targetInput));\n if (target.kind === \"user\") {\n throw new Error(\n \"message edit does not support user ID targets. Use a channel name, channel ID, or message URL.\",\n );\n }\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options.workspace);\n\n await input.ctx.withAutoRefresh({\n workspaceUrl: target.kind === \"url\" ? target.ref.workspace_url : workspaceUrl,\n work: async () => {\n if (target.kind === \"url\") {\n const { ref } = target;\n warnOnTruncatedSlackUrl(ref);\n const { client } = await input.ctx.getClientForWorkspace(ref.workspace_url);\n await client.api(\"chat.update\", {\n channel: ref.channel_id,\n ts: ref.message_ts,\n text: input.text,\n });\n return;\n }\n\n const ts = requireMessageTs(input.options.ts);\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [target.channel],\n });\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, target.channel);\n await client.api(\"chat.update\", {\n channel: channelId,\n ts,\n text: input.text,\n });\n },\n });\n\n return { ok: true };\n}\n\nexport async function deleteMessage(input: {\n ctx: CliContext;\n targetInput: string;\n options: { workspace?: string; ts?: string };\n}): Promise<Record<string, unknown>> {\n const target = parseMsgTarget(String(input.targetInput));\n if (target.kind === \"user\") {\n throw new Error(\n \"message delete does not support user ID targets. Use a channel name, channel ID, or message URL.\",\n );\n }\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options.workspace);\n\n await input.ctx.withAutoRefresh({\n workspaceUrl: target.kind === \"url\" ? target.ref.workspace_url : workspaceUrl,\n work: async () => {\n if (target.kind === \"url\") {\n const { ref } = target;\n warnOnTruncatedSlackUrl(ref);\n const { client } = await input.ctx.getClientForWorkspace(ref.workspace_url);\n await client.api(\"chat.delete\", {\n channel: ref.channel_id,\n ts: ref.message_ts,\n });\n return;\n }\n\n const ts = requireMessageTs(input.options.ts);\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [target.channel],\n });\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, target.channel);\n await client.api(\"chat.delete\", {\n channel: channelId,\n ts,\n });\n },\n });\n\n return { ok: true };\n}\n\nexport async function reactOnTarget(input: {\n ctx: CliContext;\n action: \"add\" | \"remove\";\n targetInput: string;\n emoji: string;\n options?: { workspace?: string; ts?: string };\n}): Promise<Record<string, unknown>> {\n const target = parseMsgTarget(input.targetInput);\n if (target.kind === \"user\") {\n throw new Error(\n \"react does not support user ID targets. Use a channel name, channel ID, or message URL.\",\n );\n }\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options?.workspace);\n\n await input.ctx.withAutoRefresh({\n workspaceUrl: target.kind === \"url\" ? target.ref.workspace_url : workspaceUrl,\n work: async () => {\n if (target.kind === \"url\") {\n const { ref } = target;\n warnOnTruncatedSlackUrl(ref);\n const { client } = await input.ctx.getClientForWorkspace(ref.workspace_url);\n const name = normalizeSlackReactionName(input.emoji);\n await client.api(`reactions.${input.action}`, {\n channel: ref.channel_id,\n timestamp: ref.message_ts,\n name,\n });\n return;\n }\n\n const ts = requireMessageTs(input.options?.ts);\n\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [target.channel],\n });\n\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, target.channel);\n const name = normalizeSlackReactionName(input.emoji);\n await client.api(`reactions.${input.action}`, {\n channel: channelId,\n timestamp: ts,\n name,\n });\n },\n });\n\n return { ok: true };\n}\n\nexport { handleMessageGet, handleMessageList } from \"./message-read-actions.ts\";\n",
|
|
@@ -55,18 +55,24 @@
|
|
|
55
55
|
"import type { SlackApiClient } from \"./client.ts\";\nimport { normalizeChannelInput } from \"./channels.ts\";\nimport { asArray, getString, isRecord } from \"../lib/object-type-guards.ts\";\n\nexport async function buildSlackSearchQuery(\n client: SlackApiClient,\n input: {\n query: string;\n channels?: string[];\n user?: string;\n after?: string;\n before?: string;\n },\n): Promise<string> {\n const parts: string[] = [];\n const base = input.query.trim();\n if (base) {\n parts.push(base);\n }\n\n if (input.after) {\n parts.push(`after:${validateDate(input.after)}`);\n }\n if (input.before) {\n parts.push(`before:${validateDate(input.before)}`);\n }\n\n if (input.user) {\n const token = await userTokenForSearch(client, input.user);\n if (token) {\n parts.push(token);\n }\n }\n\n if (input.channels && input.channels.length > 0) {\n for (const ch of input.channels) {\n const inToken = await channelTokenForSearch(client, ch);\n if (inToken) {\n parts.push(inToken);\n }\n }\n }\n\n return parts.join(\" \");\n}\n\nexport function validateDate(s: string): string {\n const v = s.trim();\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(v)) {\n throw new Error(`Invalid date: ${s} (expected YYYY-MM-DD)`);\n }\n return v;\n}\n\nexport function dateToUnixSeconds(date: string, edge: \"start\" | \"end\"): number {\n const d = validateDate(date);\n const iso = edge === \"start\" ? `${d}T00:00:00.000Z` : `${d}T23:59:59.999Z`;\n return Math.floor(Date.parse(iso) / 1000);\n}\n\nasync function userTokenForSearch(client: SlackApiClient, user: string): Promise<string | null> {\n const trimmed = user.trim();\n if (!trimmed) {\n return null;\n }\n\n // Accept @name or name\n if (trimmed.startsWith(\"@\")) {\n return `from:@${trimmed.slice(1)}`;\n }\n if (/^U[A-Z0-9]{8,}$/.test(trimmed)) {\n try {\n const info = await client.api(\"users.info\", { user: trimmed });\n const infoUser = isRecord(info) ? info.user : null;\n const name = isRecord(infoUser) ? (getString(infoUser.name) ?? \"\").trim() : \"\";\n return name ? `from:@${name}` : null;\n } catch {\n return null;\n }\n }\n return `from:@${trimmed}`;\n}\n\nasync function channelTokenForSearch(\n client: SlackApiClient,\n channel: string,\n): Promise<string | null> {\n const normalized = normalizeChannelInput(channel);\n if (normalized.kind === \"name\") {\n const name = normalized.value.trim();\n if (!name) {\n return null;\n }\n return `in:#${name}`;\n }\n\n // Channel id -> name for use in search query.\n try {\n const info = await client.api(\"conversations.info\", {\n channel: normalized.value,\n });\n const channelInfo = isRecord(info) ? info.channel : null;\n const name = isRecord(channelInfo) ? (getString(channelInfo.name) ?? \"\").trim() : \"\";\n if (name) {\n return `in:#${name}`;\n }\n } catch {\n // ignore\n }\n return null;\n}\n\nexport async function resolveUserId(\n client: SlackApiClient,\n input: string,\n): Promise<string | undefined> {\n const trimmed = input.trim();\n if (!trimmed) {\n return undefined;\n }\n if (/^U[A-Z0-9]{8,}$/.test(trimmed)) {\n return trimmed;\n }\n const name = trimmed.startsWith(\"@\") ? trimmed.slice(1) : trimmed;\n\n let cursor: string | undefined;\n for (;;) {\n const resp = await client.api(\"users.list\", { limit: 200, cursor });\n const members = isRecord(resp) ? asArray(resp.members).filter(isRecord) : [];\n const found = members.find((m) => {\n const mName = getString(m.name);\n const profile = isRecord(m.profile) ? m.profile : null;\n const display = profile ? getString(profile.display_name) : undefined;\n return mName === name || display === name;\n });\n const foundId = found ? getString(found.id) : undefined;\n if (foundId) {\n return foundId;\n }\n const meta = isRecord(resp) ? resp.response_metadata : null;\n const next = isRecord(meta) ? getString(meta.next_cursor) : undefined;\n if (!next) {\n break;\n }\n cursor = next;\n }\n return undefined;\n}\n",
|
|
56
56
|
"import type { SlackApiClient } from \"./client.ts\";\nimport { asArray, isRecord } from \"../lib/object-type-guards.ts\";\n\nexport async function searchMessagesRaw(\n client: SlackApiClient,\n input: { query: string; limit: number },\n): Promise<Record<string, unknown>[]> {\n const pageSize = Math.min(Math.max(input.limit, 1), 100);\n const out: Record<string, unknown>[] = [];\n let page = 1;\n let pages = 1;\n\n for (;;) {\n const resp = await client.api(\"search.messages\", {\n query: input.query,\n count: pageSize,\n page,\n highlight: false,\n sort: \"timestamp\",\n sort_dir: \"desc\",\n });\n const messages = isRecord(resp) ? resp.messages : null;\n const matches = isRecord(messages) ? asArray(messages.matches).filter(isRecord) : [];\n out.push(...matches);\n\n const paging = isRecord(messages) ? (messages.paging ?? messages.pagination) : null;\n const totalPages = Number(isRecord(paging) ? (paging.pages ?? 1) : 1);\n if (Number.isFinite(totalPages) && totalPages > 0) {\n pages = totalPages;\n }\n\n if (out.length >= input.limit) {\n break;\n }\n if (matches.length === 0) {\n break;\n }\n if (page >= pages) {\n break;\n }\n page++;\n }\n\n return out.slice(0, input.limit);\n}\n\nexport async function searchFilesRaw(\n client: SlackApiClient,\n input: { query: string; limit: number },\n): Promise<Record<string, unknown>[]> {\n const pageSize = Math.min(Math.max(input.limit, 1), 100);\n const out: Record<string, unknown>[] = [];\n let page = 1;\n let pages = 1;\n\n for (;;) {\n const resp = await client.api(\"search.files\", {\n query: input.query,\n count: pageSize,\n page,\n highlight: false,\n sort: \"timestamp\",\n sort_dir: \"desc\",\n });\n const files = isRecord(resp) ? resp.files : null;\n const matches = isRecord(files) ? asArray(files.matches).filter(isRecord) : [];\n out.push(...matches);\n\n const paging = isRecord(files) ? (files.paging ?? files.pagination) : null;\n const totalPages = Number(isRecord(paging) ? (paging.pages ?? 1) : 1);\n if (Number.isFinite(totalPages) && totalPages > 0) {\n pages = totalPages;\n }\n\n if (out.length >= input.limit) {\n break;\n }\n if (matches.length === 0) {\n break;\n }\n if (page >= pages) {\n break;\n }\n page++;\n }\n\n return out.slice(0, input.limit);\n}\n",
|
|
57
57
|
"export function inferExt(file: {\n mimetype?: string;\n filetype?: string;\n name?: string;\n title?: string;\n}): string | null {\n const mt = (file.mimetype || \"\").toLowerCase();\n const ft = (file.filetype || \"\").toLowerCase();\n\n if (mt === \"image/png\" || ft === \"png\") {\n return \"png\";\n }\n if (mt === \"image/jpeg\" || mt === \"image/jpg\" || ft === \"jpg\" || ft === \"jpeg\") {\n return \"jpg\";\n }\n if (mt === \"image/webp\" || ft === \"webp\") {\n return \"webp\";\n }\n if (mt === \"image/gif\" || ft === \"gif\") {\n return \"gif\";\n }\n\n if (mt === \"text/plain\" || ft === \"text\") {\n return \"txt\";\n }\n if (mt === \"text/markdown\" || ft === \"markdown\" || ft === \"md\") {\n return \"md\";\n }\n if (mt === \"application/json\" || ft === \"json\") {\n return \"json\";\n }\n\n const name = file.name || file.title || \"\";\n const m = name.match(/\\.([A-Za-z0-9]{1,10})$/);\n return m ? m[1]!.toLowerCase() : null;\n}\n",
|
|
58
|
-
"import type { SlackApiClient, SlackAuth } from \"./client.ts\";\nimport { ensureDownloadsDir } from \"../lib/tmp-paths.ts\";\nimport { resolveChannelId } from \"./channels.ts\";\nimport {
|
|
59
|
-
"import type { SlackApiClient, SlackAuth } from \"./client.ts\";\nimport type { CompactSlackMessage, SlackFileSummary, SlackMessageSummary } from \"./messages.ts\";\nimport { fetchMessage, toCompactMessage } from \"./messages.ts\";\nimport { resolveChannelId } from \"./channels.ts\";\nimport { ensureDownloadsDir } from \"../lib/tmp-paths.ts\";\nimport { downloadSlackFile } from \"./files.ts\";\nimport { renderSlackMessageContent } from \"./render.ts\";\nimport { parseSlackMessageUrl } from \"./url.ts\";\nimport { inferExt } from \"./search-file-ext.ts\";\nimport { dateToUnixSeconds, resolveUserId } from \"./search-query.ts\";\nimport { asArray, getNumber, getString, isRecord } from \"../lib/object-type-guards.ts\";\nimport { slackMrkdwnToMarkdown } from \"./mrkdwn.ts\";\n\nexport type ContentType = \"any\" | \"text\" | \"image\" | \"snippet\" | \"file\";\n\nexport async function searchMessagesViaSearchApi(\n client: SlackApiClient,\n input: {\n auth: SlackAuth;\n workspace_url?: string;\n slack_query: string;\n limit: number;\n maxContentChars: number;\n contentType: ContentType;\n download: boolean;\n rawMatches: Record<string, unknown>[];\n },\n): Promise<Omit<CompactSlackMessage, \"channel_id\" | \"thread_ts\">[]> {\n const matches = input.rawMatches;\n if (matches.length === 0) {\n return [];\n }\n\n const messageRefs: {\n channel_id: string;\n message_ts: string;\n permalink?: string;\n }[] = [];\n for (const m of matches) {\n const ts = getString(m.ts)?.trim() ?? \"\";\n if (!ts) {\n continue;\n }\n const channelValue = isRecord(m.channel) ? m.channel : null;\n const channelId =\n channelValue && getString(channelValue.id)\n ? getString(channelValue.id)!\n : channelValue && getString(channelValue.name)\n ? await resolveChannelId(client, `#${getString(channelValue.name)}`)\n : \"\";\n if (!channelId) {\n continue;\n }\n messageRefs.push({\n channel_id: channelId,\n message_ts: ts,\n permalink: getString(m.permalink),\n });\n if (messageRefs.length >= input.limit) {\n break;\n }\n }\n\n const downloadedPaths: Record<string, string> = {};\n const downloadsDir = input.download ? await ensureDownloadsDir() : null;\n const out: Omit<CompactSlackMessage, \"channel_id\" | \"thread_ts\">[] = [];\n\n for (const ref of messageRefs) {\n let full: SlackMessageSummary | null = null;\n try {\n const parsed =\n ref.permalink && typeof ref.permalink === \"string\"\n ? (() => {\n try {\n return parseSlackMessageUrl(ref.permalink);\n } catch {\n return null;\n }\n })()\n : null;\n\n full = await fetchMessage(client, {\n ref: {\n workspace_url: parsed?.workspace_url ?? input.workspace_url ?? \"\",\n channel_id: ref.channel_id,\n message_ts: ref.message_ts,\n thread_ts_hint: parsed?.thread_ts_hint,\n raw: parsed?.raw ?? ref.permalink ?? `${ref.channel_id}:${ref.message_ts}`,\n },\n });\n } catch {\n continue;\n }\n\n if (downloadsDir) {\n await downloadFilesForMessage({\n auth: input.auth,\n downloadsDir,\n message: full,\n downloadedPaths,\n });\n }\n\n const compact = toCompactMessage(full, {\n maxBodyChars: input.maxContentChars,\n downloadedPaths,\n });\n if (!passesContentTypeFilter(compact, input.contentType)) {\n continue;\n }\n out.push(stripThreadListFields(compact));\n if (out.length >= input.limit) {\n break;\n }\n }\n\n return out;\n}\n\nexport async function searchMessagesInChannelsFallback(\n client: SlackApiClient,\n input: {\n auth: SlackAuth;\n query: string;\n channels: string[];\n user?: string;\n after?: string;\n before?: string;\n limit: number;\n maxContentChars: number;\n contentType: ContentType;\n download: boolean;\n },\n): Promise<Omit<CompactSlackMessage, \"channel_id\" | \"thread_ts\">[]> {\n const channelIds = await Promise.all(input.channels.map((c) => resolveChannelId(client, c)));\n const queryLower = input.query.trim().toLowerCase();\n\n const userId = input.user ? await resolveUserId(client, input.user) : undefined;\n\n const afterSec = input.after ? dateToUnixSeconds(input.after, \"start\") : null;\n const beforeSec = input.before ? dateToUnixSeconds(input.before, \"end\") : null;\n\n const downloadsDir = input.download ? await ensureDownloadsDir() : null;\n const downloadedPaths: Record<string, string> = {};\n\n const results: Omit<CompactSlackMessage, \"channel_id\" | \"thread_ts\">[] = [];\n\n for (const channelId of channelIds) {\n let cursorLatest: string | undefined;\n for (;;) {\n const resp = await client.api(\"conversations.history\", {\n channel: channelId,\n limit: 200,\n latest: cursorLatest,\n });\n const messages = isRecord(resp) ? asArray(resp.messages).filter(isRecord) : [];\n if (messages.length === 0) {\n break;\n }\n\n for (const m of messages) {\n const summary = messageSummaryFromApiMessage(channelId, m);\n\n const tsNum = Number.parseFloat(summary.ts);\n if (Number.isFinite(tsNum)) {\n if (beforeSec !== null && tsNum > beforeSec) {\n continue;\n }\n if (afterSec !== null && tsNum < afterSec) {\n cursorLatest = undefined;\n break;\n }\n }\n\n if (userId && summary.user !== userId) {\n continue;\n }\n\n const content = renderSlackMessageContent(summary);\n if (queryLower && !content.toLowerCase().includes(queryLower)) {\n continue;\n }\n\n if (downloadsDir) {\n await downloadFilesForMessage({\n auth: input.auth,\n downloadsDir,\n message: summary,\n downloadedPaths,\n });\n }\n\n const compact = toCompactMessage(summary, {\n maxBodyChars: input.maxContentChars,\n downloadedPaths,\n });\n if (!passesContentTypeFilter(compact, input.contentType)) {\n continue;\n }\n\n results.push(stripThreadListFields(compact));\n if (results.length >= input.limit) {\n return results;\n }\n }\n\n if (!cursorLatest) {\n break;\n }\n\n const last = messages.at(-1);\n cursorLatest = last ? getString(last.ts) : undefined;\n if (!cursorLatest) {\n break;\n }\n }\n }\n\n return results;\n}\n\nfunction passesContentTypeFilter(m: CompactSlackMessage, contentType: ContentType): boolean {\n if (contentType === \"any\") {\n return true;\n }\n const hasFiles = Boolean(m.files && m.files.length > 0);\n if (contentType === \"text\") {\n return !hasFiles;\n }\n if (!hasFiles) {\n return false;\n }\n\n if (contentType === \"file\") {\n return true;\n }\n if (contentType === \"snippet\") {\n return (m.files ?? []).some((f) => f.mode === \"snippet\");\n }\n if (contentType === \"image\") {\n return (m.files ?? []).some((f) => String(f.mimetype ?? \"\").startsWith(\"image/\"));\n }\n return true;\n}\n\nfunction stripThreadListFields(\n m: CompactSlackMessage,\n): Omit<CompactSlackMessage, \"channel_id\" | \"thread_ts\"> {\n const { channel_id: _channelId, thread_ts: _threadTs, ...rest } = m;\n return rest;\n}\n\nasync function downloadFilesForMessage(input: {\n auth: SlackAuth;\n downloadsDir: string;\n message: SlackMessageSummary;\n downloadedPaths: Record<string, string>;\n}): Promise<void> {\n for (const f of input.message.files ?? []) {\n if (input.downloadedPaths[f.id]) {\n continue;\n }\n const url = f.url_private_download || f.url_private;\n if (!url) {\n continue;\n }\n const ext = inferExt(f);\n const path = await downloadSlackFile({\n auth: input.auth,\n url,\n destDir: input.downloadsDir,\n preferredName: `${f.id}${ext ? `.${ext}` : \"\"}`,\n });\n input.downloadedPaths[f.id] = path;\n }\n}\n\nfunction messageSummaryFromApiMessage(\n channelId: string,\n msg: Record<string, unknown>,\n): SlackMessageSummary {\n const text = getString(msg.text) ?? \"\";\n const files = asArray(msg.files)\n .map((f) => toSlackFileSummary(f))\n .filter((f): f is SlackFileSummary => f !== null);\n\n return {\n channel_id: channelId,\n ts: getString(msg.ts) ?? \"\",\n thread_ts: getString(msg.thread_ts),\n reply_count: getNumber(msg.reply_count),\n user: getString(msg.user),\n bot_id: getString(msg.bot_id),\n text,\n markdown: slackMrkdwnToMarkdown(text),\n blocks: Array.isArray(msg.blocks) ? (msg.blocks as unknown[]) : undefined,\n attachments: Array.isArray(msg.attachments) ? (msg.attachments as unknown[]) : undefined,\n files: files.length > 0 ? files : undefined,\n reactions: Array.isArray(msg.reactions) ? (msg.reactions as unknown[]) : undefined,\n };\n}\n\nfunction toSlackFileSummary(value: unknown): SlackFileSummary | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = getString(value.id);\n if (!id) {\n return null;\n }\n return {\n id,\n name: getString(value.name),\n title: getString(value.title),\n mimetype: getString(value.mimetype),\n filetype: getString(value.filetype),\n mode: getString(value.mode),\n permalink: getString(value.permalink),\n url_private: getString(value.url_private),\n url_private_download: getString(value.url_private_download),\n size: getNumber(value.size),\n };\n}\n",
|
|
58
|
+
"import type { SlackApiClient, SlackAuth } from \"./client.ts\";\nimport { ensureDownloadsDir } from \"../lib/tmp-paths.ts\";\nimport { resolveChannelId } from \"./channels.ts\";\nimport { tryDownloadSlackFile } from \"./files.ts\";\nimport { inferExt } from \"./search-file-ext.ts\";\nimport { dateToUnixSeconds, resolveUserId } from \"./search-query.ts\";\nimport { asArray, getString, isRecord } from \"../lib/object-type-guards.ts\";\n\nexport type ContentType = \"any\" | \"text\" | \"image\" | \"snippet\" | \"file\";\n\nexport async function searchFilesViaSearchApi(\n client: SlackApiClient,\n input: {\n auth: SlackAuth;\n slack_query: string;\n limit: number;\n contentType: ContentType;\n rawMatches: Record<string, unknown>[];\n },\n): Promise<{ title?: string; mimetype?: string; mode?: string; path: string }[]> {\n const matches = input.rawMatches;\n if (matches.length === 0) {\n return [];\n }\n\n const downloadsDir = await ensureDownloadsDir();\n const out: { title?: string; mimetype?: string; mode?: string; path: string }[] = [];\n\n for (const f of matches) {\n const mode = getString(f.mode);\n const mimetype = getString(f.mimetype);\n if (!passesFileContentTypeFilter({ mode, mimetype }, input.contentType)) {\n continue;\n }\n const url = getString(f.url_private_download) ?? getString(f.url_private);\n if (!url) {\n continue;\n }\n const ext = inferExt({\n mimetype,\n filetype: getString(f.filetype),\n name: getString(f.name),\n title: getString(f.title),\n });\n const id = getString(f.id);\n if (!id) {\n continue;\n }\n const result = await tryDownloadSlackFile({\n auth: input.auth,\n url,\n destDir: downloadsDir,\n preferredName: `${id}${ext ? `.${ext}` : \"\"}`,\n });\n if (!result.ok) {\n console.warn(`Warning: skipping file ${id}: ${result.error}`);\n continue;\n }\n const title = (getString(f.title) || getString(f.name) || \"\").trim();\n out.push({\n title: title || undefined,\n mimetype,\n mode,\n path: result.path,\n });\n if (out.length >= input.limit) {\n break;\n }\n }\n\n return out;\n}\n\nexport async function searchFilesInChannelsFallback(\n client: SlackApiClient,\n input: {\n auth: SlackAuth;\n query: string;\n channels: string[];\n user?: string;\n after?: string;\n before?: string;\n limit: number;\n contentType: ContentType;\n },\n): Promise<{ title?: string; mimetype?: string; mode?: string; path: string }[]> {\n const channelIds = await Promise.all(input.channels.map((c) => resolveChannelId(client, c)));\n const userId = input.user ? await resolveUserId(client, input.user) : undefined;\n const queryLower = input.query.trim().toLowerCase();\n\n const ts_from = input.after ? dateToUnixSeconds(input.after, \"start\") : undefined;\n const ts_to = input.before ? dateToUnixSeconds(input.before, \"end\") : undefined;\n\n const downloadsDir = await ensureDownloadsDir();\n const out: { title?: string; mimetype?: string; mode?: string; path: string }[] = [];\n\n for (const channelId of channelIds) {\n let page = 1;\n for (;;) {\n const resp = await client.api(\"files.list\", {\n channel: channelId,\n user: userId,\n ts_from,\n ts_to,\n count: 100,\n page,\n });\n const files = isRecord(resp) ? asArray(resp.files).filter(isRecord) : [];\n if (files.length === 0) {\n break;\n }\n\n for (const f of files) {\n const mode = getString(f.mode);\n const mimetype = getString(f.mimetype);\n if (!passesFileContentTypeFilter({ mode, mimetype }, input.contentType)) {\n continue;\n }\n\n const title = (getString(f.title) || getString(f.name) || \"\").trim();\n if (queryLower && !title.toLowerCase().includes(queryLower)) {\n continue;\n }\n\n const url = getString(f.url_private_download) ?? getString(f.url_private);\n if (!url) {\n continue;\n }\n\n const ext = inferExt({\n mimetype,\n filetype: getString(f.filetype),\n name: getString(f.name),\n title: getString(f.title),\n });\n const id = getString(f.id);\n if (!id) {\n continue;\n }\n const result = await tryDownloadSlackFile({\n auth: input.auth,\n url,\n destDir: downloadsDir,\n preferredName: `${id}${ext ? `.${ext}` : \"\"}`,\n });\n if (!result.ok) {\n console.warn(`Warning: skipping file ${id}: ${result.error}`);\n continue;\n }\n out.push({\n title: title || undefined,\n mimetype,\n mode,\n path: result.path,\n });\n if (out.length >= input.limit) {\n return out;\n }\n }\n\n const paging = isRecord(resp)\n ? isRecord(resp.paging)\n ? resp.paging\n : resp.pagination\n : null;\n const pages = Number(isRecord(paging) ? (paging.pages ?? paging.page_count) : undefined);\n if (Number.isFinite(pages) && page >= pages) {\n break;\n }\n page++;\n }\n }\n\n return out;\n}\n\nfunction passesFileContentTypeFilter(\n f: { mode?: string; mimetype?: string },\n contentType: ContentType,\n): boolean {\n if (contentType === \"any\") {\n return true;\n }\n if (contentType === \"file\") {\n return true;\n }\n if (contentType === \"snippet\") {\n return f.mode === \"snippet\";\n }\n if (contentType === \"image\") {\n return String(f.mimetype ?? \"\")\n .toLowerCase()\n .startsWith(\"image/\");\n }\n if (contentType === \"text\") {\n return String(f.mimetype ?? \"\") === \"text/plain\";\n }\n return true;\n}\n",
|
|
59
|
+
"import type { SlackApiClient, SlackAuth } from \"./client.ts\";\nimport type { CompactSlackMessage, SlackFileSummary, SlackMessageSummary } from \"./messages.ts\";\nimport { fetchMessage, toCompactMessage } from \"./messages.ts\";\nimport { resolveChannelId } from \"./channels.ts\";\nimport { ensureDownloadsDir } from \"../lib/tmp-paths.ts\";\nimport { type DownloadResult, tryDownloadSlackFile, writeDownloadErrorFile } from \"./files.ts\";\nimport { renderSlackMessageContent } from \"./render.ts\";\nimport { parseSlackMessageUrl } from \"./url.ts\";\nimport { inferExt } from \"./search-file-ext.ts\";\nimport { dateToUnixSeconds, resolveUserId } from \"./search-query.ts\";\nimport { asArray, getNumber, getString, isRecord } from \"../lib/object-type-guards.ts\";\nimport { slackMrkdwnToMarkdown } from \"./mrkdwn.ts\";\n\nexport type ContentType = \"any\" | \"text\" | \"image\" | \"snippet\" | \"file\";\n\nexport async function searchMessagesViaSearchApi(\n client: SlackApiClient,\n input: {\n auth: SlackAuth;\n workspace_url?: string;\n slack_query: string;\n limit: number;\n maxContentChars: number;\n contentType: ContentType;\n download: boolean;\n rawMatches: Record<string, unknown>[];\n },\n): Promise<Omit<CompactSlackMessage, \"channel_id\" | \"thread_ts\">[]> {\n const matches = input.rawMatches;\n if (matches.length === 0) {\n return [];\n }\n\n const messageRefs: {\n channel_id: string;\n message_ts: string;\n permalink?: string;\n }[] = [];\n for (const m of matches) {\n const ts = getString(m.ts)?.trim() ?? \"\";\n if (!ts) {\n continue;\n }\n const channelValue = isRecord(m.channel) ? m.channel : null;\n const channelId =\n channelValue && getString(channelValue.id)\n ? getString(channelValue.id)!\n : channelValue && getString(channelValue.name)\n ? await resolveChannelId(client, `#${getString(channelValue.name)}`)\n : \"\";\n if (!channelId) {\n continue;\n }\n messageRefs.push({\n channel_id: channelId,\n message_ts: ts,\n permalink: getString(m.permalink),\n });\n if (messageRefs.length >= input.limit) {\n break;\n }\n }\n\n const downloadedPaths: Record<string, DownloadResult> = {};\n const downloadsDir = input.download ? await ensureDownloadsDir() : null;\n const out: Omit<CompactSlackMessage, \"channel_id\" | \"thread_ts\">[] = [];\n\n for (const ref of messageRefs) {\n let full: SlackMessageSummary | null = null;\n try {\n const parsed =\n ref.permalink && typeof ref.permalink === \"string\"\n ? (() => {\n try {\n return parseSlackMessageUrl(ref.permalink);\n } catch {\n return null;\n }\n })()\n : null;\n\n full = await fetchMessage(client, {\n ref: {\n workspace_url: parsed?.workspace_url ?? input.workspace_url ?? \"\",\n channel_id: ref.channel_id,\n message_ts: ref.message_ts,\n thread_ts_hint: parsed?.thread_ts_hint,\n raw: parsed?.raw ?? ref.permalink ?? `${ref.channel_id}:${ref.message_ts}`,\n },\n });\n } catch {\n continue;\n }\n\n if (downloadsDir) {\n await downloadFilesForMessage({\n auth: input.auth,\n downloadsDir,\n message: full,\n downloadedPaths,\n });\n }\n\n const compact = toCompactMessage(full, {\n maxBodyChars: input.maxContentChars,\n downloadedPaths,\n });\n if (!passesContentTypeFilter(compact, input.contentType)) {\n continue;\n }\n out.push(stripThreadListFields(compact));\n if (out.length >= input.limit) {\n break;\n }\n }\n\n return out;\n}\n\nexport async function searchMessagesInChannelsFallback(\n client: SlackApiClient,\n input: {\n auth: SlackAuth;\n query: string;\n channels: string[];\n user?: string;\n after?: string;\n before?: string;\n limit: number;\n maxContentChars: number;\n contentType: ContentType;\n download: boolean;\n },\n): Promise<Omit<CompactSlackMessage, \"channel_id\" | \"thread_ts\">[]> {\n const channelIds = await Promise.all(input.channels.map((c) => resolveChannelId(client, c)));\n const queryLower = input.query.trim().toLowerCase();\n\n const userId = input.user ? await resolveUserId(client, input.user) : undefined;\n\n const afterSec = input.after ? dateToUnixSeconds(input.after, \"start\") : null;\n const beforeSec = input.before ? dateToUnixSeconds(input.before, \"end\") : null;\n\n const downloadsDir = input.download ? await ensureDownloadsDir() : null;\n const downloadedPaths: Record<string, DownloadResult> = {};\n\n const results: Omit<CompactSlackMessage, \"channel_id\" | \"thread_ts\">[] = [];\n\n for (const channelId of channelIds) {\n let cursorLatest: string | undefined;\n for (;;) {\n const resp = await client.api(\"conversations.history\", {\n channel: channelId,\n limit: 200,\n latest: cursorLatest,\n });\n const messages = isRecord(resp) ? asArray(resp.messages).filter(isRecord) : [];\n if (messages.length === 0) {\n break;\n }\n\n for (const m of messages) {\n const summary = messageSummaryFromApiMessage(channelId, m);\n\n const tsNum = Number.parseFloat(summary.ts);\n if (Number.isFinite(tsNum)) {\n if (beforeSec !== null && tsNum > beforeSec) {\n continue;\n }\n if (afterSec !== null && tsNum < afterSec) {\n cursorLatest = undefined;\n break;\n }\n }\n\n if (userId && summary.user !== userId) {\n continue;\n }\n\n const content = renderSlackMessageContent(summary);\n if (queryLower && !content.toLowerCase().includes(queryLower)) {\n continue;\n }\n\n if (downloadsDir) {\n await downloadFilesForMessage({\n auth: input.auth,\n downloadsDir,\n message: summary,\n downloadedPaths,\n });\n }\n\n const compact = toCompactMessage(summary, {\n maxBodyChars: input.maxContentChars,\n downloadedPaths,\n });\n if (!passesContentTypeFilter(compact, input.contentType)) {\n continue;\n }\n\n results.push(stripThreadListFields(compact));\n if (results.length >= input.limit) {\n return results;\n }\n }\n\n if (!cursorLatest) {\n break;\n }\n\n const last = messages.at(-1);\n cursorLatest = last ? getString(last.ts) : undefined;\n if (!cursorLatest) {\n break;\n }\n }\n }\n\n return results;\n}\n\nexport function passesContentTypeFilter(m: CompactSlackMessage, contentType: ContentType): boolean {\n if (contentType === \"any\") {\n return true;\n }\n const hasFiles = Boolean(m.files && m.files.length > 0);\n if (contentType === \"text\") {\n return !hasFiles;\n }\n if (!hasFiles) {\n return false;\n }\n\n if (contentType === \"file\") {\n return true;\n }\n if (contentType === \"snippet\") {\n return (m.files ?? []).some((f) => f.mode === \"snippet\");\n }\n if (contentType === \"image\") {\n return (m.files ?? []).some((f) => String(f.mimetype ?? \"\").startsWith(\"image/\"));\n }\n return true;\n}\n\nfunction stripThreadListFields(\n m: CompactSlackMessage,\n): Omit<CompactSlackMessage, \"channel_id\" | \"thread_ts\"> {\n const { channel_id: _channelId, thread_ts: _threadTs, ...rest } = m;\n return rest;\n}\n\nasync function downloadFilesForMessage(input: {\n auth: SlackAuth;\n downloadsDir: string;\n message: SlackMessageSummary;\n downloadedPaths: Record<string, DownloadResult>;\n}): Promise<void> {\n for (const f of input.message.files ?? []) {\n if (input.downloadedPaths[f.id]) {\n continue;\n }\n const url = f.url_private_download || f.url_private;\n if (!url) {\n continue;\n }\n const ext = inferExt(f);\n const result = await tryDownloadSlackFile({\n auth: input.auth,\n url,\n destDir: input.downloadsDir,\n preferredName: `${f.id}${ext ? `.${ext}` : \"\"}`,\n });\n if (!result.ok) {\n input.downloadedPaths[f.id] = {\n ...result,\n path: await writeDownloadErrorFile({\n destDir: input.downloadsDir,\n fileId: f.id,\n error: result.error,\n }),\n };\n console.warn(`Warning: file ${f.id}: ${result.error}`);\n } else {\n input.downloadedPaths[f.id] = result;\n }\n }\n}\n\nfunction messageSummaryFromApiMessage(\n channelId: string,\n msg: Record<string, unknown>,\n): SlackMessageSummary {\n const text = getString(msg.text) ?? \"\";\n const files = asArray(msg.files)\n .map((f) => toSlackFileSummary(f))\n .filter((f): f is SlackFileSummary => f !== null);\n\n return {\n channel_id: channelId,\n ts: getString(msg.ts) ?? \"\",\n thread_ts: getString(msg.thread_ts),\n reply_count: getNumber(msg.reply_count),\n user: getString(msg.user),\n bot_id: getString(msg.bot_id),\n text,\n markdown: slackMrkdwnToMarkdown(text),\n blocks: Array.isArray(msg.blocks) ? (msg.blocks as unknown[]) : undefined,\n attachments: Array.isArray(msg.attachments) ? (msg.attachments as unknown[]) : undefined,\n files: files.length > 0 ? files : undefined,\n reactions: Array.isArray(msg.reactions) ? (msg.reactions as unknown[]) : undefined,\n };\n}\n\nfunction toSlackFileSummary(value: unknown): SlackFileSummary | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = getString(value.id);\n if (!id) {\n return null;\n }\n return {\n id,\n name: getString(value.name),\n title: getString(value.title),\n mimetype: getString(value.mimetype),\n filetype: getString(value.filetype),\n mode: getString(value.mode),\n permalink: getString(value.permalink),\n url_private: getString(value.url_private),\n url_private_download: getString(value.url_private_download),\n size: getNumber(value.size),\n };\n}\n",
|
|
60
60
|
"import type { SlackApiClient, SlackAuth } from \"./client.ts\";\nimport type { CompactSlackMessage } from \"./messages.ts\";\nimport { buildSlackSearchQuery } from \"./search-query.ts\";\nimport { searchFilesRaw, searchMessagesRaw } from \"./search-raw.ts\";\nimport { searchFilesInChannelsFallback, searchFilesViaSearchApi } from \"./search-files.ts\";\nimport { searchMessagesInChannelsFallback, searchMessagesViaSearchApi } from \"./search-messages.ts\";\n\nexport type SearchKind = \"messages\" | \"files\" | \"all\";\nexport type ContentType = \"any\" | \"text\" | \"image\" | \"snippet\" | \"file\";\n\nexport type SearchOptions = {\n workspace_url?: string;\n query: string;\n kind: SearchKind;\n channels?: string[];\n user?: string; // @name, name, or U...\n after?: string; // YYYY-MM-DD\n before?: string; // YYYY-MM-DD\n content_type?: ContentType;\n limit?: number;\n max_content_chars?: number;\n download?: boolean;\n};\n\nexport type SearchResult = {\n messages?: Omit<CompactSlackMessage, \"channel_id\" | \"thread_ts\">[];\n files?: { title?: string; mimetype?: string; mode?: string; path: string }[];\n};\n\nexport async function searchSlack(input: {\n client: SlackApiClient;\n auth: SlackAuth;\n options: SearchOptions;\n}): Promise<SearchResult> {\n const limit = Math.min(Math.max(input.options.limit ?? 20, 1), 200);\n const maxContentChars = input.options.max_content_chars ?? 4000;\n const contentType = input.options.content_type ?? \"any\";\n const download = input.options.download ?? true;\n if (!download && (input.options.kind === \"files\" || input.options.kind === \"all\")) {\n throw new Error(\"File search requires downloads enabled (so agents get local file paths).\");\n }\n\n const slackQuery = await buildSlackSearchQuery(input.client, {\n query: input.options.query,\n channels: input.options.channels,\n user: input.options.user,\n after: input.options.after,\n before: input.options.before,\n });\n\n const out: SearchResult = {};\n\n if (input.options.kind === \"messages\" || input.options.kind === \"all\") {\n if (input.options.channels?.length) {\n out.messages = await searchMessagesInChannelsFallback(input.client, {\n auth: input.auth,\n query: input.options.query,\n channels: input.options.channels,\n user: input.options.user,\n after: input.options.after,\n before: input.options.before,\n limit,\n maxContentChars,\n contentType,\n download,\n });\n } else {\n const rawMatches = await searchMessagesRaw(input.client, { query: slackQuery, limit });\n out.messages = await searchMessagesViaSearchApi(input.client, {\n auth: input.auth,\n workspace_url: input.options.workspace_url,\n slack_query: slackQuery,\n limit,\n maxContentChars,\n contentType,\n download,\n rawMatches,\n });\n }\n }\n\n if (input.options.kind === \"files\" || input.options.kind === \"all\") {\n if (input.options.channels?.length) {\n out.files = await searchFilesInChannelsFallback(input.client, {\n auth: input.auth,\n query: input.options.query,\n channels: input.options.channels,\n user: input.options.user,\n after: input.options.after,\n before: input.options.before,\n limit,\n contentType,\n });\n } else {\n const rawMatches = await searchFilesRaw(input.client, { query: slackQuery, limit });\n out.files = await searchFilesViaSearchApi(input.client, {\n auth: input.auth,\n slack_query: slackQuery,\n limit,\n contentType,\n rawMatches,\n });\n }\n }\n\n return out;\n}\n",
|
|
61
61
|
"import type { Command } from \"commander\";\nimport type { CliContext } from \"./context.ts\";\nimport { pruneEmpty } from \"../lib/compact-json.ts\";\nimport { searchSlack } from \"../slack/search.ts\";\n\ntype SearchCommandOptions = {\n workspace?: string;\n channel?: string[] | string;\n user?: string;\n after?: string;\n before?: string;\n contentType?: string;\n limit?: string;\n maxContentChars?: string;\n};\n\nfunction addSearchOptions(cmd: Command): Command {\n return cmd\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when searching across multiple workspaces)\",\n )\n .option(\"--channel <channel...>\", \"Channel filter (#name, name, or id). Repeatable.\")\n .option(\"--user <user>\", \"User filter (@name, name, or user id U...)\")\n .option(\"--after <date>\", \"Only results after YYYY-MM-DD\")\n .option(\"--before <date>\", \"Only results before YYYY-MM-DD\")\n .option(\n \"--content-type <type>\",\n \"Filter content type: any|text|image|snippet|file (default any)\",\n )\n .option(\"--limit <n>\", \"Max results (default 20)\", \"20\")\n .option(\n \"--max-content-chars <n>\",\n \"Max message content characters (default 4000, -1 for unlimited)\",\n \"4000\",\n );\n}\n\nasync function runSearch(input: {\n ctx: CliContext;\n kind: \"messages\" | \"files\" | \"all\";\n query: string;\n options: SearchCommandOptions;\n}): Promise<void> {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options.workspace);\n const channels = Array.isArray(input.options.channel)\n ? input.options.channel\n : input.options.channel\n ? [input.options.channel]\n : [];\n\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({ workspaceUrl, channels });\n\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client, auth, workspace_url } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const limit = Number.parseInt(input.options.limit || \"20\", 10);\n const maxContentChars = Number.parseInt(input.options.maxContentChars || \"4000\", 10);\n const contentType = input.ctx.parseContentType(input.options.contentType);\n return await searchSlack({\n client,\n auth,\n options: {\n workspace_url: workspace_url ?? workspaceUrl ?? \"\",\n query: input.query,\n kind: input.kind,\n channels,\n user: input.options.user,\n after: input.options.after,\n before: input.options.before,\n content_type: contentType,\n limit,\n max_content_chars: maxContentChars,\n download: true,\n },\n });\n },\n });\n\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n}\n\nexport function registerSearchCommand(input: { program: Command; ctx: CliContext }): void {\n const searchCmd = input.program\n .command(\"search\")\n .description(\"Search Slack messages and files (token-efficient JSON)\");\n\n const create = (spec: {\n kind: \"messages\" | \"files\" | \"all\";\n name: string;\n desc: string;\n }): Command =>\n addSearchOptions(searchCmd.command(spec.name).description(spec.desc))\n .argument(\"<query>\", \"Search query\")\n .action(async (...args) => {\n const [query, options] = args as [string, SearchCommandOptions];\n try {\n await runSearch({ ctx: input.ctx, kind: spec.kind, query, options });\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n create({ kind: \"all\", name: \"all\", desc: \"Search messages and files\" });\n create({ kind: \"messages\", name: \"messages\", desc: \"Search messages\" });\n create({ kind: \"files\", name: \"files\", desc: \"Search files\" });\n}\n",
|
|
62
|
+
"import type { SlackApiClient } from \"./client.ts\";\nimport { renderSlackMessageContent } from \"./render.ts\";\n\nexport type LaterItem = {\n channel_id: string;\n channel_name?: string;\n ts: string;\n state: string;\n date_saved: number;\n date_completed?: number;\n message?: {\n author?: { user_id?: string; bot_id?: string };\n content?: string;\n thread_ts?: string;\n reply_count?: number;\n };\n};\n\nexport async function fetchLaterItems(\n client: SlackApiClient,\n options?: {\n state?: \"in_progress\" | \"archived\" | \"completed\" | \"all\";\n limit?: number;\n maxBodyChars?: number;\n countsOnly?: boolean;\n cursor?: string;\n },\n): Promise<{\n counts: {\n in_progress: number;\n archived: number;\n completed: number;\n total: number;\n };\n items: LaterItem[];\n next_cursor?: string;\n}> {\n const stateFilter = options?.state ?? \"in_progress\";\n const limit = options?.limit ?? 20;\n const maxBodyChars = options?.maxBodyChars ?? 4000;\n const countsOnly = options?.countsOnly ?? false;\n\n let currentCursor = options?.cursor;\n let allRawItems: Record<string, unknown>[] = [];\n let counts: Record<string, unknown> = {};\n let nextCursor: string | undefined;\n\n while (true) {\n const resp = await client.api(\"saved.list\", {\n limit: 50,\n cursor: currentCursor,\n });\n\n if (!currentCursor) {\n counts = isRecord(resp.counts) ? resp.counts : {};\n }\n\n const pageRawItems = asArray(resp.saved_items).filter(isRecord);\n allRawItems.push(...pageRawItems);\n\n const meta = isRecord(resp.response_metadata) ? resp.response_metadata : null;\n nextCursor = meta ? getString(meta.next_cursor) : undefined;\n\n if (countsOnly) {\n break;\n }\n\n let filtered = allRawItems.filter((item) => getString(item.item_type) === \"message\");\n if (stateFilter !== \"all\") {\n filtered = filtered.filter((item) => getString(item.state) === stateFilter);\n }\n\n if (filtered.length >= limit || !nextCursor) {\n break;\n }\n currentCursor = nextCursor;\n }\n\n const result = {\n counts: {\n in_progress: getNumber(counts.uncompleted_count) ?? 0,\n archived: getNumber(counts.archived_count) ?? 0,\n completed: getNumber(counts.completed_count) ?? 0,\n total: getNumber(counts.total_count) ?? 0,\n },\n items: [] as LaterItem[],\n next_cursor: nextCursor,\n };\n\n if (countsOnly) {\n return result;\n }\n\n // Filter to messages only, then by state\n let filtered = allRawItems.filter((item) => getString(item.item_type) === \"message\");\n if (stateFilter !== \"all\") {\n filtered = filtered.filter((item) => getString(item.state) === stateFilter);\n }\n\n // Limit results\n filtered = filtered.slice(0, limit);\n\n // Hydrate items in parallel\n result.items = await Promise.all(\n filtered.map(async (item) => {\n const channelId = getString(item.item_id) ?? \"\";\n const ts = getString(item.ts) ?? \"\";\n const state = getString(item.state) ?? \"in_progress\";\n const dateSaved = getNumber(item.date_created) ?? 0;\n const dateCompleted = getNumber(item.date_completed);\n\n let channelName: string | undefined;\n let message: LaterItem[\"message\"];\n\n // Resolve channel name\n try {\n const info = await client.api(\"conversations.info\", {\n channel: channelId,\n });\n const ch = isRecord(info.channel) ? info.channel : null;\n if (ch) {\n channelName = getString(ch.name) ?? getString(ch.name_normalized) ?? undefined;\n\n // For DMs, resolve user display name\n if (ch.is_im && !channelName) {\n const userId = getString(ch.user);\n if (userId) {\n try {\n const userInfo = await client.api(\"users.info\", { user: userId });\n const u = isRecord(userInfo.user) ? userInfo.user : null;\n const profile = u && isRecord(u.profile) ? u.profile : null;\n channelName =\n getString(profile?.display_name) ||\n getString(u?.real_name) ||\n getString(u?.name) ||\n undefined;\n } catch {\n // ignore\n }\n }\n }\n }\n } catch {\n // ignore\n }\n\n // Fetch the actual message\n if (ts) {\n try {\n const history = await client.api(\"conversations.history\", {\n channel: channelId,\n latest: ts,\n inclusive: true,\n limit: 1,\n });\n const msgs = asArray(history.messages).filter(isRecord);\n const msg = msgs.find((m) => getString(m.ts) === ts);\n if (msg) {\n const rendered = renderSlackMessageContent(msg);\n const content =\n maxBodyChars >= 0 && rendered.length > maxBodyChars\n ? `${rendered.slice(0, maxBodyChars)}\\n…`\n : rendered;\n\n message = {\n author:\n getString(msg.user) || getString(msg.bot_id)\n ? {\n user_id: getString(msg.user) ?? undefined,\n bot_id: getString(msg.bot_id) ?? undefined,\n }\n : undefined,\n content: content || undefined,\n thread_ts: getString(msg.thread_ts) ?? undefined,\n reply_count: getNumber(msg.reply_count) ?? undefined,\n };\n }\n } catch {\n // ignore — message may have been deleted\n }\n }\n\n return {\n channel_id: channelId,\n channel_name: channelName,\n ts,\n state,\n date_saved: dateSaved,\n date_completed: dateCompleted && dateCompleted > 0 ? dateCompleted : undefined,\n message,\n } satisfies LaterItem;\n }),\n );\n\n return result;\n}\n\n/**\n * Mark a saved item as completed, archived, or reopen it.\n * Uses multipart/form-data with the `mark` param (not `state`).\n * Valid `mark` values: completed, uncompleted, archived, unarchived.\n */\nexport async function updateLaterMark(\n client: SlackApiClient,\n input: {\n channelId: string;\n ts: string;\n mark: \"completed\" | \"uncompleted\" | \"archived\" | \"unarchived\";\n },\n): Promise<void> {\n await client.apiMultipart(\"saved.update\", {\n item_id: input.channelId,\n item_type: \"message\",\n ts: input.ts,\n mark: input.mark,\n });\n}\n\nexport async function saveLater(\n client: SlackApiClient,\n input: { channelId: string; ts: string },\n): Promise<void> {\n await client.api(\"saved.add\", {\n item_id: input.channelId,\n item_type: \"message\",\n ts: input.ts,\n });\n}\n\nexport async function removeLater(\n client: SlackApiClient,\n input: { channelId: string; ts: string },\n): Promise<void> {\n await client.api(\"saved.delete\", {\n item_id: input.channelId,\n item_type: \"message\",\n ts: input.ts,\n });\n}\n\nexport async function setLaterReminder(\n client: SlackApiClient,\n input: { channelId: string; ts: string; dateDue: number },\n): Promise<void> {\n await client.apiMultipart(\"saved.update\", {\n item_id: input.channelId,\n item_type: \"message\",\n ts: input.ts,\n date_due: String(input.dateDue),\n });\n}\n\nexport function parseReminderDuration(input: string): number {\n const now = Math.floor(Date.now() / 1000);\n const trimmed = input.trim().toLowerCase();\n\n // Relative durations: 30m, 1h, 3h, 2d, 1.5h\n const relMatch = trimmed.match(\n /^(\\d+(?:\\.\\d+)?)\\s*(m|min|mins|minutes?|h|hr|hrs|hours?|d|days?)$/,\n );\n if (relMatch) {\n const amount = Number.parseFloat(relMatch[1]!);\n const unit = relMatch[2]!.charAt(0);\n if (unit === \"m\") {\n return now + amount * 60;\n }\n if (unit === \"h\") {\n return now + amount * 3600;\n }\n if (unit === \"d\") {\n return now + amount * 86400;\n }\n }\n\n // Named times\n const tomorrow9am = getNext9am(1);\n if (trimmed === \"tomorrow\") {\n return tomorrow9am;\n }\n\n const dayNames = [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"];\n const dayIndex = dayNames.indexOf(trimmed);\n if (dayIndex >= 0) {\n const today = new Date();\n const currentDay = today.getDay();\n let daysUntil = dayIndex - currentDay;\n if (daysUntil <= 0) {\n daysUntil += 7;\n }\n return getNext9am(daysUntil);\n }\n\n // Unix timestamp passthrough\n const asNum = Number(trimmed);\n if (!Number.isNaN(asNum) && asNum > 1000000000) {\n return asNum;\n }\n\n throw new Error(\n `Invalid duration: \"${input}\". Use: 30m, 1h, 3h, 2d, tomorrow, monday, or a unix timestamp.`,\n );\n}\n\nfunction getNext9am(daysFromNow: number): number {\n const date = new Date();\n date.setDate(date.getDate() + daysFromNow);\n date.setHours(9, 0, 0, 0);\n return Math.floor(date.getTime() / 1000);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction asArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction getString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction getNumber(value: unknown): number | undefined {\n return typeof value === \"number\" ? value : undefined;\n}\n",
|
|
63
|
+
"import type { Command } from \"commander\";\nimport type { CliContext } from \"./context.ts\";\nimport {\n setLaterReminder,\n fetchLaterItems,\n parseReminderDuration,\n removeLater,\n saveLater,\n updateLaterMark,\n} from \"../slack/later.ts\";\nimport { pruneEmpty } from \"../lib/compact-json.ts\";\nimport { parseMsgTarget } from \"./targets.ts\";\nimport { resolveChannelId } from \"../slack/channels.ts\";\n\nfunction resolveTargetRef(input: {\n targetInput: string;\n options: { workspace?: string; ts?: string };\n ctx: CliContext;\n}): {\n getChannelAndTs: (client: {\n api: (method: string, params?: Record<string, unknown>) => Promise<unknown>;\n }) => Promise<{ channelId: string; ts: string }>;\n workspaceUrl: string | undefined;\n} {\n const { targetInput, options, ctx } = input;\n const target = parseMsgTarget(targetInput);\n\n if (target.kind === \"url\") {\n return {\n workspaceUrl: target.ref.workspace_url,\n getChannelAndTs: async () => ({\n channelId: target.ref.channel_id,\n ts: target.ref.message_ts,\n }),\n };\n }\n\n const workspaceUrl = ctx.effectiveWorkspaceUrl(options.workspace);\n const ts = options.ts?.trim();\n if (!ts) {\n throw new Error('When targeting a channel, you must pass --ts \"<seconds>.<micros>\"');\n }\n\n return {\n workspaceUrl,\n getChannelAndTs: async (client) => {\n const channelId = await resolveChannelId(\n client as Parameters<typeof resolveChannelId>[0],\n target.kind === \"channel\" ? target.channel : targetInput,\n );\n return { channelId, ts };\n },\n };\n}\n\nexport function registerLaterCommand(input: { program: Command; ctx: CliContext }): void {\n const laterCmd = input.program\n .command(\"later\")\n .description(\"Manage saved-for-later messages (Slack's Later tab)\");\n\n laterCmd\n .command(\"list\", { isDefault: true })\n .description(\"List saved-for-later messages\")\n .option(\"--workspace <url>\", \"Workspace URL (defaults to your configured workspace)\")\n .option(\n \"--state <state>\",\n \"Filter by state: in_progress (default), archived, completed, all\",\n \"in_progress\",\n )\n .option(\"--limit <n>\", \"Max items to show (default 20)\", \"20\")\n .option(\n \"--max-body-chars <n>\",\n \"Max content characters per message (default 4000, -1 for unlimited)\",\n \"4000\",\n )\n .option(\"--counts-only\", \"Only show counts per state, skip message content\")\n .action(\n async (options: {\n workspace?: string;\n state?: string;\n limit?: string;\n maxBodyChars?: string;\n countsOnly?: boolean;\n }) => {\n try {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const state = parseState(options.state ?? \"in_progress\");\n\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n return fetchLaterItems(client, {\n state,\n limit: Number.parseInt(options.limit ?? \"20\", 10),\n maxBodyChars: Number.parseInt(options.maxBodyChars ?? \"4000\", 10),\n countsOnly: options.countsOnly,\n });\n },\n });\n\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n },\n );\n\n laterCmd\n .command(\"complete\")\n .description(\"Mark a saved message as completed\")\n .argument(\"<target>\", \"Slack message URL or channel ID\")\n .option(\"--workspace <url>\", \"Workspace URL\")\n .option(\"--ts <ts>\", \"Message ts (required when using channel ID)\")\n .action(async (...args) => {\n const [targetInput, options] = args as [string, { workspace?: string; ts?: string }];\n try {\n const ref = resolveTargetRef({ targetInput, options, ctx: input.ctx });\n await input.ctx.withAutoRefresh({\n workspaceUrl: ref.workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(ref.workspaceUrl);\n const { channelId, ts } = await ref.getChannelAndTs(client);\n await updateLaterMark(client, { channelId, ts, mark: \"completed\" });\n },\n });\n console.log(JSON.stringify({ ok: true }));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n laterCmd\n .command(\"archive\")\n .description(\"Archive a saved message\")\n .argument(\"<target>\", \"Slack message URL or channel ID\")\n .option(\"--workspace <url>\", \"Workspace URL\")\n .option(\"--ts <ts>\", \"Message ts (required when using channel ID)\")\n .action(async (...args) => {\n const [targetInput, options] = args as [string, { workspace?: string; ts?: string }];\n try {\n const ref = resolveTargetRef({ targetInput, options, ctx: input.ctx });\n await input.ctx.withAutoRefresh({\n workspaceUrl: ref.workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(ref.workspaceUrl);\n const { channelId, ts } = await ref.getChannelAndTs(client);\n await updateLaterMark(client, { channelId, ts, mark: \"archived\" });\n },\n });\n console.log(JSON.stringify({ ok: true }));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n laterCmd\n .command(\"reopen\")\n .description(\"Move a saved message back to in-progress\")\n .argument(\"<target>\", \"Slack message URL or channel ID\")\n .option(\"--workspace <url>\", \"Workspace URL\")\n .option(\"--ts <ts>\", \"Message ts (required when using channel ID)\")\n .action(async (...args) => {\n const [targetInput, options] = args as [string, { workspace?: string; ts?: string }];\n try {\n const ref = resolveTargetRef({ targetInput, options, ctx: input.ctx });\n await input.ctx.withAutoRefresh({\n workspaceUrl: ref.workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(ref.workspaceUrl);\n const { channelId, ts } = await ref.getChannelAndTs(client);\n // Try both uncompleted and unarchived since we don't know current state\n await Promise.allSettled([\n updateLaterMark(client, { channelId, ts, mark: \"uncompleted\" }),\n updateLaterMark(client, { channelId, ts, mark: \"unarchived\" }),\n ]);\n },\n });\n console.log(JSON.stringify({ ok: true }));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n laterCmd\n .command(\"save\")\n .description(\"Save a message for later\")\n .argument(\"<target>\", \"Slack message URL or channel ID\")\n .option(\"--workspace <url>\", \"Workspace URL\")\n .option(\"--ts <ts>\", \"Message ts (required when using channel ID)\")\n .action(async (...args) => {\n const [targetInput, options] = args as [string, { workspace?: string; ts?: string }];\n try {\n const ref = resolveTargetRef({ targetInput, options, ctx: input.ctx });\n await input.ctx.withAutoRefresh({\n workspaceUrl: ref.workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(ref.workspaceUrl);\n const { channelId, ts } = await ref.getChannelAndTs(client);\n await saveLater(client, { channelId, ts });\n },\n });\n console.log(JSON.stringify({ ok: true }));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n laterCmd\n .command(\"remove\")\n .description(\"Remove a message from Later entirely\")\n .argument(\"<target>\", \"Slack message URL or channel ID\")\n .option(\"--workspace <url>\", \"Workspace URL\")\n .option(\"--ts <ts>\", \"Message ts (required when using channel ID)\")\n .action(async (...args) => {\n const [targetInput, options] = args as [string, { workspace?: string; ts?: string }];\n try {\n const ref = resolveTargetRef({ targetInput, options, ctx: input.ctx });\n await input.ctx.withAutoRefresh({\n workspaceUrl: ref.workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(ref.workspaceUrl);\n const { channelId, ts } = await ref.getChannelAndTs(client);\n await removeLater(client, { channelId, ts });\n },\n });\n console.log(JSON.stringify({ ok: true }));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n laterCmd\n .command(\"remind\")\n .description(\"Set a reminder for a saved message\")\n .argument(\"<target>\", \"Slack message URL or channel ID\")\n .requiredOption(\"--in <duration>\", \"When to remind: 30m, 1h, 3h, 2d, tomorrow, monday, etc.\")\n .option(\"--workspace <url>\", \"Workspace URL\")\n .option(\"--ts <ts>\", \"Message ts (required when using channel ID)\")\n .action(async (...args) => {\n const [targetInput, options] = args as [\n string,\n { in: string; workspace?: string; ts?: string },\n ];\n try {\n const ref = resolveTargetRef({ targetInput, options, ctx: input.ctx });\n const reminderTime = parseReminderDuration(options.in);\n\n await input.ctx.withAutoRefresh({\n workspaceUrl: ref.workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(ref.workspaceUrl);\n const { channelId, ts } = await ref.getChannelAndTs(client);\n await setLaterReminder(client, { channelId, ts, dateDue: reminderTime });\n },\n });\n\n console.log(\n JSON.stringify({\n ok: true,\n remind_at: reminderTime,\n }),\n );\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n}\n\nfunction parseState(value: string): \"in_progress\" | \"archived\" | \"completed\" | \"all\" {\n const v = value.toLowerCase().trim();\n if (v === \"in_progress\" || v === \"in-progress\" || v === \"active\" || v === \"open\") {\n return \"in_progress\";\n }\n if (v === \"archived\" || v === \"archive\") {\n return \"archived\";\n }\n if (v === \"completed\" || v === \"complete\" || v === \"done\") {\n return \"completed\";\n }\n if (v === \"all\") {\n return \"all\";\n }\n return \"in_progress\";\n}\n",
|
|
64
|
+
"import type { SlackApiClient } from \"./client.ts\";\nimport { renderSlackMessageContent } from \"./render.ts\";\n\nexport type UnreadChannel = {\n channel_id: string;\n channel_name?: string;\n channel_type: \"channel\" | \"dm\" | \"mpim\" | \"group\";\n unread_count: number;\n mention_count: number;\n messages?: UnreadMessage[];\n};\n\nexport type UnreadMessage = {\n ts: string;\n author?: { user_id?: string; bot_id?: string };\n content?: string;\n thread_ts?: string;\n reply_count?: number;\n};\n\ntype ClientCountsEntry = {\n id: string;\n has_unreads?: boolean;\n unread_count?: number;\n unread_count_display?: number;\n mention_count?: number;\n latest?: string;\n last_read?: string;\n};\n\nexport async function fetchUnreads(\n client: SlackApiClient,\n options?: {\n includeMessages?: boolean;\n maxMessagesPerChannel?: number;\n maxBodyChars?: number;\n skipSystemMessages?: boolean;\n },\n): Promise<{\n channels: UnreadChannel[];\n threads: {\n has_unreads: boolean;\n mention_count: number;\n } | null;\n}> {\n const includeMessages = options?.includeMessages ?? true;\n const maxMessages = options?.maxMessagesPerChannel ?? 10;\n const maxBodyChars = options?.maxBodyChars ?? 4000;\n const skipSystem = options?.skipSystemMessages ?? true;\n\n const resp = await client.api(\"client.counts\", {\n thread_count_by_channel: true,\n });\n\n const channels = asArray(resp.channels).filter(isRecord) as unknown as ClientCountsEntry[];\n const mpims = asArray(resp.mpims).filter(isRecord) as unknown as ClientCountsEntry[];\n const ims = asArray(resp.ims).filter(isRecord) as unknown as ClientCountsEntry[];\n\n const allEntries = [\n ...channels.map((c) => ({ ...c, type: \"channel\" as const })),\n ...mpims.map((c) => ({ ...c, type: \"mpim\" as const })),\n ...ims.map((c) => ({ ...c, type: \"dm\" as const })),\n ];\n\n const withUnreads = allEntries.filter((c) => c.has_unreads);\n\n // Resolve channel info and fetch messages in parallel\n const channelInfos = await Promise.all(\n withUnreads.map(async (entry) => {\n // 1. Concurrently fetch channel info & user info (if DM)\n const channelInfoPromise = (async () => {\n let name: string | undefined;\n let { type } = entry;\n try {\n const info = await client.api(\"conversations.info\", {\n channel: entry.id,\n });\n const ch = isRecord(info.channel) ? info.channel : null;\n if (ch) {\n name = getString(ch.name) ?? getString(ch.name_normalized) ?? undefined;\n if (ch.is_im) {\n type = \"dm\";\n const userId = getString(ch.user);\n if (userId && !name) {\n try {\n const userInfo = await client.api(\"users.info\", { user: userId });\n const u = isRecord(userInfo.user) ? userInfo.user : null;\n const profile = u && isRecord(u.profile) ? u.profile : null;\n name =\n getString(profile?.display_name) ||\n getString(u?.real_name) ||\n getString(u?.name) ||\n undefined;\n } catch {\n // ignore\n }\n }\n } else if (ch.is_mpim) {\n type = \"mpim\";\n } else if (ch.is_group || ch.is_private) {\n type = \"group\";\n } else {\n type = \"channel\";\n }\n }\n } catch {\n // ignore - name will remain undefined\n }\n return { name, type };\n })();\n\n // 2. Concurrently fetch message history\n const historyPromise = (async () => {\n let messages: UnreadMessage[] | undefined;\n let unreadCount =\n entry.unread_count_display ?? entry.unread_count ?? (entry.has_unreads ? 1 : 0);\n\n if (includeMessages && entry.last_read) {\n try {\n const history = await client.api(\"conversations.history\", {\n channel: entry.id,\n oldest: entry.last_read,\n limit: maxMessages,\n inclusive: false,\n });\n let msgs = asArray(history.messages).filter(isRecord);\n if (skipSystem) {\n msgs = msgs.filter((m) => {\n const subtype = getString(m.subtype);\n if (!subtype) {\n return true;\n }\n const systemSubtypes = [\n \"channel_join\",\n \"channel_leave\",\n \"channel_topic\",\n \"channel_purpose\",\n \"channel_name\",\n \"channel_archive\",\n \"channel_unarchive\",\n \"group_join\",\n \"group_leave\",\n \"group_topic\",\n \"group_purpose\",\n \"group_name\",\n \"group_archive\",\n \"group_unarchive\",\n ];\n return !systemSubtypes.includes(subtype);\n });\n }\n\n // If API didn't provide a count, infer from messages fetched\n if (entry.unread_count_display === undefined && entry.unread_count === undefined) {\n unreadCount = msgs.length;\n if (history.has_more) {\n unreadCount = Math.max(unreadCount, 2);\n }\n }\n\n messages = msgs.map((m) => {\n const rendered = renderSlackMessageContent(m);\n const content =\n maxBodyChars >= 0 && rendered.length > maxBodyChars\n ? `${rendered.slice(0, maxBodyChars)}\\n...`\n : rendered;\n\n return {\n ts: getString(m.ts) ?? \"\",\n author:\n getString(m.user) || getString(m.bot_id)\n ? {\n user_id: getString(m.user) ?? undefined,\n bot_id: getString(m.bot_id) ?? undefined,\n }\n : undefined,\n content: content || undefined,\n thread_ts: getString(m.thread_ts) ?? undefined,\n reply_count: getNumber(m.reply_count) ?? undefined,\n };\n });\n\n // Sort chronologically (oldest first)\n messages.sort((a, b) => Number.parseFloat(a.ts) - Number.parseFloat(b.ts));\n } catch {\n // ignore\n }\n }\n return { messages, unreadCount };\n })();\n\n // 3. Await both sets of network requests at the same time\n const [channelData, historyData] = await Promise.all([channelInfoPromise, historyPromise]);\n\n return {\n channel_id: entry.id,\n channel_name: channelData.name,\n channel_type: channelData.type,\n unread_count: historyData.unreadCount,\n mention_count: entry.mention_count ?? 0,\n messages: historyData.messages,\n } satisfies UnreadChannel;\n }),\n );\n\n // Sort: mentions first, then by unread count\n channelInfos.sort((a, b) => {\n if (a.mention_count !== b.mention_count) {\n return b.mention_count - a.mention_count;\n }\n return b.unread_count - a.unread_count;\n });\n\n // Process thread unreads\n const threads = isRecord(resp.threads) ? resp.threads : null;\n const threadInfo = threads?.has_unreads\n ? {\n has_unreads: true,\n mention_count: (threads.mention_count as number) ?? 0,\n }\n : null;\n\n return { channels: channelInfos, threads: threadInfo };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction asArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction getString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction getNumber(value: unknown): number | undefined {\n return typeof value === \"number\" ? value : undefined;\n}\n",
|
|
65
|
+
"import type { Command } from \"commander\";\nimport type { CliContext } from \"./context.ts\";\nimport { fetchUnreads } from \"../slack/unreads.ts\";\nimport { pruneEmpty } from \"../lib/compact-json.ts\";\n\nexport function registerUnreadsCommand(input: { program: Command; ctx: CliContext }): void {\n input.program\n .command(\"unreads\")\n .description(\"Show all unread messages across channels, DMs, and threads\")\n .option(\"--workspace <url>\", \"Workspace URL (defaults to your configured workspace)\")\n .option(\"--counts-only\", \"Only show unread counts, do not fetch message content\")\n .option(\"--max-messages <n>\", \"Max unread messages to fetch per channel (default 10)\", \"10\")\n .option(\n \"--max-body-chars <n>\",\n \"Max content characters per message (default 4000, -1 for unlimited)\",\n \"4000\",\n )\n .option(\"--include-system\", \"Include system messages (joins, leaves, topic changes, etc.)\")\n .action(\n async (options: {\n workspace?: string;\n countsOnly?: boolean;\n maxMessages?: string;\n maxBodyChars?: string;\n includeSystem?: boolean;\n }) => {\n try {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n return fetchUnreads(client, {\n includeMessages: !options.countsOnly,\n maxMessagesPerChannel: Number.parseInt(options.maxMessages ?? \"10\", 10),\n maxBodyChars: Number.parseInt(options.maxBodyChars ?? \"4000\", 10),\n skipSystemMessages: !options.includeSystem,\n });\n },\n });\n\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n },\n );\n}\n",
|
|
62
66
|
"import { execSync } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport { chmod, copyFile, mkdir, readFile, rename, rm, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { basename, join } from \"node:path\";\nimport { getAppDir } from \"./app-dir.ts\";\nimport { readJsonFile, writeJsonFile } from \"./fs.ts\";\nimport { getPackageVersion } from \"./version.ts\";\n\nconst REPO = \"stablyai/agent-slack\";\nconst CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours\n\ntype UpdateCheckCache = {\n latest_version: string;\n checked_at: number; // epoch ms\n};\n\ntype GitHubRelease = {\n tag_name: string;\n assets: { name: string; browser_download_url: string }[];\n};\n\nfunction getCachePath(): string {\n return join(getAppDir(), \"update-check.json\");\n}\n\n/**\n * Compare two semver strings. Returns:\n * negative if a < b, 0 if equal, positive if a > b\n */\nexport function compareSemver(a: string, b: string): number {\n const pa = a.replace(/^v/, \"\").split(\".\").map(Number);\n const pb = b.replace(/^v/, \"\").split(\".\").map(Number);\n for (let i = 0; i < 3; i++) {\n const diff = (pa[i] ?? 0) - (pb[i] ?? 0);\n if (diff !== 0) {\n return diff;\n }\n }\n return 0;\n}\n\n/**\n * Fetch the latest release version from GitHub.\n * Returns null on any network/API error (never throws).\n */\nexport async function fetchLatestVersion(): Promise<string | null> {\n try {\n const resp = await fetch(`https://api.github.com/repos/${REPO}/releases/latest`, {\n headers: { Accept: \"application/vnd.github+json\", \"User-Agent\": \"agent-slack-updater\" },\n signal: AbortSignal.timeout(5000),\n });\n if (!resp.ok) {\n return null;\n }\n const data = (await resp.json()) as GitHubRelease;\n return data.tag_name?.replace(/^v/, \"\") ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Check if a newer version is available. Uses a local cache to avoid\n * hitting GitHub more than once per CHECK_INTERVAL_MS.\n *\n * @param force Skip the cache and always fetch from GitHub.\n * @returns `{ current, latest, updateAvailable }` or null on error.\n */\nexport async function checkForUpdate(force = false): Promise<{\n current: string;\n latest: string;\n update_available: boolean;\n} | null> {\n const current = getPackageVersion();\n\n if (!force) {\n const cached = await readJsonFile<UpdateCheckCache>(getCachePath());\n if (cached && Date.now() - cached.checked_at < CHECK_INTERVAL_MS) {\n return {\n current,\n latest: cached.latest_version,\n update_available: compareSemver(cached.latest_version, current) > 0,\n };\n }\n }\n\n const latest = await fetchLatestVersion();\n if (!latest) {\n return null;\n }\n\n // Persist cache (best-effort, never throw)\n try {\n await writeJsonFile(getCachePath(), {\n latest_version: latest,\n checked_at: Date.now(),\n } satisfies UpdateCheckCache);\n } catch {\n // ignore\n }\n\n return {\n current,\n latest,\n update_available: compareSemver(latest, current) > 0,\n };\n}\n\nexport type InstallMethod = \"binary\" | \"npm\" | \"bun\";\n\n/**\n * Detect how agent-slack was installed so we can use the right update strategy.\n *\n * - \"npm\" → running via Node.js (npm install -g agent-slack)\n * - \"bun\" → running via Bun runtime (bun install -g agent-slack / bunx)\n * - \"binary\" → standalone compiled binary (GitHub release)\n */\nexport function detectInstallMethod(): InstallMethod {\n // Running under Bun runtime (bun install -g, bunx, bun run, etc.)\n // Note: compiled bun binaries also have process.versions.bun set,\n // so we check that the executable is actually the bun runtime itself.\n if (process.versions.bun && basename(process.execPath) === \"bun\") {\n return \"bun\";\n }\n\n // Running under Node.js (npm install -g, npx, etc.)\n const execName = basename(process.execPath);\n if ([\"node\", \"nodejs\", \"node.exe\"].includes(execName) || process.env.npm_execpath) {\n return \"npm\";\n }\n\n // Standalone compiled binary\n return \"binary\";\n}\n\n/**\n * Return the shell command a user should run to update, based on install method.\n */\nexport function getUpdateCommand(method?: InstallMethod): string {\n const m = method ?? detectInstallMethod();\n switch (m) {\n case \"npm\":\n return \"npm install -g agent-slack@latest\";\n case \"bun\":\n return \"bun install -g agent-slack@latest\";\n case \"binary\":\n return \"agent-slack update\";\n }\n}\n\n/**\n * Update via a package manager (npm or bun).\n * Spawns the package manager synchronously and returns the result.\n */\nexport function performPackageManagerUpdate(method: \"npm\" | \"bun\"): {\n success: boolean;\n message: string;\n} {\n const cmd = getUpdateCommand(method);\n try {\n execSync(cmd, { stdio: [\"inherit\", \"pipe\", \"inherit\"] });\n return { success: true, message: `Updated agent-slack via: ${cmd}` };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n return { success: false, message: `Failed to run \"${cmd}\": ${msg}` };\n }\n}\n\nfunction detectPlatformAsset(): string {\n const platform = process.platform === \"win32\" ? \"windows\" : process.platform;\n const archMap: Record<string, string> = { x64: \"x64\", arm64: \"arm64\" };\n const arch = archMap[process.arch] ?? process.arch;\n const ext = platform === \"windows\" ? \".exe\" : \"\";\n return `agent-slack-${platform}-${arch}${ext}`;\n}\n\nasync function sha256(filePath: string): Promise<string> {\n const data = await readFile(filePath);\n return createHash(\"sha256\").update(data).digest(\"hex\");\n}\n\n/**\n * Download, verify, and replace the current binary with the latest release.\n * Returns `true` on success.\n */\nexport async function performUpdate(\n latest: string,\n): Promise<{ success: boolean; message: string }> {\n const asset = detectPlatformAsset();\n const tag = `v${latest}`;\n const baseUrl = `https://github.com/${REPO}/releases/download/${tag}`;\n\n const tmp = join(tmpdir(), `agent-slack-update-${Date.now()}`);\n await mkdir(tmp, { recursive: true });\n\n const binTmp = join(tmp, asset);\n const sumsTmp = join(tmp, \"checksums-sha256.txt\");\n\n try {\n // Download binary + checksums in parallel\n const [binResp, sumsResp] = await Promise.all([\n fetch(`${baseUrl}/${asset}`, { signal: AbortSignal.timeout(120_000) }),\n fetch(`${baseUrl}/checksums-sha256.txt`, { signal: AbortSignal.timeout(30_000) }),\n ]);\n\n if (!binResp.ok) {\n return { success: false, message: `Failed to download ${asset}: HTTP ${binResp.status}` };\n }\n if (!sumsResp.ok) {\n return { success: false, message: `Failed to download checksums: HTTP ${sumsResp.status}` };\n }\n\n await writeFile(binTmp, Buffer.from(await binResp.arrayBuffer()));\n const sumsText = await sumsResp.text();\n await writeFile(sumsTmp, sumsText);\n\n // Verify checksum\n const expected = sumsText\n .split(\"\\n\")\n .map((line) => line.trim().split(/\\s+/))\n .find((parts) => parts[1] === asset)?.[0];\n\n if (!expected) {\n return { success: false, message: `Checksum not found for ${asset} in release checksums` };\n }\n\n const actual = await sha256(binTmp);\n if (actual !== expected) {\n return { success: false, message: `Checksum mismatch: expected ${expected}, got ${actual}` };\n }\n\n // Replace current binary\n const currentBin = process.execPath;\n const backupPath = `${currentBin}.bak`;\n\n // Rename current -> backup, copy new -> current, remove backup\n await rename(currentBin, backupPath);\n try {\n await copyFile(binTmp, currentBin);\n await chmod(currentBin, 0o755);\n await rm(backupPath, { force: true });\n } catch (err) {\n // Restore backup on failure\n try {\n await rename(backupPath, currentBin);\n } catch {\n // ignore restore failure\n }\n throw err;\n }\n\n return { success: true, message: `Updated agent-slack to ${latest}` };\n } finally {\n await rm(tmp, { recursive: true, force: true }).catch(() => {});\n }\n}\n\n/**\n * Background update check. Writes a notice to stderr if an update is available.\n * Swallows all errors silently. Respects the 24-hour throttle.\n * Disable with AGENT_SLACK_NO_UPDATE_CHECK=1.\n */\nexport async function backgroundUpdateCheck(): Promise<void> {\n if (process.env.AGENT_SLACK_NO_UPDATE_CHECK === \"1\") {\n return;\n }\n try {\n const result = await checkForUpdate();\n if (result?.update_available) {\n const cmd = getUpdateCommand();\n process.stderr.write(\n `\\nUpdate available: ${result.current} → ${result.latest}. Run \"${cmd}\" to upgrade.\\n`,\n );\n }\n } catch {\n // never interfere with normal operation\n }\n}\n",
|
|
63
67
|
"import type { Command } from \"commander\";\nimport {\n checkForUpdate,\n detectInstallMethod,\n getUpdateCommand,\n performPackageManagerUpdate,\n performUpdate,\n} from \"../lib/update.ts\";\nimport { pruneEmpty } from \"../lib/compact-json.ts\";\n\nexport function registerUpdateCommand(input: { program: Command }): void {\n input.program\n .command(\"update\")\n .description(\"Update agent-slack to the latest version\")\n .option(\"--check\", \"Only check for updates (don't install)\")\n .action(async (...args) => {\n const [options] = args as [{ check?: boolean }];\n const method = detectInstallMethod();\n\n try {\n const result = await checkForUpdate(true);\n\n if (!result) {\n console.error(\"Could not check for updates. Check your network connection.\");\n process.exitCode = 1;\n return;\n }\n\n if (!result.update_available) {\n console.log(\n JSON.stringify(\n pruneEmpty({ ...result, install_method: method, status: \"up_to_date\" }),\n null,\n 2,\n ),\n );\n return;\n }\n\n if (options.check) {\n console.log(\n JSON.stringify(\n pruneEmpty({\n ...result,\n install_method: method,\n update_command: getUpdateCommand(method),\n status: \"update_available\",\n }),\n null,\n 2,\n ),\n );\n return;\n }\n\n process.stderr.write(`Updating agent-slack ${result.current} → ${result.latest}...\\n`);\n\n let outcome: { success: boolean; message: string };\n if (method === \"npm\" || method === \"bun\") {\n process.stderr.write(`Detected install method: ${method}\\n`);\n outcome = performPackageManagerUpdate(method);\n } else {\n outcome = await performUpdate(result.latest);\n }\n\n if (!outcome.success) {\n console.error(outcome.message);\n process.exitCode = 1;\n return;\n }\n\n console.log(\n JSON.stringify(\n pruneEmpty({\n status: \"updated\",\n install_method: method,\n previous_version: result.current,\n new_version: result.latest,\n message: outcome.message,\n }),\n null,\n 2,\n ),\n );\n } catch (err: unknown) {\n console.error(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });\n}\n",
|
|
64
68
|
"import type { SlackApiClient } from \"./client.ts\";\nimport { asArray, getString, isRecord } from \"../lib/object-type-guards.ts\";\n\nexport type CompactSlackUser = {\n id: string;\n name?: string; // handle\n real_name?: string;\n display_name?: string;\n email?: string;\n title?: string;\n tz?: string;\n is_bot?: boolean;\n deleted?: boolean;\n dm_id?: string;\n};\n\nexport async function listUsers(\n client: SlackApiClient,\n options?: {\n limit?: number;\n cursor?: string;\n includeBots?: boolean;\n },\n): Promise<{ users: CompactSlackUser[]; next_cursor?: string }> {\n const limit = Math.min(Math.max(options?.limit ?? 200, 1), 1000);\n const includeBots = options?.includeBots ?? false;\n\n let next_cursor: string | undefined;\n const [out, dmMap] = await Promise.all([\n (async () => {\n const users: CompactSlackUser[] = [];\n let cursor = options?.cursor;\n while (users.length < limit) {\n const pageSize = Math.min(200, limit - users.length);\n const resp = await client.api(\"users.list\", { limit: pageSize, cursor });\n const members = asArray(resp.members).filter(isRecord);\n for (const m of members) {\n const id = getString(m.id);\n if (!id) {\n continue;\n }\n if (!includeBots && m.is_bot) {\n continue;\n }\n users.push(toCompactUser(m));\n if (users.length >= limit) {\n break;\n }\n }\n const meta = isRecord(resp.response_metadata) ? resp.response_metadata : null;\n const next = meta ? getString(meta.next_cursor) : undefined;\n if (!next) {\n break;\n }\n cursor = next;\n next_cursor = next;\n }\n return users;\n })(),\n fetchDmMap(client),\n ]);\n\n for (const u of out) {\n const dmId = dmMap.get(u.id);\n if (dmId) {\n u.dm_id = dmId;\n }\n }\n\n return { users: out, next_cursor };\n}\n\nexport async function getUser(client: SlackApiClient, input: string): Promise<CompactSlackUser> {\n const trimmed = input.trim();\n if (!trimmed) {\n throw new Error(\"User is empty\");\n }\n\n const userId = await resolveUserId(client, trimmed);\n if (!userId) {\n throw new Error(`Could not resolve user: ${input}`);\n }\n\n const resp = await client.api(\"users.info\", { user: userId });\n const u = isRecord(resp.user) ? resp.user : null;\n if (!u || !getString(u.id)) {\n throw new Error(\"users.info returned no user\");\n }\n return toCompactUser(u);\n}\n\nexport async function resolveUserId(client: SlackApiClient, input: string): Promise<string | null> {\n const trimmed = input.trim();\n if (/^U[A-Z0-9]{8,}$/.test(trimmed)) {\n return trimmed;\n }\n\n const looksLikeEmail = /^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$/.test(trimmed) && !trimmed.startsWith(\"@\");\n if (looksLikeEmail) {\n try {\n const byEmail = await client.api(\"users.lookupByEmail\", { email: trimmed });\n const user = isRecord(byEmail.user) ? byEmail.user : null;\n const userId = user ? getString(user.id) : undefined;\n if (userId) {\n return userId;\n }\n } catch {\n // Fallback to users.list scan below.\n }\n }\n\n const handle = trimmed.startsWith(\"@\") ? trimmed.slice(1) : trimmed;\n if (!handle) {\n return null;\n }\n\n let cursor: string | undefined;\n for (;;) {\n const resp = await client.api(\"users.list\", { limit: 200, cursor });\n const members = asArray(resp.members).filter(isRecord);\n const found = members.find((m) => {\n if (getString(m.name) === handle) {\n return true;\n }\n if (looksLikeEmail) {\n const profile = isRecord(m.profile) ? m.profile : null;\n const email = profile ? getString(profile.email) : undefined;\n return Boolean(email) && email?.toLowerCase() === trimmed.toLowerCase();\n }\n return false;\n });\n if (found) {\n const id = getString(found.id);\n if (id) {\n return id;\n }\n }\n const meta = isRecord(resp.response_metadata) ? resp.response_metadata : null;\n const next = meta ? getString(meta.next_cursor) : undefined;\n if (!next) {\n break;\n }\n cursor = next;\n }\n return null;\n}\n\nasync function fetchDmMap(client: SlackApiClient): Promise<Map<string, string>> {\n const map = new Map<string, string>();\n let cursor: string | undefined;\n for (;;) {\n const resp = await client.api(\"conversations.list\", {\n types: \"im\",\n limit: 200,\n cursor,\n });\n const channels = asArray(resp.channels).filter(isRecord);\n for (const ch of channels) {\n const id = getString(ch.id);\n const user = getString(ch.user);\n if (id && user) {\n map.set(user, id);\n }\n }\n const meta = isRecord(resp.response_metadata) ? resp.response_metadata : null;\n const next = meta ? getString(meta.next_cursor) : undefined;\n if (!next) {\n break;\n }\n cursor = next;\n }\n return map;\n}\n\nexport async function getDmChannelForUsers(\n client: SlackApiClient,\n inputs: string[],\n): Promise<{ user_ids: string[]; dm_channel_id: string; channel_type: \"dm\" | \"group_dm\" }> {\n if (!inputs || inputs.length === 0) {\n throw new Error(\"At least one user is required\");\n }\n\n if (inputs.length > 8) {\n throw new Error(\"Slack supports a maximum of 8 users in a group DM\");\n }\n\n const userIds: string[] = [];\n for (const input of inputs) {\n const trimmed = input.trim();\n if (!trimmed) {\n continue;\n }\n const userId = await resolveUserId(client, trimmed);\n if (!userId) {\n throw new Error(`Could not resolve user: ${input}`);\n }\n userIds.push(userId);\n }\n\n if (userIds.length === 0) {\n throw new Error(\"No valid users provided\");\n }\n\n const resp = await client.api(\"conversations.open\", { users: userIds.join(\",\") });\n const channel = isRecord(resp.channel) ? resp.channel : null;\n const channelId = channel ? getString(channel.id) : null;\n\n if (!channelId) {\n throw new Error(\"conversations.open returned no channel\");\n }\n\n const channelType = channelId.startsWith(\"D\") ? \"dm\" : \"group_dm\";\n\n return {\n user_ids: userIds,\n dm_channel_id: channelId,\n channel_type: channelType,\n };\n}\n\nfunction toCompactUser(u: Record<string, unknown>): CompactSlackUser {\n const profile = isRecord(u.profile) ? u.profile : {};\n return {\n id: getString(u.id) ?? \"\",\n name: getString(u.name) ?? undefined,\n real_name: getString(u.real_name) ?? getString(profile.real_name) ?? undefined,\n display_name: getString(profile.display_name) ?? undefined,\n email: getString(profile.email) ?? undefined,\n title: getString(profile.title) ?? undefined,\n tz: getString(u.tz) ?? undefined,\n is_bot: typeof u.is_bot === \"boolean\" ? u.is_bot : undefined,\n deleted: typeof u.deleted === \"boolean\" ? u.deleted : undefined,\n };\n}\n",
|
|
65
69
|
"import type { Command } from \"commander\";\nimport type { CliContext } from \"./context.ts\";\nimport { pruneEmpty } from \"../lib/compact-json.ts\";\nimport { getDmChannelForUsers, getUser, listUsers } from \"../slack/users.ts\";\n\nexport function registerUserCommand(input: { program: Command; ctx: CliContext }): void {\n const userCmd = input.program.command(\"user\").description(\"Workspace user directory\");\n\n userCmd\n .command(\"list\")\n .description(\"List users in the workspace\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .option(\"--limit <n>\", \"Max users (default 200)\", \"200\")\n .option(\"--cursor <cursor>\", \"Pagination cursor\")\n .option(\"--include-bots\", \"Include bot users\")\n .action(async (...args) => {\n const [options] = args as [\n { workspace?: string; limit: string; cursor?: string; includeBots?: boolean },\n ];\n try {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const limit = Number.parseInt(options.limit, 10);\n return await listUsers(client, {\n limit,\n cursor: options.cursor,\n includeBots: Boolean(options.includeBots),\n });\n },\n });\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n userCmd\n .command(\"get\")\n .description(\"Get a single user by id (U...) or handle (@name)\")\n .argument(\"<user>\", \"User id (U...) or @handle/handle\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .action(async (...args) => {\n const [user, options] = args as [string, { workspace?: string }];\n try {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n return await getUser(client, user);\n },\n });\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n userCmd\n .command(\"dm-open\")\n .description(\n \"Open or get a DM / group DM channel for one or more users by id (U...) or handle (@name)\",\n )\n .argument(\"<users...>\", \"One or more user ids or @handles (space-separated)\")\n .option(\"--workspace <url>\", \"Workspace URL (required if you have multiple workspaces)\")\n .action(async (...args) => {\n const [users, options] = args as [string[], { workspace?: string }];\n try {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n return await getDmChannelForUsers(client, users);\n },\n });\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n}\n",
|
|
66
70
|
"import type { SlackApiClient } from \"./client.ts\";\nimport { asArray, getString, isRecord } from \"../lib/object-type-guards.ts\";\n\nexport async function createChannel(\n client: SlackApiClient,\n input: { name: string; isPrivate?: boolean },\n): Promise<{ channel: { id: string; name: string; is_private: boolean } }> {\n const name = input.name.trim();\n if (!name) {\n throw new Error(\"Channel name is empty\");\n }\n\n const resp = await client.api(\"conversations.create\", {\n name,\n is_private: Boolean(input.isPrivate),\n });\n const channel = isRecord(resp.channel) ? resp.channel : null;\n const id = channel ? getString(channel.id) : undefined;\n const channelName = channel ? getString(channel.name) : undefined;\n const isPrivate =\n channel && typeof channel.is_private === \"boolean\"\n ? channel.is_private\n : Boolean(input.isPrivate);\n\n if (!id || !channelName) {\n throw new Error(\"conversations.create returned no channel\");\n }\n\n return {\n channel: {\n id,\n name: channelName,\n is_private: isPrivate,\n },\n };\n}\n\nexport async function inviteUsersToChannel(\n client: SlackApiClient,\n input: { channelId: string; userIds: string[] },\n): Promise<{ invited_user_ids: string[]; already_in_channel_user_ids: string[] }> {\n const invitedUserIds: string[] = [];\n const alreadyInChannelUserIds: string[] = [];\n\n for (const userId of input.userIds) {\n try {\n await client.api(\"conversations.invite\", {\n channel: input.channelId,\n users: userId,\n });\n invitedUserIds.push(userId);\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n if (message.includes(\"already_in_channel\")) {\n alreadyInChannelUserIds.push(userId);\n continue;\n }\n throw err;\n }\n }\n\n return {\n invited_user_ids: invitedUserIds,\n already_in_channel_user_ids: alreadyInChannelUserIds,\n };\n}\n\nexport function parseInviteUsersCsv(input: string): string[] {\n return Array.from(\n new Set(\n asArray(input.split(\",\"))\n .map((value) => String(value).trim())\n .filter(Boolean),\n ),\n );\n}\n\nexport function splitEmailsFromInviteTargets(input: string[]): {\n emails: string[];\n non_email_targets: string[];\n} {\n const emails: string[] = [];\n const nonEmailTargets: string[] = [];\n for (const target of input) {\n if (isLikelyEmail(target)) {\n emails.push(target);\n continue;\n }\n nonEmailTargets.push(target);\n }\n return {\n emails: Array.from(new Set(emails)),\n non_email_targets: nonEmailTargets,\n };\n}\n\nexport async function inviteExternalUsersToChannel(\n client: SlackApiClient,\n input: { channelId: string; emails: string[]; externalLimited?: boolean },\n): Promise<{ invited_emails: string[]; already_invited_emails: string[] }> {\n const invitedEmails: string[] = [];\n const alreadyInvitedEmails: string[] = [];\n\n for (const email of input.emails) {\n try {\n await client.api(\"conversations.inviteShared\", {\n channel: input.channelId,\n emails: [email],\n external_limited: input.externalLimited ?? true,\n });\n invitedEmails.push(email);\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n if (message.includes(\"already_in_channel\") || message.includes(\"already_invited\")) {\n alreadyInvitedEmails.push(email);\n continue;\n }\n throw err;\n }\n }\n\n return {\n invited_emails: invitedEmails,\n already_invited_emails: alreadyInvitedEmails,\n };\n}\n\nfunction isLikelyEmail(input: string): boolean {\n return /^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$/.test(input.trim());\n}\n",
|
|
67
|
-
"import type { Command } from \"commander\";\nimport type { CliContext } from \"./context.ts\";\nimport { pruneEmpty } from \"../lib/compact-json.ts\";\nimport {\n listAllConversations,\n listUserConversations,\n markConversation,\n resolveChannelId,\n} from \"../slack/channels.ts\";\nimport {\n createChannel,\n inviteExternalUsersToChannel,\n inviteUsersToChannel,\n parseInviteUsersCsv,\n splitEmailsFromInviteTargets,\n} from \"../slack/channel-admin.ts\";\nimport { resolveUserId } from \"../slack/users.ts\";\nimport { parseMsgTarget } from \"./targets.ts\";\n\ntype ChannelListOptions = {\n workspace?: string;\n user?: string;\n all?: boolean;\n limit: string;\n cursor?: string;\n};\n\nexport function registerChannelCommand(input: { program: Command; ctx: CliContext }): void {\n const channelCmd = input.program\n .command(\"channel\")\n .description(\"List conversations, create channels, and manage invites\");\n\n channelCmd\n .command(\"list\")\n .description(\"List conversations for a user (or current user), or all conversations\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .option(\"--user <user>\", \"User id (U...) or @handle/handle\")\n .option(\"--all\", \"List all conversations (conversations.list); incompatible with --user\")\n .option(\"--limit <n>\", \"Max conversations in one page (default 100)\", \"100\")\n .option(\"--cursor <cursor>\", \"Pagination cursor for the next page\")\n .action(async (...args) => {\n const [options] = args as [ChannelListOptions];\n try {\n if (options.all && options.user) {\n throw new Error(\"--all cannot be used with --user\");\n }\n\n const limit = Number.parseInt(options.limit, 10);\n if (!Number.isFinite(limit) || limit < 1) {\n throw new Error(`Invalid --limit value \"${options.limit}\": must be a positive integer`);\n }\n\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n if (options.all) {\n return await listAllConversations(client, {\n limit,\n cursor: options.cursor,\n excludeArchived: true,\n });\n }\n\n let userId: string | undefined;\n if (options.user) {\n const resolvedUserId = await resolveUserId(client, options.user);\n if (!resolvedUserId) {\n throw new Error(`Could not resolve user: ${options.user}`);\n }\n userId = resolvedUserId;\n }\n\n return await listUserConversations(client, {\n user: userId,\n limit,\n cursor: options.cursor,\n excludeArchived: true,\n });\n },\n });\n\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n channelCmd\n .command(\"new\")\n .description(\"Create a new channel\")\n .requiredOption(\"--name <name>\", \"Channel name\")\n .option(\"--private\", \"Create as a private channel\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .action(async (...args) => {\n const [options] = args as [{ name: string; private?: boolean; workspace?: string }];\n try {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n return await createChannel(client, {\n name: options.name,\n isPrivate: Boolean(options.private),\n });\n },\n });\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n channelCmd\n .command(\"invite\")\n .description(\"Invite users to a channel\")\n .requiredOption(\"--channel <id-or-name>\", \"Channel id/name (#general, general, C...)\")\n .requiredOption(\"--users <users>\", \"Comma-separated users (U..., @handle, handle, email)\")\n .option(\"--external\", \"Send Slack Connect external invites (email targets only)\")\n .option(\n \"--allow-external-user-invites\",\n \"For --external invites, allow invitees to invite additional users\",\n )\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .action(async (...args) => {\n const [options] = args as [\n {\n channel: string;\n users: string;\n external?: boolean;\n allowExternalUserInvites?: boolean;\n workspace?: string;\n },\n ];\n try {\n if (options.allowExternalUserInvites && !options.external) {\n throw new Error(\"--allow-external-user-invites requires --external\");\n }\n\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [options.channel],\n });\n\n const userInputs = parseInviteUsersCsv(options.users);\n if (userInputs.length === 0) {\n throw new Error('No users provided. Pass --users \"U01...,@alice,bob@example.com\"');\n }\n\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, options.channel);\n\n if (options.external) {\n const split = splitEmailsFromInviteTargets(userInputs);\n if (split.emails.length === 0) {\n throw new Error(\n 'External invites require email targets in --users, e.g. --users \"alice@example.com,bob@example.com\"',\n );\n }\n const externalLimited = !options.allowExternalUserInvites;\n const inviteResult = await inviteExternalUsersToChannel(client, {\n channelId,\n emails: split.emails,\n externalLimited,\n });\n return {\n channel_id: channelId,\n external: true,\n external_limited: externalLimited,\n invited_emails: inviteResult.invited_emails,\n already_invited_emails: inviteResult.already_invited_emails,\n invalid_external_targets: split.non_email_targets,\n };\n }\n\n const resolvedUserIds: string[] = [];\n const unresolvedUsers: string[] = [];\n for (const userInput of userInputs) {\n const userId = await resolveUserId(client, userInput);\n if (!userId) {\n unresolvedUsers.push(userInput);\n continue;\n }\n resolvedUserIds.push(userId);\n }\n\n const inviteResult = await inviteUsersToChannel(client, {\n channelId,\n userIds: resolvedUserIds,\n });\n return {\n channel_id: channelId,\n invited_user_ids: inviteResult.invited_user_ids,\n already_in_channel_user_ids: inviteResult.already_in_channel_user_ids,\n unresolved_users: unresolvedUsers,\n };\n },\n });\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n channelCmd\n .command(\"mark\")\n .description(\"Mark a channel/DM as read up to a given message\")\n .argument(\"<target>\", \"Slack message URL, #channel, or channel ID\")\n .option(\"--ts <ts>\", \"Message ts to mark as read (required when target is a channel name/ID)\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .action(async (...args) => {\n const [targetArg, options] = args as [string, { ts?: string; workspace?: string }];\n try {\n const target = parseMsgTarget(targetArg);\n let channelId: string;\n let ts: string;\n let workspaceUrl: string | undefined;\n\n if (target.kind === \"url\") {\n if (options.workspace) {\n throw new Error(\n \"--workspace cannot be used with a URL target; the workspace is derived from the URL\",\n );\n }\n channelId = target.ref.channel_id;\n ts = options.ts ?? target.ref.message_ts;\n workspaceUrl = input.ctx.effectiveWorkspaceUrl(target.ref.workspace_url);\n } else if (target.kind === \"channel\") {\n if (!options.ts) {\n throw new Error(\"--ts is required when target is a channel name or ID\");\n }\n ({ ts } = options);\n workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n channelId = target.channel;\n } else {\n throw new Error(\"User targets are not supported for channel mark\");\n }\n\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [channelId],\n });\n\n const resolvedId = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const resolved = await resolveChannelId(client, channelId);\n await markConversation(client, { channelId: resolved, ts });\n return resolved;\n },\n });\n\n console.log(JSON.stringify({ ok: true, channel: resolvedId, ts }, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n}\n"
|
|
71
|
+
"import type { Command } from \"commander\";\nimport type { CliContext } from \"./context.ts\";\nimport { pruneEmpty } from \"../lib/compact-json.ts\";\nimport {\n listAllConversations,\n listUserConversations,\n markConversation,\n resolveChannelId,\n} from \"../slack/channels.ts\";\nimport {\n createChannel,\n inviteExternalUsersToChannel,\n inviteUsersToChannel,\n parseInviteUsersCsv,\n splitEmailsFromInviteTargets,\n} from \"../slack/channel-admin.ts\";\nimport { resolveUserId } from \"../slack/users.ts\";\nimport { parseMsgTarget } from \"./targets.ts\";\n\ntype ChannelListOptions = {\n workspace?: string;\n user?: string;\n all?: boolean;\n limit: string;\n cursor?: string;\n};\n\nexport function registerChannelCommand(input: { program: Command; ctx: CliContext }): void {\n const channelCmd = input.program\n .command(\"channel\")\n .description(\"List conversations, create channels, and manage invites\");\n\n channelCmd\n .command(\"list\")\n .description(\"List conversations for a user (or current user), or all conversations\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .option(\"--user <user>\", \"User id (U...) or @handle/handle\")\n .option(\"--all\", \"List all conversations (conversations.list); incompatible with --user\")\n .option(\"--limit <n>\", \"Max conversations in one page (default 100)\", \"100\")\n .option(\"--cursor <cursor>\", \"Pagination cursor for the next page\")\n .action(async (...args) => {\n const [options] = args as [ChannelListOptions];\n try {\n if (options.all && options.user) {\n throw new Error(\"--all cannot be used with --user\");\n }\n\n const limit = Number.parseInt(options.limit, 10);\n if (!Number.isFinite(limit) || limit < 1) {\n throw new Error(`Invalid --limit value \"${options.limit}\": must be a positive integer`);\n }\n\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n if (options.all) {\n return await listAllConversations(client, {\n limit,\n cursor: options.cursor,\n excludeArchived: true,\n });\n }\n\n let userId: string | undefined;\n if (options.user) {\n const resolvedUserId = await resolveUserId(client, options.user);\n if (!resolvedUserId) {\n throw new Error(`Could not resolve user: ${options.user}`);\n }\n userId = resolvedUserId;\n }\n\n return await listUserConversations(client, {\n user: userId,\n limit,\n cursor: options.cursor,\n excludeArchived: true,\n });\n },\n });\n\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n channelCmd\n .command(\"new\")\n .description(\"Create a new channel\")\n .requiredOption(\"--name <name>\", \"Channel name\")\n .option(\"--private\", \"Create as a private channel\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .action(async (...args) => {\n const [options] = args as [{ name: string; private?: boolean; workspace?: string }];\n try {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n return await createChannel(client, {\n name: options.name,\n isPrivate: Boolean(options.private),\n });\n },\n });\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n channelCmd\n .command(\"invite\")\n .description(\"Invite users to a channel\")\n .requiredOption(\"--channel <id-or-name>\", \"Channel id/name (#general, general, C...)\")\n .requiredOption(\"--users <users>\", \"Comma-separated users (U..., @handle, handle, email)\")\n .option(\"--external\", \"Send Slack Connect external invites (email targets only)\")\n .option(\n \"--allow-external-user-invites\",\n \"For --external invites, allow invitees to invite additional users\",\n )\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .action(async (...args) => {\n const [options] = args as [\n {\n channel: string;\n users: string;\n external?: boolean;\n allowExternalUserInvites?: boolean;\n workspace?: string;\n },\n ];\n try {\n if (options.allowExternalUserInvites && !options.external) {\n throw new Error(\"--allow-external-user-invites requires --external\");\n }\n\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [options.channel],\n });\n\n const userInputs = parseInviteUsersCsv(options.users);\n if (userInputs.length === 0) {\n throw new Error('No users provided. Pass --users \"U01...,@alice,bob@example.com\"');\n }\n\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, options.channel);\n\n if (options.external) {\n const split = splitEmailsFromInviteTargets(userInputs);\n if (split.emails.length === 0) {\n throw new Error(\n 'External invites require email targets in --users, e.g. --users \"alice@example.com,bob@example.com\"',\n );\n }\n const externalLimited = !options.allowExternalUserInvites;\n const inviteResult = await inviteExternalUsersToChannel(client, {\n channelId,\n emails: split.emails,\n externalLimited,\n });\n return {\n channel_id: channelId,\n external: true,\n external_limited: externalLimited,\n invited_emails: inviteResult.invited_emails,\n already_invited_emails: inviteResult.already_invited_emails,\n invalid_external_targets: split.non_email_targets,\n };\n }\n\n const resolvedUserIds: string[] = [];\n const unresolvedUsers: string[] = [];\n for (const userInput of userInputs) {\n const userId = await resolveUserId(client, userInput);\n if (!userId) {\n unresolvedUsers.push(userInput);\n continue;\n }\n resolvedUserIds.push(userId);\n }\n\n const inviteResult = await inviteUsersToChannel(client, {\n channelId,\n userIds: resolvedUserIds,\n });\n return {\n channel_id: channelId,\n invited_user_ids: inviteResult.invited_user_ids,\n already_in_channel_user_ids: inviteResult.already_in_channel_user_ids,\n unresolved_users: unresolvedUsers,\n };\n },\n });\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n channelCmd\n .command(\"mark\")\n .description(\"Mark a channel/DM as read up to a given message\")\n .argument(\"<target>\", \"Slack message URL, #channel, or channel ID\")\n .option(\"--ts <ts>\", \"Message ts to mark as read (required when target is a channel name/ID)\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .action(async (...args) => {\n const [targetArg, options] = args as [string, { ts?: string; workspace?: string }];\n try {\n const target = parseMsgTarget(targetArg);\n let channelId: string;\n let ts: string;\n let workspaceUrl: string | undefined;\n\n if (target.kind === \"url\") {\n if (options.workspace) {\n throw new Error(\n \"--workspace cannot be used with a URL target; the workspace is derived from the URL\",\n );\n }\n channelId = target.ref.channel_id;\n ts = options.ts ?? target.ref.message_ts;\n workspaceUrl = input.ctx.effectiveWorkspaceUrl(target.ref.workspace_url);\n } else if (target.kind === \"channel\") {\n if (!options.ts) {\n throw new Error(\"--ts is required when target is a channel name or ID\");\n }\n ({ ts } = options);\n workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n channelId = target.channel;\n } else {\n throw new Error(\"User targets are not supported for channel mark\");\n }\n\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [channelId],\n });\n\n const resolvedId = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const resolved = await resolveChannelId(client, channelId);\n await markConversation(client, { channelId: resolved, ts });\n return resolved;\n },\n });\n\n console.log(JSON.stringify({ ok: true, channel: resolvedId, ts }, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n}\n",
|
|
72
|
+
"import type { SlackApiClient } from \"./client.ts\";\nimport { asArray, getString, isRecord } from \"../lib/object-type-guards.ts\";\n\nexport type ChannelWorkflow = {\n title: string;\n trigger_id: string;\n link?: string;\n app_id?: string;\n featured: boolean;\n};\n\nexport type ChannelWorkflows = {\n channel_id: string;\n workflows: ChannelWorkflow[];\n};\n\nexport async function listChannelWorkflows(\n client: SlackApiClient,\n channelId: string,\n): Promise<ChannelWorkflows> {\n const [bookmarked, featured] = await Promise.all([\n listBookmarkedWorkflows(client, channelId),\n listFeaturedWorkflows(client, channelId),\n ]);\n\n // Merge: bookmarked is the primary source, featured adds the flag\n const featuredIds = new Set(featured.map((f) => f.trigger_id));\n const seen = new Set<string>();\n const workflows: ChannelWorkflow[] = [];\n\n for (const bk of bookmarked) {\n if (bk.trigger_id) {\n seen.add(bk.trigger_id);\n }\n workflows.push({\n title: bk.title,\n trigger_id: bk.trigger_id ?? \"\",\n link: bk.link,\n app_id: bk.app_id,\n featured: bk.trigger_id ? featuredIds.has(bk.trigger_id) : false,\n });\n }\n\n // Add any featured workflows not already found in bookmarks\n for (const ft of featured) {\n if (!seen.has(ft.trigger_id)) {\n workflows.push({\n title: ft.title,\n trigger_id: ft.trigger_id,\n featured: true,\n });\n }\n }\n\n return { channel_id: channelId, workflows };\n}\n\ntype BookmarkedWorkflow = {\n title: string;\n trigger_id?: string;\n link?: string;\n app_id?: string;\n};\n\nasync function listBookmarkedWorkflows(\n client: SlackApiClient,\n channelId: string,\n): Promise<BookmarkedWorkflow[]> {\n const resp = await client.api(\"bookmarks.list\", {\n channel_id: channelId,\n });\n return asArray(resp.bookmarks)\n .filter(isRecord)\n .filter((b) => {\n const link = getString(b.link) ?? \"\";\n const shortcutId = getString(b.shortcut_id);\n return shortcutId || link.includes(\"slack.com/shortcuts/\");\n })\n .map((b) => {\n const link = getString(b.link);\n const shortcutId = getString(b.shortcut_id);\n const triggerId = shortcutId || extractTriggerId(link);\n return {\n title: getString(b.title) ?? \"\",\n trigger_id: triggerId,\n link,\n app_id: getString(b.app_id),\n };\n });\n}\n\ntype FeaturedWorkflow = {\n trigger_id: string;\n title: string;\n};\n\nasync function listFeaturedWorkflows(\n client: SlackApiClient,\n channelId: string,\n): Promise<FeaturedWorkflow[]> {\n try {\n const resp = await client.api(\"workflows.featured.list\", {\n channel_ids: JSON.stringify([channelId]),\n });\n const entries = asArray(resp.featured_workflows).filter(isRecord);\n const entry = entries.find((e) => getString(e.channel_id) === channelId);\n if (!entry) {\n return [];\n }\n return asArray(entry.triggers)\n .filter(isRecord)\n .map((t) => ({\n trigger_id: getString(t.id) ?? \"\",\n title: getString(t.title) ?? \"\",\n }))\n .filter((t) => t.trigger_id);\n } catch {\n // workflows.featured.list may not be available — not fatal\n return [];\n }\n}\n\nexport type WorkflowPreview = {\n trigger_id: string;\n type: string;\n name: string;\n description: string;\n shortcut_url?: string;\n workflow: {\n id: string;\n title: string;\n description: string;\n app_id: string;\n app_name: string;\n };\n collaborators: string[];\n};\n\nexport async function previewWorkflow(\n client: SlackApiClient,\n triggerId: string,\n): Promise<WorkflowPreview> {\n const resp = await client.api(\"workflows.triggers.preview\", {\n trigger_ids: triggerId,\n });\n const triggers = asArray(resp.triggers).filter(isRecord);\n if (triggers.length === 0) {\n const rejected = asArray(resp.rejected_triggers);\n if (rejected.length > 0) {\n throw new Error(`Trigger ${triggerId} was rejected — you may not have access`);\n }\n throw new Error(`No preview data returned for trigger ${triggerId}`);\n }\n const t = triggers[0]!;\n const wf = isRecord(t.workflow) ? t.workflow : {};\n const wfApp = isRecord(wf.app) ? wf.app : {};\n const details = isRecord(t.workflow_details) ? t.workflow_details : {};\n return {\n trigger_id: getString(t.id) ?? triggerId,\n type: getString(t.type) ?? \"\",\n name: getString(t.name) ?? \"\",\n description: getString(t.description) ?? \"\",\n shortcut_url: getString(t.shortcut_url),\n workflow: {\n id: getString(wf.workflow_id) ?? \"\",\n title: getString(wf.title) ?? \"\",\n description: getString(wf.description) ?? \"\",\n app_id: getString(wf.app_id) ?? getString(wfApp.id) ?? \"\",\n app_name: getString(wfApp.name) ?? \"\",\n },\n collaborators: asArray(details.collaborators)\n .map((c) => (typeof c === \"string\" ? c : \"\"))\n .filter(Boolean),\n };\n}\n\nexport type WorkflowRunResult = {\n function_execution_id: string;\n trigger_execution_id: string;\n is_slow_workflow: boolean;\n};\n\nexport async function runWorkflow(\n client: SlackApiClient,\n input: { shortcutUrl: string; channelId: string; triggerId: string },\n): Promise<WorkflowRunResult> {\n const clientToken = `cli-${Date.now()}`;\n const resp = await client.api(\"workflows.triggers.trip\", {\n url: input.shortcutUrl,\n client_token: clientToken,\n context: JSON.stringify({\n location: \"bookmark\",\n channel_id: input.channelId,\n trigger_id: input.triggerId,\n }),\n run_precheck: true,\n });\n return {\n function_execution_id: getString(resp.function_execution_id) ?? \"\",\n trigger_execution_id: getString(resp.trigger_execution_id) ?? \"\",\n is_slow_workflow: resp.is_slow_workflow === true,\n };\n}\n\nexport async function resolveShortcutUrl(\n client: SlackApiClient,\n input: { channelId: string; triggerId: string },\n): Promise<string> {\n const { channelId, triggerId } = input;\n const resp = await client.api(\"bookmarks.list\", {\n channel_id: channelId,\n });\n const bookmarks = asArray(resp.bookmarks).filter(isRecord);\n for (const b of bookmarks) {\n const shortcutId = getString(b.shortcut_id);\n if (shortcutId === triggerId) {\n const link = getString(b.link);\n if (link) {\n return link;\n }\n }\n }\n throw new Error(`Could not find shortcut URL for trigger ${triggerId} in channel bookmarks`);\n}\n\nexport type FormField = {\n name: string;\n title: string;\n type: string;\n description: string;\n required: boolean;\n long?: boolean;\n};\n\nexport type WorkflowSchema = {\n workflow_id: string;\n title: string;\n description: string;\n form_title?: string;\n fields: FormField[];\n steps: string[];\n};\n\nexport async function getWorkflowSchema(\n client: SlackApiClient,\n workflowId: string,\n): Promise<WorkflowSchema> {\n const resp = await client.api(\"workflows.get\", { workflow_id: workflowId });\n const wf = isRecord(resp.workflow) ? resp.workflow : null;\n if (!wf) {\n throw new Error(`No workflow found for ID ${workflowId}`);\n }\n\n const steps = asArray(wf.steps).filter(isRecord);\n const stepSummaries: string[] = [];\n let fields: FormField[] = [];\n let formTitle: string | undefined;\n\n for (const step of steps) {\n const fn = isRecord(step.function) ? step.function : {};\n const callbackId = getString(fn.callback_id) ?? \"\";\n const title = getString(fn.title) ?? callbackId;\n stepSummaries.push(title);\n\n if (callbackId === \"open_form\") {\n const inputs = isRecord(step.inputs) ? step.inputs : {};\n const titleInput = isRecord(inputs.title) ? inputs.title : {};\n formTitle = getString(titleInput.value);\n\n const fieldsInput = isRecord(inputs.fields) ? inputs.fields : {};\n const fieldsValue = isRecord(fieldsInput.value) ? fieldsInput.value : {};\n const elements = asArray(fieldsValue.elements).filter(isRecord);\n const required = new Set(\n asArray(fieldsValue.required)\n .map((r) => (typeof r === \"string\" ? r : \"\"))\n .filter(Boolean),\n );\n\n fields = elements.map((el) => ({\n name: getString(el.name) ?? \"\",\n title: getString(el.title) ?? \"\",\n type: getString(el.type) ?? \"string\",\n description: getString(el.description) ?? \"\",\n required: required.has(getString(el.name) ?? \"\"),\n long: el.long === true ? true : undefined,\n }));\n }\n }\n\n return {\n workflow_id: getString(wf.id) ?? workflowId,\n title: getString(wf.title) ?? \"\",\n description: getString(wf.description) ?? \"\",\n form_title: formTitle,\n fields,\n steps: stepSummaries,\n };\n}\n\nfunction extractTriggerId(link: string | undefined): string | undefined {\n if (!link) {\n return undefined;\n }\n const match = link.match(/slack\\.com\\/shortcuts\\/(Ft[A-Za-z0-9]+)/);\n return match?.[1];\n}\n",
|
|
73
|
+
"import type { Command } from \"commander\";\nimport type { CliContext } from \"./context.ts\";\nimport { pruneEmpty } from \"../lib/compact-json.ts\";\nimport { resolveChannelId } from \"../slack/channels.ts\";\nimport {\n getWorkflowSchema,\n listChannelWorkflows,\n previewWorkflow,\n resolveShortcutUrl,\n runWorkflow,\n} from \"../slack/workflows.ts\";\n\ntype WorkspaceOption = {\n workspace?: string;\n};\n\nexport function registerWorkflowCommand(input: { program: Command; ctx: CliContext }): void {\n const workflowCmd = input.program\n .command(\"workflow\")\n .description(\"Discover and interact with Slack workflows\");\n\n workflowCmd\n .command(\"list\")\n .description(\"List workflows bookmarked or featured in a channel\")\n .argument(\"<channel>\", \"Channel id or name (#channel, channel, C...)\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .action(async (...args) => {\n const [channel, options] = args as [string, WorkspaceOption];\n try {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, channel);\n return await listChannelWorkflows(client, channelId);\n },\n });\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n workflowCmd\n .command(\"preview\")\n .description(\"Get workflow metadata from a trigger ID (no side effects)\")\n .argument(\"<trigger-id>\", \"Trigger ID (Ft...)\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .action(async (...args) => {\n const [triggerId, options] = args as [string, WorkspaceOption];\n try {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n return await previewWorkflow(client, triggerId);\n },\n });\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n workflowCmd\n .command(\"get\")\n .description(\"Get workflow definition including form fields and steps (accepts Ft... or Wf...)\")\n .argument(\"<id>\", \"Trigger ID (Ft...) or Workflow ID (Wf...)\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .action(async (...args) => {\n const [id, options] = args as [string, WorkspaceOption];\n try {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n let workflowId = id;\n if (id.startsWith(\"Ft\")) {\n const preview = await previewWorkflow(client, id);\n workflowId = preview.workflow.id;\n }\n return await getWorkflowSchema(client, workflowId);\n },\n });\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n workflowCmd\n .command(\"run\")\n .description(\"Trip a workflow trigger\")\n .argument(\"<trigger-id>\", \"Trigger ID (Ft...)\")\n .requiredOption(\"--channel <id-or-name>\", \"Channel where the workflow is bookmarked\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .action(async (...args) => {\n const [triggerId, options] = args as [string, WorkspaceOption & { channel: string }];\n try {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, options.channel);\n const shortcutUrl = await resolveShortcutUrl(client, { channelId, triggerId });\n return await runWorkflow(client, { shortcutUrl, channelId, triggerId });\n },\n });\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n}\n"
|
|
68
74
|
],
|
|
69
|
-
"mappings": "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",
|
|
70
|
-
"debugId": "
|
|
75
|
+
"mappings": "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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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",
|
|
76
|
+
"debugId": "517A87768FFFD43D64756E2164756E21",
|
|
71
77
|
"names": []
|
|
72
78
|
}
|