@finalai/final-agent-provider 0.8.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/HOSTING.md +3 -3
- package/README.md +7 -91
- package/dist/modules/channel-factories.d.mts +5 -6
- package/dist/modules/channel-factories.mjs +7 -11
- package/dist/modules/channel-factories.mjs.map +3 -3
- package/dist/modules/channels/inbound.mjs +2 -2
- package/dist/modules/channels/inbound.mjs.map +2 -2
- package/dist/modules/channels/index.d.mts +0 -7
- package/dist/modules/channels/index.mjs +0 -7
- package/dist/modules/channels/index.mjs.map +2 -2
- package/dist/modules/channels/prompt.d.mts +2 -2
- package/dist/modules/channels/prompt.mjs +3 -3
- package/dist/modules/channels/prompt.mjs.map +2 -2
- package/dist/modules/channels/routing.d.mts +1 -1
- package/dist/modules/channels/routing.mjs +1 -1
- package/dist/modules/channels/routing.mjs.map +1 -1
- package/package.json +4 -40
- package/dist/modules/channels/channel-utils.d.mts +0 -132
- package/dist/modules/channels/channel-utils.mjs +0 -445
- package/dist/modules/channels/channel-utils.mjs.map +0 -7
- package/dist/modules/channels/discord-dispatch.d.mts +0 -17
- package/dist/modules/channels/discord-dispatch.mjs +0 -139
- package/dist/modules/channels/discord-dispatch.mjs.map +0 -7
- package/dist/modules/channels/discord-gateway.d.mts +0 -19
- package/dist/modules/channels/discord-gateway.mjs +0 -233
- package/dist/modules/channels/discord-gateway.mjs.map +0 -7
- package/dist/modules/channels/discord.d.mts +0 -9
- package/dist/modules/channels/discord.mjs +0 -904
- package/dist/modules/channels/discord.mjs.map +0 -7
- package/dist/modules/channels/github.d.mts +0 -5
- package/dist/modules/channels/github.mjs +0 -720
- package/dist/modules/channels/github.mjs.map +0 -7
- package/dist/modules/channels/linear.d.mts +0 -4
- package/dist/modules/channels/linear.mjs +0 -621
- package/dist/modules/channels/linear.mjs.map +0 -7
- package/dist/modules/channels/phone.d.mts +0 -8
- package/dist/modules/channels/phone.mjs +0 -382
- package/dist/modules/channels/phone.mjs.map +0 -7
- package/dist/modules/channels/reply-receipts.d.mts +0 -31
- package/dist/modules/channels/reply-receipts.mjs +0 -63
- package/dist/modules/channels/reply-receipts.mjs.map +0 -7
- package/dist/modules/channels/slack.d.mts +0 -7
- package/dist/modules/channels/slack.mjs +0 -1134
- package/dist/modules/channels/slack.mjs.map +0 -7
- package/dist/modules/channels/voice-recording.d.mts +0 -7
- package/dist/modules/channels/voice-recording.mjs +0 -49
- package/dist/modules/channels/voice-recording.mjs.map +0 -7
- package/dist/modules/channels/voice.d.mts +0 -33
- package/dist/modules/channels/voice.mjs +0 -851
- package/dist/modules/channels/voice.mjs.map +0 -7
- package/dist/modules/channels/webhook.d.mts +0 -5
- package/dist/modules/channels/webhook.mjs +0 -76
- package/dist/modules/channels/webhook.mjs.map +0 -7
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../src/channels/discord.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n defineChannel,\n packageRef,\n placeRefSchema,\n jsonValueSchema,\n type ChannelReceiveResult,\n type ChannelEventContextIface,\n type ChannelReceiveContextIface,\n type JsonObject,\n type JsonValue,\n type PlaceRef,\n} from '@finalai/agent-provider';\nimport * as z from 'zod';\nimport {\n mirrorReceiptKey,\n settleMirrorReaction,\n shareReplyReceipt,\n type MirrorReactionResult,\n} from \"./reply-receipts.mjs\";\nimport { createDiscordDispatch } from \"./discord-dispatch.mjs\";\nimport { runDiscordGateway } from \"./discord-gateway.mjs\";\nimport {\n channelBaseUrl,\n addSharedReaction,\n removeSharedReaction,\n providerPlaceKey,\n confirmOAuth,\n deliveryRetention,\n createQueue,\n decisionChoices,\n decisionSummary,\n externalKey,\n freshTimestamp,\n hexBytes,\n parseJson,\n personFor,\n receivePersonMessage,\n refString,\n responseJson,\n startOAuth,\n stateKey,\n takeOAuth,\n textOf,\n completionText,\n} from \"./channel-utils.mjs\";\nconst configSchema = z.object({\n baseUrl: z.string().url().optional(),\n publicKey: z.string().optional(),\n botId: z.string().optional(),\n history: z.union([z.literal('none'), z.literal('linked-members')]).default('none'),\n});\ntype Config = z.infer<typeof configSchema>;\nconst missingMessage = Symbol('missing Discord message');\nconst missingReactionMessage = Symbol('missing Discord reaction message');\nconst api = async (\n ctx: Pick<ChannelReceiveContextIface<Config>, 'credentials'> & { signal?: AbortSignal },\n path: string,\n body?: JsonObject,\n method?: string,\n) => {\n const app = await ctx.credentials.app();\n const response = await ctx.credentials.fetch(`https://discord.com/api/v10${path}`, {\n signal: ctx.signal,\n method: method ?? (body == null ? 'GET' : 'POST'),\n headers: { authorization: `Bot ${app.accessToken}`, 'content-type': 'application/json' },\n ...(body == null ? {} : { body: JSON.stringify(body) }),\n });\n if (response.status === 400 || response.status === 404) {\n const text = await response.text();\n const error = z.object({ code: z.number() }).safeParse(parseJson(text));\n const code = error.success ? error.data.code : null;\n if (response.status === 404 && (method === 'DELETE' || method === 'PATCH'))\n return path.includes('/reactions/') && code === 10008\n ? missingReactionMessage\n : missingMessage;\n throw new Error(`Channel request failed (${response.status}): ${text.slice(0, 500)}`, {\n cause: { status: response.status, code },\n });\n }\n return responseJson(response);\n};\nconst classifyMirrorReaction = async (cause: unknown): Promise<MirrorReactionResult> => {\n const error = z\n .object({ status: z.number(), code: z.number().nullable().optional() })\n .safeParse(cause instanceof Error ? cause.cause : null);\n if (!error.success) return 'retry';\n if (error.data.status === 429 || error.data.status >= 500) return 'retry';\n if (error.data.code === 10008) return 'missing';\n if (error.data.code === 10014 || error.data.code === 30010) return 'unavailable';\n return error.data.status === 403 || error.data.status === 404 ? 'unavailable' : 'retry';\n};\nconst botFor = async (ctx: ChannelReceiveContextIface<Config>, config: Config): Promise<string> => {\n if (config.botId != null) return config.botId;\n const cached = z.string().safeParse(await ctx.store.get('discord-bot-id'));\n if (cached.success) return cached.data;\n const id = z.object({ id: z.string() }).parse(await api(ctx, '/users/@me')).id;\n await ctx.store.set('discord-bot-id', id, deliveryRetention);\n return id;\n};\nconst confirmDecision = async (\n ctx: Pick<ChannelReceiveContextIface<Config>, 'credentials' | 'store' | 'log'>,\n decisionId: string,\n): Promise<void> => {\n await ctx.store.set(stateKey('discord-decision-resolved', decisionId), true, {\n ttlSeconds: 3600,\n });\n const saved = z\n .object({ channel: z.string(), messageId: z.string() })\n .safeParse(await ctx.store.get(stateKey('discord-decision-delivered', decisionId)));\n if (!saved.success) return;\n try {\n await api(\n ctx,\n `/channels/${saved.data.channel}/messages/${saved.data.messageId}`,\n {\n content: 'This decision has been answered in Final.',\n components: [],\n allowed_mentions: { parse: [] },\n },\n 'PATCH',\n );\n } catch {\n ctx.log('Discord decision confirmation unavailable.');\n }\n};\nconst normalizedText = (text: string, bot: string): string =>\n text\n .replace(/<@!?([0-9A-Za-z_-]+)>/g, (_match: string, id: string) => (id === bot ? '' : `@${id}`))\n .trim();\nconst messageSchema = z.object({\n id: z.string(),\n channel_id: z.string(),\n guild_id: z.string().optional(),\n content: z.string().default(''),\n author: z.object({ id: z.string(), username: z.string(), bot: z.boolean().optional() }),\n mentions: z.array(z.object({ id: z.string() })).default([]),\n});\nconst replyKey = (\n ctx: ChannelEventContextIface<Config>,\n replyOf?: { externalKey: string; turnId: string },\n) =>\n stateKey(\n 'discord-reply',\n replyOf?.externalKey ?? refString(ctx.origin.ref, 'externalKey') ?? ctx.origin.place.id,\n replyOf?.turnId ?? ctx.turn.id,\n );\nconst reply = async (\n ctx: ChannelEventContextIface<Config>,\n text: string,\n final: boolean,\n key = replyKey(ctx),\n): Promise<void> => {\n const channel =\n refString(ctx.origin.ref, 'replyChannel') ??\n refString(ctx.origin.ref, 'channel') ??\n ctx.origin.place.id;\n if (channel == null || text.length === 0) return;\n const saved = z\n .object({\n id: z.string(),\n updatedAt: z.number(),\n final: z.boolean(),\n text: z.string().optional(),\n })\n .safeParse(await ctx.store.get(key));\n if (saved.success && saved.data.final) return;\n if (saved.success && !final && Date.now() - saved.data.updatedAt < 1_000) {\n await ctx.store.set(key, { ...saved.data, text: text.slice(0, 1900) }, deliveryRetention);\n return;\n }\n const content = text.length > 1900 ? `${text.slice(0, 1850)}\\nContinue in Final \u2192` : text;\n const data = await api(\n ctx,\n `/channels/${channel}/messages${saved.success ? `/${saved.data.id}` : ''}`,\n { content, allowed_mentions: { parse: [] } },\n saved.success ? 'PATCH' : 'POST',\n );\n if (saved.success && data === missingMessage) {\n await ctx.store.set(key, null);\n await reply(ctx, text, final, key);\n return;\n }\n const id = saved.success ? saved.data.id : z.object({ id: z.string() }).parse(data).id;\n await ctx.store.set(\n key,\n { id, updatedAt: Date.now(), final, text: text.slice(0, 1900) },\n deliveryRetention,\n );\n await ctx.store.set(\n stateKey('discord-origin', channel, id),\n jsonValueSchema.parse({\n ...(refString(ctx.origin.ref, 'requester') == null\n ? {}\n : { principal: { id: refString(ctx.origin.ref, 'requester') } }),\n place: ctx.origin.place,\n externalKey: refString(ctx.origin.ref, 'externalKey') ?? ctx.origin.place.id,\n turnId: ctx.turn.id,\n }),\n deliveryRetention,\n );\n};\nconst savedPartial = async (ctx: ChannelEventContextIface<Config>): Promise<string> => {\n const receipt = z.object({ text: z.string() }).safeParse(await ctx.store.get(replyKey(ctx)));\n return receipt.success ? receipt.data.text : '';\n};\nconst sharedReply = async (\n ctx: ChannelEventContextIface<Config>,\n args: { text: string; final: boolean; messageIds: string[] },\n): Promise<void> => {\n const channel =\n refString(ctx.origin.ref, 'replyChannel') ??\n refString(ctx.origin.ref, 'channel') ??\n ctx.origin.place.id;\n await shareReplyReceipt({\n bindingId: ctx.binding.id,\n store: ctx.store,\n destination: stateKey('discord', channel),\n messageIds: args.messageIds,\n originKey: replyKey(ctx),\n send: (key) => reply(ctx, args.text, args.final, key),\n removeDuplicate: async (receipt, canonical) => {\n const schema = z.object({ id: z.string() });\n const saved = schema.safeParse(receipt);\n const target = schema.safeParse(canonical);\n if (saved.success && target.success && saved.data.id !== target.data.id)\n await api(ctx, `/channels/${channel}/messages/${saved.data.id}`, undefined, 'DELETE');\n },\n });\n};\nexport const discordChannel = (options: JsonObject = {}) => {\n const config = configSchema.parse(options);\n return defineChannel<Config, JsonValue, { text: string }>({\n name: 'discord',\n config,\n installed: packageRef('@finalai/final-agent-provider/channels/discord'),\n credentials: { app: 'discord' },\n identity: {\n kind: 'redirect',\n start: async (args, ctx) => {\n const app = await ctx.credentials.appInfo();\n return startOAuth(\n {\n ...args,\n authorizeUrl: 'https://discord.com/oauth2/authorize',\n clientId: app.clientId,\n redirectUri: `${channelBaseUrl(config)}/b/${ctx.binding.id}/oauth/callback`,\n scope: 'identify',\n },\n ctx,\n );\n },\n },\n places: {\n kinds: ['dm', 'channel', 'thread'],\n defaults: (place) =>\n place.kind === 'dm'\n ? { create: 'direct-with-agent', replies: 'origin', audience: 'members' }\n : null,\n },\n routes: [\n {\n method: 'GET',\n path: '/oauth/callback',\n handler: async (ctx) => {\n const saved = await takeOAuth(ctx.request, ctx);\n if (saved == null)\n return new Response('Invalid or expired link request', { status: 400 });\n const app = await ctx.credentials.appInfo();\n const token = z.object({ access_token: z.string() }).parse(\n await responseJson(\n await ctx.credentials.fetch('https://discord.com/api/oauth2/token', {\n method: 'POST',\n body: new URLSearchParams({\n client_id: app.clientId,\n client_secret: app.clientSecret,\n grant_type: 'authorization_code',\n code: saved.code,\n redirect_uri: saved.redirectUri,\n }),\n }),\n ),\n );\n const user = z.object({ id: z.string(), username: z.string() }).parse(\n await responseJson(\n await ctx.credentials.fetch('https://discord.com/api/users/@me', {\n headers: { authorization: `Bearer ${token.access_token}` },\n }),\n ),\n );\n return confirmOAuth(\n {\n ticket: saved.ticket,\n expected: saved.principal,\n actual: { id: user.id, displayName: user.username },\n },\n ctx,\n );\n },\n },\n {\n method: 'POST',\n path: '/webhook',\n handler: async (ctx) => {\n const body = await ctx.request.text();\n const timestamp = ctx.request.headers.get('x-signature-timestamp');\n const signature = hexBytes(ctx.request.headers.get('x-signature-ed25519') ?? '');\n const bytes = hexBytes(\n config.publicKey ?? (await ctx.credentials.appInfo()).signingSecret ?? '',\n );\n if (!freshTimestamp(timestamp) || signature == null || bytes == null)\n return new Response(null, { status: 401 });\n const key = await crypto.subtle.importKey(\n 'raw',\n new Uint8Array(bytes),\n 'Ed25519',\n false,\n ['verify'],\n );\n if (\n !(await crypto.subtle.verify(\n 'Ed25519',\n key,\n new Uint8Array(signature),\n new TextEncoder().encode(timestamp + body),\n ))\n )\n return new Response(null, { status: 401 });\n const raw = jsonValueSchema.parse(parseJson(body));\n const type = z.object({ type: z.number() }).safeParse(raw);\n if (type.success && type.data.type === 1) return Response.json({ type: 1 });\n const result = await ctx.receive(raw);\n const interactionId = z.object({ id: z.string() }).safeParse(raw);\n const commandText = interactionId.success\n ? await ctx.store.get(stateKey('discord-command-response', interactionId.data.id))\n : null;\n return Response.json({\n type: 4,\n data: {\n flags: 64,\n content:\n typeof commandText === 'string'\n ? commandText\n : 'accepted' in result && !result.accepted\n ? `${result.refusal.message} ${result.refusal.linkUrl ?? result.refusal.connectUrl ?? ''}`\n : 'Accepted in Final',\n },\n });\n },\n },\n ],\n listeners: [\n {\n key: 'gateway',\n run: async (ctx) => {\n const app = await ctx.credentials.app();\n const gateway = z.object({ url: z.string() }).parse(await api(ctx, '/gateway/bot'));\n const botId = await botFor(ctx, config);\n const dispatch = createDiscordDispatch({\n store: ctx.store,\n botId,\n receive: (input, signal) => {\n const active = { ...ctx, signal };\n return ctxReceive(input, active, { ...config, botId });\n },\n request: ({ path, body, method, signal }) =>\n api({ ...ctx, signal: signal ?? ctx.signal }, path, body, method),\n });\n await runDiscordGateway({\n ctx,\n url: gateway.url,\n token: app.accessToken,\n receive: dispatch.receive,\n accepts: dispatch.accepts,\n connect: (url) => {\n const socket = new WebSocket(url);\n const messages = createQueue<string>();\n let code: number | null = null;\n socket.addEventListener('message', (event) => {\n if (typeof event.data === 'string') messages.push(event.data);\n });\n socket.addEventListener('close', (event) => {\n code = event.code;\n messages.close();\n });\n socket.addEventListener('error', () => {\n messages.close();\n socket.close();\n });\n return {\n messages: messages.stream,\n send: (data) => socket.send(data),\n close: () => {\n socket.close();\n messages.close();\n },\n closeCode: () => code,\n };\n },\n });\n },\n },\n ],\n receive: async (input, ctx) => ctxReceive(input, ctx, config),\n events: {\n 'message.posted': async (data, ctx) => {\n const key = stateKey('discord-mirror', providerPlaceKey(ctx.origin.place), data.message.id);\n if ((await ctx.store.get(key)) != null) return;\n const channel =\n refString(ctx.origin.ref, 'replyChannel') ??\n refString(ctx.origin.ref, 'channel') ??\n ctx.origin.place.id;\n const result = z.object({ id: z.string() }).parse(\n await api(ctx, `/channels/${channel}/messages`, {\n content:\n `From ${data.author.displayName} in Final\\n${textOf(data.message.content)}`.slice(\n 0,\n 2000,\n ),\n allowed_mentions: { parse: [] },\n }),\n );\n await ctx.store.set(key, result.id, deliveryRetention);\n },\n 'message.delta': async (data, ctx) => {\n const text =\n (ctx.state.get()?.text ?? (await savedPartial(ctx))) +\n (data.delta.type === 'text' && typeof data.delta.text === 'string'\n ? data.delta.text\n : '');\n ctx.state.set({ text });\n await sharedReply(ctx, { text, final: false, messageIds: [data.messageId] });\n },\n 'turn.completed': async (data, ctx) =>\n sharedReply(ctx, {\n text: completionText(data, ctx.state.get()?.text ?? (await savedPartial(ctx))),\n final: true,\n messageIds: data.messages?.map((message) => message.id) ?? [],\n }),\n 'decision.created': async (data, ctx) => {\n const deliveredKey = stateKey('discord-decision-delivered', data.decisionId);\n if ((await ctx.store.get(deliveredKey)) != null) return;\n const user = refString(ctx.origin.ref, 'requester');\n if (user == null) return;\n const choices = decisionChoices(data.request);\n const components: JsonObject[] = [];\n for (const choice of choices) {\n const id = crypto.randomUUID();\n await ctx.store.set(\n stateKey('discord-decision', id),\n { decisionId: data.decisionId, user, outcome: choice.outcome },\n { ttlSeconds: 3600 },\n );\n components.push({\n type: 2,\n style: choice.answer === 'approve' ? 3 : 4,\n label: choice.label,\n custom_id: id,\n });\n }\n try {\n const dm = z\n .object({ id: z.string() })\n .parse(await api(ctx, '/users/@me/channels', { recipient_id: user }));\n const message = z.object({ id: z.string() }).parse(\n await api(ctx, `/channels/${dm.id}/messages`, {\n content: `${decisionSummary(data.request)}\\n${choices.length === 0 ? 'Answer in Final \u2192' : 'Choose an option below.'}`,\n ...(components.length === 0 ? {} : { components: [{ type: 1, components }] }),\n }),\n );\n await ctx.store.set(\n deliveredKey,\n { channel: dm.id, messageId: message.id },\n { ttlSeconds: 3600 },\n );\n } catch {\n const channel =\n refString(ctx.origin.ref, 'replyChannel') ??\n refString(ctx.origin.ref, 'channel') ??\n ctx.origin.place.id;\n await api(ctx, `/channels/${channel}/messages`, {\n content: 'This request needs an approval. Answer in Final.',\n allowed_mentions: { parse: [] },\n });\n await ctx.store.set(deliveredKey, true, { ttlSeconds: 3600 });\n }\n },\n 'decision.resolved': async (data, ctx) => confirmDecision(ctx, data.decisionId),\n 'message.edited': async (data, ctx) => {\n if (data.replyOf == null && data.externalKey.startsWith('final:')) {\n const key = mirrorReceiptKey({\n provider: 'discord',\n place: ctx.origin.place,\n externalKey: data.externalKey,\n messageId: data.message.id,\n });\n if (key == null) return;\n const saved = z.string().safeParse(await ctx.store.get(key));\n if (!saved.success) return;\n const channel =\n refString(ctx.origin.ref, 'replyChannel') ??\n refString(ctx.origin.ref, 'channel') ??\n ctx.origin.place.id;\n const result = await api(\n ctx,\n `/channels/${channel}/messages/${saved.data}`,\n {\n content:\n `From ${data.author.displayName} in Final\\n${textOf(data.message.content)}`.slice(\n 0,\n 2000,\n ),\n allowed_mentions: { parse: [] },\n },\n 'PATCH',\n );\n if (result === missingMessage)\n await ctx.store.set(key, { deleted: true }, deliveryRetention);\n return;\n }\n if (data.replyOf == null) return;\n const channel =\n refString(ctx.origin.ref, 'replyChannel') ??\n refString(ctx.origin.ref, 'channel') ??\n ctx.origin.place.id;\n const saved = z\n .object({ id: z.string() })\n .safeParse(await ctx.store.get(replyKey(ctx, data.replyOf)));\n if (channel != null && saved.success)\n await api(\n ctx,\n `/channels/${channel}/messages/${saved.data.id}`,\n {\n content: textOf(data.message.content).slice(0, 2000),\n allowed_mentions: { parse: [] },\n },\n 'PATCH',\n );\n },\n 'message.removed': async (data, ctx) => {\n if (data.replyOf == null && data.externalKey.startsWith('final:')) {\n const key = mirrorReceiptKey({\n provider: 'discord',\n place: ctx.origin.place,\n externalKey: data.externalKey,\n messageId: data.message.id,\n });\n if (key == null) return;\n const saved = z.string().safeParse(await ctx.store.get(key));\n if (!saved.success) return;\n const channel =\n refString(ctx.origin.ref, 'replyChannel') ??\n refString(ctx.origin.ref, 'channel') ??\n ctx.origin.place.id;\n await api(ctx, `/channels/${channel}/messages/${saved.data}`, undefined, 'DELETE');\n await ctx.store.set(key, { deleted: true }, deliveryRetention);\n return;\n }\n if (data.replyOf == null) return;\n const channel =\n refString(ctx.origin.ref, 'replyChannel') ??\n refString(ctx.origin.ref, 'channel') ??\n ctx.origin.place.id;\n const saved = z\n .object({ id: z.string() })\n .safeParse(await ctx.store.get(replyKey(ctx, data.replyOf)));\n if (channel != null && saved.success)\n await api(ctx, `/channels/${channel}/messages/${saved.data.id}`, undefined, 'DELETE');\n },\n 'reaction.added': async (data, ctx) => {\n const mirror = data.replyOf == null && data.externalKey.startsWith('final:');\n const mirrorKey = mirrorReceiptKey({\n provider: 'discord',\n place: ctx.origin.place,\n externalKey: data.externalKey,\n });\n const mirrored = z\n .string()\n .safeParse(mirrorKey == null ? null : await ctx.store.get(mirrorKey));\n if (mirror && !mirrored.success) return;\n const channel =\n (data.replyOf == null && !mirror\n ? refString(ctx.origin.ref, 'channel')\n : (refString(ctx.origin.ref, 'replyChannel') ??\n refString(ctx.origin.ref, 'channel'))) ?? ctx.origin.place.id;\n const saved = z\n .object({ id: z.string() })\n .safeParse(await ctx.store.get(replyKey(ctx, data.replyOf)));\n const original = z\n .tuple([z.string().nullable(), z.string(), z.string()])\n .safeParse(parseJson(data.externalKey));\n const id =\n mirror && mirrored.success\n ? mirrored.data\n : data.replyOf == null\n ? (refString(ctx.origin.ref, 'messageId') ??\n (original.success ? original.data[2] : null))\n : saved.success\n ? saved.data.id\n : null;\n if (channel != null && id != null)\n await settleMirrorReaction({\n ctx,\n key: mirror ? mirrorKey : null,\n classify: classifyMirrorReaction,\n work: () =>\n addSharedReaction({\n store: ctx.store,\n key: stateKey('discord-shared-reaction', channel, id, data.emoji),\n principal: data.principal,\n add: async () => {\n await api(\n ctx,\n `/channels/${channel}/messages/${id}/reactions/${encodeURIComponent(data.emoji)}/@me`,\n undefined,\n 'PUT',\n );\n return true;\n },\n }),\n });\n },\n 'reaction.removed': async (data, ctx) => {\n const mirror = data.replyOf == null && data.externalKey.startsWith('final:');\n const mirrorKey = mirrorReceiptKey({\n provider: 'discord',\n place: ctx.origin.place,\n externalKey: data.externalKey,\n });\n const mirrored = z\n .string()\n .safeParse(mirrorKey == null ? null : await ctx.store.get(mirrorKey));\n if (mirror && !mirrored.success) return;\n const channel =\n (data.replyOf == null && !mirror\n ? refString(ctx.origin.ref, 'channel')\n : (refString(ctx.origin.ref, 'replyChannel') ??\n refString(ctx.origin.ref, 'channel'))) ?? ctx.origin.place.id;\n const saved = z\n .object({ id: z.string() })\n .safeParse(await ctx.store.get(replyKey(ctx, data.replyOf)));\n const original = z\n .tuple([z.string().nullable(), z.string(), z.string()])\n .safeParse(parseJson(data.externalKey));\n const id =\n mirror && mirrored.success\n ? mirrored.data\n : data.replyOf == null\n ? (refString(ctx.origin.ref, 'messageId') ??\n (original.success ? original.data[2] : null))\n : saved.success\n ? saved.data.id\n : null;\n if (channel != null && id != null)\n await settleMirrorReaction({\n ctx,\n key: mirror ? mirrorKey : null,\n classify: classifyMirrorReaction,\n work: () =>\n removeSharedReaction({\n store: ctx.store,\n key: stateKey('discord-shared-reaction', channel, id, data.emoji),\n principal: data.principal,\n remove: async () => {\n const result = await api(\n ctx,\n `/channels/${channel}/messages/${id}/reactions/${encodeURIComponent(data.emoji)}/@me`,\n undefined,\n 'DELETE',\n );\n if (mirror && result === missingReactionMessage)\n throw new Error('Discord reaction message missing.', {\n cause: { status: 404, code: 10008 },\n });\n },\n }),\n });\n },\n },\n });\n};\nconst ctxReceive = async (\n incoming: JsonValue,\n ctx: ChannelReceiveContextIface<Config>,\n config: Config,\n): Promise<ChannelReceiveResult> => {\n const gatewayInteraction = z\n .object({ event: z.literal('INTERACTION_CREATE'), data: jsonValueSchema })\n .safeParse(incoming);\n const input = gatewayInteraction.success ? gatewayInteraction.data.data : incoming;\n const command = z\n .object({\n id: z.string(),\n type: z.literal(2),\n channel_id: z.string(),\n guild_id: z.string().optional(),\n channel: z\n .object({ type: z.number(), parent_id: z.string().nullish(), name: z.string().optional() })\n .optional(),\n member: z.object({ user: z.object({ id: z.string() }) }).optional(),\n user: z.object({ id: z.string() }).optional(),\n data: z.object({\n name: z.literal('final'),\n options: z.array(z.object({ name: z.string() })).optional(),\n }),\n })\n .safeParse(input);\n if (command.success) {\n const user = command.data.member?.user.id ?? command.data.user?.id;\n if (user == null) return { ignored: true, reason: 'missing-command-user' };\n const principal = { id: user };\n const by = await personFor(ctx, principal);\n const verb = command.data.data.options?.[0]?.name;\n const respond = async (text: string): Promise<ChannelReceiveResult> => {\n await ctx.store.set(stateKey('discord-command-response', command.data.id), text, {\n ttlSeconds: 900,\n });\n return { accepted: true };\n };\n if (typeof by !== 'string') return respond(`${by.message} ${by.linkUrl ?? ''}`);\n if (verb === 'unlink') {\n await ctx.people.revoke({ principal, reason: 'provider-revoked' });\n return respond('Unlinked your Discord account.');\n }\n let metadata = command.data.channel ?? null;\n if (metadata == null && command.data.guild_id != null) {\n try {\n metadata = z\n .object({\n type: z.number(),\n parent_id: z.string().nullish(),\n name: z.string().optional(),\n })\n .parse(await api(ctx, `/channels/${command.data.channel_id}`));\n } catch {\n return respond(\n 'This app cannot read the channel. Invite it or open Final to manage the connection.',\n );\n }\n }\n const thread = metadata != null && [10, 11, 12].includes(metadata.type);\n const place: PlaceRef = {\n kind: command.data.guild_id == null ? 'dm' : thread ? 'thread' : 'channel',\n ...(command.data.guild_id == null ? {} : { tenant: command.data.guild_id }),\n id: command.data.channel_id,\n ...(metadata?.name == null ? {} : { title: metadata.name }),\n ...(thread && metadata?.parent_id != null\n ? { parent: { kind: 'channel', id: metadata.parent_id, tenant: command.data.guild_id } }\n : {}),\n };\n let text: string;\n if (verb === 'disconnect') {\n try {\n await ctx.places.disconnect(place, by);\n text = 'Disconnected this place from Final.';\n } catch {\n text =\n 'Could not disconnect this place. Open Final to manage its connection or disconnect its connected parent place.';\n }\n } else {\n const route = await ctx.places.resolve(place);\n text =\n route.kind === 'connected'\n ? 'This place is connected to Final.'\n : `Connect this place in Final: ${route.connectUrl}`;\n }\n return respond(text);\n }\n const interaction = z\n .object({\n type: z.number(),\n member: z.object({ user: z.object({ id: z.string() }) }).optional(),\n user: z.object({ id: z.string() }).optional(),\n data: z.object({ custom_id: z.string().optional() }).optional(),\n })\n .safeParse(input);\n if (interaction.success && interaction.data.type === 3) {\n const user = interaction.data.member?.user.id ?? interaction.data.user?.id;\n const id = interaction.data.data?.custom_id;\n if (user == null || id == null) return { ignored: true, reason: 'invalid-action' };\n const saved = z\n .object({ user: z.string(), decisionId: z.string(), outcome: jsonValueSchema })\n .safeParse(await ctx.store.get(stateKey('discord-decision', id)));\n if (!saved.success || saved.data.user !== user)\n return {\n accepted: false,\n refusal: {\n refused: 'no-access',\n message: saved.success\n ? 'Only the requester can answer this decision.'\n : 'This approval expired. Answer in Final.',\n },\n };\n if ((await ctx.store.get(stateKey('discord-decision-resolved', saved.data.decisionId))) != null)\n return {\n accepted: false,\n refusal: {\n refused: 'no-access',\n message: 'This decision has already been answered in Final.',\n },\n };\n const by = await personFor(ctx, { id: user });\n if (typeof by !== 'string') return { accepted: false, refusal: by };\n const result = await ctx.decisions.resolve({\n decisionId: saved.data.decisionId,\n outcome: saved.data.outcome,\n by,\n });\n if ('refused' in result) return { accepted: false, refusal: result };\n await confirmDecision(ctx, saved.data.decisionId);\n return result.resolved\n ? { accepted: true }\n : {\n accepted: false,\n refusal: {\n refused: 'no-access',\n message: 'This decision has already been answered in Final.',\n },\n };\n }\n const event = z.object({ event: z.string(), data: jsonValueSchema }).safeParse(input);\n if (!event.success) return { ignored: true, reason: 'unsupported-event' };\n if (event.data.event === 'GUILD_DELETE') {\n const guild = z\n .object({ id: z.string(), unavailable: z.boolean().optional() })\n .safeParse(event.data.data);\n if (!guild.success || guild.data.unavailable === true)\n return { ignored: true, reason: 'guild-unavailable' };\n await ctx.people.revoke({ tenant: guild.data.id, reason: 'uninstalled' });\n return { accepted: true };\n }\n if (event.data.event === 'MESSAGE_DELETE_BULK') {\n const bulk = z\n .object({ channel_id: z.string(), ids: z.array(z.string()).max(100) })\n .safeParse(event.data.data);\n if (!bulk.success) return { ignored: true, reason: 'invalid-bulk-delete' };\n let refusal: ChannelReceiveResult | null = null;\n for (const id of bulk.data.ids) {\n const result = await ctxReceive(\n { event: 'MESSAGE_DELETE', data: { channel_id: bulk.data.channel_id, id } },\n ctx,\n config,\n );\n if ('accepted' in result && !result.accepted) refusal ??= result;\n }\n return refusal ?? { accepted: true };\n }\n if (event.data.event !== 'MESSAGE_CREATE') {\n const change = z\n .object({\n id: z.string().optional(),\n channel_id: z.string(),\n author: z.object({ id: z.string() }).optional(),\n content: z.string().optional(),\n user_id: z.string().optional(),\n message_id: z.string().optional(),\n emoji: z.object({ name: z.string(), id: z.string().nullish() }).optional(),\n })\n .safeParse(event.data.data);\n if (!change.success) return { ignored: true, reason: 'unsupported-change' };\n const messageId = change.data.message_id ?? change.data.id;\n if (messageId == null) return { ignored: true, reason: 'missing-message' };\n const saved = z\n .object({\n principal: z.object({ id: z.string() }),\n externalKey: z.string(),\n turnId: z.string().optional(),\n place: placeRefSchema,\n })\n .safeParse(\n await ctx.store.get(stateKey('discord-origin', change.data.channel_id, messageId)),\n );\n if (!saved.success) return { ignored: true, reason: 'unknown-origin' };\n const by = await personFor(ctx, {\n id: change.data.user_id ?? change.data.author?.id ?? saved.data.principal.id,\n });\n if (typeof by !== 'string') return { accepted: false, refusal: by };\n const route = await ctx.places.resolve(saved.data.place);\n if (route.kind !== 'connected') return { ignored: true, reason: 'unconnected' };\n const conversation = ctx.conversation(route.conversation);\n const key = saved.data.externalKey;\n if (\n saved.data.turnId != null &&\n (event.data.event === 'MESSAGE_DELETE' || event.data.event === 'MESSAGE_UPDATE')\n )\n return { ignored: true, reason: 'provider-reply-mutation' };\n if (event.data.event === 'MESSAGE_DELETE') {\n const result = await conversation.remove({ externalKey: key, by });\n return 'refused' in result ? { accepted: false, refusal: result } : { accepted: true };\n }\n if (event.data.event === 'MESSAGE_UPDATE' && change.data.content != null) {\n if (change.data.content.trim().length === 0)\n return { ignored: true, reason: 'provider-content-unavailable' };\n const text = normalizedText(change.data.content, await botFor(ctx, config));\n if (text.length === 0) return { ignored: true, reason: 'empty-message' };\n const result = await conversation.edit({\n externalKey: key,\n by,\n content: [{ type: 'text', text }],\n });\n return 'refused' in result ? { accepted: false, refusal: result } : { accepted: true };\n }\n if (\n (event.data.event === 'MESSAGE_REACTION_ADD' ||\n event.data.event === 'MESSAGE_REACTION_REMOVE') &&\n change.data.emoji != null\n ) {\n const result = await conversation.react({\n target:\n saved.data.turnId == null\n ? { externalKey: key }\n : { replyOf: { externalKey: key, turnId: saved.data.turnId } },\n by,\n emoji:\n change.data.emoji.id == null\n ? change.data.emoji.name\n : `${change.data.emoji.name}:${change.data.emoji.id}`,\n op: event.data.event === 'MESSAGE_REACTION_ADD' ? 'add' : 'remove',\n });\n return 'refused' in result ? { accepted: false, refusal: result } : { accepted: true };\n }\n return { ignored: true, reason: 'unsupported-change' };\n }\n const parsed = messageSchema.safeParse(event.data.data);\n if (!parsed.success || parsed.data.author.bot === true)\n return { ignored: true, reason: 'not-human' };\n const message = parsed.data;\n const botId = await botFor(ctx, config);\n if (message.guild_id != null && !message.mentions.some((mention) => mention.id === botId))\n return { ignored: true, reason: 'not-mentioned' };\n const text = normalizedText(message.content, botId);\n if (text.length === 0) return { ignored: true, reason: 'empty-message' };\n let channelData: unknown;\n try {\n channelData = await api(ctx, `/channels/${message.channel_id}`);\n } catch (error) {\n const failed = z.object({ cause: z.object({ status: z.number() }) }).safeParse(error);\n if (failed.success && (failed.data.cause.status === 403 || failed.data.cause.status === 404))\n return { ignored: true, reason: 'provider-place-unavailable' };\n throw error;\n }\n const channel = z\n .object({\n id: z.string(),\n type: z.number(),\n parent_id: z.string().nullish(),\n name: z.string().optional(),\n })\n .parse(channelData);\n const place: PlaceRef = {\n kind:\n message.guild_id == null ? 'dm' : [10, 11, 12].includes(channel.type) ? 'thread' : 'channel',\n id: channel.id,\n ...(message.guild_id == null ? {} : { tenant: message.guild_id }),\n ...(channel.name == null ? {} : { title: channel.name }),\n ...(channel.parent_id == null || ![10, 11, 12].includes(channel.type)\n ? {}\n : {\n parent: {\n kind: 'channel',\n id: channel.parent_id,\n ...(message.guild_id == null ? {} : { tenant: message.guild_id }),\n },\n }),\n };\n await api(ctx, `/channels/${channel.id}/typing`, {}).catch(() =>\n ctx.log('Discord typing indicator unavailable.'),\n );\n const key = externalKey(\n {\n kind: 'channel',\n id: channel.id,\n ...(message.guild_id == null ? {} : { tenant: message.guild_id }),\n },\n message.id,\n );\n let replyChannel = channel.id;\n const person = await ctx.people.resolve({ id: message.author.id });\n const connected = await ctx.places.resolve(place);\n if (place.kind === 'channel' && person.kind === 'member' && connected.kind === 'connected') {\n const threadKey = stateKey('discord-thread', channel.id, message.id);\n const savedThread = z.string().safeParse(await ctx.store.get(threadKey));\n if (savedThread.success) replyChannel = savedThread.data;\n else {\n try {\n replyChannel = z.object({ id: z.string() }).parse(\n await api(ctx, `/channels/${channel.id}/messages/${message.id}/threads`, {\n name:\n message.content\n .replace(/<@!?[0-9A-Za-z_-]+>/g, '')\n .trim()\n .slice(0, 80) || 'Final',\n auto_archive_duration: 1440,\n }),\n ).id;\n await ctx.store.set(threadKey, replyChannel, deliveryRetention);\n } catch {\n const existing = await api(ctx, `/channels/${channel.id}/messages/${message.id}`)\n .then((value) => z.object({ thread: z.object({ id: z.string() }) }).safeParse(value))\n .catch(() => null);\n if (existing?.success === true) {\n replyChannel = existing.data.thread.id;\n await ctx.store.set(threadKey, replyChannel, deliveryRetention);\n } else ctx.log('Discord thread unavailable; replying in the source channel.');\n }\n }\n }\n const result = await receivePersonMessage({\n ctx,\n principal: { id: message.author.id, displayName: message.author.username },\n place,\n resumeAfterLink: place.kind === 'dm',\n text,\n externalKey: key,\n loadContext: async () =>\n config.history === 'linked-members'\n ? await historyFor({\n ctx,\n channel: channel.id,\n currentMessage: message.id,\n bot: botId,\n }).catch(() => {\n ctx.log('Discord history is unavailable for this app grant.');\n return [];\n })\n : [],\n ref: {\n externalKey: key,\n channel: channel.id,\n replyChannel,\n messageId: message.id,\n requester: message.author.id,\n },\n });\n await ctx.store.set(\n stateKey('discord-origin', channel.id, message.id),\n jsonValueSchema.parse({\n principal: { id: message.author.id },\n externalKey: key,\n place,\n }),\n deliveryRetention,\n );\n if ('accepted' in result && !result.accepted) {\n try {\n const dm = z\n .object({ id: z.string() })\n .parse(await api(ctx, '/users/@me/channels', { recipient_id: message.author.id }));\n await api(ctx, `/channels/${dm.id}/messages`, {\n content: `${result.refusal.message} ${result.refusal.linkUrl ?? result.refusal.connectUrl ?? ''}`,\n });\n } catch {\n try {\n await api(ctx, `/channels/${replyChannel}/messages`, {\n content:\n 'This request could not be handled here. Open Final to link your account or manage this place.',\n allowed_mentions: { parse: [] },\n });\n } catch {\n ctx.log('Discord requester notice unavailable.');\n }\n }\n }\n return result;\n};\n\nconst historyFor = async (args: {\n ctx: ChannelReceiveContextIface<Config>;\n channel: string;\n currentMessage: string;\n bot: string;\n}): Promise<string[]> => {\n const { ctx, channel, currentMessage, bot } = args;\n const messages = z\n .array(messageSchema)\n .parse(\n await api(\n ctx,\n `/channels/${channel}/messages?limit=20&before=${encodeURIComponent(currentMessage)}`,\n ),\n );\n const lines: string[] = [];\n const authors = new Map<string, string | null>();\n for (const message of messages.reverse()) {\n if (\n message.id === currentMessage ||\n message.author.bot === true ||\n message.content.trim().length === 0\n )\n continue;\n if (!authors.has(message.author.id)) {\n const person = await ctx.people.resolve({ id: message.author.id });\n authors.set(message.author.id, person.kind === 'member' ? person.displayName : null);\n }\n const name = authors.get(message.author.id);\n if (name != null) {\n const text = normalizedText(message.content, bot);\n if (text.length > 0) lines.push(`${name}: ${text}`);\n }\n }\n return lines;\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["saved", "channel", "text", "place", "result", "key"]
|
|
7
|
-
}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { type JsonObject, type JsonValue } from '@finalai/agent-provider';
|
|
2
|
-
export declare const githubChannel: (options?: JsonObject) => import("@finalai/agent-provider").ChannelDefinitionIface<{
|
|
3
|
-
mention: string;
|
|
4
|
-
baseUrl?: string | undefined;
|
|
5
|
-
}, JsonValue, JsonValue>;
|