blink 0.1.45 → 0.1.46

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.
@@ -1,3 +1,3 @@
1
- Object.defineProperty(exports,`__esModule`,{value:!0});const e=require(`../cookie-B3SvZDri.cjs`);let t=require(`util`);t=e.__toESM(t);const n=`x-blink-stream-response-format`,r=`BLINK_API_SERVER_URL`;var i=(e,t)=>(e=e.replace(/\/+$/,``),e+=`/`,t=t.replace(/^\/+/,``),e+t),a=(e,t)=>{for(let[n,r]of Object.entries(t)){let t=RegExp(`/:`+n+`(?:{[^/]+})?\\??`);e=e.replace(t,r?`/${r}`:``)}return e},o=e=>{let t=new URLSearchParams;for(let[n,r]of Object.entries(e)){if(r===void 0)continue;if(Array.isArray(r))for(let e of r)t.append(n,e);else t.set(n,r)}return t},s=(e,t)=>{switch(t){case`ws`:return e.replace(/^http/,`ws`);case`http`:return e.replace(/^ws/,`http`)}},c=e=>/^https?:\/\/[^\/]+?\/index(?=\?|$)/.test(e)?e.replace(/\/index(?=\?|$)/,`/`):e.replace(/\/index(?=\?|$)/,``);function l(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function u(e,t){if(!l(e)&&!l(t))return t;let n={...e};for(let e in t){let r=t[e];l(n[e])&&l(r)?n[e]=u(n[e],r):n[e]=r}return n}var d=(e,t)=>{let n=new Proxy(()=>{},{get(n,r){if(!(typeof r!=`string`||r===`then`))return d(e,[...t,r])},apply(n,r,i){return e({path:t,args:i})}});return n},f=class{url;method;queryParams=void 0;pathParams={};rBody;cType=void 0;constructor(e,t){this.url=e,this.method=t}fetch=async(t,n)=>{if(t){if(t.query&&(this.queryParams=o(t.query)),t.form){let e=new FormData;for(let[n,r]of Object.entries(t.form))if(Array.isArray(r))for(let t of r)e.append(n,t);else e.append(n,r);this.rBody=e}t.json&&(this.rBody=JSON.stringify(t.json),this.cType=`application/json`),t.param&&(this.pathParams=t.param)}let r=this.method.toUpperCase(),i={...t?.header,...typeof n?.headers==`function`?await n.headers():n?.headers};if(t?.cookie){let n=[];for(let[r,i]of Object.entries(t.cookie))n.push(e.serialize(r,i,{path:`/`}));i.Cookie=n.join(`,`)}this.cType&&(i[`Content-Type`]=this.cType);let s=new Headers(i??void 0),l=this.url;l=c(l),l=a(l,this.pathParams),this.queryParams&&(l=l+`?`+this.queryParams.toString()),r=this.method.toUpperCase();let u=!(r===`GET`||r===`HEAD`);return(n?.fetch||fetch)(l,{body:u?this.rBody:void 0,method:r,headers:s,...n?.init})}},p=(e,t)=>d(function n(r){let l=[...r.path],d=l.slice(-3).reverse();if(d[0]===`toString`)return d[1]===`name`?d[2]||``:n.toString();if(d[0]===`valueOf`)return d[1]===`name`?d[2]||``:n;let p=``;if(/^\$/.test(d[0])){let e=l.pop();e&&(p=e.replace(/^\$/,``))}let m=l.join(`/`),h=i(e,m);if(p===`url`){let e=h;return r.args[0]&&(r.args[0].param&&(e=a(h,r.args[0].param)),r.args[0].query&&(e=e+`?`+o(r.args[0].query).toString())),e=c(e),new URL(e)}if(p===`ws`){let e=s(r.args[0]&&r.args[0].param?a(h,r.args[0].param):h,`ws`),n=new URL(e),i=r.args[0]?.query;i&&Object.entries(i).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>n.searchParams.append(e,t)):n.searchParams.set(e,t)});let o=(...e)=>t?.webSocket!==void 0&&typeof t.webSocket==`function`?t.webSocket(...e):new WebSocket(...e);return o(n.toString())}let g=new f(h,p);if(p){t??={};let e=u(t,{...r.args[1]});return g.fetch(r.args[0],e)}return g},[]);const m=process.env.BLINK_API_SERVER_URL,h=p(m??``,{fetch:m?void 0:async()=>{throw console.warn(`Your code is attempting to use the Blink API server, but no API server is configured for this Blink agent.`),Error(`No API server is configured for this Blink agent. External APIs are not available.`)}}),g=Object.freeze({upsert:async e=>{let t=await h.chat[`:id`].$post({param:{id:e}});if(t.status!==200){let e=await t.json();throw Error(e.error)}return{id:e}},message:async(e,t,n)=>{let r=await h.chat[`:id`].sendMessages.$post({param:{id:e},json:{messages:[t],behavior:n?.behavior??`enqueue`}});if(r.status!==204){let e=await r.json();throw Error(e.error)}}}),_=Object.freeze({get:async e=>{let t=await h.storage[`:key`].$get({param:{key:e}});if(t.status!==200){let e=await t.json();throw Error(e.error)}let n=await t.json();return n.value},set:async(e,t)=>{let n=await h.storage[`:key`].$post({param:{key:e},json:{value:t}});if(n.status!==204){let e=await n.json();throw Error(e.error)}}}),v={with(e,t){let n={};for(let r of Object.keys(e)){let i=e[r];n[r]=i.with(t)}return n},prefix(e,t){let n={};for(let[r,i]of Object.entries(e))n[`${t}${r}`]=i;return n}};function y(e){return{version:`v0`,supportsWebhooks:e.webhook!==void 0,fetch:async t=>{let n=new URL(t.url);switch(n.pathname){case`/sendMessages`:return b(t,e);case`/webhook`:return x(t,e);default:return new Response(`Not found`,{status:404})}}}}async function b(e,n){if(e.method!==`POST`)return new Response(`Method not allowed`,{status:405});let r;try{r=await e.json()}catch{return new Response(`Invalid request`,{status:400})}let i;try{i=await n.sendMessages({messages:r.messages,chat:r.chat,request:e})}catch(e){return new Response(JSON.stringify({error:t.default.inspect(e)}),{status:500})}if(i instanceof Response)return i;let a;if(i instanceof ReadableStream)a=i;else{if(typeof i!=`object`||!(`toUIMessageStream`in i))throw Error(`The agent must return a "Response", "ReadableStream", or "toUIMessageStream" function.`);a=i.toUIMessageStream()}return new Response(a.pipeThrough(new TransformStream({transform(e,t){t.enqueue(`data: ${JSON.stringify(e)}\n\n`)},flush(e){e.enqueue(`data: [DONE]
1
+ Object.defineProperty(exports,`__esModule`,{value:!0});const e=require(`../cookie-BtKXrFr6.cjs`);let t=require(`util`);t=e.__toESM(t);var n=(e,t)=>(e=e.replace(/\/+$/,``),e+=`/`,t=t.replace(/^\/+/,``),e+t),r=(e,t)=>{for(let[n,r]of Object.entries(t)){let t=RegExp(`/:`+n+`(?:{[^/]+})?\\??`);e=e.replace(t,r?`/${r}`:``)}return e},i=e=>{let t=new URLSearchParams;for(let[n,r]of Object.entries(e)){if(r===void 0)continue;if(Array.isArray(r))for(let e of r)t.append(n,e);else t.set(n,r)}return t},a=(e,t)=>{switch(t){case`ws`:return e.replace(/^http/,`ws`);case`http`:return e.replace(/^ws/,`http`)}},o=e=>/^https?:\/\/[^\/]+?\/index(?=\?|$)/.test(e)?e.replace(/\/index(?=\?|$)/,`/`):e.replace(/\/index(?=\?|$)/,``);function s(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function c(e,t){if(!s(e)&&!s(t))return t;let n={...e};for(let e in t){let r=t[e];s(n[e])&&s(r)?n[e]=c(n[e],r):n[e]=r}return n}var l=(e,t)=>{let n=new Proxy(()=>{},{get(n,r){if(!(typeof r!=`string`||r===`then`))return l(e,[...t,r])},apply(n,r,i){return e({path:t,args:i})}});return n},u=class{url;method;queryParams=void 0;pathParams={};rBody;cType=void 0;constructor(e,t){this.url=e,this.method=t}fetch=async(t,n)=>{if(t){if(t.query&&(this.queryParams=i(t.query)),t.form){let e=new FormData;for(let[n,r]of Object.entries(t.form))if(Array.isArray(r))for(let t of r)e.append(n,t);else e.append(n,r);this.rBody=e}t.json&&(this.rBody=JSON.stringify(t.json),this.cType=`application/json`),t.param&&(this.pathParams=t.param)}let a=this.method.toUpperCase(),s={...t?.header,...typeof n?.headers==`function`?await n.headers():n?.headers};if(t?.cookie){let n=[];for(let[r,i]of Object.entries(t.cookie))n.push(e.serialize(r,i,{path:`/`}));s.Cookie=n.join(`,`)}this.cType&&(s[`Content-Type`]=this.cType);let c=new Headers(s??void 0),l=this.url;l=o(l),l=r(l,this.pathParams),this.queryParams&&(l=l+`?`+this.queryParams.toString()),a=this.method.toUpperCase();let u=!(a===`GET`||a===`HEAD`);return(n?.fetch||fetch)(l,{body:u?this.rBody:void 0,method:a,headers:c,...n?.init})}},d=(e,t)=>l(function s(l){let d=[...l.path],f=d.slice(-3).reverse();if(f[0]===`toString`)return f[1]===`name`?f[2]||``:s.toString();if(f[0]===`valueOf`)return f[1]===`name`?f[2]||``:s;let p=``;if(/^\$/.test(f[0])){let e=d.pop();e&&(p=e.replace(/^\$/,``))}let m=d.join(`/`),h=n(e,m);if(p===`url`){let e=h;return l.args[0]&&(l.args[0].param&&(e=r(h,l.args[0].param)),l.args[0].query&&(e=e+`?`+i(l.args[0].query).toString())),e=o(e),new URL(e)}if(p===`ws`){let e=a(l.args[0]&&l.args[0].param?r(h,l.args[0].param):h,`ws`),n=new URL(e),i=l.args[0]?.query;i&&Object.entries(i).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>n.searchParams.append(e,t)):n.searchParams.set(e,t)});let o=(...e)=>t?.webSocket!==void 0&&typeof t.webSocket==`function`?t.webSocket(...e):new WebSocket(...e);return o(n.toString())}let g=new u(h,p);if(p){t??={};let e=c(t,{...l.args[1]});return g.fetch(l.args[0],e)}return g},[]);const f=process.env[e.APIServerURLEnvironmentVariable],p=d(f??``,{fetch:f?void 0:async()=>{throw console.warn(`Your code is attempting to use the Blink API server, but no API server is configured for this Blink agent.`),Error(`No API server is configured for this Blink agent. External APIs are not available.`)}}),m=Object.freeze({upsert:async e=>{let t=await p.chat[`:id`].$post({param:{id:e}});if(t.status!==200){let e=await t.json();throw Error(e.error)}return{id:e}},message:async(e,t,n)=>{let r=await p.chat[`:id`].sendMessages.$post({param:{id:e},json:{messages:[t],behavior:n?.behavior??`enqueue`}});if(r.status!==204){let e=await r.json();throw Error(e.error)}}}),h=Object.freeze({kv:Object.freeze({get:async e=>{let t=await p.storage.kv[`:key`].$get({param:{key:e}});if(t.status!==200){let e=await t.json();throw Error(e.error)}let n=await t.json();return n.value},set:async(e,t)=>{let n=await p.storage.kv[`:key`].$post({param:{key:e},json:{value:t}});if(n.status!==204){let e=await n.json();throw Error(e.error)}},del:async e=>{let t=await p.storage.kv[`:key`].$delete({param:{key:e}});if(t.status!==204){let e=await t.json();throw Error(e.error)}}})}),g={with(e,t){let n={};for(let r of Object.keys(e)){let i=e[r];n[r]=i.with(t)}return n},prefix(e,t){let n={};for(let[r,i]of Object.entries(e))n[`${t}${r}`]=i;return n}};function _(e){return{version:`v0`,supportsRequests:e.onRequest!==void 0,fetch:async n=>{let r=new URL(n.url);if(r.pathname.startsWith(`/_agent/`))switch(r.pathname){case`/_agent/send-messages`:return v(n,e);default:return new Response(`Not found`,{status:404})}if(e.onRequest)try{await e.onRequest(n)}catch(e){return new Response(JSON.stringify({error:t.default.inspect(e)}),{status:500})}return new Response(`Not found`,{status:404})}}}async function v(e,n){if(e.method!==`POST`)return new Response(`Method not allowed`,{status:405});let r;try{r=await e.json()}catch{return new Response(`Invalid request`,{status:400})}let i;try{i=await n.sendMessages({messages:r.messages,chat:r.chat})}catch(e){return new Response(JSON.stringify({error:t.default.inspect(e)}),{status:500})}if(i instanceof Response)return i;let a;if(i instanceof ReadableStream)a=i;else{if(typeof i!=`object`||!(`toUIMessageStream`in i))throw Error(`The agent must return a "Response", "ReadableStream", or "toUIMessageStream" function.`);a=i.toUIMessageStream()}return new Response(a.pipeThrough(new TransformStream({transform(e,t){t.enqueue(`data: ${JSON.stringify(e)}\n\n`)},flush(e){e.enqueue(`data: [DONE]
2
2
 
3
- `)}})).pipeThrough(new TextEncoderStream),{headers:{"content-type":`text/event-stream`,"cache-control":`no-cache, no-transform`,connection:`keep-alive`,"x-vercel-ai-ui-message-stream":`v1`,"x-accel-buffering":`no`}})}async function x(e,n){if(!n.webhook)return new Response(`No webhook function provided`,{status:501});try{let t=await n.webhook(e);return t||new Response(`OK`,{status:200})}catch(e){return new Response(JSON.stringify({error:t.default.inspect(e)}),{status:500})}}function S(e,t){return e.headers.set(`x-blink-stream-response-format`,t),e}var C={agent:y,chat:g,storage:_,tools:v};exports.agent=y,exports.chat=g,exports.default=C,exports.storage=_,exports.tools=v,exports.withResponseFormat=S;
3
+ `)}})).pipeThrough(new TextEncoderStream),{headers:{"content-type":`text/event-stream`,"cache-control":`no-cache, no-transform`,connection:`keep-alive`,"x-vercel-ai-ui-message-stream":`v1`,"x-accel-buffering":`no`}})}function y(t,n){return t.headers.set(e.StreamResponseFormatHeader,n),t}var b={agent:_,chat:m,storage:h,tools:g};exports.agent=_,exports.chat=m,exports.default=b,exports.storage=h,exports.tools=g,exports.withResponseFormat=y;
@@ -57,21 +57,24 @@ declare const tools: {
57
57
  */
58
58
  prefix(tools: ToolSet, prefix: string): ToolSet;
59
59
  };
