eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
63 lines (62 loc) • 2.91 kB
TypeScript
/**
* Pure parsers for Vercel Connect CLI/API payloads used by Slackbot
* provisioning: connector-list shapes, the `connect create` stdout, and the
* connector detail response. No subprocesses or I/O — just shape validation —
* so the provisioning orchestrator ({@link import("./slackbot.js")}) stays
* focused on flow and these stay trivially testable.
*/
import { z } from "zod";
export interface VercelConnectListResponse {
/** `vercel connect list -F json` (current CLI). */
connectors?: unknown;
/** Older CLI builds emitted the same array under `clients`. */
clients?: unknown;
}
declare const SlackConnectorRefSchema: z.ZodObject<{
uid: z.ZodString;
id: z.ZodString;
}, z.core.$strip>;
/** Identifiers returned by Vercel Connect for a Slack connector. */
export type SlackConnectorRef = z.infer<typeof SlackConnectorRefSchema>;
/** Slack workspace metadata exposed by a connected Slack connector. */
export interface SlackWorkspaceConnection {
workspaceUrl: string;
workspaceName?: string;
}
/** Parsed Slack connector state returned by Vercel's connector detail API. */
export interface SlackConnectorDetails {
ref: SlackConnectorRef;
workspace?: SlackWorkspaceConnection;
}
/**
* Parses the exact connector response. Vercel reports a completed Slack
* workspace connection in `data.slackTeam`; its installations collection can
* remain empty even after browser setup succeeds.
*/
export declare function parseSlackConnectorDetails(body: unknown): SlackConnectorDetails | undefined;
/**
* Reads the connector identifiers from `vercel connect create … -F json`
* stdout, the authoritative source for the just-created connector's UID.
* Returns `undefined` when stdout is empty or not the expected JSON.
*/
export declare function parseCreatedSlackConnector(stdout: string): SlackConnectorRef | undefined;
/**
* Finds the expected connector, or the newest Slack connector already attached to this project.
*/
export declare function pickSlackConnector(listJson: unknown, projectId: string | undefined, expectedUid: string | undefined): SlackConnectorRef | undefined;
/**
* Turns a Slack `app_redirect` install URL into a deep link that opens the
* Messages tab, a DM compose with the bot, instead of the app's about page.
* Slack honors `tab=messages` only on `app_redirect` links, the ones carrying
* `app` and `team` ids; any other URL is returned unchanged.
* See https://docs.slack.dev/interactivity/deep-linking/.
*/
export declare function slackMessageDeepLink(url: string): string;
/** A Slack connector plus the project ids it is attached to. */
export interface RawSlackConnector {
uid: string;
projectIds: readonly string[];
}
/** Parses Slack connectors (uid + attached project ids) from a connect-list response. */
export declare function parseSlackConnectors(listJson: unknown): RawSlackConnector[];
export {};