🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@robinpath/slack

Package Overview
Dependencies
Maintainers
4
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@robinpath/slack - npm Package Compare versions

Comparing version
0.1.1
to
0.3.0
+6
dist/index.d.ts
import type { ModuleAdapter } from "@robinpath/core";
declare const SlackModule: ModuleAdapter;
export default SlackModule;
export { SlackModule };
export { SlackFunctions, SlackFunctionMetadata, SlackModuleMetadata, SlackCredentialTypes, } from "./slack.js";
//# sourceMappingURL=index.d.ts.map
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AASrD,QAAA,MAAM,WAAW,EAAE,aAQlB,CAAC;AAEF,eAAe,WAAW,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,YAAY,CAAC"}
import { SlackFunctions, SlackFunctionMetadata, SlackModuleMetadata, SlackCredentialTypes, configureSlack, } from "./slack.js";
const SlackModule = {
name: "slack",
functions: SlackFunctions,
functionMetadata: SlackFunctionMetadata,
moduleMetadata: SlackModuleMetadata,
credentialTypes: SlackCredentialTypes,
configure: configureSlack,
global: false,
};
export default SlackModule;
export { SlackModule };
export { SlackFunctions, SlackFunctionMetadata, SlackModuleMetadata, SlackCredentialTypes, } from "./slack.js";
//# sourceMappingURL=index.js.map
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,GAAkB;IACjC,IAAI,EAAE,OAAO;IACb,SAAS,EAAE,cAAc;IACzB,gBAAgB,EAAE,qBAAqB;IACvC,cAAc,EAAE,mBAAmB;IACnC,eAAe,EAAE,oBAAoB;IACrC,SAAS,EAAE,cAAc;IACzB,MAAM,EAAE,KAAK;CACd,CAAC;AAEF,eAAe,WAAW,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,YAAY,CAAC"}
/**
* RobinPath Slack Module (Node port)
*
* Slack integration via the Web API and Incoming Webhooks. Mirror of
* packages/php/slack/src/index.php for the WordPress plugin; shares the
* same credential contract, metadata shape, and error taxonomy so the
* visual editor can render both identically.
*
* Authentication uses the RobinPath credential vault. Every Web-API
* handler takes a credential slug as its first argument; the module
* resolves the stored bot token (`xoxb-…`) at call time via the injected
* ModuleHost. `sendWebhook` takes a literal webhook URL instead — the URL
* is the secret, so store it in a `slack_webhook` credential and resolve
* via `credential.field` if you want it scrubbed from logs.
*
* Credential types declared by this module:
* - slack_bot_token : { token, workspace? } → Bearer auth on api.slack.com
* - slack_webhook : { url } → Posted to as-is
*/
import type { BuiltinHandler, CredentialTypeSchema, FunctionMetadata, ModuleHost, ModuleMetadata } from "@robinpath/core";
export declare function configureSlack(h: ModuleHost): void;
export declare const SlackFunctions: Record<string, BuiltinHandler>;
export declare const SlackCredentialTypes: CredentialTypeSchema[];
export declare const SlackFunctionMetadata: Record<string, FunctionMetadata>;
export declare const SlackModuleMetadata: ModuleMetadata;
//# sourceMappingURL=slack.d.ts.map
{"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../src/slack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,cAAc,EAEf,MAAM,iBAAiB,CAAC;AAgBzB,wBAAgB,cAAc,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAElD;AA+cD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAazD,CAAC;AAIF,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,EA4CtD,CAAC;AA6GF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CA2elE,CAAC;AAIF,eAAO,MAAM,mBAAmB,EAAE,cA4CjC,CAAC"}
/**
* RobinPath Slack Module (Node port)
*
* Slack integration via the Web API and Incoming Webhooks. Mirror of
* packages/php/slack/src/index.php for the WordPress plugin; shares the
* same credential contract, metadata shape, and error taxonomy so the
* visual editor can render both identically.
*
* Authentication uses the RobinPath credential vault. Every Web-API
* handler takes a credential slug as its first argument; the module
* resolves the stored bot token (`xoxb-…`) at call time via the injected
* ModuleHost. `sendWebhook` takes a literal webhook URL instead — the URL
* is the secret, so store it in a `slack_webhook` credential and resolve
* via `credential.field` if you want it scrubbed from logs.
*
* Credential types declared by this module:
* - slack_bot_token : { token, workspace? } → Bearer auth on api.slack.com
* - slack_webhook : { url } → Posted to as-is
*/
import { readFileSync } from "node:fs";
// ── Module-local state (populated by configure hook) ────────────────────
const state = {};
function host() {
if (!state.host) {
throw new Error("Slack module not initialized. Pass the adapter to rp.registerModule() via loadModule so its configure() hook runs first.");
}
return state.host;
}
export function configureSlack(h) {
state.host = h;
}
// ── Constants ──────────────────────────────────────────────────────────
const API_BASE = "https://slack.com/api/";
const CREDENTIAL_TYPE = "slack_bot_token";
const WEBHOOK_CREDENTIAL_TYPE = "slack_webhook";
function errorReturn(error, code, extra = {}) {
return { error, code, ...extra };
}
// ── Credential resolver ────────────────────────────────────────────────
async function resolveToken(credentialSlug) {
if (!credentialSlug) {
return errorReturn("Credential slug is required.", "credential_not_found");
}
let fields;
try {
fields = await host().credentials.get(credentialSlug);
}
catch (e) {
return errorReturn(e instanceof Error ? e.message : String(e), "credential_not_found");
}
if (!fields) {
return errorReturn(`Credential '${credentialSlug}' not found.`, "credential_not_found");
}
const token = String(fields.token ?? "");
if (!token) {
return errorReturn(`Credential '${credentialSlug}' has no \`token\` field.`, "token_missing");
}
return { token };
}
// ── HTTP helpers ───────────────────────────────────────────────────────
/**
* POST to the Slack Web API and normalize the response.
*
* Slack quirk: non-2xx responses are rare — most errors come back as
* HTTP 200 with `{ok: false, error: '…'}`. We check both.
*/
async function callSlackApi(credentialSlug, method, body, contentType = "json") {
const resolved = await resolveToken(credentialSlug);
if ("error" in resolved)
return resolved;
const init = {
method: "POST",
headers: {
Authorization: `Bearer ${resolved.token}`,
"Content-Type": contentType === "json"
? "application/json; charset=utf-8"
: "application/x-www-form-urlencoded",
},
};
if (contentType === "json") {
init.body = JSON.stringify(body);
}
else {
const params = new URLSearchParams();
for (const [k, v] of Object.entries(body)) {
if (v === undefined || v === null)
continue;
params.set(k, typeof v === "string" ? v : String(v));
}
init.body = params.toString();
}
let response;
try {
response = await fetch(`${API_BASE}${method}`, init);
}
catch (e) {
return errorReturn(e instanceof Error ? e.message : String(e), "transport");
}
const raw = await response.text();
let decoded;
try {
decoded = raw ? JSON.parse(raw) : null;
}
catch {
decoded = null;
}
if (!decoded || typeof decoded !== "object") {
return errorReturn(`Slack returned non-JSON for ${method}: ${raw.slice(0, 200)}`, "transport", { status: response.status });
}
const body_ = decoded;
if (!body_.ok) {
const slackErr = String(body_.error ?? "unknown_error");
return {
...body_,
error: `Slack ${method} failed: ${slackErr}`,
code: "slack_error",
slack_error: slackErr,
status: response.status,
};
}
return body_;
}
// ── Build chat.postMessage body from channel/text/options ──────────────
function buildMessageBody(channel, text, opts) {
const body = {
channel,
text,
};
// Map our camelCase option names to Slack's snake_case fields.
const map = {
blocks: "blocks",
attachments: "attachments",
unfurlLinks: "unfurl_links",
unfurlMedia: "unfurl_media",
iconEmoji: "icon_emoji",
iconUrl: "icon_url",
username: "username",
threadTs: "thread_ts",
replyBroadcast: "reply_broadcast",
parse: "parse",
linkNames: "link_names",
mrkdwn: "mrkdwn",
};
for (const [opt, api] of Object.entries(map)) {
if (opts[opt] !== undefined)
body[api] = opts[opt];
}
return body;
}
// ── Handlers ───────────────────────────────────────────────────────────
const send = async (args) => {
const cred = String(args[0] ?? "");
const channel = String(args[1] ?? "");
const text = String(args[2] ?? "");
const opts = (args[3] && typeof args[3] === "object" ? args[3] : {});
if (!channel) {
return errorReturn("Channel is required.", "channel_missing");
}
const body = buildMessageBody(channel, text, opts);
return (await callSlackApi(cred, "chat.postMessage", body));
};
const sendWebhook = async (args) => {
const url = String(args[0] ?? "");
const text = String(args[1] ?? "");
const opts = (args[2] && typeof args[2] === "object" ? args[2] : {});
if (!url) {
return errorReturn("Webhook URL is required.", "webhook_url_missing");
}
const body = { text };
const map = {
username: "username",
iconEmoji: "icon_emoji",
iconUrl: "icon_url",
blocks: "blocks",
attachments: "attachments",
};
for (const [opt, api] of Object.entries(map)) {
if (opts[opt] !== undefined)
body[api] = opts[opt];
}
let response;
try {
response = await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(body),
});
}
catch (e) {
return errorReturn(e instanceof Error ? e.message : String(e), "transport");
}
const rawBody = await response.text();
return {
ok: response.status >= 200 && response.status < 300,
status: response.status,
body: rawBody,
};
};
const reply = async (args) => {
const cred = String(args[0] ?? "");
const channel = String(args[1] ?? "");
const ts = String(args[2] ?? "");
const text = String(args[3] ?? "");
const opts = (args[4] && typeof args[4] === "object" ? args[4] : {});
if (!ts) {
return errorReturn("Parent message ts is required.", "ts_missing");
}
const merged = { ...opts, threadTs: ts };
const body = buildMessageBody(channel, text, merged);
return (await callSlackApi(cred, "chat.postMessage", body));
};
const updateMessage = async (args) => {
const cred = String(args[0] ?? "");
const channel = String(args[1] ?? "");
const ts = String(args[2] ?? "");
const text = String(args[3] ?? "");
const opts = (args[4] && typeof args[4] === "object" ? args[4] : {});
const body = buildMessageBody(channel, text, opts);
body.ts = ts;
return (await callSlackApi(cred, "chat.update", body));
};
const deleteMessage = async (args) => {
const cred = String(args[0] ?? "");
const channel = String(args[1] ?? "");
const ts = String(args[2] ?? "");
return (await callSlackApi(cred, "chat.delete", {
channel,
ts,
}));
};
const react = async (args) => {
const cred = String(args[0] ?? "");
const channel = String(args[1] ?? "");
const ts = String(args[2] ?? "");
let emoji = String(args[3] ?? "");
// Accept :thumbsup: or thumbsup.
emoji = emoji.replace(/^:|:$/g, "");
return (await callSlackApi(cred, "reactions.add", {
channel,
timestamp: ts,
name: emoji,
}));
};
const upload = async (args) => {
const cred = String(args[0] ?? "");
const channels = String(args[1] ?? "");
const opts = (args[2] && typeof args[2] === "object" ? args[2] : {});
// Resolve content source — one of content, base64, or path.
let content = null;
if (typeof opts.content === "string") {
content = opts.content;
}
else if (typeof opts.base64 === "string") {
try {
content = Buffer.from(opts.base64, "base64");
}
catch {
return errorReturn("Invalid base64 in `base64` option.", "no_source");
}
}
else if (typeof opts.path === "string") {
try {
content = readFileSync(opts.path);
}
catch (e) {
return errorReturn(`Cannot read file at ${opts.path}: ${e instanceof Error ? e.message : String(e)}`, "read_error");
}
}
if (content === null) {
return errorReturn("One of `content`, `base64`, or `path` is required.", "no_source");
}
const body = {
channels,
content: Buffer.isBuffer(content) ? content.toString("binary") : content,
};
const map = {
filename: "filename",
filetype: "filetype",
title: "title",
initialComment: "initial_comment",
threadTs: "thread_ts",
};
for (const [opt, api] of Object.entries(map)) {
if (opts[opt] !== undefined)
body[api] = String(opts[opt]);
}
// files.upload uses application/x-www-form-urlencoded.
return (await callSlackApi(cred, "files.upload", body, "form"));
};
const listChannels = async (args) => {
const cred = String(args[0] ?? "");
const opts = (args[1] && typeof args[1] === "object" ? args[1] : {});
const body = {
types: opts.types !== undefined
? String(opts.types)
: "public_channel,private_channel",
exclude_archived: opts.excludeArchived !== undefined ? Boolean(opts.excludeArchived) : true,
limit: opts.limit !== undefined
? Math.max(1, Math.min(1000, Number(opts.limit) | 0))
: 200,
};
const result = await callSlackApi(cred, "conversations.list", body);
if ("error" in result)
return result;
const channels = Array.isArray(result.channels) ? result.channels : [];
return channels.map((ch) => {
const c = (ch && typeof ch === "object" ? ch : {});
return {
id: String(c.id ?? ""),
name: String(c.name ?? ""),
is_private: Boolean(c.is_private ?? false),
is_archived: Boolean(c.is_archived ?? false),
num_members: Number(c.num_members ?? 0) | 0,
};
});
};
const getHistory = async (args) => {
const cred = String(args[0] ?? "");
const channel = String(args[1] ?? "");
const opts = (args[2] && typeof args[2] === "object" ? args[2] : {});
const body = { channel };
if (opts.limit !== undefined) {
body.limit = Math.max(1, Math.min(1000, Number(opts.limit) | 0));
}
if (opts.oldest !== undefined)
body.oldest = String(opts.oldest);
if (opts.latest !== undefined)
body.latest = String(opts.latest);
if (opts.inclusive !== undefined)
body.inclusive = Boolean(opts.inclusive);
const result = await callSlackApi(cred, "conversations.history", body);
if ("error" in result)
return result;
return (Array.isArray(result.messages) ? result.messages : []);
};
const createChannel = async (args) => {
const cred = String(args[0] ?? "");
const name = String(args[1] ?? "");
const isPrivate = Boolean(args[2] ?? false);
return (await callSlackApi(cred, "conversations.create", {
name,
is_private: isPrivate,
}));
};
const userInfo = async (args) => {
const cred = String(args[0] ?? "");
const userId = String(args[1] ?? "");
const result = await callSlackApi(cred, "users.info", { user: userId });
if ("error" in result)
return result;
return (result.user && typeof result.user === "object"
? result.user
: result);
};
const setStatus = async (args) => {
const cred = String(args[0] ?? "");
const text = String(args[1] ?? "");
const emoji = args[2] !== undefined ? String(args[2]) : "";
const expiration = args[3] !== undefined ? Number(args[3]) | 0 : 0;
return (await callSlackApi(cred, "users.profile.set", {
profile: JSON.stringify({
status_text: text,
status_emoji: emoji,
status_expiration: expiration,
}),
}));
};
// ── Exports: functions map ─────────────────────────────────────────────
export const SlackFunctions = {
send,
sendWebhook,
reply,
updateMessage,
deleteMessage,
react,
upload,
listChannels,
getHistory,
createChannel,
userInfo,
setStatus,
};
// ── Exports: credential types ──────────────────────────────────────────
export const SlackCredentialTypes = [
{
slug: CREDENTIAL_TYPE,
title: "Slack Bot Token",
icon: "slack",
fields: [
{
name: "token",
title: "Bot User OAuth Token",
type: "password",
required: true,
placeholder: "xoxb-...",
description: 'Find under "OAuth & Permissions" in your Slack app settings. Starts with xoxb-.',
pattern: "^xox[abp]-",
},
{
name: "workspace",
title: "Workspace",
type: "text",
required: false,
placeholder: "acme",
description: "Optional label — purely informational, used in audit logs.",
},
],
},
{
slug: WEBHOOK_CREDENTIAL_TYPE,
title: "Slack Incoming Webhook",
icon: "slack",
fields: [
{
name: "url",
title: "Webhook URL",
type: "password",
required: true,
placeholder: "https://hooks.slack.com/services/T.../B.../...",
description: 'Created under "Incoming Webhooks" in your Slack app settings. The URL itself is the secret.',
pattern: "^https://hooks\\.slack\\.com/services/.+",
},
],
},
];
// ── Shared parameter descriptors ───────────────────────────────────────
const credentialParam = {
name: "credential",
title: "Credential",
description: "Slug of a saved `slack_bot_token` credential. The bot token is decrypted at call time and never appears in logs.",
dataType: "string",
formInputType: "resource",
required: true,
allowExpression: true,
placeholder: "my_slack_bot",
resource: {
type: "credential",
listFn: "credential.list",
modes: ["list", "expression"],
searchable: true,
filter: { type: CREDENTIAL_TYPE },
},
};
const channelParam = {
name: "channel",
title: "Channel",
description: "Channel ID (`C0123…`), DM ID (`D0123…`), or `#general`-style name. The bot must be a member.",
dataType: "string",
formInputType: "resource",
required: true,
allowExpression: true,
placeholder: "#general",
resource: {
type: "slack_channel",
listFn: "slack.listChannels",
modes: ["list", "byId", "expression"],
searchable: true,
},
};
const textParam = {
name: "text",
title: "Text",
description: "Message text. Supports Slack mrkdwn (asterisks for bold, backticks for code, `<@U…>` for mentions).",
dataType: "string",
formInputType: "textarea",
required: true,
allowExpression: true,
rows: 4,
placeholder: "Hello :wave:",
};
const messageOptionsParam = {
name: "options",
title: "Options",
description: "Extra message fields. Recognized keys:\n blocks : Block Kit array (overrides plain text rendering)\n attachments : Legacy attachments array\n unfurlLinks : bool — unfurl links into previews\n unfurlMedia : bool — unfurl image/video links\n iconEmoji : :emoji: to use as the message icon\n iconUrl : URL to use as the message icon\n username : Override the bot display name\n threadTs : ts of the parent message (turns this into a thread reply)\n replyBroadcast : bool — also post the thread reply to the channel\n parse : 'none' | 'full'\n linkNames : bool — auto-link channel/user names",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 6,
advanced: true,
};
const tsParam = {
name: "ts",
title: "Message timestamp",
description: "The `ts` of the target message (returned by slack.send). Slack uses these as message IDs.",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "1700000000.000100",
};
const slackResponseSchema = {
type: "object",
properties: {
ok: { type: "bool", description: "Slack-side success flag" },
channel: { type: "string" },
ts: { type: "string" },
message: { type: "object" },
error: {
type: "string",
description: "Module error (transport, missing credential)",
},
slack_error: {
type: "string",
description: "Slack-side error code (e.g. channel_not_found)",
},
},
};
const commonErrors = {
credential_not_found: "No credential with that slug exists in the vault.",
token_missing: "The credential exists but does not have a `token` field.",
transport: "Network failure calling slack.com — see error message.",
slack_error: "Slack returned ok:false — see slack_error code (e.g. channel_not_found, not_in_channel).",
};
// ── Exports: function metadata ─────────────────────────────────────────
export const SlackFunctionMetadata = {
// ── Messages ──────────────────────────────────────────────────────
send: {
title: "Send message",
summary: "Post a message to a channel or DM",
description: "Calls `chat.postMessage`. The credential's bot must be in the target channel for non-public channels.",
group: "message",
action: "write",
icon: "send",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: false,
since: "1.0.0",
tags: ["slack", "send", "message", "notify"],
parameters: [credentialParam, channelParam, textParam, messageOptionsParam],
returnType: "object",
returnDescription: "Slack chat.postMessage response: { ok, channel, ts, message }.",
returnSchema: slackResponseSchema,
errors: commonErrors,
examples: [
{
title: "Notify #ops on form submission",
code: 'slack.send "my_slack_bot" "#ops" "New form submission from {{ form.email }}"',
},
{
title: "With Block Kit",
code: 'slack.send "my_slack_bot" "#general" "Build done" {\n blocks: [\n {type: "section", text: {type: "mrkdwn", text: "*Build #42* succeeded"}}\n ]\n}',
},
],
example: 'slack.send "my_slack_bot" "#general" "Hello :wave:"',
},
sendWebhook: {
title: "Send via Incoming Webhook",
summary: "Post a message using an Incoming Webhook URL (no bot token needed)",
description: "Posts to the supplied webhook URL. Faster to set up than a bot token — but the URL is the secret, store it in a `slack_webhook` credential and resolve via `credential.field` if you don't want it in your script source.",
group: "webhook",
action: "write",
icon: "webhook",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: false,
since: "1.0.0",
tags: ["slack", "webhook", "incoming"],
parameters: [
{
name: "webhookUrl",
title: "Webhook URL",
description: "Full Incoming Webhook URL (https://hooks.slack.com/services/…).",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "https://hooks.slack.com/services/T…/B…/…",
validation: { pattern: "^https://hooks\\.slack\\.com/services/.+" },
},
textParam,
{
name: "options",
title: "Options",
description: "Extra fields. Recognized:\n username : override display name\n iconEmoji : :emoji: icon\n iconUrl : URL icon\n blocks : Block Kit array\n attachments : legacy attachments",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 5,
advanced: true,
},
],
returnType: "object",
returnDescription: "{ ok: bool, status: int, body: string }",
errors: commonErrors,
examples: [
{
title: "Quick alert",
code: 'slack.sendWebhook "https://hooks.slack.com/services/T.../B.../..." "Deploy complete"',
},
],
example: 'slack.sendWebhook "https://hooks.slack.com/services/..." "Hello"',
},
reply: {
title: "Reply in thread",
summary: "Post a threaded reply to an existing message",
description: "Convenience wrapper around `send` that sets `thread_ts`. Use the `replyBroadcast` option to also post to the channel.",
group: "message",
action: "write",
icon: "reply",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: false,
since: "1.0.0",
tags: ["slack", "reply", "thread"],
parameters: [
credentialParam,
channelParam,
{
...tsParam,
title: "Parent message ts",
description: "`ts` of the message you are replying to (the head of the thread).",
},
textParam,
{
...messageOptionsParam,
description: "Same as `slack.send`. `threadTs` is set automatically — overriding it here is supported but unusual.",
},
],
returnType: "object",
returnSchema: slackResponseSchema,
errors: commonErrors,
examples: [
{
title: "Thread reply",
code: 'slack.reply "my_slack_bot" "#ops" "1700000000.000100" "Acknowledged."',
},
],
example: 'slack.reply "my_slack_bot" "#ops" "1700.0001" "ack"',
},
updateMessage: {
title: "Update message",
summary: "Edit the text or blocks of an existing message",
description: "Calls `chat.update`. Only messages posted by the same bot can be edited.",
group: "message",
action: "write",
icon: "edit-3",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["slack", "edit", "update"],
parameters: [
credentialParam,
channelParam,
tsParam,
textParam,
messageOptionsParam,
],
returnType: "object",
returnSchema: slackResponseSchema,
errors: commonErrors,
examples: [
{
title: "Edit a status message",
code: 'slack.updateMessage "my_slack_bot" "#general" "1700.0001" "Build now PASSING ✓"',
},
],
example: 'slack.updateMessage "my_slack_bot" "#general" "1700.0001" "Updated"',
},
deleteMessage: {
title: "Delete message",
summary: "Delete a message your bot posted",
description: "Calls `chat.delete`. Bots can only delete their own messages unless granted special scopes.",
group: "message",
action: "delete",
icon: "trash-2",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["slack", "delete"],
parameters: [credentialParam, channelParam, tsParam],
returnType: "object",
returnSchema: slackResponseSchema,
errors: commonErrors,
example: 'slack.deleteMessage "my_slack_bot" "#general" "1700.0001"',
},
react: {
title: "Add reaction",
summary: "Add an emoji reaction to a message",
description: "Calls `reactions.add`. Use the bare emoji name without colons (e.g. `thumbsup`, not `:thumbsup:`).",
group: "message",
action: "write",
icon: "smile",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["slack", "reaction", "emoji"],
parameters: [
credentialParam,
channelParam,
tsParam,
{
name: "emoji",
title: "Emoji name",
description: "Emoji shortcode without colons. E.g. `thumbsup`, `tada`, `eyes`.",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "thumbsup",
validation: { pattern: "^[a-z0-9_+-]+$" },
},
],
returnType: "object",
returnSchema: slackResponseSchema,
errors: commonErrors,
example: 'slack.react "my_slack_bot" "#ops" "1700.0001" "white_check_mark"',
},
// ── Files ─────────────────────────────────────────────────────────
upload: {
title: "Upload file",
summary: "Upload a file (or text snippet) to one or more channels",
description: "Calls `files.upload`. Pass either a base64-encoded `content` string, a raw `text` snippet, or a server-side `path` to read from disk.",
group: "files",
action: "upload",
icon: "upload",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: false,
since: "1.0.0",
tags: ["slack", "file", "upload"],
parameters: [
credentialParam,
{
name: "channels",
title: "Channels",
description: "Comma-separated list of channel IDs/names to share the file in.",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "#general,#ops",
},
{
name: "options",
title: "Options",
description: "File source + metadata. Provide ONE of:\n content : raw text content (snippet)\n base64 : base64-encoded binary file content\n path : server-side absolute path to read\n\nPlus optional:\n filename : name shown in Slack\n filetype : Slack filetype slug (text, json, csv, png, …)\n title : title displayed above the file\n initialComment : message accompanying the file\n threadTs : post into a thread",
dataType: "object",
formInputType: "json",
required: true,
allowExpression: true,
language: "json",
rows: 6,
},
],
returnType: "object",
returnDescription: "Slack files.upload response with file metadata.",
errors: {
...commonErrors,
no_source: "Must provide one of: content, base64, or path.",
read_error: "Could not read the file at `path`.",
},
examples: [
{
title: "Upload a CSV snippet",
code: 'slack.upload "my_slack_bot" "#reports" {\n filename: "report.csv",\n filetype: "csv",\n content: "name,total\\nada,42",\n initialComment: "Today\'s numbers"\n}',
},
],
example: 'slack.upload "my_slack_bot" "#reports" {filename: "x.txt", content: "hi"}',
},
// ── Channels ──────────────────────────────────────────────────────
listChannels: {
title: "List channels",
summary: "List public + private channels the bot can see",
description: "Calls `conversations.list`. Returns a normalized array of `{id, name, is_private, is_archived, num_members}`.",
group: "channels",
action: "query",
icon: "list",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["slack", "channels", "list"],
parameters: [
credentialParam,
{
name: "options",
title: "Options",
description: "Recognized keys:\n types : comma-separated 'public_channel,private_channel,mpim,im' (default 'public_channel,private_channel')\n excludeArchived : bool (default true)\n limit : int 1-1000 (default 200)",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 4,
advanced: true,
},
],
returnType: "array",
returnDescription: "Array of channel objects: { id, name, is_private, is_archived, num_members }.",
errors: commonErrors,
example: 'slack.listChannels "my_slack_bot"',
},
getHistory: {
title: "Get channel history",
summary: "Read recent messages from a channel",
description: "Calls `conversations.history`. Returns the most recent messages first.",
group: "channels",
action: "query",
icon: "message-square",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["slack", "history", "messages"],
parameters: [
credentialParam,
channelParam,
{
name: "options",
title: "Options",
description: "Recognized keys:\n limit : int 1-1000 (default 100)\n oldest : ts — only messages after this\n latest : ts — only messages before this\n inclusive : bool",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 4,
advanced: true,
},
],
returnType: "array",
returnDescription: "Array of message objects.",
errors: commonErrors,
example: 'slack.getHistory "my_slack_bot" "#ops" {limit: 20}',
},
createChannel: {
title: "Create channel",
summary: "Create a new channel",
description: "Calls `conversations.create`. Bot needs `channels:manage` (public) or `groups:write` (private).",
group: "channels",
action: "write",
icon: "folder-plus",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: false,
since: "1.0.0",
tags: ["slack", "channel", "create"],
parameters: [
credentialParam,
{
name: "name",
title: "Channel name",
description: "Lowercase, no spaces or special chars. Slack will auto-prepend # for the response.",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "project-launch",
validation: { pattern: "^[a-z0-9_-]+$", maxLength: 80 },
},
{
name: "isPrivate",
title: "Private channel",
description: "Create as a private channel.",
dataType: "boolean",
formInputType: "checkbox",
required: false,
defaultValue: false,
allowExpression: true,
},
],
returnType: "object",
returnDescription: "Slack channel object.",
errors: {
...commonErrors,
name_taken: "A channel with that name already exists.",
},
example: 'slack.createChannel "my_slack_bot" "alerts"',
},
// ── Users ─────────────────────────────────────────────────────────
userInfo: {
title: "Get user info",
summary: "Look up a user by Slack ID",
description: "Calls `users.info`. Returns the full Slack user object (real_name, profile, tz, etc.).",
group: "users",
action: "read",
icon: "user",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["slack", "user", "lookup"],
parameters: [
credentialParam,
{
name: "userId",
title: "User ID",
description: "Slack user ID (`U…`).",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "U0123ABCD",
validation: { pattern: "^[UW][A-Z0-9]+$" },
},
],
returnType: "object",
errors: {
...commonErrors,
user_not_found: "No user with that ID exists in this workspace.",
},
example: 'slack.userInfo "my_slack_bot" "U0123ABCD"',
},
setStatus: {
title: "Set status",
summary: "Set the bot user's status text and emoji",
description: "Calls `users.profile.set` with the status_text/emoji/expiration fields. Affects the *bot user*, not workspace members.",
group: "users",
action: "write",
icon: "circle-dot",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["slack", "status", "profile"],
parameters: [
credentialParam,
{
name: "text",
title: "Status text",
description: "Short status text (≤100 chars). Empty string clears the status.",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "Out for lunch",
validation: { maxLength: 100 },
},
{
name: "emoji",
title: "Status emoji",
description: "Emoji shortcode with colons. E.g. `:taco:`.",
dataType: "string",
formInputType: "text",
required: false,
allowExpression: true,
placeholder: ":taco:",
},
{
name: "expiration",
title: "Expiration",
description: "Unix timestamp when the status auto-clears. 0 = never.",
dataType: "number",
formInputType: "number",
required: false,
defaultValue: 0,
allowExpression: true,
validation: { min: 0 },
},
],
returnType: "object",
errors: commonErrors,
example: 'slack.setStatus "my_slack_bot" "Heads down" ":no_bell:" 0',
},
};
// ── Exports: module metadata ───────────────────────────────────────────
export const SlackModuleMetadata = {
slug: "slack",
title: "Slack",
summary: "Send messages, react, upload files, and manage channels via the Slack Web API + Incoming Webhooks",
description: "Full Slack integration. Bot-token operations require a saved `slack_bot_token` credential; webhook posts can use a `slack_webhook` credential or a literal URL.\n\nEvery method returns the parsed Slack response object so downstream nodes can read message timestamps, channel IDs, etc. directly. Errors are returned as `{error: '...', slack_error?: '...'}` rather than thrown.",
category: "communication",
icon: "icon.svg",
color: "#4A154B",
version: "0.2.0",
docsUrl: "https://docs.robinpath.com/modules/slack",
status: "stable",
requires: [],
minNodeVersion: "18.0.0",
credentialsType: CREDENTIAL_TYPE,
operationGroups: {
message: {
title: "Messages",
description: "Send, edit, delete, and react to messages.",
order: 1,
},
webhook: {
title: "Webhooks",
description: "Post via Incoming Webhooks (no bot token needed).",
order: 2,
},
files: {
title: "Files",
description: "Upload files to channels and DMs.",
order: 3,
},
channels: {
title: "Channels",
description: "List, read history of, and create channels.",
order: 4,
},
users: {
title: "Users",
description: "Look up users and manage your own profile.",
order: 5,
},
},
methods: Object.keys(SlackFunctions),
};
//# sourceMappingURL=slack.js.map
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../src/slack.ts"],"names":[],"mappings":"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"}
+16
-7
{
"name": "@robinpath/slack",
"version": "0.1.1",
"version": "0.3.0",
"publishConfig": {

@@ -23,6 +23,6 @@ "access": "public"

"peerDependencies": {
"@robinpath/core": ">=0.20.0"
"@robinpath/core": ">=0.40.0"
},
"devDependencies": {
"@robinpath/core": "^0.30.1",
"@robinpath/core": "^0.40.0",
"typescript": "^5.6.0"

@@ -35,3 +35,6 @@ },

"api",
"webhook"
"webhook",
"chat",
"notification",
"bot"
],

@@ -41,7 +44,13 @@ "license": "MIT",

"category": "messaging",
"type": "integration",
"auth": "bearer-token",
"type": "module",
"auth": "credential-vault",
"functionCount": 12,
"baseUrl": "https://slack.com"
"baseUrl": "https://slack.com",
"language": "nodejs",
"platforms": [
"cloud",
"cli",
"desktop"
]
}
}

@@ -22,3 +22,3 @@ # @robinpath/slack

```bash
npm install @robinpath/slack
robinpath add @robinpath/slack
```

@@ -25,0 +25,0 @@