🚀 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.0
to
0.1.1
+38
-7
package.json
{
"name": "@robinpath/slack",
"version": "0.1.0",
"publishConfig": { "access": "public" },
"version": "0.1.1",
"publishConfig": {
"access": "public"
},
"type": "module",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"exports": { ".": { "import": "./dist/index.js", "types": "./dist/index.d.ts" } },
"files": ["dist"],
"scripts": { "build": "tsc" },
"peerDependencies": { "@wiredwp/robinpath": ">=0.20.0" },
"devDependencies": { "@wiredwp/robinpath": "^0.30.1", "typescript": "^5.6.0" }
"exports": {
".": {
"import": "./dist/index.js",
"types": "./dist/index.d.ts"
}
},
"files": [
"dist"
],
"scripts": {
"build": "tsc"
},
"peerDependencies": {
"@robinpath/core": ">=0.20.0"
},
"devDependencies": {
"@robinpath/core": "^0.30.1",
"typescript": "^5.6.0"
},
"description": "Slack Web API and Incoming Webhooks client for messaging, channels, reactions, file uploads, and user management",
"keywords": [
"slack",
"messaging",
"api",
"webhook"
],
"license": "MIT",
"robinpath": {
"category": "messaging",
"type": "integration",
"auth": "bearer-token",
"functionCount": 12,
"baseUrl": "https://slack.com"
}
}
-6
import type { ModuleAdapter } from "@wiredwp/robinpath";
declare const SlackModule: ModuleAdapter;
export default SlackModule;
export { SlackModule };
export { SlackFunctions, SlackFunctionMetadata, SlackModuleMetadata } 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,oBAAoB,CAAC;AAGxD,QAAA,MAAM,WAAW,EAAE,aAMlB,CAAC;AAEF,eAAe,WAAW,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
import { SlackFunctions, SlackFunctionMetadata, SlackModuleMetadata } from "./slack.js";
const SlackModule = {
name: "slack",
functions: SlackFunctions,
functionMetadata: SlackFunctionMetadata,
moduleMetadata: SlackModuleMetadata,
global: false,
}; // as ModuleAdapter
export default SlackModule;
export { SlackModule };
export { SlackFunctions, SlackFunctionMetadata, SlackModuleMetadata } from "./slack.js";
//# sourceMappingURL=index.js.map
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAExF,MAAM,WAAW,GAAkB;IACjC,IAAI,EAAE,OAAO;IACb,SAAS,EAAE,cAAc;IACzB,gBAAgB,EAAE,qBAA4B;IAC9C,cAAc,EAAE,mBAA0B;IAC1C,MAAM,EAAE,KAAK;CACd,CAAC,CAAC,mBAAmB;AAEtB,eAAe,WAAW,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
import type { BuiltinHandler } from "@wiredwp/robinpath";
export declare const SlackFunctions: Record<string, BuiltinHandler>;
export declare const SlackFunctionMetadata: {
setToken: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
send: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
sendWebhook: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
reply: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
react: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
upload: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
listChannels: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
getHistory: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
setStatus: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
userInfo: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
createChannel: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
updateMessage: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
};
export declare const SlackModuleMetadata: {
description: string;
methods: string[];
};
//# sourceMappingURL=slack.d.ts.map
{"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../src/slack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAoC,MAAM,oBAAoB,CAAC;AAyW3F,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAazD,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2IjC,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;CAgB/B,CAAC"}
import { readFileSync, statSync } from "node:fs";
import { basename } from "node:path";
const workspaces = new Map();
// ── Helper ──────────────────────────────────────────────────────────
async function callSlackApi(workspaceId, method, body) {
const config = workspaces.get(workspaceId);
if (!config) {
throw new Error(`Workspace "${workspaceId}" not configured. Call slack.setToken first.`);
}
const response = await fetch(`https://slack.com/api/${method}`, {
method: "POST",
headers: {
Authorization: `Bearer ${config.token}`,
"Content-Type": "application/json",
},
body: JSON.stringify(body),
});
const result = (await response.json());
if (!result.ok) {
throw new Error(`Slack API ${method} failed: ${String(result.error ?? "unknown_error")}`);
}
return result;
}
// ── Function Handlers ───────────────────────────────────────────────
const setToken = (args) => {
const workspaceId = String(args[0] ?? "default");
const token = String(args[1] ?? "");
const opts = (typeof args[2] === "object" && args[2] !== null ? args[2] : {});
if (!token)
throw new Error("Token is required");
workspaces.set(workspaceId, {
token,
defaultChannel: String(opts.defaultChannel ?? "general"),
});
return { workspaceId, defaultChannel: opts.defaultChannel ?? "general" };
};
const send = async (args) => {
const workspaceId = String(args[0] ?? "default");
const channel = String(args[1] ?? "");
const text = String(args[2] ?? "");
const opts = (typeof args[3] === "object" && args[3] !== null ? args[3] : {});
if (!channel) {
const config = workspaces.get(workspaceId);
if (!config)
throw new Error("Channel is required");
}
const body = {
channel: channel || workspaces.get(workspaceId)?.defaultChannel || "general",
text,
};
if (opts.blocks)
body.blocks = opts.blocks;
if (opts.unfurlLinks !== undefined)
body.unfurl_links = Boolean(opts.unfurlLinks);
if (opts.threadTs)
body.thread_ts = String(opts.threadTs);
const result = (await callSlackApi(workspaceId, "chat.postMessage", body));
return { ts: result.ts, channel: result.channel };
};
const sendWebhook = async (args) => {
const webhookUrl = String(args[0] ?? "");
const text = String(args[1] ?? "");
const opts = (typeof args[2] === "object" && args[2] !== null ? args[2] : {});
if (!webhookUrl)
throw new Error("Webhook URL is required");
const body = { text };
if (opts.username)
body.username = String(opts.username);
if (opts.iconEmoji)
body.icon_emoji = String(opts.iconEmoji);
if (opts.blocks)
body.blocks = opts.blocks;
if (opts.attachments)
body.attachments = opts.attachments;
const response = await fetch(webhookUrl, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(body),
});
if (!response.ok) {
const errText = await response.text();
throw new Error(`Webhook request failed (${response.status}): ${errText}`);
}
return { ok: true, status: response.status };
};
const reply = async (args) => {
const workspaceId = String(args[0] ?? "default");
const channel = String(args[1] ?? "");
const threadTs = String(args[2] ?? "");
const text = String(args[3] ?? "");
const opts = (typeof args[4] === "object" && args[4] !== null ? args[4] : {});
if (!channel)
throw new Error("Channel is required");
if (!threadTs)
throw new Error("Thread timestamp (threadTs) is required");
const body = {
channel,
text,
thread_ts: threadTs,
};
if (opts.blocks)
body.blocks = opts.blocks;
if (opts.unfurlLinks !== undefined)
body.unfurl_links = Boolean(opts.unfurlLinks);
const result = (await callSlackApi(workspaceId, "chat.postMessage", body));
return { ts: result.ts, channel: result.channel };
};
const react = async (args) => {
const workspaceId = String(args[0] ?? "default");
const channel = String(args[1] ?? "");
const timestamp = String(args[2] ?? "");
const emoji = String(args[3] ?? "");
if (!channel)
throw new Error("Channel is required");
if (!timestamp)
throw new Error("Message timestamp is required");
if (!emoji)
throw new Error("Emoji name is required");
// Strip colons if provided (e.g. ":thumbsup:" -> "thumbsup")
const emojiName = emoji.replace(/^:|:$/g, "");
await callSlackApi(workspaceId, "reactions.add", {
channel,
timestamp,
name: emojiName,
});
return { ok: true, channel, timestamp, emoji: emojiName };
};
const upload = async (args) => {
const workspaceId = String(args[0] ?? "default");
const channel = String(args[1] ?? "");
const filePath = String(args[2] ?? "");
const opts = (typeof args[3] === "object" && args[3] !== null ? args[3] : {});
if (!channel)
throw new Error("Channel is required");
if (!filePath)
throw new Error("File path is required");
const config = workspaces.get(workspaceId);
if (!config) {
throw new Error(`Workspace "${workspaceId}" not configured. Call slack.setToken first.`);
}
// Read file
const fileData = readFileSync(filePath);
const fileName = opts.title ? String(opts.title) : basename(filePath);
const fileSize = statSync(filePath).size;
// Step 1: Get upload URL
const uploadUrlResult = (await callSlackApi(workspaceId, "files.getUploadURLExternal", {
filename: fileName,
length: fileSize,
}));
const uploadUrl = String(uploadUrlResult.upload_url);
const fileId = String(uploadUrlResult.file_id);
// Step 2: PUT file data to the upload URL
const putResponse = await fetch(uploadUrl, {
method: "PUT",
headers: { "Content-Type": "application/octet-stream" },
body: fileData,
});
if (!putResponse.ok) {
throw new Error(`File upload PUT failed (${putResponse.status}): ${await putResponse.text()}`);
}
// Step 3: Complete the upload
const completeBody = {
files: [{ id: fileId, title: fileName }],
channel_id: channel,
};
if (opts.initialComment) {
completeBody.initial_comment = String(opts.initialComment);
}
const completeResult = (await callSlackApi(workspaceId, "files.completeUploadExternal", completeBody));
return {
ok: true,
fileId,
files: completeResult.files,
};
};
const listChannels = async (args) => {
const workspaceId = String(args[0] ?? "default");
const opts = (typeof args[1] === "object" && args[1] !== null ? args[1] : {});
const body = {
limit: Number(opts.limit ?? 200),
};
if (opts.types)
body.types = String(opts.types); // e.g. "public_channel,private_channel"
const result = (await callSlackApi(workspaceId, "conversations.list", body));
const channels = result.channels ?? [];
return channels.map((ch) => ({
id: ch.id,
name: ch.name,
topic: ch.topic?.value ?? "",
}));
};
const getHistory = async (args) => {
const workspaceId = String(args[0] ?? "default");
const channel = String(args[1] ?? "");
const opts = (typeof args[2] === "object" && args[2] !== null ? args[2] : {});
if (!channel)
throw new Error("Channel is required");
const body = {
channel,
limit: Number(opts.limit ?? 20),
};
if (opts.oldest)
body.oldest = String(opts.oldest);
if (opts.latest)
body.latest = String(opts.latest);
const result = (await callSlackApi(workspaceId, "conversations.history", body));
return result.messages ?? [];
};
const setStatus = async (args) => {
const workspaceId = String(args[0] ?? "default");
const text = String(args[1] ?? "");
const emoji = String(args[2] ?? "");
const opts = (typeof args[3] === "object" && args[3] !== null ? args[3] : {});
const profile = {
status_text: text,
status_emoji: emoji,
};
if (opts.expiration) {
profile.status_expiration = Number(opts.expiration);
}
const result = (await callSlackApi(workspaceId, "users.profile.set", {
profile,
}));
return { ok: true, profile: result.profile };
};
const userInfo = async (args) => {
const workspaceId = String(args[0] ?? "default");
const userId = String(args[1] ?? "");
if (!userId)
throw new Error("User ID is required");
const result = (await callSlackApi(workspaceId, "users.info", {
user: userId,
}));
const user = result.user;
const profile = (user.profile ?? {});
return {
id: user.id,
name: user.name,
real_name: user.real_name,
email: profile.email ?? null,
is_admin: user.is_admin ?? false,
};
};
const createChannel = async (args) => {
const workspaceId = String(args[0] ?? "default");
const name = String(args[1] ?? "");
const opts = (typeof args[2] === "object" && args[2] !== null ? args[2] : {});
if (!name)
throw new Error("Channel name is required");
const body = {
name,
};
if (opts.isPrivate)
body.is_private = true;
const result = (await callSlackApi(workspaceId, "conversations.create", body));
const channel = result.channel;
return {
id: channel.id,
name: channel.name,
is_private: channel.is_private ?? false,
};
};
const updateMessage = async (args) => {
const workspaceId = String(args[0] ?? "default");
const channel = String(args[1] ?? "");
const ts = String(args[2] ?? "");
const text = String(args[3] ?? "");
const opts = (typeof args[4] === "object" && args[4] !== null ? args[4] : {});
if (!channel)
throw new Error("Channel is required");
if (!ts)
throw new Error("Message timestamp (ts) is required");
const body = {
channel,
ts,
text,
};
if (opts.blocks)
body.blocks = opts.blocks;
const result = (await callSlackApi(workspaceId, "chat.update", body));
return { ts: result.ts, channel: result.channel, text: result.text };
};
// ── Exports ─────────────────────────────────────────────────────────
export const SlackFunctions = {
setToken,
send,
sendWebhook,
reply,
react,
upload,
listChannels,
getHistory,
setStatus,
userInfo,
createChannel,
updateMessage,
};
export const SlackFunctionMetadata = {
setToken: {
description: "Store a Slack Bot User OAuth Token for a workspace",
parameters: [
{ name: "workspaceId", dataType: "string", description: "Workspace identifier (e.g. 'default')", formInputType: "text", required: true },
{ name: "token", dataType: "string", description: "Bot User OAuth Token (xoxb-...)", formInputType: "text", required: true },
{ name: "options", dataType: "object", description: "{defaultChannel?: string}", formInputType: "text", required: false },
],
returnType: "object",
returnDescription: "{workspaceId, defaultChannel}",
example: 'slack.setToken "default" "xoxb-your-token" {"defaultChannel": "general"}',
},
send: {
description: "Send a message to a Slack channel via chat.postMessage",
parameters: [
{ name: "workspaceId", dataType: "string", description: "Workspace identifier", formInputType: "text", required: true },
{ name: "channel", dataType: "string", description: "Channel ID or name", formInputType: "text", required: true },
{ name: "text", dataType: "string", description: "Message text", formInputType: "text", required: true },
{ name: "options", dataType: "object", description: "{blocks?, unfurlLinks?, threadTs?}", formInputType: "text", required: false },
],
returnType: "object",
returnDescription: "{ts, channel}",
example: 'slack.send "default" "#general" "Hello from RobinPath!"',
},
sendWebhook: {
description: "Send a message via a Slack Incoming Webhook URL (no token needed)",
parameters: [
{ name: "webhookUrl", dataType: "string", description: "Incoming Webhook URL", formInputType: "text", required: true },
{ name: "text", dataType: "string", description: "Message text", formInputType: "text", required: true },
{ name: "options", dataType: "object", description: "{username?, iconEmoji?, blocks?}", formInputType: "text", required: false },
],
returnType: "object",
returnDescription: "{ok, status}",
example: 'slack.sendWebhook "https://hooks.slack.com/services/T.../B.../xxx" "Deploy complete!"',
},
reply: {
description: "Reply to a message thread via chat.postMessage with thread_ts",
parameters: [
{ name: "workspaceId", dataType: "string", description: "Workspace identifier", formInputType: "text", required: true },
{ name: "channel", dataType: "string", description: "Channel ID", formInputType: "text", required: true },
{ name: "threadTs", dataType: "string", description: "Parent message timestamp", formInputType: "text", required: true },
{ name: "text", dataType: "string", description: "Reply text", formInputType: "text", required: true },
{ name: "options", dataType: "object", description: "{blocks?, unfurlLinks?}", formInputType: "text", required: false },
],
returnType: "object",
returnDescription: "{ts, channel}",
example: 'slack.reply "default" "C01234" "1234567890.123456" "Got it, thanks!"',
},
react: {
description: "Add an emoji reaction to a message via reactions.add",
parameters: [
{ name: "workspaceId", dataType: "string", description: "Workspace identifier", formInputType: "text", required: true },
{ name: "channel", dataType: "string", description: "Channel ID", formInputType: "text", required: true },
{ name: "timestamp", dataType: "string", description: "Message timestamp", formInputType: "text", required: true },
{ name: "emoji", dataType: "string", description: "Emoji name (e.g. 'thumbsup' or ':thumbsup:')", formInputType: "text", required: true },
],
returnType: "object",
returnDescription: "{ok, channel, timestamp, emoji}",
example: 'slack.react "default" "C01234" "1234567890.123456" "thumbsup"',
},
upload: {
description: "Upload a file to a Slack channel using the new file upload API",
parameters: [
{ name: "workspaceId", dataType: "string", description: "Workspace identifier", formInputType: "text", required: true },
{ name: "channel", dataType: "string", description: "Channel ID to share the file in", formInputType: "text", required: true },
{ name: "filePath", dataType: "string", description: "Local path to the file", formInputType: "text", required: true },
{ name: "options", dataType: "object", description: "{title?, initialComment?}", formInputType: "text", required: false },
],
returnType: "object",
returnDescription: "{ok, fileId, files}",
example: 'slack.upload "default" "C01234" "./report.pdf" {"title": "Report", "initialComment": "Here is the report"}',
},
listChannels: {
description: "List Slack channels via conversations.list",
parameters: [
{ name: "workspaceId", dataType: "string", description: "Workspace identifier", formInputType: "text", required: true },
{ name: "options", dataType: "object", description: "{types?, limit?}. types: 'public_channel,private_channel'", formInputType: "text", required: false },
],
returnType: "array",
returnDescription: "Array of {id, name, topic}",
example: 'slack.listChannels "default" {"limit": 50}',
},
getHistory: {
description: "Get message history for a channel via conversations.history",
parameters: [
{ name: "workspaceId", dataType: "string", description: "Workspace identifier", formInputType: "text", required: true },
{ name: "channel", dataType: "string", description: "Channel ID", formInputType: "text", required: true },
{ name: "options", dataType: "object", description: "{limit?, oldest?, latest?}", formInputType: "text", required: false },
],
returnType: "array",
returnDescription: "Array of message objects",
example: 'slack.getHistory "default" "C01234" {"limit": 10}',
},
setStatus: {
description: "Set the authenticated user's status via users.profile.set",
parameters: [
{ name: "workspaceId", dataType: "string", description: "Workspace identifier", formInputType: "text", required: true },
{ name: "text", dataType: "string", description: "Status text", formInputType: "text", required: true },
{ name: "emoji", dataType: "string", description: "Status emoji (e.g. ':house_with_garden:')", formInputType: "text", required: true },
{ name: "options", dataType: "object", description: "{expiration?: number} — Unix timestamp when status expires", formInputType: "text", required: false },
],
returnType: "object",
returnDescription: "{ok, profile}",
example: 'slack.setStatus "default" "Working from home" ":house_with_garden:"',
},
userInfo: {
description: "Get user information via users.info",
parameters: [
{ name: "workspaceId", dataType: "string", description: "Workspace identifier", formInputType: "text", required: true },
{ name: "userId", dataType: "string", description: "Slack user ID (e.g. 'U01234')", formInputType: "text", required: true },
],
returnType: "object",
returnDescription: "{id, name, real_name, email, is_admin}",
example: 'slack.userInfo "default" "U01234ABC"',
},
createChannel: {
description: "Create a new Slack channel via conversations.create",
parameters: [
{ name: "workspaceId", dataType: "string", description: "Workspace identifier", formInputType: "text", required: true },
{ name: "name", dataType: "string", description: "Channel name (lowercase, no spaces)", formInputType: "text", required: true },
{ name: "options", dataType: "object", description: "{isPrivate?: boolean}", formInputType: "text", required: false },
],
returnType: "object",
returnDescription: "{id, name, is_private}",
example: 'slack.createChannel "default" "project-updates" {"isPrivate": true}',
},
updateMessage: {
description: "Update an existing message via chat.update",
parameters: [
{ name: "workspaceId", dataType: "string", description: "Workspace identifier", formInputType: "text", required: true },
{ name: "channel", dataType: "string", description: "Channel ID", formInputType: "text", required: true },
{ name: "ts", dataType: "string", description: "Timestamp of the message to update", formInputType: "text", required: true },
{ name: "text", dataType: "string", description: "New message text", formInputType: "text", required: true },
{ name: "options", dataType: "object", description: "{blocks?}", formInputType: "text", required: false },
],
returnType: "object",
returnDescription: "{ts, channel, text}",
example: 'slack.updateMessage "default" "C01234" "1234567890.123456" "Updated message text"',
},
};
export const SlackModuleMetadata = {
description: "Slack Web API and Incoming Webhooks client for messaging, channels, reactions, file uploads, and user management",
methods: [
"setToken",
"send",
"sendWebhook",
"reply",
"react",
"upload",
"listChannels",
"getHistory",
"setStatus",
"userInfo",
"createChannel",
"updateMessage",
],
};
//# sourceMappingURL=slack.js.map
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../src/slack.ts"],"names":[],"mappings":"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"}