feat: add @claudemesh/sdk package for non-Claude-Code clients
Standalone TypeScript SDK that any process can use to join a mesh and send/receive messages. Implements the same WS protocol and libsodium crypto_box encryption as the CLI, with an EventEmitter-based API. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
71
packages/connector-slack/src/config.ts
Normal file
71
packages/connector-slack/src/config.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
/**
|
||||
* Configuration types for the Slack connector.
|
||||
*
|
||||
* All values are loaded from environment variables in index.ts.
|
||||
*/
|
||||
|
||||
export interface SlackConnectorConfig {
|
||||
// Slack
|
||||
/** Bot User OAuth Token (xoxb-...) */
|
||||
slackBotToken: string;
|
||||
/** App-Level Token for Socket Mode (xapp-...) */
|
||||
slackAppToken: string;
|
||||
/** Channel ID to bridge (e.g. C0123456789) */
|
||||
slackChannelId: string;
|
||||
|
||||
// Mesh
|
||||
/** WebSocket URL of the claudemesh broker (wss://...) */
|
||||
brokerUrl: string;
|
||||
/** Mesh UUID */
|
||||
meshId: string;
|
||||
/** Member UUID (this connector's membership) */
|
||||
memberId: string;
|
||||
/** Ed25519 public key, hex-encoded (64 chars) */
|
||||
pubkey: string;
|
||||
/** Ed25519 secret key, hex-encoded (128 chars) */
|
||||
secretKey: string;
|
||||
/** Display name visible to mesh peers (e.g. "Slack-#general") */
|
||||
displayName: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load config from environment variables, throwing on any missing required var.
|
||||
*/
|
||||
export function loadConfigFromEnv(): SlackConnectorConfig {
|
||||
const required: Array<[keyof SlackConnectorConfig, string]> = [
|
||||
["slackBotToken", "SLACK_BOT_TOKEN"],
|
||||
["slackAppToken", "SLACK_APP_TOKEN"],
|
||||
["slackChannelId", "SLACK_CHANNEL_ID"],
|
||||
["brokerUrl", "MESH_BROKER_URL"],
|
||||
["meshId", "MESH_ID"],
|
||||
["memberId", "MESH_MEMBER_ID"],
|
||||
["pubkey", "MESH_PUBKEY"],
|
||||
["secretKey", "MESH_SECRET_KEY"],
|
||||
];
|
||||
|
||||
const missing: string[] = [];
|
||||
const values: Record<string, string> = {};
|
||||
|
||||
for (const [key, envVar] of required) {
|
||||
const val = process.env[envVar];
|
||||
if (!val) {
|
||||
missing.push(envVar);
|
||||
} else {
|
||||
values[key] = val;
|
||||
}
|
||||
}
|
||||
|
||||
if (missing.length > 0) {
|
||||
throw new Error(
|
||||
`Missing required environment variables: ${missing.join(", ")}`,
|
||||
);
|
||||
}
|
||||
|
||||
return {
|
||||
...(values as unknown as Omit<SlackConnectorConfig, "displayName">),
|
||||
displayName:
|
||||
process.env.MESH_DISPLAY_NAME ??
|
||||
process.env.DISPLAY_NAME ??
|
||||
"Slack-connector",
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user