UNPKG

eve

Version:

Filesystem-first framework for durable backend AI agents that run anywhere.

1 lines 1.91 kB
import{resolveLinearAccessToken}from"#public/channels/linear/auth.js";const MARKDOWN_IMAGE_PATTERN=/!\[([^\]\r\n]*)\]\(\s*(?:<([^>\r\n]+)>|([^\s)\r\n]+))(?:\s+(?:"[^"\r\n]*"|'[^'\r\n]*'|\([^)\r\n]*\)))?\s*\)/gu;function extractLinearUploadImageReferences(e){let n=[];for(let r of e.matchAll(MARKDOWN_IMAGE_PATTERN)){let e=r[2]??r[3],t=r.index;if(e===void 0||t===void 0)continue;let i=parseLinearUploadUrl(e);i!==null&&n.push({altText:r[1]??``,end:t+r[0].length,start:t,url:i})}return n}async function attachLinearInboundImages(t){if(typeof t.content!=`string`)return t.content;let n=extractLinearUploadImageReferences(t.content);if(n.length===0)return t.content;let r;try{r=await resolveLinearAccessToken(t.credentials?.accessToken)}catch{return t.content}let i=t.fetch??fetch,a=await Promise.all(n.map(e=>fetchLinearUploadImage(e.url,r,i)));return a.every(e=>e===null)?t.content:buildLinearImageContent(t.content,n,a)}function parseLinearUploadUrl(e){let t;try{t=new URL(e)}catch{return null}return t.origin!==`https://uploads.linear.app`||t.username!==``||t.password!==``?null:t}async function fetchLinearUploadImage(e,t,n){if(parseLinearUploadUrl(e.href)===null)return null;try{let r=await n(e.href,{credentials:`omit`,headers:{accept:`image/*`,authorization:`Bearer ${t}`},redirect:`manual`});if(!r.ok)return null;let i=readImageMediaType(r.headers.get(`content-type`));return i===null?null:{data:Buffer.from(await r.arrayBuffer()),mediaType:i,type:`file`}}catch{return null}}function readImageMediaType(e){let t=e?.split(`;`,1)[0]?.trim().toLowerCase();return t?.startsWith(`image/`)===!0&&t.length>6?t:null}function buildLinearImageContent(e,t,n){let r=0,i=``,a=[];for(let[o,s]of t.entries()){let t=n[o];t!=null&&(i+=e.slice(r,s.start),i+=s.altText,r=s.end,a.push(t))}return i+=e.slice(r),i.trim().length===0?a:[{text:i,type:`text`},...a]}export{attachLinearInboundImages,extractLinearUploadImageReferences};