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 t=[];for(let n of e.matchAll(MARKDOWN_IMAGE_PATTERN)){let e=n[2]??n[3],r=n.index;if(e===void 0||r===void 0)continue;let i=parseLinearUploadUrl(e);i!==null&&t.push({altText:n[1]??``,end:r+n[0].length,start:r,url:i})}return t}async function attachLinearInboundImages(e){if(typeof e.content!=`string`)return e.content;let t=extractLinearUploadImageReferences(e.content);if(t.length===0)return e.content;let n;try{n=await resolveLinearAccessToken(e.credentials?.accessToken)}catch{return e.content}let r=e.fetch??fetch,i=await Promise.all(t.map(e=>fetchLinearUploadImage(e.url,n,r)));return i.every(e=>e===null)?e.content:buildLinearImageContent(e.content,t,i)}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};