{"_id":"@aabuhijleh/courier","name":"@aabuhijleh/courier","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@aabuhijleh/courier","version":"0.1.0","description":"Two CLIs, jira and slack: read an issue or thread, download the files on it, upload files back, and post or delete Slack messages.","keywords":["jira","slack","cli","attachments","bun"],"homepage":"https://github.com/aabuhijleh/abed-hub/tree/main/packages/courier","bugs":{"url":"https://github.com/aabuhijleh/abed-hub/issues"},"repository":{"type":"git","url":"git+https://github.com/aabuhijleh/abed-hub.git","directory":"packages/courier"},"license":"MIT","author":{"name":"aabuhijleh"},"type":"module","bin":{"jira":"dist/jira.js","slack":"dist/slack.js"},"scripts":{"build":"bun build ./src/jira.ts ./src/slack.ts --target=bun --outdir=./dist","prepublishOnly":"bun run build","test":"bun test"},"devDependencies":{"@abed-hub/config":"workspace:*","@clack/prompts":"^1.7.0","@types/bun":"latest","citty":"^0.2.2","zod":"^4.4.3"},"packageManager":"bun@1.4.0","engines":{"node":">=24"},"publishConfig":{"access":"public"},"gitHead":"12f77f6252be75d6ce6791fbfc2107b375f5469f","_id":"@aabuhijleh/courier@0.1.0","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-Kwv+RXrN78AbrlpjGPD6FzEZHvca5tfMmU9XSCfV4EYEYQEiVviEObVfz7KcNXLAwXTacT5fwJn75S12KW4M2Q==","shasum":"9f56467f86d63145bef8254d24d32eba1ff7b3d4","tarball":"https://registry.npmjs.org/@aabuhijleh/courier/-/courier-0.1.0.tgz","fileCount":5,"unpackedSize":1297547,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAaGEYZwJdBUZtlAdI732J1jVoPa8sLxmSY1eOUwQUEKAiAHaHrwwZz3YM10Y17jK/b9kejH430wKmcBeA6ArG1+gA=="}]},"_npmUser":{"name":"aabuhijleh","email":"aabuhijleh.dev@gmail.com"},"directories":{},"maintainers":[{"name":"aabuhijleh","email":"aabuhijleh.dev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/courier_0.1.0_1787765689461_0.33509703238385846"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-26T17:34:49.312Z","0.1.0":"2026-08-26T17:34:49.666Z","modified":"2026-08-26T17:34:49.910Z"},"maintainers":[{"name":"aabuhijleh","email":"aabuhijleh.dev@gmail.com"}],"description":"Two CLIs, jira and slack: read an issue or thread, download the files on it, upload files back, and post or delete Slack messages.","homepage":"https://github.com/aabuhijleh/abed-hub/tree/main/packages/courier","keywords":["jira","slack","cli","attachments","bun"],"repository":{"type":"git","url":"git+https://github.com/aabuhijleh/abed-hub.git","directory":"packages/courier"},"author":{"name":"aabuhijleh"},"bugs":{"url":"https://github.com/aabuhijleh/abed-hub/issues"},"license":"MIT","readme":"# @aabuhijleh/courier\n\nCarries files between Slack and Jira from the command line, and reads both. One package,\ntwo bins.\n\n`jira` reads an issue and downloads its attachments, and uploads files to it.\n\n`slack` reads a thread verbatim, downloads every file on it, posts as the bot, and takes\nits own posts back.\n\nThe whole round trip for filing a report:\n\n```bash\nslack pull <slack-permalink> --out ./evidence   # the thread's files, descriptively named\njira attach ABC-123 ./evidence/*\n```\n\n## Prerequisites\n\n[Bun](https://bun.sh). macOS and Linux are supported. On Windows, use WSL.\n\n## Install\n\n```bash\nbun add -g @aabuhijleh/courier\n```\n\n## Setup\n\n```bash\njira setup    # walks through creating an Atlassian API token\nslack setup   # walks through creating a Slack app, then validates the bot token\n```\n\n`slack setup` prints the bot scopes to add before it asks for the token: `channels:history`,\n`channels:read`, `chat:write`, `files:read`, `files:write`, `groups:history`, `groups:read`,\n`users:read`.\n\nBoth write one section of `~/.config/abed-hub/courier/config.json`, or under\n`$XDG_CONFIG_HOME` when that is set. The file holds live API tokens, so it is written mode\n600 inside a mode 700 directory: your user account can read and write it, and no other\naccount on the machine can read it or list the directory. Run `jira config` or\n`slack config` to print the path and the saved settings.\n\n## Commands\n\n| Command | What it does |\n| --- | --- |\n| `jira show <key\\|url>` | Print the issue and download its attachments. |\n| `jira attach <key> <files…>` | Upload files as attachments to the issue. |\n| `jira config [--reveal]` | Print the config path and contents. |\n| `jira setup` | Save Atlassian credentials, or replace an expired token. |\n| `slack thread <link>` | Print the thread verbatim, with its files and permalink. |\n| `slack pull <link> [--out dir]` | Download every file on the thread. |\n| `slack post <channel\\|link> [files…] -m <text>` | Post a message to a channel or thread, files on the same message. |\n| `slack delete <link…> [--files]` | Delete a message the bot posted, and with `--files` the files it carried. |\n| `slack permalink <channel> <ts>` | Print the canonical permalink. |\n| `slack config [--reveal]` | Print the config path and the saved settings. |\n| `slack setup` | Create the Slack app if needed, then save and validate its bot token. |\n\nLeave a positional off and the command prompts for it. `--help` on any command is\ngenerated from the code, so trust it over this table. Every command takes `--json`, and\nspinners go to stderr, so stdout stays pipeable.\n\n## Slack bot limits\n\nThe `slack` bin uses a bot token, which means:\n\n- The bot only sees channels it has been invited to. Run `/invite @<bot>` in each one,\n  private included. Once invited it can read the channel's full history, including files\n  posted before it joined.\n- Human-to-human DMs are unreadable. `slack thread` fails fast on a `D…` conversation. Ask\n  the reporter to repost in a channel.\n- Slack Docs and canvases are not uploaded files and have no bytes to download. `slack pull`\n  skips them with a warning rather than saving Slack's HTML page as if it were evidence.\n- Never enable public distribution on the Slack app. It drops `conversations.history` and\n  `.replies` to one request per minute.\n\n## Develop\n\n```bash\nbun install\nbun test\nbunx tsc --noEmit\nbun run build\n```\n","readmeFilename":"README.md","_rev":"1-fbbb596ef641b26ab4b894f80611cd21"}