60
- type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
61
60
  type ToolsWithContext = Record<string, Tool & {
62
61
  with(context: unknown): Tool;
63
62
  }>;
64
- type ContextFromTools<TOOLS extends ToolsWithContext> = UnionToIntersection<TOOLS[keyof TOOLS] extends {
63
+ type ContextFromTools<TOOLS extends ToolsWithContext> = TOOLS[keyof TOOLS] extends {
65
64
  with(context: infer C): any;
66
- } ? C : never>;
65
+ } ? C : never;
67
66
  //#endregion
68
67
  //#region src/api/storage.d.ts
69
68
  /**
70
- * Storage is namespaced by the agent.
69
+ * Storage allows agents to persist data.
70
+ * Every agent has it's own persistent storage namespace.
71
71
  */
72
72
  declare const storage: Readonly<{
73
- get: (key: string) => Promise<string | undefined>;
74
- set: (key: string, value: string) => Promise<void>;
73
+ kv: Readonly<{
74
+ get: (key: string) => Promise<string | undefined>;
75
+ set: (key: string, value: string) => Promise<void>;
76
+ del: (key: string) => Promise<void>;
77
+ }>;
75
78
  }>;
76
79
  //#endregion
77
80
  //#region src/api/index.d.ts
@@ -86,14 +89,38 @@ type SendMessagesResponse = {
86
89
  * SendMessagesOptions is the options for the sendMessages function.
87
90
  */
88
91
  interface SendMessagesOptions<MESSAGE extends UIMessage = UIMessage> {
92
+ /**
93
+ * Messages are all messages for the history of the chat.
94
+ * It is the user's responsibility to manage context for the chat.
95
+ */
89
96
  readonly messages: MESSAGE[];
97
+ /**
98
+ * Chat is the associated chat for the messages.
99
+ */
90
100
  readonly chat: Chat;
101
+ /**
102
+ * abortSignal can be used to terminate streaming operations
103
+ * immediately when the streaming request ends.
104
+ */
91
105
  readonly abortSignal?: AbortSignal;
92
- readonly request: Request;
93
106
  }
94
107
  interface Agent<MESSAGE extends UIMessage = UIMessage> {
108
+ /**
109
+ * sendMessages is called when the agent is streaming chat messages.
110
+ * This is invoked on chat creation, and can be programatically
111
+ * invoked at any time with `blink.chat.message`.
112
+ */
95
113
  sendMessages(options: SendMessagesOptions<MESSAGE>): Promise<SendMessagesResponse> | SendMessagesResponse;
96
- webhook?(request: Request): Promise<Response | void>;
114
+ /**
115
+ * onRequest is called when the agent receives a request.
116
+ * This is for handling webhooks, or incoming client payloads
117
+ * that warrant a response.
118
+ *
119
+ * @param request The request received by the agent.
120
+ * @returns A response to the request. If void, the agent will
121
+ * respond with a 404.
122
+ */
123
+ onRequest?(request: Request): Promise<Response | void>;
97
124
  }
98
125
  /**
99
126
  * AgentDefaultExport is the expected default export of a compiled agent.
@@ -105,7 +132,7 @@ interface Agent<MESSAGE extends UIMessage = UIMessage> {
105
132
  type AgentDefaultExport = {
106
133
  readonly version: "v0";
107
134
  fetch: (request: Request) => Promise<Response> | Response;
108
- readonly supportsWebhooks?: boolean;
135
+ readonly supportsRequests?: boolean;
109
136
  };
110
137
  /**
111
138
  * agent is the main function to create a Blink agent.
@@ -123,8 +150,11 @@ declare const _default: {
123
150
  message: (id: string, message: Message, options?: MessageOptions) => Promise<void>;
124
151
  }>;
125
152
  storage: Readonly<{
126
- get: (key: string) => Promise<string | undefined>;
127
- set: (key: string, value: string) => Promise<void>;
153
+ kv: Readonly<{
154
+ get: (key: string) => Promise<string | undefined>;
155
+ set: (key: string, value: string) => Promise<void>;
156
+ del: (key: string) => Promise<void>;
157
+ }>;
128
158
  }>;
129
159
  tools: {
130
160
  with<const TOOLS extends {
@@ -57,21 +57,24 @@ declare const tools: {
57
57
  */
58
58
  prefix(tools: ToolSet, prefix: string): ToolSet;
59
59
  };
