eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 4.96 kB
JavaScript
var e=class extends Error{method;response;status;constructor(e,t){super(e),this.name=`SlackApiError`,this.method=t.method,this.response=t.response,this.status=t.status}},t=`https://slack.com/api/`;async function n(e){return typeof e==`function`?await e():e}async function r(r,i,a){let o=await n(a.token),s=d(i,a.contentType??`form`),c=await(a.fetch??fetch)(new URL(r,a.apiUrl??t),{body:s.body,headers:{authorization:`Bearer ${o}`,"content-type":s.contentType},method:`POST`}),l=await c.json();if(!c.ok)throw new e(`Slack ${r} returned HTTP ${c.status}`,{method:r,response:l,status:c.status});return l}async function i(e){let t=await r(`chat.postMessage`,p(e),e);return f(`chat.postMessage`,t),{channel:b(t.channel),id:y(t.ts),raw:t}}async function a(e){let t=await r(`chat.postEphemeral`,{...p(e),user:e.user},e);return f(`chat.postEphemeral`,t),{channel:b(t.channel),id:y(t.message_ts),raw:t}}async function o(e){let t=await r(`chat.update`,{...p(e),ts:e.ts},e);return f(`chat.update`,t),{channel:b(t.channel),id:y(t.ts),raw:t}}async function s(e){let t=await r(`chat.delete`,{channel:e.channel,ts:e.ts},e);return f(`chat.delete`,t),t}async function c(t,n,r={}){let i=await(r.fetch??fetch)(t,{body:JSON.stringify(m(n)),headers:{"content-type":`application/json`},method:`POST`});if(!i.ok)throw new e(`Slack response_url returned HTTP ${i.status}`,{method:`response_url`,status:i.status})}async function l(t,i){if(t.length===0)return{fileIds:[],raw:{ok:!0}};let a=await n(i.token),o=i.fetch??fetch,s=[];for(let n of t){let t=await v(n.data),c=await r(`files.getUploadURLExternal`,{alt_txt:n.altText,filename:n.filename,length:t.byteLength,snippet_type:n.snippetType},i);f(`files.getUploadURLExternal`,c);let l=y(c.upload_url),u=y(c.file_id);if(!(l&&u))throw new e(`Slack files.getUploadURLExternal returned no upload URL`,{method:`files.getUploadURLExternal`,response:c});let d=await o(l,{body:t,headers:{authorization:`Bearer ${a}`,"content-type":`application/octet-stream`},method:`POST`});if(!d.ok)throw new e(`Slack file upload returned HTTP ${d.status}`,{method:`files.upload`,status:d.status});s.push(u)}let c=await r(`files.completeUploadExternal`,{channel_id:i.channelId,files:t.map((e,t)=>({id:s[t],title:e.title??e.filename})),initial_comment:i.initialComment,thread_ts:i.threadTs},i);return f(`files.completeUploadExternal`,c),{fileIds:s,raw:c}}async function u(t){let r=await n(t.token),i=await(t.fetch??fetch)(t.url,{headers:{authorization:`Bearer ${r}`}});if(!i.ok)throw new e(`Slack file fetch returned HTTP ${i.status}`,{method:`files.fetch`,status:i.status});return i}function d(e,t=`form`){if(t===`json`)return{body:JSON.stringify(_(e)),contentType:`application/json`};let n=new URLSearchParams;for(let[t,r]of Object.entries(e))r!=null&&n.set(t,g(r));return{body:n.toString(),contentType:`application/x-www-form-urlencoded`}}function f(t,n){if(n.ok!==!0)throw new e(`Slack ${t} failed: ${n.error??`unknown_error`}`,{method:t,response:n})}function p(e){return h(e),{blocks:e.blocks,channel:e.channel,markdown_text:e.markdownText,metadata:e.metadata,reply_broadcast:e.replyBroadcast,text:e.text,thread_ts:e.threadTs,unfurl_links:e.unfurlLinks,unfurl_media:e.unfurlMedia}}function m(e){return{blocks:e.blocks,delete_original:e.deleteOriginal,replace_original:e.replaceOriginal,response_type:e.responseType,text:e.text,thread_ts:e.threadTs}}function h(e){if(e.markdownText!==void 0&&(e.text!==void 0||e.blocks!==void 0))throw TypeError(`markdownText cannot be used with text or blocks`)}function g(e){return typeof e==`string`||typeof e==`number`||typeof e==`boolean`?String(e):JSON.stringify(e)}function _(e){let t={};for(let[n,r]of Object.entries(e))r!==void 0&&(t[n]=r);return t}async function v(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(await e.arrayBuffer())}function y(e){return typeof e==`string`?e:``}function b(e){return typeof e==`string`?e:void 0}async function x(e){let t=await r(`conversations.replies`,{channel:e.channel,cursor:e.cursor,include_all_metadata:e.includeAllMetadata,inclusive:e.inclusive,latest:e.latest,limit:e.limit,oldest:e.oldest,ts:e.ts},e);return f(`conversations.replies`,t),{messages:Array.isArray(t.messages)?t.messages:[],nextCursor:C(t),raw:t}}async function S(e){if(!(e.triggerId||e.interactivityPointer))throw TypeError(`triggerId or interactivityPointer is required`);let t=await r(`views.open`,{interactivity_pointer:e.interactivityPointer,trigger_id:e.triggerId,view:e.view},e);return f(`views.open`,t),{raw:t,view:t.view}}function C(e){let t=e.response_metadata?.next_cursor;return typeof t==`string`&&t.length>0?t:void 0}export{e as SlackApiError,f as assertSlackOk,r as callSlackApi,s as deleteSlackMessage,d as encodeSlackApiBody,u as fetchSlackFile,x as fetchSlackThreadReplies,S as openSlackView,a as postSlackEphemeral,i as postSlackMessage,n as resolveSlackBotToken,c as sendSlackResponseUrl,o as updateSlackMessage,l as uploadSlackFiles};