agent-slack 0.5.4 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +245 -193
- package/dist/index.js.map +11 -10
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1,28 +1,29 @@
|
|
|
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/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/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"],
|
|
4
4
|
"sourcesContent": [
|
|
5
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",
|
|
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
|
-
"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, 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",
|
|
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",
|
|
9
|
-
"import { pbkdf2Sync, createDecipheriv } from \"node:crypto\";\n\nexport function decryptChromiumCookieValue(\n data: Buffer,\n password: string
|
|
9
|
+
"import { pbkdf2Sync, createDecipheriv } from \"node:crypto\";\n\nexport function decryptChromiumCookieValue(\n data: Buffer,\n options: { password: string; iterations: number },\n): string {\n if (!data || data.length === 0) {\n return \"\";\n }\n\n const { password, iterations } = options;\n\n if (iterations < 1) {\n throw new RangeError(`iterations must be >= 1, got ${iterations}`);\n }\n\n const salt = Buffer.from(\"saltysalt\", \"utf8\");\n const iv = Buffer.alloc(16, \" \");\n const key = pbkdf2Sync(password, salt, iterations, 16, \"sha1\");\n\n const decipher = createDecipheriv(\"aes-128-cbc\", key, iv);\n decipher.setAutoPadding(true);\n const plain = Buffer.concat([decipher.update(data), decipher.final()]);\n const marker = Buffer.from(\"xoxd-\");\n const idx = plain.indexOf(marker);\n if (idx === -1) {\n return plain.toString(\"utf8\");\n }\n\n let end = idx;\n while (end < plain.length) {\n const b = plain[end]!;\n if (b < 0x21 || b > 0x7e) {\n break;\n }\n end++;\n }\n const rawToken = plain.subarray(idx, end).toString(\"utf8\");\n try {\n return decodeURIComponent(rawToken);\n } catch {\n return rawToken;\n }\n}\n",
|
|
10
10
|
"export function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nexport function asArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nexport function getString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nexport function getNumber(value: unknown): number | undefined {\n return typeof value === \"number\" ? value : undefined;\n}\n",
|
|
11
11
|
"import { execSync } from \"node:child_process\";\nimport { platform } from \"node:os\";\n\ntype ChromeExtractedTeam = { url: string; name?: string; token: string };\n\nexport type ChromeExtracted = {\n cookie_d: string;\n teams: ChromeExtractedTeam[];\n};\n\nconst IS_MACOS = platform() === \"darwin\";\n\nfunction escapeOsaScript(script: string): string {\n // osascript -e '...'\n return script.replace(/'/g, `'\"'\"'`);\n}\n\nfunction osascript(script: string): string {\n return execSync(`osascript -e '${escapeOsaScript(script)}'`, {\n encoding: \"utf8\",\n timeout: 7000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n }).trim();\n}\n\nfunction cookieScript(): string {\n return `\n tell application \"Google Chrome\"\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 \"document.cookie.split('; ').find(c => c.startsWith('d='))?.split('=')[1] || ''\"\n end if\n end repeat\n end repeat\n return \"\"\n end tell\n `;\n}\n\nconst TEAM_JSON_PATHS = [\n // Current known storage\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 isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction toChromeTeam(value: unknown): ChromeExtractedTeam | 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 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 \"Google Chrome\"\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\nexport function extractFromChrome(): ChromeExtracted | null {\n if (!IS_MACOS) {\n return null;\n }\n try {\n const cookie = osascript(cookieScript());\n if (!cookie || !cookie.startsWith(\"xoxd-\")) {\n return null;\n }\n\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 const teams: ChromeExtractedTeam[] = Object.values(teamsRecord)\n .map((t) => toChromeTeam(t))\n .filter((t): t is ChromeExtractedTeam => t !== null);\n\n if (teams.length === 0) {\n return null;\n }\n return { cookie_d: cookie, teams };\n } catch {\n return null;\n }\n}\n",
|
|
12
12
|
"export type ParsedCurlTokens = {\n workspace_url: string;\n xoxc_token: string;\n xoxd_cookie: string;\n};\n\nexport function parseSlackCurlCommand(curlInput: string): ParsedCurlTokens {\n const urlMatch = curlInput.match(/curl\\s+['\"]?(https?:\\/\\/([^.]+)\\.slack\\.com[^'\"\\s]*)/i);\n if (!urlMatch) {\n throw new Error(\"Could not find Slack workspace URL in cURL command\");\n }\n const workspace_url = `https://${urlMatch[2]}.slack.com`;\n\n const cookieMatch = curlInput.match(\n /(?:-b|--cookie)\\s+\\$?'([^']+)'|(?:-b|--cookie)\\s+\\$?\"([^\"]+)\"|-H\\s+\\$?'[Cc]ookie:\\s*([^']+)'|-H\\s+\\$?\"[Cc]ookie:\\s*([^\"]+)\"/,\n );\n const cookieHeader = cookieMatch\n ? cookieMatch[1] || cookieMatch[2] || cookieMatch[3] || cookieMatch[4] || \"\"\n : \"\";\n const xoxdMatch = cookieHeader.match(/(?:^|;\\s*)d=(xoxd-[^;]+)/);\n if (!xoxdMatch) {\n throw new Error(\"Could not find xoxd cookie (d=xoxd-...) in cURL command\");\n }\n const xoxd_cookie = decodeURIComponent(xoxdMatch[1]!);\n\n // Token can appear in various forms: token=..., \"token\":\"...\", or name=\"token\"... in form bodies.\n // Try common patterns first, then fall back to the first xoxc-* we can find.\n const tokenPatterns: RegExp[] = [\n /(?:^|[?&\\s])token=(xoxc-[A-Za-z0-9-]+)/,\n /\"token\"\\s*:\\s*\"(xoxc-[A-Za-z0-9-]+)\"/,\n /name=\"token\"[^x]*?(xoxc-[A-Za-z0-9-]+)/,\n /\\b(xoxc-[A-Za-z0-9-]+)\\b/,\n ];\n\n let xoxc_token: string | null = null;\n for (const re of tokenPatterns) {\n const m = curlInput.match(re);\n if (m?.[1]) {\n const [, token] = m;\n xoxc_token = token ?? null;\n break;\n }\n }\n if (!xoxc_token) {\n throw new Error(\"Could not find xoxc token in cURL command\");\n }\n\n return { workspace_url, xoxc_token, xoxd_cookie };\n}\n",
|
|
13
|
-
"// Desktop auth extraction approach inspired by:\n// - slacktokens: https://github.com/hraftery/slacktokens\nimport { cp, mkdir, rm, unlink } from \"node:fs/promises\";\nimport {\n existsSync,\n readFileSync,\n readdirSync,\n copyFileSync,\n writeFileSync,\n unlinkSync,\n} from \"node:fs\";\nimport { execFileSync } from \"node:child_process\";\nimport { createDecipheriv, randomUUID } from \"node:crypto\";\nimport { homedir, platform, tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { findKeysContaining } from \"../lib/leveldb-reader.js\";\nimport { isRecord } from \"../lib/object-type-guards.ts\";\nimport { queryReadonlySqlite } from \"./firefox-profile.ts\";\nimport { decryptChromiumCookieValue } from \"./chromium-cookie.ts\";\n\ntype DesktopTeam = { url: string; name?: string; token: string };\n\nexport type DesktopExtracted = {\n cookie_d: string;\n teams: DesktopTeam[];\n source: { leveldb_path: string; cookies_path: string };\n};\n\nconst PLATFORM = platform();\nconst IS_MACOS = PLATFORM === \"darwin\";\nconst IS_LINUX = PLATFORM === \"linux\";\nconst IS_WIN32 = PLATFORM === \"win32\";\n\n// Electron (direct download) paths\nconst SLACK_SUPPORT_DIR_ELECTRON = join(homedir(), \"Library\", \"Application Support\", \"Slack\");\n// Mac App Store paths (sandboxed container)\nconst SLACK_SUPPORT_DIR_APPSTORE = join(\n homedir(),\n \"Library\",\n \"Containers\",\n \"com.tinyspeck.slackmacgap\",\n \"Data\",\n \"Library\",\n \"Application Support\",\n \"Slack\",\n);\n\nconst SLACK_SUPPORT_DIR_LINUX = join(homedir(), \".config\", \"Slack\");\n\nconst SLACK_SUPPORT_DIR_LINUX_FLATPAK = join(\n homedir(),\n \".var\",\n \"app\",\n \"com.slack.Slack\",\n \"config\",\n \"Slack\",\n);\n\n// Windows: regular installer stores data in %APPDATA%\\Slack\nconst SLACK_SUPPORT_DIR_WIN_APPDATA = join(\n process.env.APPDATA || join(homedir(), \"AppData\", \"Roaming\"),\n \"Slack\",\n);\n\n/**\n * Find the Microsoft Store Slack app data directory.\n * The package folder name includes a publisher hash suffix that varies per machine,\n * so we search for the matching prefix.\n */\nfunction getWindowsStoreSlackPath(): string | null {\n const pkgBase = join(process.env.LOCALAPPDATA || join(homedir(), \"AppData\", \"Local\"), \"Packages\");\n try {\n const entries = readdirSync(pkgBase);\n const slackPkg = entries.find((e) => e.startsWith(\"com.tinyspeck.slackdesktop_\"));\n if (slackPkg) {\n return join(pkgBase, slackPkg, \"LocalCache\", \"Roaming\", \"Slack\");\n }\n } catch {\n // directory may not exist\n }\n return null;\n}\n\nfunction getAllSlackPaths(): { leveldbDir: string; cookiesDb: string; baseDir: string }[] {\n let candidates: string[];\n if (IS_MACOS) {\n candidates = [SLACK_SUPPORT_DIR_ELECTRON, SLACK_SUPPORT_DIR_APPSTORE];\n } else if (IS_LINUX) {\n candidates = [SLACK_SUPPORT_DIR_LINUX_FLATPAK, SLACK_SUPPORT_DIR_LINUX];\n } else if (IS_WIN32) {\n candidates = [SLACK_SUPPORT_DIR_WIN_APPDATA];\n const storePath = getWindowsStoreSlackPath();\n if (storePath) {\n candidates.push(storePath);\n }\n } else {\n candidates = [];\n }\n\n if (candidates.length === 0) {\n throw new Error(`Slack Desktop extraction is not supported on ${PLATFORM}.`);\n }\n\n const results: { leveldbDir: string; cookiesDb: string; baseDir: string }[] = [];\n for (const dir of candidates) {\n const leveldbDir = join(dir, \"Local Storage\", \"leveldb\");\n if (existsSync(leveldbDir)) {\n const cookiesDbCandidates = [join(dir, \"Network\", \"Cookies\"), join(dir, \"Cookies\")];\n const cookiesDb =\n cookiesDbCandidates.find((candidate) => existsSync(candidate)) || cookiesDbCandidates[0]!;\n results.push({ leveldbDir, cookiesDb, baseDir: dir });\n }\n }\n\n if (results.length === 0) {\n throw new Error(\n `Slack Desktop data not found. Checked:\\n - ${candidates.map((d) => join(d, \"Local Storage\", \"leveldb\")).join(\"\\n - \")}`,\n );\n }\n\n return results;\n}\n\nfunction toDesktopTeam(value: unknown): DesktopTeam | null {\n if (!isRecord(value)) {\n return null;\n }\n const url = typeof value.url === \"string\" ? value.url : null;\n const token = typeof value.token === \"string\" ? value.token : null;\n if (!url || !token) {\n return null;\n }\n const name = typeof value.name === \"string\" ? value.name : undefined;\n return { url, name, token };\n}\n\nasync function snapshotLevelDb(srcDir: string): Promise<string> {\n const base = join(homedir(), \".config\", \"agent-slack\", \"cache\", \"leveldb-snapshots\");\n const dest = join(base, `${Date.now()}`);\n await mkdir(base, { recursive: true });\n let useNodeCopy = !IS_MACOS;\n if (IS_MACOS) {\n try {\n execFileSync(\"cp\", [\"-cR\", srcDir, dest], {\n stdio: [\"ignore\", \"ignore\", \"ignore\"],\n });\n } catch {\n useNodeCopy = true;\n }\n }\n if (useNodeCopy) {\n await cp(srcDir, dest, { recursive: true, force: true });\n }\n\n try {\n await unlink(join(dest, \"LOCK\"));\n } catch {\n // ignore\n }\n return dest;\n}\n\nfunction parseLocalConfig(raw: Buffer): unknown {\n if (!raw || raw.length === 0) {\n throw new Error(\"localConfig is empty\");\n }\n\n const [first] = raw;\n const data = first === 0x00 || first === 0x01 || first === 0x02 ? raw.subarray(1) : raw;\n\n let nulCount = 0;\n for (const b of data) {\n if (b === 0) {\n nulCount++;\n }\n }\n\n const encodings: BufferEncoding[] =\n nulCount > data.length / 4 ? ([\"utf16le\", \"utf8\"] as const) : ([\"utf8\", \"utf16le\"] as const);\n\n let lastErr: unknown;\n for (const enc of encodings) {\n try {\n const text = data.toString(enc);\n try {\n return JSON.parse(text);\n } catch (err1) {\n lastErr = err1;\n }\n\n const start = text.indexOf(\"{\");\n const end = text.lastIndexOf(\"}\");\n if (start !== -1 && end !== -1 && end > start) {\n try {\n return JSON.parse(text.slice(start, end + 1));\n } catch (err2) {\n lastErr = err2;\n }\n }\n } catch (err) {\n lastErr = err;\n }\n }\n\n throw lastErr || new Error(\"localConfig not parseable\");\n}\n\nasync function extractTeamsFromSlackLevelDb(leveldbDir: string): Promise<DesktopTeam[]> {\n if (!existsSync(leveldbDir)) {\n throw new Error(`Slack LevelDB not found: ${leveldbDir}`);\n }\n\n const snap = await snapshotLevelDb(leveldbDir);\n\n try {\n // Use pure JS LevelDB reader - search for localConfig entries\n const localConfigV2 = Buffer.from(\"localConfig_v2\");\n const localConfigV3 = Buffer.from(\"localConfig_v3\");\n\n const entries = await findKeysContaining(snap, Buffer.from(\"localConfig_v\"));\n\n let configBuf: Buffer | null = null;\n let configRank = -1n;\n for (const entry of entries) {\n if (entry.key.includes(localConfigV2) || entry.key.includes(localConfigV3)) {\n if (entry.value && entry.value.length > 0) {\n let rank = 0n;\n if (entry.key.length >= 8) {\n rank = entry.key.readBigUInt64LE(entry.key.length - 8);\n }\n if (!configBuf || rank >= configRank) {\n configBuf = entry.value;\n configRank = rank;\n }\n }\n }\n }\n\n if (!configBuf) {\n throw new Error(\"Slack LevelDB did not contain localConfig_v2/v3\");\n }\n\n const cfg = parseLocalConfig(configBuf);\n const teamsValue = isRecord(cfg) ? cfg.teams : undefined;\n const teamsObj = isRecord(teamsValue) ? teamsValue : {};\n const teams: DesktopTeam[] = Object.values(teamsObj)\n .map((t) => toDesktopTeam(t))\n .filter((t): t is DesktopTeam => t !== null)\n .filter((t) => t.token.startsWith(\"xoxc-\"));\n\n if (teams.length === 0) {\n throw new Error(\"No xoxc tokens found in Slack localConfig\");\n }\n return teams;\n } finally {\n try {\n await rm(snap, { recursive: true, force: true });\n } catch {\n // ignore\n }\n }\n}\n\nfunction getSafeStoragePasswords(prefix: string): string[] {\n if (IS_MACOS) {\n // Electron (\"Slack Key\") and Mac App Store (\"Slack App Store Key\") builds\n // store separate Safe Storage passwords under the same service name.\n // Query each known account explicitly, then fall back to service-only\n // lookups to catch unknown account names.\n const keychainQueries: { service: string; account?: string }[] = [\n { service: \"Slack Safe Storage\", account: \"Slack Key\" },\n { service: \"Slack Safe Storage\", account: \"Slack App Store Key\" },\n { service: \"Slack Safe Storage\" },\n { service: \"Chrome Safe Storage\" },\n { service: \"Chromium Safe Storage\" },\n ];\n const passwords: string[] = [];\n for (const q of keychainQueries) {\n try {\n const args = [\"-w\", \"-s\", q.service];\n if (q.account) {\n args.push(\"-a\", q.account);\n }\n const out = execFileSync(\"security\", [\"find-generic-password\", ...args], {\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 if (passwords.length > 0) {\n return [...new Set(passwords)];\n }\n }\n\n if (IS_LINUX) {\n const attributes: string[][] = [\n [\"application\", \"com.slack.Slack\"],\n [\"application\", \"Slack\"],\n [\"application\", \"slack\"],\n [\"service\", \"Slack Safe Storage\"],\n ];\n const passwords: string[] = [];\n for (const pair of attributes) {\n try {\n const out = execFileSync(\"secret-tool\", [\"lookup\", ...pair], {\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\n // Chromium Linux OSCrypt v10 fallback password (see os_crypt_linux.cc).\n if (prefix === \"v11\") {\n passwords.push(\"\");\n }\n passwords.push(\"peanuts\");\n\n return [...new Set(passwords)];\n }\n\n throw new Error(\"Could not read Safe Storage password from desktop keychain.\");\n}\n\n/**\n * Decrypt a Chromium cookie on Windows using DPAPI + AES-256-GCM.\n *\n * On Windows (Chromium v80+), cookies are encrypted as:\n * v10/v11 + 12-byte nonce + AES-256-GCM ciphertext + 16-byte auth tag\n *\n * The AES key is stored DPAPI-encrypted in the \"Local State\" file under\n * os_crypt.encrypted_key (base64, prefixed with \"DPAPI\").\n */\nfunction decryptCookieWindows(encrypted: Buffer, slackDataDir: string): string {\n // Read the DPAPI-protected AES key from Local State\n const localStatePath = join(slackDataDir, \"Local State\");\n if (!existsSync(localStatePath)) {\n throw new Error(`Local State file not found: ${localStatePath}`);\n }\n let localState: unknown;\n try {\n localState = JSON.parse(readFileSync(localStatePath, \"utf8\"));\n } catch (error) {\n throw new Error(`Failed to parse Local State file: ${localStatePath}`, { cause: error });\n }\n const osCrypt = isRecord(localState) ? localState.os_crypt : undefined;\n if (!isRecord(osCrypt) || typeof osCrypt.encrypted_key !== \"string\") {\n throw new Error(\"No os_crypt.encrypted_key in Local State\");\n }\n const encKeyFull = Buffer.from(osCrypt.encrypted_key as string, \"base64\");\n // Skip \"DPAPI\" prefix (5 bytes)\n const encKeyBlob = encKeyFull.subarray(5);\n\n // Decrypt AES key via Windows DPAPI using PowerShell\n const id = randomUUID();\n const encKeyFile = join(tmpdir(), `as-key-enc-${id}.bin`);\n const decKeyFile = join(tmpdir(), `as-key-dec-${id}.bin`);\n writeFileSync(encKeyFile, encKeyBlob, { mode: 0o600 });\n try {\n // Escape single quotes for PowerShell single-quoted strings (' → '')\n const psEncKeyFile = encKeyFile.replaceAll(\"'\", \"''\");\n const psDecKeyFile = decKeyFile.replaceAll(\"'\", \"''\");\n const psCmd = [\n \"Add-Type -AssemblyName System.Security\",\n `$e=[System.IO.File]::ReadAllBytes('${psEncKeyFile}')`,\n \"$d=[System.Security.Cryptography.ProtectedData]::Unprotect($e,$null,[System.Security.Cryptography.DataProtectionScope]::CurrentUser)\",\n `[System.IO.File]::WriteAllBytes('${psDecKeyFile}',$d)`,\n ].join(\"; \");\n execFileSync(\"powershell\", [\"-ExecutionPolicy\", \"Bypass\", \"-Command\", psCmd], {\n stdio: \"pipe\",\n });\n if (!existsSync(decKeyFile)) {\n throw new Error(\"DPAPI decryption failed: PowerShell did not produce the decrypted key file\");\n }\n const aesKey = readFileSync(decKeyFile);\n\n // AES-256-GCM: v10(3) + nonce(12) + ciphertext(N-16) + tag(16)\n const nonce = encrypted.subarray(3, 15);\n const ciphertextWithTag = encrypted.subarray(15);\n const tag = ciphertextWithTag.subarray(-16);\n const ciphertext = ciphertextWithTag.subarray(0, -16);\n\n const decipher = createDecipheriv(\"aes-256-gcm\", aesKey, nonce);\n decipher.setAuthTag(tag);\n let decrypted = decipher.update(ciphertext, undefined, \"utf8\");\n decrypted += decipher.final(\"utf8\");\n\n return decrypted;\n } finally {\n try {\n unlinkSync(encKeyFile);\n } catch {\n /* ignore */\n }\n try {\n unlinkSync(decKeyFile);\n } catch {\n /* ignore */\n }\n }\n}\n\nasync function extractCookieDFromSlackCookiesDb(\n cookiesPath: string,\n slackDataDir: string,\n): Promise<string> {\n if (!existsSync(cookiesPath)) {\n throw new Error(`Slack Cookies DB not found: ${cookiesPath}`);\n }\n\n // On Windows, Slack holds an exclusive lock on the Cookies DB while running.\n // Copy it to a temp location before reading.\n let dbPathToQuery = cookiesPath;\n if (IS_WIN32) {\n const tmpCopy = join(tmpdir(), `agent-slack-cookies-${Date.now()}`);\n copyFileSync(cookiesPath, tmpCopy);\n dbPathToQuery = tmpCopy;\n }\n\n let rows: {\n host_key: string;\n name: string;\n value: string;\n encrypted_value: Uint8Array;\n }[];\n try {\n rows = (await queryReadonlySqlite(\n dbPathToQuery,\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 typeof rows;\n } finally {\n if (IS_WIN32 && dbPathToQuery !== cookiesPath) {\n try {\n unlinkSync(dbPathToQuery);\n } catch {\n /* ignore */\n }\n }\n }\n\n if (!rows || rows.length === 0) {\n throw new Error(\"No Slack 'd' cookie found\");\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(\"Slack 'd' cookie had no encrypted_value\");\n }\n\n const prefix = encrypted.subarray(0, 3).toString(\"utf8\");\n\n // Windows uses DPAPI + AES-256-GCM (Chromium v80+)\n if (IS_WIN32 && (prefix === \"v10\" || prefix === \"v11\")) {\n const decrypted = decryptCookieWindows(encrypted, slackDataDir);\n const match = decrypted.match(/xoxd-[A-Za-z0-9%/+_=.-]+/);\n if (match) {\n try {\n return decodeURIComponent(match[0]!);\n } catch {\n return match[0]!;\n }\n }\n throw new Error(\"Could not locate xoxd-* in DPAPI-decrypted Slack cookie\");\n }\n\n // macOS / Linux: password-based AES-128-CBC\n const data = prefix === \"v10\" || prefix === \"v11\" ? encrypted.subarray(3) : encrypted;\n const passwords = getSafeStoragePasswords(prefix);\n\n for (const password of passwords) {\n try {\n const decrypted = decryptChromiumCookieValue(data, password, IS_LINUX ? 1 : 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 locate xoxd-* in decrypted Slack cookie\");\n}\n\nexport async function extractFromSlackDesktop(): Promise<DesktopExtracted> {\n const allPaths = getAllSlackPaths();\n\n // Try each candidate path; use the first one where both LevelDB and cookie extraction succeed.\n const errors: string[] = [];\n for (const { leveldbDir, cookiesDb, baseDir } of allPaths) {\n try {\n const teams = await extractTeamsFromSlackLevelDb(leveldbDir);\n const cookie_d = await extractCookieDFromSlackCookiesDb(cookiesDb, baseDir);\n return {\n cookie_d,\n teams,\n source: { leveldb_path: leveldbDir, cookies_path: cookiesDb },\n };\n } catch (err: unknown) {\n errors.push(`${baseDir}: ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n\n throw new Error(\n `Could not extract Slack Desktop credentials from any location:\\n - ${errors.join(\"\\n - \")}`,\n );\n}\n",
|
|
13
|
+
"// Desktop auth extraction approach inspired by:\n// - slacktokens: https://github.com/hraftery/slacktokens\nimport { cp, mkdir, rm, unlink } from \"node:fs/promises\";\nimport { existsSync, readdirSync, copyFileSync, unlinkSync } from \"node:fs\";\nimport { execFileSync } from \"node:child_process\";\nimport { homedir, platform, tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { findKeysContaining } from \"../lib/leveldb-reader.js\";\nimport { isRecord } from \"../lib/object-type-guards.ts\";\nimport { queryReadonlySqlite } from \"./firefox-profile.ts\";\nimport { decryptChromiumCookieValue } from \"./chromium-cookie.ts\";\nimport { getSafeStoragePasswords, decryptCookieWindows } from \"./desktop-crypto.ts\";\n\ntype DesktopTeam = { url: string; name?: string; token: string };\n\nexport type DesktopExtracted = {\n cookie_d: string;\n teams: DesktopTeam[];\n source: { leveldb_path: string; cookies_path: string };\n};\n\nconst PLATFORM = platform();\nconst IS_MACOS = PLATFORM === \"darwin\";\nconst IS_LINUX = PLATFORM === \"linux\";\nconst IS_WIN32 = PLATFORM === \"win32\";\n\n// Electron (direct download) paths\nconst SLACK_SUPPORT_DIR_ELECTRON = join(homedir(), \"Library\", \"Application Support\", \"Slack\");\n// Mac App Store paths (sandboxed container)\nconst SLACK_SUPPORT_DIR_APPSTORE = join(\n homedir(),\n \"Library\",\n \"Containers\",\n \"com.tinyspeck.slackmacgap\",\n \"Data\",\n \"Library\",\n \"Application Support\",\n \"Slack\",\n);\n\nconst SLACK_SUPPORT_DIR_LINUX = join(homedir(), \".config\", \"Slack\");\n\nconst SLACK_SUPPORT_DIR_LINUX_FLATPAK = join(\n homedir(),\n \".var\",\n \"app\",\n \"com.slack.Slack\",\n \"config\",\n \"Slack\",\n);\n\n// Windows: regular installer stores data in %APPDATA%\\Slack\nconst SLACK_SUPPORT_DIR_WIN_APPDATA = join(\n process.env.APPDATA || join(homedir(), \"AppData\", \"Roaming\"),\n \"Slack\",\n);\n\n/**\n * Find the Microsoft Store Slack app data directory.\n * The package folder name includes a publisher hash suffix that varies per machine,\n * so we search for the matching prefix.\n */\nfunction getWindowsStoreSlackPath(): string | null {\n const pkgBase = join(process.env.LOCALAPPDATA || join(homedir(), \"AppData\", \"Local\"), \"Packages\");\n try {\n const entries = readdirSync(pkgBase);\n const slackPkg = entries.find((e) => e.startsWith(\"com.tinyspeck.slackdesktop_\"));\n if (slackPkg) {\n return join(pkgBase, slackPkg, \"LocalCache\", \"Roaming\", \"Slack\");\n }\n } catch {\n // directory may not exist\n }\n return null;\n}\n\nfunction getAllSlackPaths(): { leveldbDir: string; cookiesDb: string; baseDir: string }[] {\n let candidates: string[];\n if (IS_MACOS) {\n candidates = [SLACK_SUPPORT_DIR_ELECTRON, SLACK_SUPPORT_DIR_APPSTORE];\n } else if (IS_LINUX) {\n candidates = [SLACK_SUPPORT_DIR_LINUX_FLATPAK, SLACK_SUPPORT_DIR_LINUX];\n } else if (IS_WIN32) {\n candidates = [SLACK_SUPPORT_DIR_WIN_APPDATA];\n const storePath = getWindowsStoreSlackPath();\n if (storePath) {\n candidates.push(storePath);\n }\n } else {\n candidates = [];\n }\n\n if (candidates.length === 0) {\n throw new Error(`Slack Desktop extraction is not supported on ${PLATFORM}.`);\n }\n\n const results: { leveldbDir: string; cookiesDb: string; baseDir: string }[] = [];\n for (const dir of candidates) {\n const leveldbDir = join(dir, \"Local Storage\", \"leveldb\");\n if (existsSync(leveldbDir)) {\n const cookiesDbCandidates = [join(dir, \"Network\", \"Cookies\"), join(dir, \"Cookies\")];\n const cookiesDb =\n cookiesDbCandidates.find((candidate) => existsSync(candidate)) || cookiesDbCandidates[0]!;\n results.push({ leveldbDir, cookiesDb, baseDir: dir });\n }\n }\n\n if (results.length === 0) {\n throw new Error(\n `Slack Desktop data not found. Checked:\\n - ${candidates.map((d) => join(d, \"Local Storage\", \"leveldb\")).join(\"\\n - \")}`,\n );\n }\n\n return results;\n}\n\nfunction toDesktopTeam(value: unknown): DesktopTeam | null {\n if (!isRecord(value)) {\n return null;\n }\n const url = typeof value.url === \"string\" ? value.url : null;\n const token = typeof value.token === \"string\" ? value.token : null;\n if (!url || !token) {\n return null;\n }\n const name = typeof value.name === \"string\" ? value.name : undefined;\n return { url, name, token };\n}\n\nasync function snapshotLevelDb(srcDir: string): Promise<string> {\n const base = join(homedir(), \".config\", \"agent-slack\", \"cache\", \"leveldb-snapshots\");\n const dest = join(base, `${Date.now()}`);\n await mkdir(base, { recursive: true });\n let useNodeCopy = !IS_MACOS;\n if (IS_MACOS) {\n try {\n execFileSync(\"cp\", [\"-cR\", srcDir, dest], {\n stdio: [\"ignore\", \"ignore\", \"ignore\"],\n });\n } catch {\n useNodeCopy = true;\n }\n }\n if (useNodeCopy) {\n await cp(srcDir, dest, { recursive: true, force: true });\n }\n\n try {\n await unlink(join(dest, \"LOCK\"));\n } catch {\n // ignore\n }\n return dest;\n}\n\nfunction parseLocalConfig(raw: Buffer): unknown {\n if (!raw || raw.length === 0) {\n throw new Error(\"localConfig is empty\");\n }\n\n const [first] = raw;\n const data = first === 0x00 || first === 0x01 || first === 0x02 ? raw.subarray(1) : raw;\n\n let nulCount = 0;\n for (const b of data) {\n if (b === 0) {\n nulCount++;\n }\n }\n\n const encodings: BufferEncoding[] =\n nulCount > data.length / 4 ? ([\"utf16le\", \"utf8\"] as const) : ([\"utf8\", \"utf16le\"] as const);\n\n let lastErr: unknown;\n for (const enc of encodings) {\n try {\n const text = data.toString(enc);\n try {\n return JSON.parse(text);\n } catch (err1) {\n lastErr = err1;\n }\n\n const start = text.indexOf(\"{\");\n const end = text.lastIndexOf(\"}\");\n if (start !== -1 && end !== -1 && end > start) {\n try {\n return JSON.parse(text.slice(start, end + 1));\n } catch (err2) {\n lastErr = err2;\n }\n }\n } catch (err) {\n lastErr = err;\n }\n }\n\n throw lastErr || new Error(\"localConfig not parseable\");\n}\n\nasync function extractTeamsFromSlackLevelDb(leveldbDir: string): Promise<DesktopTeam[]> {\n if (!existsSync(leveldbDir)) {\n throw new Error(`Slack LevelDB not found: ${leveldbDir}`);\n }\n\n const snap = await snapshotLevelDb(leveldbDir);\n\n try {\n // Use pure JS LevelDB reader - search for localConfig entries\n const localConfigV2 = Buffer.from(\"localConfig_v2\");\n const localConfigV3 = Buffer.from(\"localConfig_v3\");\n\n const entries = await findKeysContaining(snap, Buffer.from(\"localConfig_v\"));\n\n let configBuf: Buffer | null = null;\n let configRank = -1n;\n for (const entry of entries) {\n if (entry.key.includes(localConfigV2) || entry.key.includes(localConfigV3)) {\n if (entry.value && entry.value.length > 0) {\n let rank = 0n;\n if (entry.key.length >= 8) {\n rank = entry.key.readBigUInt64LE(entry.key.length - 8);\n }\n if (!configBuf || rank >= configRank) {\n configBuf = entry.value;\n configRank = rank;\n }\n }\n }\n }\n\n if (!configBuf) {\n throw new Error(\"Slack LevelDB did not contain localConfig_v2/v3\");\n }\n\n const cfg = parseLocalConfig(configBuf);\n const teamsValue = isRecord(cfg) ? cfg.teams : undefined;\n const teamsObj = isRecord(teamsValue) ? teamsValue : {};\n const teams: DesktopTeam[] = Object.values(teamsObj)\n .map((t) => toDesktopTeam(t))\n .filter((t): t is DesktopTeam => t !== null)\n .filter((t) => t.token.startsWith(\"xoxc-\"));\n\n if (teams.length === 0) {\n throw new Error(\"No xoxc tokens found in Slack localConfig\");\n }\n return teams;\n } finally {\n try {\n await rm(snap, { recursive: true, force: true });\n } catch {\n // ignore\n }\n }\n}\n\nasync function extractCookieDFromSlackCookiesDb(\n cookiesPath: string,\n slackDataDir: string,\n): Promise<string> {\n if (!existsSync(cookiesPath)) {\n throw new Error(`Slack Cookies DB not found: ${cookiesPath}`);\n }\n\n // On Windows, Slack holds an exclusive lock on the Cookies DB while running.\n // Copy it to a temp location before reading.\n let dbPathToQuery = cookiesPath;\n if (IS_WIN32) {\n const tmpCopy = join(tmpdir(), `agent-slack-cookies-${Date.now()}`);\n copyFileSync(cookiesPath, tmpCopy);\n dbPathToQuery = tmpCopy;\n }\n\n let rows: {\n host_key: string;\n name: string;\n value: string;\n encrypted_value: Uint8Array;\n }[];\n try {\n rows = (await queryReadonlySqlite(\n dbPathToQuery,\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 typeof rows;\n } finally {\n if (IS_WIN32 && dbPathToQuery !== cookiesPath) {\n try {\n unlinkSync(dbPathToQuery);\n } catch {\n /* ignore */\n }\n }\n }\n\n if (!rows || rows.length === 0) {\n throw new Error(\"No Slack 'd' cookie found\");\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(\"Slack 'd' cookie had no encrypted_value\");\n }\n\n const prefix = encrypted.subarray(0, 3).toString(\"utf8\");\n\n // Windows uses DPAPI + AES-256-GCM (Chromium v80+)\n if (IS_WIN32 && (prefix === \"v10\" || prefix === \"v11\")) {\n const decrypted = decryptCookieWindows(encrypted, slackDataDir);\n const match = decrypted.match(/xoxd-[A-Za-z0-9%/+_=.-]+/);\n if (match) {\n try {\n return decodeURIComponent(match[0]!);\n } catch {\n return match[0]!;\n }\n }\n throw new Error(\"Could not locate xoxd-* in DPAPI-decrypted Slack cookie\");\n }\n\n // macOS / Linux: password-based AES-128-CBC\n const data = prefix === \"v10\" || prefix === \"v11\" ? encrypted.subarray(3) : encrypted;\n const passwords = getSafeStoragePasswords(prefix);\n\n for (const password of passwords) {\n try {\n const decrypted = decryptChromiumCookieValue(data, {\n password,\n iterations: IS_LINUX ? 1 : 1003,\n });\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 locate xoxd-* in decrypted Slack cookie\");\n}\n\nexport async function extractFromSlackDesktop(): Promise<DesktopExtracted> {\n const allPaths = getAllSlackPaths();\n\n // Try each candidate path; use the first one where both LevelDB and cookie extraction succeed.\n const errors: string[] = [];\n for (const { leveldbDir, cookiesDb, baseDir } of allPaths) {\n try {\n const teams = await extractTeamsFromSlackLevelDb(leveldbDir);\n const cookie_d = await extractCookieDFromSlackCookiesDb(cookiesDb, baseDir);\n return {\n cookie_d,\n teams,\n source: { leveldb_path: leveldbDir, cookies_path: cookiesDb },\n };\n } catch (err: unknown) {\n errors.push(`${baseDir}: ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n\n throw new Error(\n `Could not extract Slack Desktop credentials from any location:\\n - ${errors.join(\"\\n - \")}`,\n );\n}\n",
|
|
14
14
|
"/**\n * Pure JavaScript LevelDB reader for Chromium Local Storage.\n * Reads SSTable (.ldb) and log (.log) files without native modules.\n *\n * This is a minimal implementation that only supports reading - no writes.\n * Designed for extracting Slack tokens from Chromium-based apps.\n */\n\nimport { readdir, readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { snappyUncompress } from \"hysnappy\";\n\n// LevelDB magic number (little-endian): 0xdb4775248b80fb57\nconst LEVELDB_MAGIC = Buffer.from([0x57, 0xfb, 0x80, 0x8b, 0x24, 0x75, 0x47, 0xdb]);\n\n// Block compression types\nconst COMPRESSION_NONE = 0;\nconst COMPRESSION_SNAPPY = 1;\n\n// Log record types\nconst LOG_RECORD_FULL = 1;\nconst LOG_RECORD_FIRST = 2;\nconst LOG_RECORD_MIDDLE = 3;\nconst LOG_RECORD_LAST = 4;\n\nexport type LevelDBEntry = {\n key: Buffer;\n value: Buffer;\n};\n\n/**\n * Read a varint from buffer at offset. Returns [value, bytesRead].\n */\nfunction readVarint(buf: Buffer, offset: number): [number, number] {\n let result = 0;\n let shift = 0;\n let bytesRead = 0;\n\n while (offset + bytesRead < buf.length) {\n const byte = buf[offset + bytesRead]!;\n bytesRead++;\n result |= (byte & 0x7f) << shift;\n if ((byte & 0x80) === 0) {\n return [result, bytesRead];\n }\n shift += 7;\n if (shift >= 35) {\n throw new Error(\"Varint too long\");\n }\n }\n throw new Error(\"Unexpected end of buffer reading varint\");\n}\n\n/**\n * Read a varint64 from buffer. For our use case, we only need 32-bit precision.\n */\nfunction readVarint64(buf: Buffer, offset: number): [number, number] {\n let result = 0;\n let shift = 0;\n let bytesRead = 0;\n\n while (offset + bytesRead < buf.length && bytesRead < 10) {\n const byte = buf[offset + bytesRead]!;\n bytesRead++;\n if (shift < 32) {\n result |= (byte & 0x7f) << shift;\n }\n if ((byte & 0x80) === 0) {\n return [result >>> 0, bytesRead];\n }\n shift += 7;\n }\n throw new Error(\"Unexpected end of buffer reading varint64\");\n}\n\n/**\n * Get uncompressed length from Snappy-compressed data.\n * Snappy format starts with uncompressed length as a varint.\n */\nfunction getSnappyUncompressedLength(compressed: Buffer): number {\n const [length] = readVarint(compressed, 0);\n return length;\n}\n\n/**\n * Parse a LevelDB block handle (offset + size as varints).\n */\nfunction parseBlockHandle(\n buf: Buffer,\n offset: number,\n): { offset: number; size: number; bytesRead: number } {\n const [blockOffset, n1] = readVarint64(buf, offset);\n const [blockSize, n2] = readVarint64(buf, offset + n1);\n return { offset: blockOffset, size: blockSize, bytesRead: n1 + n2 };\n}\n\n/**\n * Decompress a block if needed.\n */\nfunction decompressBlock(blockData: Buffer, compressionType: number): Buffer {\n if (compressionType === COMPRESSION_NONE) {\n return blockData;\n }\n if (compressionType === COMPRESSION_SNAPPY) {\n const uncompressedLength = getSnappyUncompressedLength(blockData);\n const result = snappyUncompress(blockData, uncompressedLength);\n return Buffer.from(result);\n }\n throw new Error(`Unknown compression type: ${compressionType}`);\n}\n\n/**\n * Parse entries from a data block.\n * LevelDB uses prefix compression within blocks.\n */\nfunction parseDataBlock(block: Buffer): LevelDBEntry[] {\n const entries: LevelDBEntry[] = [];\n\n if (block.length < 4) {\n return entries;\n }\n\n // Last 4 bytes are number of restart points\n const numRestarts = block.readUInt32LE(block.length - 4);\n // Restart array is numRestarts * 4 bytes before the count\n const restartsStart = block.length - 4 - numRestarts * 4;\n\n if (restartsStart < 0) {\n return entries;\n }\n\n let offset = 0;\n let prevKey = Buffer.alloc(0);\n\n while (offset < restartsStart) {\n try {\n const [shared, n1] = readVarint(block, offset);\n offset += n1;\n const [nonShared, n2] = readVarint(block, offset);\n offset += n2;\n const [valueLen, n3] = readVarint(block, offset);\n offset += n3;\n\n if (offset + nonShared + valueLen > restartsStart) {\n break;\n }\n\n // Build key from shared prefix + new bytes\n const keyDelta = block.subarray(offset, offset + nonShared);\n offset += nonShared;\n\n const key = Buffer.concat([prevKey.subarray(0, shared), keyDelta]);\n const value = block.subarray(offset, offset + valueLen);\n offset += valueLen;\n\n // Filter out deletion markers (keys starting with certain internal prefixes)\n // In LevelDB, user keys don't have the sequence number suffix for our read-only case\n entries.push({ key: Buffer.from(key), value: Buffer.from(value) });\n prevKey = key;\n } catch {\n break;\n }\n }\n\n return entries;\n}\n\n/**\n * Parse an SSTable (.ldb or .sst) file and extract all key-value pairs.\n */\nasync function parseSSTable(filePath: string): Promise<LevelDBEntry[]> {\n const entries: LevelDBEntry[] = [];\n\n let data: Buffer;\n try {\n data = await readFile(filePath);\n } catch {\n return entries;\n }\n\n if (data.length < 48) {\n return entries;\n }\n\n // Read footer (last 48 bytes)\n const footer = data.subarray(-48);\n\n // Verify magic number (last 8 bytes of footer)\n const magic = footer.subarray(40, 48);\n if (!magic.equals(LEVELDB_MAGIC)) {\n // Not a valid SSTable or different format\n return entries;\n }\n\n try {\n // Parse metaindex and index block handles from footer\n // Footer format: [metaindex_handle][index_handle][padding][magic]\n const { bytesRead: metaBytes } = parseBlockHandle(footer, 0);\n const indexHandle = parseBlockHandle(footer, metaBytes);\n\n // Read index block\n const indexBlockStart = indexHandle.offset;\n const indexBlockEnd = indexHandle.offset + indexHandle.size + 5; // +5 for type + crc\n\n if (indexBlockEnd > data.length - 48) {\n return entries;\n }\n\n const indexBlockRaw = data.subarray(indexBlockStart, indexBlockEnd);\n const indexCompressionType = indexBlockRaw.at(-5)!;\n const indexBlockData = indexBlockRaw.subarray(0, -5);\n const indexBlock = decompressBlock(indexBlockData, indexCompressionType);\n\n // Parse index block to get data block locations\n const indexEntries = parseDataBlock(indexBlock);\n\n // Read each data block\n for (const indexEntry of indexEntries) {\n try {\n // Index entry value contains a block handle\n const blockHandle = parseBlockHandle(indexEntry.value, 0);\n const blockStart = blockHandle.offset;\n const blockEnd = blockHandle.offset + blockHandle.size + 5; // +5 for type + crc\n\n if (blockEnd > data.length) {\n continue;\n }\n\n const blockRaw = data.subarray(blockStart, blockEnd);\n const compressionType = blockRaw.at(-5)!;\n const blockData = blockRaw.subarray(0, -5);\n const block = decompressBlock(blockData, compressionType);\n\n const blockEntries = parseDataBlock(block);\n entries.push(...blockEntries);\n } catch {\n // Skip malformed blocks\n continue;\n }\n }\n } catch {\n // If structured parsing fails, return empty\n return entries;\n }\n\n return entries;\n}\n\n/**\n * Parse a LevelDB log (.log) file for recent writes.\n * Log files contain records that haven't been compacted to SSTables yet.\n */\nasync function parseLogFile(filePath: string): Promise<LevelDBEntry[]> {\n const entries: LevelDBEntry[] = [];\n\n let data: Buffer;\n try {\n data = await readFile(filePath);\n } catch {\n return entries;\n }\n\n const BLOCK_SIZE = 32768;\n let offset = 0;\n let pendingRecord: Buffer[] = [];\n\n while (offset < data.length) {\n // Records are within 32KB blocks\n const blockOffset = offset % BLOCK_SIZE;\n const remaining = BLOCK_SIZE - blockOffset;\n\n // Skip to next block if not enough space for header\n if (remaining < 7) {\n offset += remaining;\n continue;\n }\n\n // Read record header: [crc32: 4][length: 2][type: 1]\n if (offset + 7 > data.length) {\n break;\n }\n\n const length = data.readUInt16LE(offset + 4);\n const type = data[offset + 6]!;\n\n if (length === 0 || offset + 7 + length > data.length) {\n offset += remaining;\n pendingRecord = [];\n continue;\n }\n\n const recordData = data.subarray(offset + 7, offset + 7 + length);\n offset += 7 + length;\n\n if (type === LOG_RECORD_FULL) {\n pendingRecord = [];\n parseLogBatch(recordData, entries);\n } else if (type === LOG_RECORD_FIRST) {\n pendingRecord = [recordData];\n } else if (type === LOG_RECORD_MIDDLE) {\n if (pendingRecord.length > 0) {\n pendingRecord.push(recordData);\n }\n } else if (type === LOG_RECORD_LAST) {\n if (pendingRecord.length > 0) {\n pendingRecord.push(recordData);\n const fullRecord = Buffer.concat(pendingRecord);\n parseLogBatch(fullRecord, entries);\n }\n pendingRecord = [];\n }\n }\n\n return entries;\n}\n\n/**\n * Parse a write batch from a log record.\n * Batch format: [sequence: 8][count: 4][records...]\n * Record format: [type: 1][key_len: varint][key][value_len: varint][value]\n */\nfunction parseLogBatch(batch: Buffer, entries: LevelDBEntry[]): void {\n if (batch.length < 12) {\n return;\n }\n\n // Skip sequence (8 bytes) and count (4 bytes)\n let offset = 12;\n\n while (offset < batch.length) {\n try {\n const recordType = batch[offset]!;\n offset++;\n\n if (recordType === 1) {\n // Value record\n const [keyLen, n1] = readVarint(batch, offset);\n offset += n1;\n const key = batch.subarray(offset, offset + keyLen);\n offset += keyLen;\n const [valueLen, n2] = readVarint(batch, offset);\n offset += n2;\n const value = batch.subarray(offset, offset + valueLen);\n offset += valueLen;\n\n entries.push({ key: Buffer.from(key), value: Buffer.from(value) });\n } else if (recordType === 0) {\n // Deletion record - skip\n const [keyLen, n1] = readVarint(batch, offset);\n offset += n1 + keyLen;\n } else {\n // Unknown record type\n break;\n }\n } catch {\n break;\n }\n }\n}\n\n/**\n * Read all key-value pairs from a Chromium LevelDB directory.\n * Scans both SSTable (.ldb) files and log (.log) files.\n */\nexport async function readChromiumLevelDB(dir: string): Promise<LevelDBEntry[]> {\n const entries: LevelDBEntry[] = [];\n\n let files: string[];\n try {\n files = await readdir(dir);\n } catch {\n return entries;\n }\n\n // Parse all .ldb and .sst files\n const sstFiles = files.filter((f) => f.endsWith(\".ldb\") || f.endsWith(\".sst\"));\n for (const file of sstFiles) {\n const fileEntries = await parseSSTable(join(dir, file));\n entries.push(...fileEntries);\n }\n\n // Parse all .log files\n const logFiles = files.filter((f) => f.endsWith(\".log\"));\n for (const file of logFiles) {\n const fileEntries = await parseLogFile(join(dir, file));\n entries.push(...fileEntries);\n }\n\n return entries;\n}\n\n/**\n * Find all entries containing a substring in their key.\n */\nexport async function findKeysContaining(dir: string, substring: Buffer): Promise<LevelDBEntry[]> {\n const allEntries = await readChromiumLevelDB(dir);\n return allEntries.filter((entry) => entry.key.includes(substring));\n}\n",
|
|
15
|
+
"import { existsSync, readFileSync, writeFileSync, unlinkSync } from \"node:fs\";\nimport { execFileSync } from \"node:child_process\";\nimport { createDecipheriv, randomUUID } from \"node:crypto\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { isRecord } from \"../lib/object-type-guards.ts\";\n\nconst IS_MACOS = process.platform === \"darwin\";\nconst IS_LINUX = process.platform === \"linux\";\n\nexport function getSafeStoragePasswords(prefix: string): string[] {\n if (IS_MACOS) {\n // Electron (\"Slack Key\") and Mac App Store (\"Slack App Store Key\") builds\n // store separate Safe Storage passwords under the same service name.\n // Query each known account explicitly, then fall back to service-only\n // lookups to catch unknown account names.\n const keychainQueries: { service: string; account?: string }[] = [\n { service: \"Slack Safe Storage\", account: \"Slack Key\" },\n { service: \"Slack Safe Storage\", account: \"Slack App Store Key\" },\n { service: \"Slack Safe Storage\" },\n { service: \"Chrome Safe Storage\" },\n { service: \"Chromium Safe Storage\" },\n ];\n const passwords: string[] = [];\n for (const q of keychainQueries) {\n try {\n const args = [\"-w\", \"-s\", q.service];\n if (q.account) {\n args.push(\"-a\", q.account);\n }\n const out = execFileSync(\"security\", [\"find-generic-password\", ...args], {\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 if (passwords.length > 0) {\n return [...new Set(passwords)];\n }\n }\n\n if (IS_LINUX) {\n const attributes: string[][] = [\n [\"application\", \"com.slack.Slack\"],\n [\"application\", \"Slack\"],\n [\"application\", \"slack\"],\n [\"service\", \"Slack Safe Storage\"],\n ];\n const passwords: string[] = [];\n for (const pair of attributes) {\n try {\n const out = execFileSync(\"secret-tool\", [\"lookup\", ...pair], {\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\n // Chromium Linux OSCrypt v10 fallback password (see os_crypt_linux.cc).\n if (prefix === \"v11\") {\n passwords.push(\"\");\n }\n passwords.push(\"peanuts\");\n\n return [...new Set(passwords)];\n }\n\n throw new Error(\"Could not read Safe Storage password from desktop keychain.\");\n}\n\n/**\n * Decrypt a Chromium cookie on Windows using DPAPI + AES-256-GCM.\n *\n * On Windows (Chromium v80+), cookies are encrypted as:\n * v10/v11 + 12-byte nonce + AES-256-GCM ciphertext + 16-byte auth tag\n *\n * The AES key is stored DPAPI-encrypted in the \"Local State\" file under\n * os_crypt.encrypted_key (base64, prefixed with \"DPAPI\").\n */\nexport function decryptCookieWindows(encrypted: Buffer, slackDataDir: string): string {\n // Read the DPAPI-protected AES key from Local State\n const localStatePath = join(slackDataDir, \"Local State\");\n if (!existsSync(localStatePath)) {\n throw new Error(`Local State file not found: ${localStatePath}`);\n }\n let localState: unknown;\n try {\n localState = JSON.parse(readFileSync(localStatePath, \"utf8\"));\n } catch (error) {\n throw new Error(`Failed to parse Local State file: ${localStatePath}`, { cause: error });\n }\n const osCrypt = isRecord(localState) ? localState.os_crypt : undefined;\n if (!isRecord(osCrypt) || typeof osCrypt.encrypted_key !== \"string\") {\n throw new Error(\"No os_crypt.encrypted_key in Local State\");\n }\n const encKeyFull = Buffer.from(osCrypt.encrypted_key as string, \"base64\");\n // Skip \"DPAPI\" prefix (5 bytes)\n const encKeyBlob = encKeyFull.subarray(5);\n\n // Decrypt AES key via Windows DPAPI using PowerShell\n const id = randomUUID();\n const encKeyFile = join(tmpdir(), `as-key-enc-${id}.bin`);\n const decKeyFile = join(tmpdir(), `as-key-dec-${id}.bin`);\n writeFileSync(encKeyFile, encKeyBlob, { mode: 0o600 });\n try {\n // Escape single quotes for PowerShell single-quoted strings (' → '')\n const psEncKeyFile = encKeyFile.replaceAll(\"'\", \"''\");\n const psDecKeyFile = decKeyFile.replaceAll(\"'\", \"''\");\n const psCmd = [\n \"Add-Type -AssemblyName System.Security\",\n `$e=[System.IO.File]::ReadAllBytes('${psEncKeyFile}')`,\n \"$d=[System.Security.Cryptography.ProtectedData]::Unprotect($e,$null,[System.Security.Cryptography.DataProtectionScope]::CurrentUser)\",\n `[System.IO.File]::WriteAllBytes('${psDecKeyFile}',$d)`,\n ].join(\"; \");\n execFileSync(\"powershell\", [\"-ExecutionPolicy\", \"Bypass\", \"-Command\", psCmd], {\n stdio: \"pipe\",\n });\n if (!existsSync(decKeyFile)) {\n throw new Error(\"DPAPI decryption failed: PowerShell did not produce the decrypted key file\");\n }\n const aesKey = readFileSync(decKeyFile);\n\n // AES-256-GCM: v10(3) + nonce(12) + ciphertext(N-16) + tag(16)\n const nonce = encrypted.subarray(3, 15);\n const ciphertextWithTag = encrypted.subarray(15);\n const tag = ciphertextWithTag.subarray(-16);\n const ciphertext = ciphertextWithTag.subarray(0, -16);\n\n const decipher = createDecipheriv(\"aes-256-gcm\", aesKey, nonce);\n decipher.setAuthTag(tag);\n let decrypted = decipher.update(ciphertext, undefined, \"utf8\");\n decrypted += decipher.final(\"utf8\");\n\n return decrypted;\n } finally {\n try {\n unlinkSync(encKeyFile);\n } catch {\n /* ignore */\n }\n try {\n unlinkSync(decKeyFile);\n } catch {\n /* ignore */\n }\n }\n}\n",
|
|
15
16
|
"import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nimport {\n copySqliteForRead,\n listProfileCandidates,\n pickCandidatesByProfile,\n queryReadonlySqlite,\n} from \"./firefox-profile.ts\";\n\ntype FirefoxTeam = { url: string; name?: string; token: string };\n\nexport type FirefoxExtracted = {\n cookie_d: string;\n teams: FirefoxTeam[];\n source: { profile_path: string; cookies_path: string; localstorage_path: string };\n};\n\n// eslint-disable-next-line no-control-regex\nconst CONTROL_CHAR_RE = /[\\u0000-\\u001F]/g;\n\nfunction toStringValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n if (value instanceof Uint8Array) {\n // localStorage blobs may include codec marker bytes and mixed UTF-8/UTF-16 payloads.\n const buf = Buffer.from(value);\n const strings: string[] = [];\n strings.push(buf.toString(\"utf8\"));\n strings.push(buf.toString(\"utf16le\"));\n const [first] = buf;\n if (first === 0x00 || first === 0x01 || first === 0x02) {\n const sliced = buf.subarray(1);\n strings.push(sliced.toString(\"utf8\"));\n strings.push(sliced.toString(\"utf16le\"));\n }\n return strings.sort((a, b) => b.length - a.length)[0] ?? \"\";\n }\n return String(value ?? \"\");\n}\n\nfunction parseJsonObjectFromValue(value: unknown): Record<string, unknown> | null {\n const raw = toStringValue(value);\n if (!raw) {\n return null;\n }\n\n const tryDecode = (text: string): Record<string, unknown> | null => {\n try {\n const parsed = JSON.parse(text) as unknown;\n if (typeof parsed === \"object\" && parsed !== null) {\n return parsed as Record<string, unknown>;\n }\n } catch {}\n return null;\n };\n\n const direct = tryDecode(raw);\n if (direct) {\n return direct;\n }\n\n // Control characters sometimes appear around serialized JSON in Firefox storage blobs.\n const stripped = raw.replace(CONTROL_CHAR_RE, \"\");\n const strippedDirect = tryDecode(stripped);\n if (strippedDirect) {\n return strippedDirect;\n }\n\n const start = raw.indexOf(\"{\");\n const end = raw.lastIndexOf(\"}\");\n if (start === -1 || end === -1 || end <= start) {\n return null;\n }\n const sliced = raw.slice(start, end + 1);\n const slicedDirect = tryDecode(sliced);\n if (slicedDirect) {\n return slicedDirect;\n }\n return tryDecode(sliced.replace(CONTROL_CHAR_RE, \"\"));\n}\n\nfunction toFirefoxTeam(value: unknown): FirefoxTeam | null {\n if (typeof value !== \"object\" || value === null) {\n return null;\n }\n const record = value as Record<string, unknown>;\n const url = typeof record.url === \"string\" ? record.url : null;\n const token = typeof record.token === \"string\" ? record.token : null;\n if (!url || !token || !token.startsWith(\"xoxc-\")) {\n return null;\n }\n const name = typeof record.name === \"string\" ? record.name : undefined;\n return { url, name, token };\n}\n\nfunction extractTeamsFromRawText(raw: string): FirefoxTeam[] {\n const teams: FirefoxTeam[] = [];\n const seen = new Set<string>();\n\n // Fallback for partially damaged JSON: recover token/url/name triplets from raw text.\n const richPattern =\n /\"name\":\"([^\"]+)\".*?\"url\":\"(https:\\/\\/[^\"\\s]+slack\\.com\\/)\".*?\"token\":\"(xoxc-[^\"]+)\"/gs;\n for (const match of raw.matchAll(richPattern)) {\n const [, name, url, token] = match;\n if (!name || !url || !token) {\n continue;\n }\n const key = `${url}::${token}`;\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n teams.push({ name, url, token });\n }\n\n if (teams.length > 0) {\n return teams;\n }\n\n const urls = Array.from(raw.matchAll(/\"url\":\"(https:\\/\\/[^\"\\s]+slack\\.com\\/)\"/g)).map(\n (m) => m[1]!,\n );\n const tokens = Array.from(raw.matchAll(/\"token\":\"(xoxc-[^\"]+)\"/g)).map((m) => m[1]!);\n const count = Math.min(urls.length, tokens.length);\n for (let i = 0; i < count; i++) {\n const url = urls[i];\n const token = tokens[i];\n if (!url || !token) {\n continue;\n }\n const key = `${url}::${token}`;\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n teams.push({ url, token });\n }\n\n return teams;\n}\n\nfunction getLocalStorageDirs(profilePath: string): string[] {\n const roots = [join(profilePath, \"storage\", \"default\")];\n const candidates: string[] = [];\n for (const root of roots) {\n if (!existsSync(root)) {\n continue;\n }\n candidates.push(join(root, \"https+++app.slack.com\", \"ls\"));\n }\n return candidates;\n}\n\nasync function extractTeamsFromProfile(\n profilePath: string,\n): Promise<{ teams: FirefoxTeam[]; sourcePath: string } | null> {\n const lsDirs = getLocalStorageDirs(profilePath);\n for (const lsDir of lsDirs) {\n const dbPath = join(lsDir, \"data.sqlite\");\n if (!existsSync(dbPath)) {\n continue;\n }\n\n const copied = await copySqliteForRead(dbPath);\n try {\n const rows = (await queryReadonlySqlite(\n copied.copyPath,\n \"select key, value from data where key in ('localConfig_v2', 'localConfig_v3') order by key desc\",\n )) as { key: string; value: unknown }[];\n\n for (const row of rows) {\n const cfg = parseJsonObjectFromValue(row.value);\n const teamsRaw =\n cfg && typeof cfg.teams === \"object\" && cfg.teams !== null ? cfg.teams : {};\n const parsedTeams = Object.values(teamsRaw)\n .map((t) => toFirefoxTeam(t))\n .filter((t): t is FirefoxTeam => t !== null);\n if (parsedTeams.length > 0) {\n return { teams: parsedTeams, sourcePath: dbPath };\n }\n\n const rawTeams = extractTeamsFromRawText(toStringValue(row.value));\n if (rawTeams.length > 0) {\n return { teams: rawTeams, sourcePath: dbPath };\n }\n }\n } finally {\n await copied.cleanup();\n }\n }\n return null;\n}\n\nasync function extractCookieDFromProfile(\n profilePath: string,\n): Promise<{ cookie_d: string; sourcePath: string } | null> {\n const dbPath = join(profilePath, \"cookies.sqlite\");\n if (!existsSync(dbPath)) {\n return null;\n }\n\n const copied = await copySqliteForRead(dbPath);\n try {\n const rows = (await queryReadonlySqlite(\n copied.copyPath,\n \"select value from moz_cookies where host like '%slack.com%' and name='d' order by length(value) desc\",\n )) as { value: string }[];\n\n for (const row of rows) {\n if (row.value?.startsWith(\"xoxd-\")) {\n return { cookie_d: decodeFirefoxCookieValue(row.value), sourcePath: dbPath };\n }\n }\n } finally {\n await copied.cleanup();\n }\n\n return null;\n}\n\nfunction decodeFirefoxCookieValue(cookie: string): string {\n let current = cookie;\n // Firefox can persist cookie values in percent-encoded form; normalize before storage.\n for (let i = 0; i < 3; i += 1) {\n try {\n const next = decodeURIComponent(current);\n if (next === current) {\n break;\n }\n current = next;\n } catch {\n break;\n }\n }\n return current;\n}\n\nexport async function extractFromFirefox(input?: {\n profile?: string;\n}): Promise<FirefoxExtracted | null> {\n // Profile selection flow (in order):\n // 1) Build candidates from profiles.ini and directory scan, with defaults first.\n // 2) Apply optional user selector (exact profile name, exact dir basename, or path substring).\n // 3) Walk candidates in that order and require BOTH artifacts from the same profile:\n // - teams/tokens from local storage\n // - xoxd cookie from cookies.sqlite\n // 4) Return the first profile that has both; otherwise return null.\n // This keeps behavior deterministic while preferring the active/default profile when possible,\n // but still allows fallback to another profile that has a complete Slack auth state.\n const allCandidates = await listProfileCandidates();\n const candidates = pickCandidatesByProfile(allCandidates, input?.profile);\n if (candidates.length === 0) {\n return null;\n }\n\n for (const candidate of candidates) {\n const teamsResult = await extractTeamsFromProfile(candidate.path);\n if (!teamsResult) {\n continue;\n }\n const cookieResult = await extractCookieDFromProfile(candidate.path);\n if (!cookieResult) {\n continue;\n }\n return {\n cookie_d: cookieResult.cookie_d,\n teams: teamsResult.teams,\n source: {\n profile_path: candidate.path,\n cookies_path: cookieResult.sourcePath,\n localstorage_path: teamsResult.sourcePath,\n },\n };\n }\n\n return null;\n}\n",
|
|
16
17
|
"import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport const AGENT_SLACK_DIR = join(homedir(), \".config\", \"agent-slack\");\nexport const CREDENTIALS_FILE = join(AGENT_SLACK_DIR, \"credentials.json\");\nexport const KEYCHAIN_SERVICE = \"agent-slack\";\n",
|
|
17
18
|
"import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\nimport { isRecord } from \"./object-type-guards.ts\";\n\nexport async function readJsonFile<T>(path: string): Promise<T | null> {\n try {\n const raw = await readFile(path, \"utf8\");\n return JSON.parse(raw) as T;\n } catch (err: unknown) {\n if (isRecord(err) && err.code === \"ENOENT\") {\n return null;\n }\n // Corrupted JSON should not brick the CLI; treat as missing.\n if (err instanceof SyntaxError) {\n return null;\n }\n throw err;\n }\n}\n\nexport async function writeJsonFile(path: string, data: unknown): Promise<void> {\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, `${JSON.stringify(data, null, 2)}\\n`, { mode: 0o600 });\n}\n",
|
|
18
19
|
"import { z } from \"zod\";\n\nexport const WorkspaceAuthSchema = z.union([\n z.object({\n auth_type: z.literal(\"standard\"),\n token: z.string().min(1),\n }),\n z.object({\n auth_type: z.literal(\"browser\"),\n xoxc_token: z.string().min(1),\n xoxd_cookie: z.string().min(1),\n }),\n]);\n\nexport type WorkspaceAuth = z.infer<typeof WorkspaceAuthSchema>;\n\nexport const WorkspaceSchema = z.object({\n workspace_url: z.string().url(),\n workspace_name: z.string().optional(),\n team_id: z.string().optional(),\n team_domain: z.string().optional(),\n auth: WorkspaceAuthSchema,\n});\n\nexport type Workspace = z.infer<typeof WorkspaceSchema>;\n\nexport const CredentialsSchema = z.object({\n version: z.literal(1),\n updated_at: z.string().optional(),\n default_workspace_url: z.string().url().optional(),\n workspaces: z.array(WorkspaceSchema).default([]),\n});\n\nexport type Credentials = z.infer<typeof CredentialsSchema>;\n",
|
|
19
20
|
"import { platform } from \"node:os\";\nimport { execFileSync } from \"node:child_process\";\n\nconst IS_MACOS = platform() === \"darwin\";\n\nexport function keychainGet(account: string, service: string): string | null {\n if (!IS_MACOS) {\n return null;\n }\n try {\n const result = execFileSync(\n \"security\",\n [\"find-generic-password\", \"-s\", service, \"-a\", account, \"-w\"],\n { encoding: \"utf8\", stdio: [\"pipe\", \"pipe\", \"ignore\"] },\n );\n return result.trim() || null;\n } catch {\n return null;\n }\n}\n\nexport function keychainSet(input: { account: string; value: string; service: string }): boolean {\n if (!IS_MACOS) {\n return false;\n }\n const { account, value, service } = input;\n try {\n try {\n execFileSync(\"security\", [\"delete-generic-password\", \"-s\", service, \"-a\", account], {\n stdio: [\"pipe\", \"pipe\", \"ignore\"],\n });\n } catch {\n // ignore\n }\n execFileSync(\"security\", [\"add-generic-password\", \"-s\", service, \"-a\", account, \"-w\", value], {\n stdio: \"pipe\",\n });\n return true;\n } catch {\n return false;\n }\n}\n",
|
|
20
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",
|
|
21
|
-
"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",
|
|
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",
|
|
22
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",
|
|
23
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
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",
|
|
25
|
-
"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 {
|
|
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",
|
|
26
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",
|
|
27
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",
|
|
28
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",
|
|
@@ -47,7 +48,7 @@
|
|
|
47
48
|
"import type { SlackAuth } from \"../slack/client.ts\";\nimport type { SlackMessageSummary } from \"../slack/messages.ts\";\nimport { ensureDownloadsDir } from \"../lib/tmp-paths.ts\";\nimport { downloadSlackFile } 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 Error(\"Downloaded auth/login page instead of canvas content (token may be expired)\");\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, string>> {\n const downloadedPaths: Record<string, string> = {};\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 try {\n if (isCanvas) {\n downloadedPaths[file.id] = await downloadCanvasAsMarkdown({\n auth: input.auth,\n fileId: file.id,\n url,\n destDir: downloadsDir,\n });\n } else {\n const ext = inferFileExtension(file);\n downloadedPaths[file.id] = await downloadSlackFile({\n auth: input.auth,\n url,\n destDir: downloadsDir,\n preferredName: `${file.id}${ext ? `.${ext}` : \"\"}`,\n });\n }\n } catch (err) {\n console.error(\n `Warning: skipping file ${file.id}: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n }\n\n return downloadedPaths;\n}\n",
|
|
48
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",
|
|
49
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",
|
|
50
|
-
"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 { getThreadSummary, toThreadListMessage } from \"./message-thread-info.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",
|
|
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",
|
|
51
52
|
"import { createServer, type IncomingMessage, type Server } from \"node:http\";\nimport { execFile } from \"node:child_process\";\n// @ts-ignore — import attributes need module:\"esnext\" in tsconfig; Bun handles this fine\nimport _editorHtmlContent from \"./draft-editor.html\" with { type: \"text\" };\n\nexport type DraftEditorConfig = {\n channelName: string;\n channelId?: string;\n workspaceUrl?: string;\n threadTs?: string;\n initialText?: string;\n onSend: (mrkdwn: string) => Promise<{ ts: string }>;\n};\n\nexport type DraftResult = { sent: true; text: string } | { cancelled: true };\n\nexport function openDraftEditor(config: DraftEditorConfig): Promise<DraftResult> {\n return new Promise<DraftResult>((resolve, reject) => {\n let settled = false;\n\n const server: Server = createServer(async (req, res) => {\n if (req.method === \"GET\" && (req.url === \"/\" || req.url === \"/index.html\")) {\n const html = buildEditorHtml(config);\n res.writeHead(200, { \"Content-Type\": \"text/html; charset=utf-8\" });\n res.end(html);\n return;\n }\n\n if (req.method === \"POST\" && req.url === \"/send\") {\n try {\n const body = await readBody(req);\n const data = JSON.parse(body) as { text: string };\n if (typeof data.text !== \"string\" || !data.text.trim()) {\n res.writeHead(400, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: false, error: \"text is required\" }));\n return;\n }\n const sendResult = await config.onSend(data.text);\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: true, ts: sendResult.ts }));\n settled = true;\n resolve({ sent: true, text: data.text });\n setTimeout(() => server.close(), 300);\n } catch (err: unknown) {\n const safeMessage =\n err instanceof Error\n ? err.message.replace(/xox[a-z]-[A-Za-z0-9-]+/g, \"[REDACTED]\")\n : \"Send failed\";\n res.writeHead(500, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: false, error: safeMessage }));\n }\n return;\n }\n\n if (req.method === \"POST\" && req.url === \"/cancel\") {\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: true }));\n settled = true;\n resolve({ cancelled: true });\n setTimeout(() => server.close(), 300);\n return;\n }\n\n res.writeHead(404);\n res.end(\"Not found\");\n });\n\n server.on(\"error\", (err) => {\n if (!settled) {\n reject(err);\n }\n });\n\n server.on(\"close\", () => {\n clearTimeout(idleTimeout);\n if (!settled) {\n settled = true;\n resolve({ cancelled: true });\n }\n });\n\n const idleTimeout = setTimeout(\n () => {\n if (!settled) {\n server.close();\n }\n },\n 30 * 60 * 1000,\n );\n\n server.listen(0, \"127.0.0.1\", () => {\n const addr = server.address();\n const port = typeof addr === \"object\" && addr ? addr.port : 0;\n const url = `http://127.0.0.1:${port}`;\n process.stderr.write(`Draft editor: ${url}\\n`);\n openBrowser(url);\n });\n });\n}\n\nconst MAX_BODY_BYTES = 1024 * 1024; // 1 MB\n\nfunction readBody(req: IncomingMessage): Promise<string> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n let totalBytes = 0;\n req.on(\"data\", (chunk: Buffer) => {\n totalBytes += chunk.length;\n if (totalBytes > MAX_BODY_BYTES) {\n req.destroy();\n reject(new Error(\"Request body too large\"));\n return;\n }\n chunks.push(chunk);\n });\n req.on(\"end\", () => resolve(Buffer.concat(chunks).toString()));\n req.on(\"error\", reject);\n });\n}\n\nfunction openBrowser(url: string): void {\n const cmd =\n process.platform === \"darwin\" ? \"open\" : process.platform === \"win32\" ? \"start\" : \"xdg-open\";\n execFile(cmd, [url], () => {});\n}\n\nfunction buildSlackThreadUrl(config: DraftEditorConfig): string | null {\n if (!config.workspaceUrl || !config.channelId || !config.threadTs) {\n return null;\n }\n const tsNoDot = config.threadTs.replaceAll(\".\", \"\");\n return `${config.workspaceUrl.replace(/\\/$/, \"\")}/archives/${config.channelId}/p${tsNoDot}`;\n}\n\nfunction extractWorkspaceName(url?: string): string | null {\n if (!url) {\n return null;\n }\n try {\n const host = new URL(url).hostname; // e.g. \"stablygroup.slack.com\"\n const parts = host.split(\".\");\n if (parts.length >= 3 && parts.at(-2) === \"slack\") {\n return parts.slice(0, -2).join(\".\"); // e.g. \"stablygroup\"\n }\n return host;\n } catch {\n return null;\n }\n}\n\nfunction buildEditorHtml(config: DraftEditorConfig): string {\n const threadUrl = buildSlackThreadUrl(config);\n const workspaceName = extractWorkspaceName(config.workspaceUrl);\n const injectedConfig = JSON.stringify({\n channelName: config.channelName,\n channelId: config.channelId || null,\n workspaceUrl: config.workspaceUrl || null,\n workspaceName,\n threadTs: config.threadTs || null,\n threadUrl,\n initialText: config.initialText || \"\",\n });\n\n // JSON.stringify handles quotes/backslashes; escape < and > to prevent\n // </script> breakout and other HTML injection in <script> context.\n const safeConfig = injectedConfig.replace(/</g, \"\\\\u003c\").replace(/>/g, \"\\\\u003e\");\n return getEditorHtml().replace(\"__DRAFT_CONFIG__\", safeConfig);\n}\n\nfunction getEditorHtml(): string {\n return _editorHtmlContent;\n}\n",
|
|
52
53
|
"import type { CliContext } from \"./context.ts\";\nimport { fetchMessage } from \"../slack/messages.ts\";\nimport { parseMsgTarget } from \"./targets.ts\";\nimport { resolveChannelId, resolveChannelName, normalizeChannelInput } from \"../slack/channels.ts\";\nimport { warnOnTruncatedSlackUrl } from \"./message-url-warning.ts\";\nimport { openDraftEditor } from \"./draft-server.ts\";\n\nexport async function draftMessage(input: {\n ctx: CliContext;\n targetInput: string;\n initialText?: string;\n options: { workspace?: string; threadTs?: string };\n}): Promise<Record<string, unknown>> {\n const target = parseMsgTarget(String(input.targetInput));\n if (target.kind === \"user\") {\n throw new Error(\n \"message draft does not support user ID targets. Use a channel name, channel ID, or message URL.\",\n );\n }\n\n // URL target: resolve thread context and send\n if (target.kind === \"url\") {\n const { ref } = target;\n warnOnTruncatedSlackUrl(ref);\n return 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 = input.options.threadTs ?? msg.thread_ts ?? msg.ts;\n const channelName = await resolveChannelName(client, ref.channel_id);\n\n return draftWithEditor({\n channelName,\n channelId: ref.channel_id,\n workspaceUrl: ref.workspace_url,\n threadTs,\n initialText: input.initialText,\n sendFn: async (text: string) => {\n const resp = await client.api(\"chat.postMessage\", {\n channel: ref.channel_id,\n text,\n thread_ts: threadTs,\n });\n return { ts: resp.ts as string };\n },\n });\n },\n });\n }\n\n // Channel name/ID target\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options.workspace);\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [String(target.channel)],\n });\n\n return 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 const normalized = normalizeChannelInput(target.channel);\n const channelName =\n normalized.kind === \"name\" ? normalized.value : await resolveChannelName(client, channelId);\n\n return draftWithEditor({\n channelName,\n channelId,\n workspaceUrl,\n threadTs: input.options.threadTs,\n initialText: input.initialText,\n sendFn: async (text: string) => {\n const resp = await client.api(\"chat.postMessage\", {\n channel: channelId,\n text,\n thread_ts: input.options.threadTs,\n });\n return { ts: resp.ts as string };\n },\n });\n },\n });\n}\n\nasync function draftWithEditor(input: {\n channelName: string;\n channelId: string;\n workspaceUrl?: string;\n threadTs?: string;\n initialText?: string;\n sendFn: (text: string) => Promise<{ ts: string }>;\n}): Promise<Record<string, unknown>> {\n // In CI mode, skip the editor and send directly\n if (process.env.CI) {\n if (!input.initialText) {\n throw new Error(\"In CI mode, initial text is required (no editor available)\");\n }\n const result = await input.sendFn(input.initialText);\n return { ok: true, sent: true, editor: \"skipped\", ts: result.ts };\n }\n\n const result = await openDraftEditor({\n channelName: input.channelName,\n channelId: input.channelId,\n workspaceUrl: input.workspaceUrl,\n threadTs: input.threadTs,\n initialText: input.initialText,\n onSend: input.sendFn,\n });\n\n if (\"cancelled\" in result) {\n return { ok: true, cancelled: true };\n }\n\n return { ok: true, sent: true };\n}\n",
|
|
53
54
|
"import type { Command } from \"commander\";\nimport type { CliContext } from \"./context.ts\";\nimport {\n deleteMessage,\n editMessage,\n handleMessageGet,\n handleMessageList,\n reactOnTarget,\n sendMessage,\n type MessageCommandOptions,\n} from \"./message-actions.ts\";\nimport { draftMessage } from \"./draft-actions.ts\";\n\nfunction collectOptionValue(value: string, previous: string[] = []): string[] {\n return [...previous, value];\n}\n\nexport function registerMessageCommand(input: { program: Command; ctx: CliContext }): void {\n const messageCmd = input.program\n .command(\"message\")\n .description(\"Read/write Slack messages (token-efficient JSON)\");\n\n messageCmd\n .command(\"get\", { isDefault: true })\n .description(\"Fetch a single Slack message (with thread summary if any)\")\n .argument(\"<target>\", \"Slack message URL, #channel, or channel ID\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--ts <ts>\", \"Message ts (required when using #channel/channel id)\")\n .option(\"--thread-ts <ts>\", \"Thread root ts hint (useful for thread permalinks)\")\n .option(\n \"--max-body-chars <n>\",\n \"Max content characters to include (default 8000, -1 for unlimited)\",\n \"8000\",\n )\n .option(\"--include-reactions\", \"Include reactions + reacting users\")\n .action(async (...args) => {\n const [targetInput, options] = args as [string, MessageCommandOptions];\n try {\n const payload = await handleMessageGet({ ctx: input.ctx, targetInput, options });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n messageCmd\n .command(\"list\")\n .description(\"List recent channel messages, or fetch a full thread\")\n .argument(\"<target>\", \"Slack message URL, #channel, or channel ID\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--thread-ts <ts>\", \"Thread root ts (lists thread replies instead of channel history)\")\n .option(\"--ts <ts>\", \"Message ts (resolve message to its thread)\")\n .option(\"--limit <n>\", \"Max messages to return for channel history (default 25, max 200)\")\n .option(\"--oldest <ts>\", \"Only messages after this ts (channel history mode)\")\n .option(\"--latest <ts>\", \"Only messages before this ts (channel history mode)\")\n .option(\n \"--with-reaction <emoji>\",\n \"Only include messages with this reaction (repeatable; channel history mode; requires --oldest)\",\n collectOptionValue,\n [],\n )\n .option(\n \"--without-reaction <emoji>\",\n \"Only include messages without this reaction (repeatable; channel history mode; requires --oldest)\",\n collectOptionValue,\n [],\n )\n .option(\n \"--max-body-chars <n>\",\n \"Max content characters to include (default 8000, -1 for unlimited)\",\n \"8000\",\n )\n .option(\"--include-reactions\", \"Include reactions + reacting users\")\n .action(async (...args) => {\n const [targetInput, options] = args as [string, MessageCommandOptions];\n try {\n const payload = await handleMessageList({ ctx: input.ctx, targetInput, options });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n messageCmd\n .command(\"edit\")\n .description(\"Edit a message\")\n .argument(\"<target>\", \"Slack message URL, #channel, or channel ID\")\n .argument(\"<text>\", \"New message text\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--ts <ts>\", \"Message ts (required when using #channel/channel id)\")\n .action(async (...args) => {\n const [targetInput, text, options] = args as [\n string,\n string,\n { workspace?: string; ts?: string },\n ];\n try {\n const payload = await editMessage({\n ctx: input.ctx,\n targetInput,\n text,\n options,\n });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n messageCmd\n .command(\"delete\")\n .description(\"Delete a message\")\n .argument(\"<target>\", \"Slack message URL, #channel, or channel ID\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--ts <ts>\", \"Message ts (required when using #channel/channel id)\")\n .action(async (...args) => {\n const [targetInput, options] = args as [string, { workspace?: string; ts?: string }];\n try {\n const payload = await deleteMessage({\n ctx: input.ctx,\n targetInput,\n options,\n });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n messageCmd\n .command(\"send\")\n .description(\"Send a message (optionally into a thread)\")\n .argument(\"<target>\", \"Slack message URL, #name/name, or channel id\")\n .argument(\"[text]\", \"Message text to post (optional when using --attach)\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--thread-ts <ts>\", \"Thread root ts to post into (optional)\")\n .option(\"--attach <path>\", \"Attach a local file path (repeatable)\", collectOptionValue, [])\n .action(async (...args) => {\n const [targetInput, text, options] = args as [\n string,\n string | undefined,\n { workspace?: string; threadTs?: string; attach?: string[] },\n ];\n const hasAttach = (options.attach ?? []).length > 0;\n if (!text && !hasAttach) {\n console.error(\"Error: <text> is required when no --attach files are provided.\");\n process.exitCode = 1;\n return;\n }\n try {\n const payload = await sendMessage({\n ctx: input.ctx,\n targetInput,\n text: text ?? \"\",\n options,\n });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n messageCmd\n .command(\"draft\")\n .description(\"Open a rich Slack-like editor to compose and send a message\")\n .argument(\"<target>\", \"Slack message URL, #name/name, or channel id\")\n .argument(\"[text]\", \"Initial draft text (mrkdwn format)\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--thread-ts <ts>\", \"Thread root ts to post into (optional)\")\n .action(async (...args) => {\n const [targetInput, text, options] = args as [\n string,\n string | undefined,\n { workspace?: string; threadTs?: string },\n ];\n try {\n const payload = await draftMessage({\n ctx: input.ctx,\n targetInput,\n initialText: text,\n options,\n });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n const reactCmd = messageCmd.command(\"react\").description(\"Add or remove reactions\");\n\n reactCmd\n .command(\"add\")\n .description(\"Add a reaction to a message\")\n .argument(\"<target>\", \"Slack message URL, #channel, or channel ID\")\n .argument(\"<emoji>\", \"Emoji to react with (:rocket:, rocket, or 🚀)\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--ts <ts>\", \"Message ts (required when using #channel/channel id)\")\n .action(async (...args) => {\n const [targetInput, emoji, options] = args as [\n string,\n string,\n { workspace?: string; ts?: string },\n ];\n try {\n const payload = await reactOnTarget({\n ctx: input.ctx,\n action: \"add\",\n targetInput,\n emoji,\n options,\n });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n reactCmd\n .command(\"remove\")\n .description(\"Remove a reaction from a message\")\n .argument(\"<target>\", \"Slack message URL, #channel, or channel ID\")\n .argument(\"<emoji>\", \"Emoji to remove (:rocket:, rocket, or 🚀)\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--ts <ts>\", \"Message ts (required when using #channel/channel id)\")\n .action(async (...args) => {\n const [targetInput, emoji, options] = args as [\n string,\n string,\n { workspace?: string; ts?: string },\n ];\n try {\n const payload = await reactOnTarget({\n ctx: input.ctx,\n action: \"remove\",\n targetInput,\n emoji,\n options,\n });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n}\n",
|
|
@@ -63,9 +64,9 @@
|
|
|
63
64
|
"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",
|
|
64
65
|
"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",
|
|
65
66
|
"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",
|
|
66
|
-
"import type { Command } from \"commander\";\nimport type { CliContext } from \"./context.ts\";\nimport { pruneEmpty } from \"../lib/compact-json.ts\";\nimport {\n listAllConversations,\n listUserConversations,\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\";\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"
|
|
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"
|
|
67
68
|
],
|
|
68
|
-
"mappings": "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",
|
|
69
|
-
"debugId": "
|
|
69
|
+
"mappings": "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",
|
|
70
|
+
"debugId": "5ADF75C59137BC5064756E2164756E21",
|
|
70
71
|
"names": []
|
|
71
72
|
}
|