60
- type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
61
60
  type ToolsWithContext = Record<string, Tool & {
62
61
  with(context: unknown): Tool;
63
62
  }>;
64
- type ContextFromTools<TOOLS extends ToolsWithContext> = UnionToIntersection<TOOLS[keyof TOOLS] extends {
63
+ type ContextFromTools<TOOLS extends ToolsWithContext> = TOOLS[keyof TOOLS] extends {
65
64
  with(context: infer C): any;
66
- } ? C : never>;
65
+ } ? C : never;
67
66
  //#endregion
68
67
  //#region src/api/storage.d.ts
69
68
  /**
70
- * Storage is namespaced by the agent.
69
+ * Storage allows agents to persist data.
70
+ * Every agent has it's own persistent storage namespace.
71
71
  */
72
72
  declare const storage: Readonly<{
73
- get: (key: string) => Promise<string | undefined>;
74
- set: (key: string, value: string) => Promise<void>;
73
+ kv: Readonly<{
74
+ get: (key: string) => Promise<string | undefined>;
75
+ set: (key: string, value: string) => Promise<void>;
76
+ del: (key: string) => Promise<void>;
77
+ }>;
75
78
  }>;
76
79
  //#endregion
77
80
  //#region src/api/index.d.ts
@@ -86,14 +89,38 @@ type SendMessagesResponse = {
86
89
  * SendMessagesOptions is the options for the sendMessages function.
87
90
  */
88
91
  interface SendMessagesOptions<MESSAGE extends UIMessage = UIMessage> {
92
+ /**
93
+ * Messages are all messages for the history of the chat.
94
+ * It is the user's responsibility to manage context for the chat.
95
+ */
89
96
  readonly messages: MESSAGE[];
97
+ /**
98
+ * Chat is the associated chat for the messages.
99
+ */
90
100
  readonly chat: Chat;
101
+ /**
102
+ * abortSignal can be used to terminate streaming operations
103
+ * immediately when the streaming request ends.
104
+ */
91
105
  readonly abortSignal?: AbortSignal;
92
- readonly request: Request;
93
106
  }
94
107
  interface Agent<MESSAGE extends UIMessage = UIMessage> {
108
+ /**
109
+ * sendMessages is called when the agent is streaming chat messages.
110
+ * This is invoked on chat creation, and can be programatically
111
+ * invoked at any time with `blink.chat.message`.
112
+ */
95
113
  sendMessages(options: SendMessagesOptions<MESSAGE>): Promise<SendMessagesResponse> | SendMessagesResponse;
96
- webhook?(request: Request): Promise<Response | void>;
114
+ /**
115
+ * onRequest is called when the agent receives a request.
116
+ * This is for handling webhooks, or incoming client payloads
117
+ * that warrant a response.
118
+ *
119
+ * @param request The request received by the agent.
120
+ * @returns A response to the request. If void, the agent will
121
+ * respond with a 404.
122
+ */
123
+ onRequest?(request: Request): Promise<Response | void>;
97
124
  }
98
125
  /**
99
126
  * AgentDefaultExport is the expected default export of a compiled agent.
@@ -105,7 +132,7 @@ interface Agent<MESSAGE extends UIMessage = UIMessage> {
105
132
  type AgentDefaultExport = {
106
133
  readonly version: "v0";
107
134
  fetch: (request: Request) => Promise<Response> | Response;
108
- readonly supportsWebhooks?: boolean;
135
+ readonly supportsRequests?: boolean;
109
136
  };
110
137
  /**
111
138
  * agent is the main function to create a Blink agent.
@@ -123,8 +150,11 @@ declare const _default: {
123
150
  message: (id: string, message: Message, options?: MessageOptions) => Promise<void>;
124
151
  }>;
125
152
  storage: Readonly<{
126
- get: (key: string) => Promise<string | undefined>;
127
- set: (key: string, value: string) => Promise<void>;
153
+ kv: Readonly<{
154
+ get: (key: string) => Promise<string | undefined>;
155
+ set: (key: string, value: string) => Promise<void>;
156
+ del: (key: string) => Promise<void>;
157
+ }>;
128
158
  }>;
129
159
  tools: {
130
160
  with<const TOOLS extends {
package/dist/api/index.js CHANGED
@@ -1,3 +1,3 @@
1
- import{serialize as e}from"../cookie-BiKY7-P1.js";import t from"util";var n=(e,t)=>(e=e.replace(/\/+$/,``),e+=`/`,t=t.replace(/^\/+/,``),e+t),r=(e,t)=>{for(let[n,r]of Object.entries(t)){let t=RegExp(`/:`+n+`(?:{[^/]+})?\\??`);e=e.replace(t,r?`/${r}`:``)}return e},i=e=>{let t=new URLSearchParams;for(let[n,r]of Object.entries(e)){if(r===void 0)continue;if(Array.isArray(r))for(let e of r)t.append(n,e);else t.set(n,r)}return t},a=(e,t)=>{switch(t){case`ws`:return e.replace(/^http/,`ws`);case`http`:return e.replace(/^ws/,`http`)}},o=e=>/^https?:\/\/[^\/]+?\/index(?=\?|$)/.test(e)?e.replace(/\/index(?=\?|$)/,`/`):e.replace(/\/index(?=\?|$)/,``);function s(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function c(e,t){if(!s(e)&&!s(t))return t;let n={...e};for(let e in t){let r=t[e];s(n[e])&&s(r)?n[e]=c(n[e],r):n[e]=r}return n}var l=(e,t)=>{let n=new Proxy(()=>{},{get(n,r){if(!(typeof r!=`string`||r===`then`))return l(e,[...t,r])},apply(n,r,i){return e({path:t,args:i})}});return n},u=class{url;method;queryParams=void 0;pathParams={};rBody;cType=void 0;constructor(e,t){this.url=e,this.method=t}fetch=async(t,n)=>{if(t){if(t.query&&(this.queryParams=i(t.query)),t.form){let e=new FormData;for(let[n,r]of Object.entries(t.form))if(Array.isArray(r))for(let t of r)e.append(n,t);else e.append(n,r);this.rBody=e}t.json&&(this.rBody=JSON.stringify(t.json),this.cType=`application/json`),t.param&&(this.pathParams=t.param)}let a=this.method.toUpperCase(),s={...t?.header,...typeof n?.headers==`function`?await n.headers():n?.headers};if(t?.cookie){let n=[];for(let[r,i]of Object.entries(t.cookie))n.push(e(r,i,{path:`/`}));s.Cookie=n.join(`,`)}this.cType&&(s[`Content-Type`]=this.cType);let c=new Headers(s??void 0),l=this.url;l=o(l),l=r(l,this.pathParams),this.queryParams&&(l=l+`?`+this.queryParams.toString()),a=this.method.toUpperCase();let u=!(a===`GET`||a===`HEAD`);return(n?.fetch||fetch)(l,{body:u?this.rBody:void 0,method:a,headers:c,...n?.init})}},d=(e,t)=>l(function s(l){let d=[...l.path],f=d.slice(-3).reverse();if(f[0]===`toString`)return f[1]===`name`?f[2]||``:s.toString();if(f[0]===`valueOf`)return f[1]===`name`?f[2]||``:s;let p=``;if(/^\$/.test(f[0])){let e=d.pop();e&&(p=e.replace(/^\$/,``))}let m=d.join(`/`),h=n(e,m);if(p===`url`){let e=h;return l.args[0]&&(l.args[0].param&&(e=r(h,l.args[0].param)),l.args[0].query&&(e=e+`?`+i(l.args[0].query).toString())),e=o(e),new URL(e)}if(p===`ws`){let e=a(l.args[0]&&l.args[0].param?r(h,l.args[0].param):h,`ws`),n=new URL(e),i=l.args[0]?.query;i&&Object.entries(i).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>n.searchParams.append(e,t)):n.searchParams.set(e,t)});let o=(...e)=>t?.webSocket!==void 0&&typeof t.webSocket==`function`?t.webSocket(...e):new WebSocket(...e);return o(n.toString())}let g=new u(h,p);if(p){t??={};let e=c(t,{...l.args[1]});return g.fetch(l.args[0],e)}return g},[]);const f=process.env.BLINK_API_SERVER_URL,p=d(f??``,{fetch:f?void 0:async()=>{throw console.warn(`Your code is attempting to use the Blink API server, but no API server is configured for this Blink agent.`),Error(`No API server is configured for this Blink agent. External APIs are not available.`)}}),m=Object.freeze({upsert:async e=>{let t=await p.chat[`:id`].$post({param:{id:e}});if(t.status!==200){let e=await t.json();throw Error(e.error)}return{id:e}},message:async(e,t,n)=>{let r=await p.chat[`:id`].sendMessages.$post({param:{id:e},json:{messages:[t],behavior:n?.behavior??`enqueue`}});if(r.status!==204){let e=await r.json();throw Error(e.error)}}}),h=Object.freeze({get:async e=>{let t=await p.storage[`:key`].$get({param:{key:e}});if(t.status!==200){let e=await t.json();throw Error(e.error)}let n=await t.json();return n.value},set:async(e,t)=>{let n=await p.storage[`:key`].$post({param:{key:e},json:{value:t}});if(n.status!==204){let e=await n.json();throw Error(e.error)}}}),g={with(e,t){let n={};for(let r of Object.keys(e)){let i=e[r];n[r]=i.with(t)}return n},prefix(e,t){let n={};for(let[r,i]of Object.entries(e))n[`${t}${r}`]=i;return n}};function _(e){return{version:`v0`,supportsWebhooks:e.webhook!==void 0,fetch:async t=>{let n=new URL(t.url);switch(n.pathname){case`/sendMessages`:return v(t,e);case`/webhook`:return y(t,e);default:return new Response(`Not found`,{status:404})}}}}async function v(e,n){if(e.method!==`POST`)return new Response(`Method not allowed`,{status:405});let r;try{r=await e.json()}catch{return new Response(`Invalid request`,{status:400})}let i;try{i=await n.sendMessages({messages:r.messages,chat:r.chat,request:e})}catch(e){return new Response(JSON.stringify({error:t.inspect(e)}),{status:500})}if(i instanceof Response)return i;let a;if(i instanceof ReadableStream)a=i;else{if(typeof i!=`object`||!(`toUIMessageStream`in i))throw Error(`The agent must return a "Response", "ReadableStream", or "toUIMessageStream" function.`);a=i.toUIMessageStream()}return new Response(a.pipeThrough(new TransformStream({transform(e,t){t.enqueue(`data: ${JSON.stringify(e)}\n\n`)},flush(e){e.enqueue(`data: [DONE]
1
+ import{APIServerURLEnvironmentVariable as e,StreamResponseFormatHeader as t,serialize as n}from"../cookie-CyZUsiHM.js";import r from"util";var i=(e,t)=>(e=e.replace(/\/+$/,``),e+=`/`,t=t.replace(/^\/+/,``),e+t),a=(e,t)=>{for(let[n,r]of Object.entries(t)){let t=RegExp(`/:`+n+`(?:{[^/]+})?\\??`);e=e.replace(t,r?`/${r}`:``)}return e},o=e=>{let t=new URLSearchParams;for(let[n,r]of Object.entries(e)){if(r===void 0)continue;if(Array.isArray(r))for(let e of r)t.append(n,e);else t.set(n,r)}return t},s=(e,t)=>{switch(t){case`ws`:return e.replace(/^http/,`ws`);case`http`:return e.replace(/^ws/,`http`)}},c=e=>/^https?:\/\/[^\/]+?\/index(?=\?|$)/.test(e)?e.replace(/\/index(?=\?|$)/,`/`):e.replace(/\/index(?=\?|$)/,``);function l(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function u(e,t){if(!l(e)&&!l(t))return t;let n={...e};for(let e in t){let r=t[e];l(n[e])&&l(r)?n[e]=u(n[e],r):n[e]=r}return n}var d=(e,t)=>{let n=new Proxy(()=>{},{get(n,r){if(!(typeof r!=`string`||r===`then`))return d(e,[...t,r])},apply(n,r,i){return e({path:t,args:i})}});return n},f=class{url;method;queryParams=void 0;pathParams={};rBody;cType=void 0;constructor(e,t){this.url=e,this.method=t}fetch=async(e,t)=>{if(e){if(e.query&&(this.queryParams=o(e.query)),e.form){let t=new FormData;for(let[n,r]of Object.entries(e.form))if(Array.isArray(r))for(let e of r)t.append(n,e);else t.append(n,r);this.rBody=t}e.json&&(this.rBody=JSON.stringify(e.json),this.cType=`application/json`),e.param&&(this.pathParams=e.param)}let r=this.method.toUpperCase(),i={...e?.header,...typeof t?.headers==`function`?await t.headers():t?.headers};if(e?.cookie){let t=[];for(let[r,i]of Object.entries(e.cookie))t.push(n(r,i,{path:`/`}));i.Cookie=t.join(`,`)}this.cType&&(i[`Content-Type`]=this.cType);let s=new Headers(i??void 0),l=this.url;l=c(l),l=a(l,this.pathParams),this.queryParams&&(l=l+`?`+this.queryParams.toString()),r=this.method.toUpperCase();let u=!(r===`GET`||r===`HEAD`);return(t?.fetch||fetch)(l,{body:u?this.rBody:void 0,method:r,headers:s,...t?.init})}},p=(e,t)=>d(function n(r){let l=[...r.path],d=l.slice(-3).reverse();if(d[0]===`toString`)return d[1]===`name`?d[2]||``:n.toString();if(d[0]===`valueOf`)return d[1]===`name`?d[2]||``:n;let p=``;if(/^\$/.test(d[0])){let e=l.pop();e&&(p=e.replace(/^\$/,``))}let m=l.join(`/`),h=i(e,m);if(p===`url`){let e=h;return r.args[0]&&(r.args[0].param&&(e=a(h,r.args[0].param)),r.args[0].query&&(e=e+`?`+o(r.args[0].query).toString())),e=c(e),new URL(e)}if(p===`ws`){let e=s(r.args[0]&&r.args[0].param?a(h,r.args[0].param):h,`ws`),n=new URL(e),i=r.args[0]?.query;i&&Object.entries(i).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>n.searchParams.append(e,t)):n.searchParams.set(e,t)});let o=(...e)=>t?.webSocket!==void 0&&typeof t.webSocket==`function`?t.webSocket(...e):new WebSocket(...e);return o(n.toString())}let g=new f(h,p);if(p){t??={};let e=u(t,{...r.args[1]});return g.fetch(r.args[0],e)}return g},[]);const m=process.env[e],h=p(m??``,{fetch:m?void 0:async()=>{throw console.warn(`Your code is attempting to use the Blink API server, but no API server is configured for this Blink agent.`),Error(`No API server is configured for this Blink agent. External APIs are not available.`)}}),g=Object.freeze({upsert:async e=>{let t=await h.chat[`:id`].$post({param:{id:e}});if(t.status!==200){let e=await t.json();throw Error(e.error)}return{id:e}},message:async(e,t,n)=>{let r=await h.chat[`:id`].sendMessages.$post({param:{id:e},json:{messages:[t],behavior:n?.behavior??`enqueue`}});if(r.status!==204){let e=await r.json();throw Error(e.error)}}}),_=Object.freeze({kv:Object.freeze({get:async e=>{let t=await h.storage.kv[`:key`].$get({param:{key:e}});if(t.status!==200){let e=await t.json();throw Error(e.error)}let n=await t.json();return n.value},set:async(e,t)=>{let n=await h.storage.kv[`:key`].$post({param:{key:e},json:{value:t}});if(n.status!==204){let e=await n.json();throw Error(e.error)}},del:async e=>{let t=await h.storage.kv[`:key`].$delete({param:{key:e}});if(t.status!==204){let e=await t.json();throw Error(e.error)}}})}),v={with(e,t){let n={};for(let r of Object.keys(e)){let i=e[r];n[r]=i.with(t)}return n},prefix(e,t){let n={};for(let[r,i]of Object.entries(e))n[`${t}${r}`]=i;return n}};function y(e){return{version:`v0`,supportsRequests:e.onRequest!==void 0,fetch:async t=>{let n=new URL(t.url);if(n.pathname.startsWith(`/_agent/`))switch(n.pathname){case`/_agent/send-messages`:return b(t,e);default:return new Response(`Not found`,{status:404})}if(e.onRequest)try{await e.onRequest(t)}catch(e){return new Response(JSON.stringify({error:r.inspect(e)}),{status:500})}return new Response(`Not found`,{status:404})}}}async function b(e,t){if(e.method!==`POST`)return new Response(`Method not allowed`,{status:405});let n;try{n=await e.json()}catch{return new Response(`Invalid request`,{status:400})}let i;try{i=await t.sendMessages({messages:n.messages,chat:n.chat})}catch(e){return new Response(JSON.stringify({error:r.inspect(e)}),{status:500})}if(i instanceof Response)return i;let a;if(i instanceof ReadableStream)a=i;else{if(typeof i!=`object`||!(`toUIMessageStream`in i))throw Error(`The agent must return a "Response", "ReadableStream", or "toUIMessageStream" function.`);a=i.toUIMessageStream()}return new Response(a.pipeThrough(new TransformStream({transform(e,t){t.enqueue(`data: ${JSON.stringify(e)}\n\n`)},flush(e){e.enqueue(`data: [DONE]
2
2
 
3
- `)}})).pipeThrough(new TextEncoderStream),{headers:{"content-type":`text/event-stream`,"cache-control":`no-cache, no-transform`,connection:`keep-alive`,"x-vercel-ai-ui-message-stream":`v1`,"x-accel-buffering":`no`}})}async function y(e,n){if(!n.webhook)return new Response(`No webhook function provided`,{status:501});try{let t=await n.webhook(e);return t||new Response(`OK`,{status:200})}catch(e){return new Response(JSON.stringify({error:t.inspect(e)}),{status:500})}}function b(e,t){return e.headers.set(`x-blink-stream-response-format`,t),e}var x={agent:_,chat:m,storage:h,tools:g};export{_ as agent,m as chat,x as default,h as storage,g as tools,b as withResponseFormat};
3
+ `)}})).pipeThrough(new TextEncoderStream),{headers:{"content-type":`text/event-stream`,"cache-control":`no-cache, no-transform`,connection:`keep-alive`,"x-vercel-ai-ui-message-stream":`v1`,"x-accel-buffering":`no`}})}function x(e,n){return e.headers.set(t,n),e}var S={agent:y,chat:g,storage:_,tools:v};export{y as agent,g as chat,S as default,_ as storage,v as tools,x as withResponseFormat};