Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@aigur/client

Package Overview
Dependencies
Maintainers
1
Versions
39
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@aigur/client - npm Package Compare versions

Comparing version 0.32.3 to 0.33.0

68

dist/index.d.ts
import { z } from 'zod';
interface PipelineConf<Input extends z.AnyZodObject, Output extends z.AnyZodObject | ZodReadableStream> {
declare class FlowBuilder<Input extends Record<string, unknown>, Output extends Record<string, unknown> | ReadableStream, NodeDefinitions extends ConcreteNode<any, any>[], PrevNode extends ConcreteNode<any, any> | null> {
private nodes;
constructor(nodes: NodeDefinitions);
static create<Input extends Record<string, unknown>, Output extends Record<string, unknown> | ReadableStream>(): FlowBuilder<Input, Output, [], null>;
node<NodeDef extends NodeAction<any, any>>(nodeDefinition: NodeDef, getUserInput: (data: {
nodes: NodeDefinitions;
prev: PrevNode extends ConcreteNode<any, any> ? Awaited<ReturnType<PrevNode['action']>> : Input;
input: Input;
}) => Parameters<NodeDef>['0']): FlowBuilder<Input, Output, [...NodeDefinitions, ConcreteNode<Parameters<NodeDef>["0"], Awaited<ReturnType<NodeDef>>>], ConcreteNode<Parameters<NodeDef>["0"], Awaited<ReturnType<NodeDef>>>>;
private createDynamicPlaceholders;
output(getUserInput: (data: {
nodes: NodeDefinitions;
prev: PrevNode extends ConcreteNode<any, any> ? Awaited<ReturnType<PrevNode['action']>> : Input;
input: Input;
}) => Output): FlowBuilder<Input, Output, [...NodeDefinitions, ConcreteNode<Output, Awaited<Output>>], ConcreteNode<Output, Awaited<Output>>>;
getNodes(): NodeDefinitions;
}
interface PipelineConf<Input extends Record<string, unknown>, Output extends Record<string, unknown> | ReadableStream> {
id: string;
input: Input;
output: Output;
flow: (builder: FlowBuilder<Input, Output, [], null>) => FlowBuilder<Input, Output, any, ConcreteNode<z.input<Output>, z.output<Output>>>;
flow: (builder: FlowBuilder<Input, Output, [], null>) => FlowBuilder<Input, Output, any, ConcreteNode<Output, Output>>;
retries?: number;

@@ -12,2 +28,6 @@ stream?: boolean;

updateProgress?: boolean;
validateInput?: (input: Input) => {
valid: boolean;
message?: string;
};
}

@@ -21,3 +41,2 @@ type NodeAction<Input extends Record<string, unknown> | ReadableStream, Output extends Record<string, unknown> | ReadableStream> = (input: Input, apiKeys: Record<string, string>) => Promise<Output>;

type ProgressEventType = 'node:start' | 'node:finish' | 'node:stream';
type ZodReadableStream = z.ZodType<InstanceType<typeof ReadableStream>, z.ZodTypeDef, InstanceType<typeof ReadableStream>>;
type APIKeys = Record<string, string> & {

@@ -30,24 +49,5 @@ openai?: string;

declare class FlowBuilder<Input extends z.ZodObject<any, any, any>, Output extends z.ZodObject<any, any, any> | ZodReadableStream, NodeDefinitions extends ConcreteNode<any, any>[], PrevNode extends ConcreteNode<any, any> | null> {
private input;
private nodes;
constructor(input: Input, nodes: NodeDefinitions);
static create<Input extends z.ZodObject<any, any, any>, Output extends z.ZodObject<any, any, any> | ZodReadableStream>(input: Input): FlowBuilder<Input, Output, [], null>;
node<NodeDef extends NodeAction<any, any>>(nodeDefinition: NodeDef, getUserInput: (data: {
nodes: NodeDefinitions;
prev: PrevNode extends ConcreteNode<any, any> ? Awaited<ReturnType<PrevNode['action']>> : Input;
input: z.output<Input>;
}) => Parameters<NodeDef>['0']): FlowBuilder<Input, Output, [...NodeDefinitions, ConcreteNode<Parameters<NodeDef>["0"], Awaited<ReturnType<NodeDef>>>], ConcreteNode<Parameters<NodeDef>["0"], Awaited<ReturnType<NodeDef>>>>;
private createDynamicPlaceholders;
output(getUserInput: (data: {
nodes: NodeDefinitions;
prev: PrevNode extends ConcreteNode<any, any> ? Awaited<ReturnType<PrevNode['action']>> : Input;
input: z.output<Input>;
}) => z.output<Output>): FlowBuilder<Input, Output, [...NodeDefinitions, ConcreteNode<z.input<Output>, Awaited<z.output<Output>>>], ConcreteNode<z.input<Output>, Awaited<z.output<Output>>>>;
getNodes(): NodeDefinitions;
}
declare class Pipeline<Input extends z.AnyZodObject, Output extends z.AnyZodObject | ZodReadableStream> {
declare class Pipeline<Input extends Record<string, unknown>, Output extends Record<string, unknown> | ReadableStream> {
readonly conf: PipelineConf<Input, Output>;
readonly flow: FlowBuilder<z.AnyZodObject, z.AnyZodObject | ZodReadableStream, any, any>;
readonly flow: FlowBuilder<Input, Output, any, any>;
private readonly apiKeys;

@@ -61,9 +61,9 @@ readonly onProgressListeners: Map<string, (args: {

readonly onFinishListeners: Map<string, () => void>;
constructor(conf: PipelineConf<Input, Output>, flow: FlowBuilder<z.AnyZodObject, z.AnyZodObject | ZodReadableStream, any, any>, apiKeys: APIKeys);
invoke(input: z.input<Input>): Promise<z.output<Output>>;
invokeRemote(endpoint: string, input: z.input<Input>): Promise<z.output<Output>>;
invokeStream(endpoint: string, input: z.input<Input>, cb: (chunk: string) => void): Promise<void>;
constructor(conf: PipelineConf<Input, Output>, flow: FlowBuilder<Input, Output, any, any>, apiKeys: APIKeys);
invoke(input: Input): Promise<Output>;
invokeRemote(endpoint: string, input: Input): Promise<Output>;
invokeStream(endpoint: string, input: Input, cb: (chunk: string) => void): Promise<void>;
vercel: {
invoke: (input: z.input<Input>) => Promise<z.output<Output>>;
invokeStream: (input: z.input<Input>, cb: (chunk: string) => void) => Promise<void>;
invoke: (input: Input) => Promise<Output>;
invokeStream: (input: Input, cb: (chunk: string) => void) => Promise<void>;
};

@@ -90,3 +90,3 @@ onProgress(cb: (args: {

pipeline: {
create: <Input extends z.AnyZodObject, Output extends z.AnyZodObject | ZodReadableStream>(conf: PipelineConf<Input, Output>) => Pipeline<Input, Output>;
create: <Input extends Record<string, unknown>, Output extends Record<string, unknown> | ReadableStream<any>>(conf: PipelineConf<Input, Output>) => Pipeline<Input, Output>;
};

@@ -220,3 +220,3 @@ };

declare function output<PipelineOutput extends z.AnyZodObject | ZodReadableStream>(input: z.input<PipelineOutput>): Promise<z.output<PipelineOutput>>;
declare function output<PipelineOutput extends Record<string, unknown> | ReadableStream>(input: PipelineOutput): Promise<PipelineOutput>;

@@ -223,0 +223,0 @@ declare const inputSchema$6: z.ZodObject<{

@@ -1,7 +0,7 @@

var T=Object.defineProperty;var _=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var K=(n,e)=>{for(var t in e)T(n,t,{get:e[t],enumerable:!0})},M=(n,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of L(e))!D.call(n,r)&&r!==t&&T(n,r,{get:()=>e[r],enumerable:!(o=_(e,r))||o.enumerable});return n};var k=n=>M(T({},"__esModule",{value:!0}),n);var be={};K(be,{Pipeline:()=>A,createClient:()=>F,dalleBase64TextToImage:()=>X,dalleUrlTextToImage:()=>Y,enhanceWithKeywords:()=>re,googleImageLabeling:()=>H,googleTextToSpeech:()=>ye,gpt3Prediction:()=>pe,gpt3PredictionStream:()=>ce,inputSchema:()=>O,output:()=>N,outputSchema:()=>se,replaceString:()=>ie,stabilityClipGuidancePreset:()=>C,stabilityModel:()=>R,stabilityTextToImage:()=>ee,stringToArrayBuffer:()=>le,vercelGenericEdge:()=>J,whisperApi:()=>Se});module.exports=k(be);async function N(n){return n}var b=class{constructor(e,t){this.input=e;this.nodes=t}static create(e){return new b(e,[])}node(e,t){let o=this.createDynamicPlaceholders("input"),r=this.nodes.length>0?this.nodes[this.nodes.length-1]:o,a={action:e,input:t({nodes:this.nodes,prev:r.output,input:o}),output:this.createDynamicPlaceholders(this.nodes.length)};return this.nodes.push(a),this}createDynamicPlaceholders(e){let t={},o={get:function(a,c){return`$context.${e}.${c}$`}};return new Proxy(t,o)}output(e){return this.node(N,e)}getNodes(){return this.nodes}};function j(n){return new Promise(e=>setTimeout(e,n))}function E(n,e){if(typeof n=="string")return r(n);let t={...n};return o(t);function o(i){let s={};for(let p in i)s[p]=r(i[p]);return s}function r(i){if(Array.isArray(i))return i.map(u=>o(u));if(typeof i=="object"&&i!==null)return o(i);let s=i,p=a(i);for(let u of p){let y=e[u.nodeId][u.property];if(y instanceof ArrayBuffer){s=y;continue}s=s?.replace(new RegExp(c(u.value)),y),s==="undefined"?s=void 0:s!==y&&s===y.toString()&&(s=y)}return s}function a(i){if(typeof i!="string")return[];let s=/\$context\.(\d+|input)\.(\w+)\$/g,p=i.matchAll(s),u=[];for(let m of p)u.push({value:m[0],nodeId:m[1],property:m[2]});return u}function c(i){return i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}}function z(n=16){let e="",t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",o=t.length;for(let r=0;r<n;r++)e+=t.charAt(Math.floor(Math.random()*o));return e}var B=2,Z=350,A=class{constructor(e,t,o){this.conf=e;this.flow=t;this.apiKeys=o;this.onProgressListeners=new Map;this.onStartListeners=new Map;this.onFinishListeners=new Map;this.vercel={invoke:e=>this.invokeRemote(`/api/pipelines/${this.conf.id}?_vercel_no_cache=1`,e),invokeStream:(e,t)=>this.invokeStream(`/api/pipelines/${this.conf.id}?_vercel_no_cache=1`,e,t)};this.listenToEvents()}invoke(e){return this.processPipeline(this.conf,e)}invokeRemote(e,t){return fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}).then(o=>o.json())}async invokeStream(e,t,o){let r=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!r.ok)throw new Error(r.statusText);let a=r.body;if(!a)return;let c=a.getReader(),i=new TextDecoder,s=!1;for(;!s;){let{value:p,done:u}=await c.read();s=u;let m=i.decode(p);o(m)}}onProgress(e){let t=z();return this.onProgressListeners.set(t,e),()=>{this.onProgressListeners.delete(t)}}onStart(e){let t=z();return this.onStartListeners.set(t,e),()=>{this.onStartListeners.delete(t)}}onFinish(e){let t=z();return this.onFinishListeners.set(t,e),()=>{this.onFinishListeners.delete(t)}}listenToEvents(){if(!this.conf.updateProgress||typeof window>"u"||!this.apiKeys?.ablySubscribe)return;let e=`https://realtime.ably.io/event-stream?channels=aigur-client&v=1.2&key=${this.apiKeys.ablySubscribe}&enveloped=false`,t=new EventSource(e);t.onmessage=o=>{let r=JSON.parse(o.data);r.pipelineId===this.conf.id&&(r.type==="pipeline:start"?this.triggerListeners(this.onStartListeners):r.type==="pipeline:finish"?this.triggerListeners(this.onFinishListeners):(r.type==="node:start"||r.type==="node:finish")&&this.triggerListeners(this.onProgressListeners,{...r.data,type:r.type}))}}triggerListeners(e,...t){for(let o of e.values())o(...t)}async processPipeline(e,t){let o=this.conf.retries??B;try{await this.notifyEvent("pipeline:start");let a={input:e.input.parse(t)},c={},i=this.flow.getNodes(),s;for(let p=0;p<i.length;p++){s=this.notifyEvent("node:start",{node:i[p].name,index:p});let u=0,m=!1;do{u++;try{c=await this.executeAction(i,p,a),a[p]=c,m=!0}catch(y){if(u>o)throw y;await j((this.conf.retryDelayInMs??Z)*u)}}while(!m&&u<=o);await s,await this.notifyEvent("node:finish",{node:i[p].name,index:p})}return await this.notifyEvent("pipeline:finish"),c}catch(r){throw console.error(r),r}}async executeAction(e,t,o){let{action:r,input:a}=e[t],c=E(a,o);return r(c,this.apiKeys)}notifyEvent(e,t){if(!(!this.conf.updateProgress||!this.apiKeys.ablyPublish))return fetch("https://rest.ably.io/channels/aigur-client/messages?enveloped=false ",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Basic ${btoa(this.apiKeys.ablyPublish)}`},body:JSON.stringify({type:e,data:t,pipelineId:this.conf.id})})}};var $=2,W=350,F=n=>{let{apiKeys:e}=n;return{pipeline:{create:t=>{let o={...t,retries:t.retries??$,retryDelayInMs:t.retryDelayInMs??W},r=t.flow(new b(t.input,[]));return new A(o,r,e)}}}};async function J(n,e){let t=await e.json(),{searchParams:o}=new URL(e.url);if(!o.has("id"))return new Response("Missing id",{status:400});let r=o.get("id"),a=n[r];return{output:await a.invoke(t),pipeline:a}}var x=require("zod"),G=x.z.object({image:x.z.string()}),_e=x.z.object({labels:x.z.array(x.z.string())});async function H(n,e){let t=G.parse(n),o=`https://vision.googleapis.com/v1/images:annotate?key=${e.googleapis}`,r={requests:[{image:{content:t.image},features:[{type:"LABEL_DETECTION"}]}]};return{labels:(await(await fetch(o,{method:"POST",body:JSON.stringify(r)})).json()).responses[0].labelAnnotations.map(i=>i.description)}}var P=require("zod"),V=P.z.object({prompt:P.z.string(),size:P.z.enum(["256x256","512x512","1024x1024"]).default("512x512")}),De=P.z.object({url:P.z.string().url()});async function Y(n,e){let t=V.parse(n),r=await fetch("https://api.openai.com/v1/images/generations",{headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.openai}`},method:"POST",body:JSON.stringify(t)}),{data:a}=await r.json();return{url:a[0].url}}var S=require("zod"),q=S.z.object({prompt:S.z.string(),response_format:S.z.literal("b64_json").default("b64_json"),size:S.z.enum(["256x256","512x512","1024x1024"]).default("512x512")}),Me=S.z.object({result:S.z.string()});async function X(n,e){let t=q.parse(n),r=await fetch("https://api.openai.com/v1/images/generations",{headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.openai}`},method:"POST",body:JSON.stringify(t)}),{data:a}=await r.json();return{result:a[0].b64_json}}var d=require("zod"),R=d.z.enum(["stable-diffusion-v1-5","stable-diffusion-512-v2-0","stable-diffusion-768-v2-0","stable-diffusion-512-v2-1","stable-diffusion-768-v2-1"]),C=d.z.enum(["NONE","FAST_BLUE","FAST_GREEN","SIMPLE","SLOW","SLOWER","SLOWEST"]),Q=d.z.object({text_prompts:d.z.array(d.z.object({text:d.z.string(),weight:d.z.number().min(-1).max(1).default(1)})).refine(n=>n.length>0,"Must have at least one text prompt"),model:R.default("stable-diffusion-v1-5"),clip_guidance_preset:C.optional(),steps:d.z.number().min(0).max(150).optional(),sampler:d.z.enum(["DDIM","DDPM","K_DPMPP_2M","K_DPMPP_2S_ANCESTRAL","K_DPM_2","K_DPM_2_ANCESTRAL","K_EULER","K_EULER_ANCESTRAL","K_HEUN","K_LMS"]).optional(),cfg_scale:d.z.number().min(0).max(35).optional(),seed:d.z.number().min(0).optional(),height:d.z.number().min(128).optional().refine(n=>typeof n<"u"?n%64===0:!0,"Must be a multiple of 64"),width:d.z.number().min(128).optional().refine(n=>typeof n<"u"?n%64===0:!0,"Must be a multiple of 64")}),Be=d.z.object({result:d.z.instanceof(ArrayBuffer)});async function ee(n,e){let t=Q.parse(n),o=`https://api.stability.ai/v1beta/generation/${t.model}/text-to-image`;return{result:await(await fetch(o,{headers:{"Content-Type":"application/json",Accept:"image/png",Authorization:e.stability},method:"POST",body:JSON.stringify(t)})).arrayBuffer()}}var v=require("zod"),te=v.z.object({text:v.z.string(),amount:v.z.number().optional().default(8)}),$e=v.z.object({text:v.z.string()}),ne={"Colonial-style home":"Colonial, traditional, classic, historical, timeless, elegant, regal, grand, spacious, architectural, wood-framed, brick-exterior, symmetrical, gabled roof, columns, portico, fireplace, formal, ornate, landscaped".split(", "),"High-end penthouse apartment":"Luxury, high-end, penthouse, apartment, upscale, contemporary, modern, stylish, designer, elite, high-rise, rooftop, panoramic, views, spacious, open-plan, top-floor, amenities, concierge, service, exclusive".split(", ")};function oe(n){return Object.entries(ne).map(([e,t])=>`Title: ${e}
Description: ${t.slice(0,n).join(", ")}
var E=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var k=(o,e)=>{for(var t in e)E(o,t,{get:e[t],enumerable:!0})},K=(o,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of L(e))!D.call(o,r)&&r!==t&&E(o,r,{get:()=>e[r],enumerable:!(n=z(e,r))||n.enumerable});return o};var M=o=>K(E({},"__esModule",{value:!0}),o);var xe={};k(xe,{Pipeline:()=>w,createClient:()=>J,dalleBase64TextToImage:()=>Z,dalleUrlTextToImage:()=>q,enhanceWithKeywords:()=>re,googleImageLabeling:()=>V,googleTextToSpeech:()=>ye,gpt3Prediction:()=>pe,gpt3PredictionStream:()=>ue,inputSchema:()=>N,output:()=>R,outputSchema:()=>se,replaceString:()=>ae,stabilityClipGuidancePreset:()=>C,stabilityModel:()=>U,stabilityTextToImage:()=>ee,stringToArrayBuffer:()=>le,vercelGenericEdge:()=>G,whisperApi:()=>Se});module.exports=M(xe);function O(o){return new Promise(e=>setTimeout(e,o))}function j(o,e){if(typeof o=="string")return r(o);let t={...o};return n(t);function n(i){let s={};for(let d in i)s[d]=r(i[d]);return s}function r(i){if(Array.isArray(i))return i.map(u=>n(u));if(typeof i=="object"&&i!==null)return n(i);let s=i,d=a(i);for(let u of d){let h=e[u.nodeId][u.property];if(h instanceof ArrayBuffer){s=h;continue}s=s?.replace(new RegExp(c(u.value)),h),s==="undefined"?s=void 0:s!==h&&s===h.toString()&&(s=h)}return s}function a(i){if(typeof i!="string")return[];let s=/\$context\.(\d+|input)\.(\w+)\$/g,d=i.matchAll(s),u=[];for(let f of d)u.push({value:f[0],nodeId:f[1],property:f[2]});return u}function c(i){return i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}}function T(o=16){let e="",t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",n=t.length;for(let r=0;r<o;r++)e+=t.charAt(Math.floor(Math.random()*n));return e}var B=2,$=350,w=class{constructor(e,t,n){this.conf=e;this.flow=t;this.apiKeys=n;this.onProgressListeners=new Map;this.onStartListeners=new Map;this.onFinishListeners=new Map;this.vercel={invoke:e=>this.invokeRemote(`/api/pipelines/${this.conf.id}?_vercel_no_cache=1`,e),invokeStream:(e,t)=>this.invokeStream(`/api/pipelines/${this.conf.id}?_vercel_no_cache=1`,e,t)};this.listenToEvents()}invoke(e){return this.processPipeline(e)}invokeRemote(e,t){return fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}).then(n=>n.json())}async invokeStream(e,t,n){let r=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!r.ok)throw new Error(r.statusText);let a=r.body;if(!a)return;let c=a.getReader(),i=new TextDecoder,s=!1;for(;!s;){let{value:d,done:u}=await c.read();s=u;let f=i.decode(d);n(f)}}onProgress(e){let t=T();return this.onProgressListeners.set(t,e),()=>{this.onProgressListeners.delete(t)}}onStart(e){let t=T();return this.onStartListeners.set(t,e),()=>{this.onStartListeners.delete(t)}}onFinish(e){let t=T();return this.onFinishListeners.set(t,e),()=>{this.onFinishListeners.delete(t)}}listenToEvents(){if(!this.conf.updateProgress||typeof window>"u"||!this.apiKeys?.ablySubscribe)return;let e=`https://realtime.ably.io/event-stream?channels=aigur-client&v=1.2&key=${this.apiKeys.ablySubscribe}&enveloped=false`,t=new EventSource(e);t.onmessage=n=>{let r=JSON.parse(n.data);r.pipelineId===this.conf.id&&(r.type==="pipeline:start"?this.triggerListeners(this.onStartListeners):r.type==="pipeline:finish"?this.triggerListeners(this.onFinishListeners):(r.type==="node:start"||r.type==="node:finish")&&this.triggerListeners(this.onProgressListeners,{...r.data,type:r.type}))}}triggerListeners(e,...t){for(let n of e.values())n(...t)}async processPipeline(e){let t=this.conf.retries??B;try{if(await this.notifyEvent("pipeline:start"),this.conf.validateInput){let i=this.conf.validateInput(e);if(!i.valid)throw new Error(i.message)}let n={input:e},r={},a=this.flow.getNodes(),c;for(let i=0;i<a.length;i++){c=this.notifyEvent("node:start",{node:a[i].name,index:i});let s=0,d=!1;do{s++;try{r=await this.executeAction(a,i,n),n[i]=r,d=!0}catch(u){if(s>t)throw u;await O((this.conf.retryDelayInMs??$)*s)}}while(!d&&s<=t);await c,await this.notifyEvent("node:finish",{node:a[i].name,index:i})}return await this.notifyEvent("pipeline:finish"),r}catch(n){throw console.error(n),n}}async executeAction(e,t,n){let{action:r,input:a}=e[t],c=j(a,n);return r(c,this.apiKeys)}notifyEvent(e,t){if(!(!this.conf.updateProgress||!this.apiKeys.ablyPublish))return fetch("https://rest.ably.io/channels/aigur-client/messages?enveloped=false ",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Basic ${btoa(this.apiKeys.ablyPublish)}`},body:JSON.stringify({type:e,data:t,pipelineId:this.conf.id})})}};async function R(o){return o}var x=class{constructor(e){this.nodes=e}static create(){return new x([])}node(e,t){let n=this.createDynamicPlaceholders("input"),r=this.nodes.length>0?this.nodes[this.nodes.length-1]:n,a={action:e,input:t({nodes:this.nodes,prev:r.output,input:n}),output:this.createDynamicPlaceholders(this.nodes.length)};return this.nodes.push(a),this}createDynamicPlaceholders(e){let t={},n={get:function(a,c){return`$context.${e}.${c}$`}};return new Proxy(t,n)}output(e){return this.node(R,e)}getNodes(){return this.nodes}};var W=2,F=350,J=o=>{let{apiKeys:e}=o;return{pipeline:{create:t=>{let n={...t,retries:t.retries??W,retryDelayInMs:t.retryDelayInMs??F},r=t.flow(new x([]));return new w(n,r,e)}}}};async function G(o,e){let t=await e.json(),{searchParams:n}=new URL(e.url);if(!n.has("id"))return new Response("Missing id",{status:400});let r=n.get("id"),a=o[r];return{output:await a.invoke(t),pipeline:a}}var b=require("zod"),H=b.z.object({image:b.z.string()}),ze=b.z.object({labels:b.z.array(b.z.string())});async function V(o,e){let t=H.parse(o),n=`https://vision.googleapis.com/v1/images:annotate?key=${e.googleapis}`,r={requests:[{image:{content:t.image},features:[{type:"LABEL_DETECTION"}]}]};return{labels:(await(await fetch(n,{method:"POST",body:JSON.stringify(r)})).json()).responses[0].labelAnnotations.map(i=>i.description)}}var P=require("zod"),Y=P.z.object({prompt:P.z.string(),size:P.z.enum(["256x256","512x512","1024x1024"]).default("512x512")}),De=P.z.object({url:P.z.string().url()});async function q(o,e){let t=Y.parse(o),r=await fetch("https://api.openai.com/v1/images/generations",{headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.openai}`},method:"POST",body:JSON.stringify(t)}),{data:a}=await r.json();return{url:a[0].url}}var S=require("zod"),X=S.z.object({prompt:S.z.string(),response_format:S.z.literal("b64_json").default("b64_json"),size:S.z.enum(["256x256","512x512","1024x1024"]).default("512x512")}),Ke=S.z.object({result:S.z.string()});async function Z(o,e){let t=X.parse(o),r=await fetch("https://api.openai.com/v1/images/generations",{headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.openai}`},method:"POST",body:JSON.stringify(t)}),{data:a}=await r.json();return{result:a[0].b64_json}}var p=require("zod"),U=p.z.enum(["stable-diffusion-v1-5","stable-diffusion-512-v2-0","stable-diffusion-768-v2-0","stable-diffusion-512-v2-1","stable-diffusion-768-v2-1"]),C=p.z.enum(["NONE","FAST_BLUE","FAST_GREEN","SIMPLE","SLOW","SLOWER","SLOWEST"]),Q=p.z.object({text_prompts:p.z.array(p.z.object({text:p.z.string(),weight:p.z.number().min(-1).max(1).default(1)})).refine(o=>o.length>0,"Must have at least one text prompt"),model:U.default("stable-diffusion-v1-5"),clip_guidance_preset:C.optional(),steps:p.z.number().min(0).max(150).optional(),sampler:p.z.enum(["DDIM","DDPM","K_DPMPP_2M","K_DPMPP_2S_ANCESTRAL","K_DPM_2","K_DPM_2_ANCESTRAL","K_EULER","K_EULER_ANCESTRAL","K_HEUN","K_LMS"]).optional(),cfg_scale:p.z.number().min(0).max(35).optional(),seed:p.z.number().min(0).optional(),height:p.z.number().min(128).optional().refine(o=>typeof o<"u"?o%64===0:!0,"Must be a multiple of 64"),width:p.z.number().min(128).optional().refine(o=>typeof o<"u"?o%64===0:!0,"Must be a multiple of 64")}),Be=p.z.object({result:p.z.instanceof(ArrayBuffer)});async function ee(o,e){let t=Q.parse(o),n=`https://api.stability.ai/v1beta/generation/${t.model}/text-to-image`;return{result:await(await fetch(n,{headers:{"Content-Type":"application/json",Accept:"image/png",Authorization:e.stability},method:"POST",body:JSON.stringify(t)})).arrayBuffer()}}var v=require("zod"),te=v.z.object({text:v.z.string(),amount:v.z.number().optional().default(8)}),We=v.z.object({text:v.z.string()}),ne={"Colonial-style home":"Colonial, traditional, classic, historical, timeless, elegant, regal, grand, spacious, architectural, wood-framed, brick-exterior, symmetrical, gabled roof, columns, portico, fireplace, formal, ornate, landscaped".split(", "),"High-end penthouse apartment":"Luxury, high-end, penthouse, apartment, upscale, contemporary, modern, stylish, designer, elite, high-rise, rooftop, panoramic, views, spacious, open-plan, top-floor, amenities, concierge, service, exclusive".split(", ")};function oe(o){return Object.entries(ne).map(([e,t])=>`Title: ${e}
Description: ${t.slice(0,o).join(", ")}
`).join(`
`)}async function re(n){let e=te.parse(n);return{text:`Write a maximum of ${e.amount} keywords in a csv list that describes the following
`)}async function re(o){let e=te.parse(o);return{text:`Write a maximum of ${e.amount} keywords in a csv list that describes the following
${oe(e.amount)}
Title: ${e.text}
Description:`}}var g=require("zod"),ae=g.z.object({text:g.z.string().or(g.z.array(g.z.string())),modifier:g.z.string()}),Fe=g.z.object({text:g.z.string()});async function ie(n){let e=ae.parse(n);return{text:e.modifier.replace(/\$\(text\)\$/gm,Array.isArray(e.text)?e.text.join(", "):e.text)}}var l=require("zod"),O=l.z.object({prompt:l.z.string(),model:l.z.enum(["text-davinci-003","text-curie-001","text-babbage-001","text-ada-001","code-davinci-002","code-cushman-002"]).default("text-davinci-003"),temperature:l.z.number().min(0).max(2).default(.7),top_p:l.z.number().min(0).max(1).default(1),frequency_penalty:l.z.number().min(-2).max(2).default(0),presence_penalty:l.z.number().min(-2).max(2).default(0),max_tokens:l.z.number().default(200),n:l.z.number().default(1)}),se=l.z.object({text:l.z.string()});async function pe(n,e){let t=O.parse(n);return{text:(await(await fetch("https://api.openai.com/v1/completions",{headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.openai}`},method:"POST",body:JSON.stringify(t)})).json()).choices[0]?.text.replace(/^(?:\n)+/gm,"")}}var U=require("eventsource-parser"),w=require("zod");var ue=O.merge(w.z.object({stream:w.z.literal(!0).optional().default(!0)})),qe=w.z.object({stream:w.z.instanceof(globalThis.ReadableStream??Object)});async function ce(n,e){let t=ue.parse(n),o=await fetch("https://api.openai.com/v1/completions",{headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.openai}`},method:"POST",body:JSON.stringify(t)});return{stream:await de(o)}}async function de(n){let e=new TextEncoder,t=new TextDecoder,o=0;return new ReadableStream({async start(a){function c(s){if(s.type==="event"){let p=s.data;if(p==="[DONE]"){a.close();return}try{let m=JSON.parse(p).choices[0].text;if(o<2&&(m.match(/\n/)||[]).length)return;let y=e.encode(m);a.enqueue(y),o++}catch(u){a.error(u)}}}let i=(0,U.createParser)(c);for await(let s of n.body)i.feed(t.decode(s))}})}var I=require("zod"),me=I.z.object({string:I.z.string()}),Qe=I.z.object({arrayBuffer:I.z.instanceof(ArrayBuffer)});async function le(n){let e=me.parse(n);return{arrayBuffer:Uint8Array.from(atob(e.string),o=>o.charCodeAt(0)).buffer}}var f=require("zod"),fe=f.z.object({text:f.z.string(),speakingRate:f.z.number().min(.25).max(4).optional().default(1),pitch:f.z.number().min(-20).max(20).optional().default(0),encoding:f.z.enum(["MP3","FLAC","LINEAR16","MULAW","AMR","AMR_WB","OGG_OPUS","SPEEX_WITH_HEADER_BYTE","WEBM_OPUS"]).optional().default("MP3"),voice:f.z.object({language:f.z.string().optional().default("en-US"),name:f.z.enum(["en-US-Standard-A","en-US-Standard-C","en-US-Standard-D","en-US-Standard-E","en-US-Standard-F","en-US-Standard-G","en-US-Standard-H","en-US-Standard-I","en-US-Standard-J","en-US-Studio-M","en-US-Studio-O","en-US-Wavenet-A","en-US-Wavenet-B","en-US-Wavenet-C","en-US-Wavenet-D","en-US-Wavenet-E","en-US-Wavenet-F","en-US-Wavenet-G","en-US-Wavenet-H","en-US-Wavenet-I","en-US-Wavenet-J","en-US-News-K","en-US-News-L","en-US-News-M","en-US-News-N","en-US-Standard-A","en-US-Standard-B","en-US-Standard-C","en-US-Standard-D","en-US-Standard-E","en-US-Standard-F","en-US-Standard-G","en-US-Standard-H","en-US-Standard-I","en-US-Standard-J"]).or(f.z.string()).optional().default("en-US-Neural2-C")}).optional().default({language:"en-US",name:"en-US-Neural2-C"})}),tt=f.z.object({audio:f.z.string()});async function ye(n,e){let t=fe.parse(n),o=`https://us-central1-texttospeech.googleapis.com/v1beta1/text:synthesize?key=${e.googleapis}`,r={input:{text:t.text},voice:{languageCode:t.voice.language,name:t.voice.name},audioConfig:{audioEncoding:t.encoding,speakingRate:t.speakingRate,pitch:t.pitch}};return{audio:(await(await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})).json()).audioContent}}var h=require("zod"),he="https://transcribe.whisperapi.com",ge=h.z.object({audioUrl:h.z.string().url(),language:h.z.string().default("en"),autoDetectLanguage:h.z.boolean().default(!1),fileType:h.z.string().default("mp3"),task:h.z.enum(["transcribe","translate"]).default("transcribe")}),ot=h.z.object({text:h.z.string()});async function Se(n,e){let t=ge.parse(n),o=new FormData;o.append("url",t.audioUrl),t.autoDetectLanguage||o.append("language",t.language),o.append("fileType",t.fileType),o.append("task",t.task);let r=await fetch(he,{method:"POST",headers:{contentType:"application/json",Authorization:"Bearer "+e.whisperapi},body:o});if(!r.ok)throw new Error(r.statusText);return{text:(await r.json()).text.trim()}}0&&(module.exports={Pipeline,createClient,dalleBase64TextToImage,dalleUrlTextToImage,enhanceWithKeywords,googleImageLabeling,googleTextToSpeech,gpt3Prediction,gpt3PredictionStream,inputSchema,output,outputSchema,replaceString,stabilityClipGuidancePreset,stabilityModel,stabilityTextToImage,stringToArrayBuffer,vercelGenericEdge,whisperApi});
Description:`}}var g=require("zod"),ie=g.z.object({text:g.z.string().or(g.z.array(g.z.string())),modifier:g.z.string()}),Je=g.z.object({text:g.z.string()});async function ae(o){let e=ie.parse(o);return{text:e.modifier.replace(/\$\(text\)\$/gm,Array.isArray(e.text)?e.text.join(", "):e.text)}}var m=require("zod"),N=m.z.object({prompt:m.z.string(),model:m.z.enum(["text-davinci-003","text-curie-001","text-babbage-001","text-ada-001","code-davinci-002","code-cushman-002"]).default("text-davinci-003"),temperature:m.z.number().min(0).max(2).default(.7),top_p:m.z.number().min(0).max(1).default(1),frequency_penalty:m.z.number().min(-2).max(2).default(0),presence_penalty:m.z.number().min(-2).max(2).default(0),max_tokens:m.z.number().default(200),n:m.z.number().default(1)}),se=m.z.object({text:m.z.string()});async function pe(o,e){let t=N.parse(o);return{text:(await(await fetch("https://api.openai.com/v1/completions",{headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.openai}`},method:"POST",body:JSON.stringify(t)})).json()).choices[0]?.text.replace(/^(?:\n)+/gm,"")}}var _=require("eventsource-parser"),I=require("zod");var ce=N.merge(I.z.object({stream:I.z.literal(!0).optional().default(!0)})),Xe=I.z.object({stream:I.z.instanceof(globalThis.ReadableStream??Object)});async function ue(o,e){let t=ce.parse(o),n=await fetch("https://api.openai.com/v1/completions",{headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.openai}`},method:"POST",body:JSON.stringify(t)});return{stream:await de(n)}}async function de(o){let e=new TextEncoder,t=new TextDecoder,n=0;return new ReadableStream({async start(a){function c(s){if(s.type==="event"){let d=s.data;if(d==="[DONE]"){a.close();return}try{let f=JSON.parse(d).choices[0].text;if(n<2&&(f.match(/\n/)||[]).length)return;let h=e.encode(f);a.enqueue(h),n++}catch(u){a.error(u)}}}let i=(0,_.createParser)(c);for await(let s of o.body)i.feed(t.decode(s))}})}var A=require("zod"),me=A.z.object({string:A.z.string()}),Qe=A.z.object({arrayBuffer:A.z.instanceof(ArrayBuffer)});async function le(o){let e=me.parse(o);return{arrayBuffer:Uint8Array.from(atob(e.string),n=>n.charCodeAt(0)).buffer}}var l=require("zod"),fe=l.z.object({text:l.z.string(),speakingRate:l.z.number().min(.25).max(4).optional().default(1),pitch:l.z.number().min(-20).max(20).optional().default(0),encoding:l.z.enum(["MP3","FLAC","LINEAR16","MULAW","AMR","AMR_WB","OGG_OPUS","SPEEX_WITH_HEADER_BYTE","WEBM_OPUS"]).optional().default("MP3"),voice:l.z.object({language:l.z.string().optional().default("en-US"),name:l.z.enum(["en-US-Standard-A","en-US-Standard-C","en-US-Standard-D","en-US-Standard-E","en-US-Standard-F","en-US-Standard-G","en-US-Standard-H","en-US-Standard-I","en-US-Standard-J","en-US-Studio-M","en-US-Studio-O","en-US-Wavenet-A","en-US-Wavenet-B","en-US-Wavenet-C","en-US-Wavenet-D","en-US-Wavenet-E","en-US-Wavenet-F","en-US-Wavenet-G","en-US-Wavenet-H","en-US-Wavenet-I","en-US-Wavenet-J","en-US-News-K","en-US-News-L","en-US-News-M","en-US-News-N","en-US-Standard-A","en-US-Standard-B","en-US-Standard-C","en-US-Standard-D","en-US-Standard-E","en-US-Standard-F","en-US-Standard-G","en-US-Standard-H","en-US-Standard-I","en-US-Standard-J"]).or(l.z.string()).optional().default("en-US-Neural2-C")}).optional().default({language:"en-US",name:"en-US-Neural2-C"})}),tt=l.z.object({audio:l.z.string()});async function ye(o,e){let t=fe.parse(o),n=`https://us-central1-texttospeech.googleapis.com/v1beta1/text:synthesize?key=${e.googleapis}`,r={input:{text:t.text},voice:{languageCode:t.voice.language,name:t.voice.name},audioConfig:{audioEncoding:t.encoding,speakingRate:t.speakingRate,pitch:t.pitch}};return{audio:(await(await fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})).json()).audioContent}}var y=require("zod"),he="https://transcribe.whisperapi.com",ge=y.z.object({audioUrl:y.z.string().url(),language:y.z.string().default("en"),autoDetectLanguage:y.z.boolean().default(!1),fileType:y.z.string().default("mp3"),task:y.z.enum(["transcribe","translate"]).default("transcribe")}),ot=y.z.object({text:y.z.string()});async function Se(o,e){let t=ge.parse(o),n=new FormData;n.append("url",t.audioUrl),t.autoDetectLanguage||n.append("language",t.language),n.append("fileType",t.fileType),n.append("task",t.task);let r=await fetch(he,{method:"POST",headers:{contentType:"application/json",Authorization:"Bearer "+e.whisperapi},body:n});if(!r.ok)throw new Error(r.statusText);return{text:(await r.json()).text.trim()}}0&&(module.exports={Pipeline,createClient,dalleBase64TextToImage,dalleUrlTextToImage,enhanceWithKeywords,googleImageLabeling,googleTextToSpeech,gpt3Prediction,gpt3PredictionStream,inputSchema,output,outputSchema,replaceString,stabilityClipGuidancePreset,stabilityModel,stabilityTextToImage,stringToArrayBuffer,vercelGenericEdge,whisperApi});
{
"name": "@aigur/client",
"version": "0.32.3",
"version": "0.33.0",
"description": "",

@@ -5,0 +5,0 @@ "main": "./dist/index.js",

@@ -1,6 +0,4 @@

import { z } from 'zod';
import { APIKeys, PipelineConf } from './types';
import { Pipeline } from './Pipeline';
import { FlowBuilder } from './builder';
import { Pipeline } from './Pipeline';
import { APIKeys, PipelineConf, ZodReadableStream } from './types';

@@ -20,3 +18,6 @@ interface AigurConfiguration {

pipeline: {
create: <Input extends z.AnyZodObject, Output extends z.AnyZodObject | ZodReadableStream>(
create: <
Input extends Record<string, unknown>,
Output extends Record<string, unknown> | ReadableStream
>(
conf: PipelineConf<Input, Output>

@@ -29,3 +30,3 @@ ) => {

};
const flow = conf.flow(new FlowBuilder<Input, Output, [], null>(conf.input, []));
const flow = conf.flow(new FlowBuilder<Input, Output, [], null>([]));
return new Pipeline(pipelineConf, flow, apiKeys);

@@ -32,0 +33,0 @@ },

@@ -1,19 +0,17 @@

import { z } from 'zod';
import { ConcreteNode, NodeAction, ZodReadableStream } from './types';
import { ConcreteNode, NodeAction } from './types';
import { output } from './nodes/output/output';
export class FlowBuilder<
Input extends z.ZodObject<any, any, any>,
Output extends z.ZodObject<any, any, any> | ZodReadableStream,
Input extends Record<string, unknown>,
Output extends Record<string, unknown> | ReadableStream,
NodeDefinitions extends ConcreteNode<any, any>[],
PrevNode extends ConcreteNode<any, any> | null
> {
constructor(private input: Input, private nodes: NodeDefinitions) {}
constructor(private nodes: NodeDefinitions) {}
static create<
Input extends z.ZodObject<any, any, any>,
Output extends z.ZodObject<any, any, any> | ZodReadableStream
>(input: Input) {
return new FlowBuilder<Input, Output, [], null>(input, []);
Input extends Record<string, unknown>,
Output extends Record<string, unknown> | ReadableStream
>() {
return new FlowBuilder<Input, Output, [], null>([]);
}

@@ -28,16 +26,5 @@

: Input;
input: z.output<Input>;
input: Input;
}) => Parameters<NodeDef>['0']
) {
// param 0 is the action input
// return <NewNode extends ConcreteNode<Parameters<NodeDef>['0'], Awaited<ReturnType<NodeDef>>>>(
// getUserInput: (data: {
// nodes: NodeDefinitions;
// prev: PrevNode extends ConcreteNode<any, any>
// ? Awaited<ReturnType<PrevNode['action']>>
// : Input;
// input: z.output<Input>;
// }) => Parameters<NodeDef>['0']
// ): FlowBuilder<Input, Output, [...NodeDefinitions, NewNode], NewNode> => {
type NewNode = ConcreteNode<Parameters<NodeDef>['0'], Awaited<ReturnType<NodeDef>>>;

@@ -80,4 +67,4 @@ const input = this.createDynamicPlaceholders('input');

: Input;
input: z.output<Input>;
}) => z.output<Output>
input: Input;
}) => Output
) {

@@ -84,0 +71,0 @@ return this.node(output<Output>, getUserInput);

@@ -1,8 +0,5 @@

import { ZodReadableStream } from '#/types';
import { z } from 'zod';
export async function output<PipelineOutput extends z.AnyZodObject | ZodReadableStream>(
input: z.input<PipelineOutput>
): Promise<z.output<PipelineOutput>> {
export async function output<PipelineOutput extends Record<string, unknown> | ReadableStream>(
input: PipelineOutput
): Promise<PipelineOutput> {
return input;
}

@@ -1,3 +0,1 @@

import { z } from 'zod';
import { FlowBuilder } from './builder';

@@ -7,10 +5,3 @@ import { delay } from './delay';

import { makeid } from './makeid';
import {
APIKeys,
ConcreteNode,
EventType,
PipelineConf,
ProgressEventType,
ZodReadableStream,
} from './types';
import { APIKeys, ConcreteNode, EventType, PipelineConf, ProgressEventType } from './types';

@@ -21,4 +12,4 @@ const DEFAULT_RETRIES = 2;

export class Pipeline<
Input extends z.AnyZodObject,
Output extends z.AnyZodObject | ZodReadableStream
Input extends Record<string, unknown>,
Output extends Record<string, unknown> | ReadableStream
> {

@@ -34,3 +25,3 @@ public readonly onProgressListeners: Map<

public readonly conf: PipelineConf<Input, Output>,
public readonly flow: FlowBuilder<z.AnyZodObject, z.AnyZodObject | ZodReadableStream, any, any>,
public readonly flow: FlowBuilder<Input, Output, any, any>,
private readonly apiKeys: APIKeys

@@ -41,7 +32,7 @@ ) {

public invoke(input: z.input<Input>) {
return this.processPipeline<Input, Output>(this.conf, input);
public invoke(input: Input) {
return this.processPipeline(input);
}
public invokeRemote(endpoint: string, input: z.input<Input>): Promise<z.output<Output>> {
public invokeRemote(endpoint: string, input: Input): Promise<Output> {
return (

@@ -65,3 +56,3 @@ fetch(endpoint, {

endpoint: string,
input: z.input<Input>,
input: Input,
cb: (chunk: string) => void

@@ -96,7 +87,7 @@ ): Promise<void> {

public vercel = {
invoke: (input: z.input<Input>): Promise<z.output<Output>> => {
invoke: (input: Input): Promise<Output> => {
// TODO: move base url to "create" optional param
return this.invokeRemote(`/api/pipelines/${this.conf.id}?_vercel_no_cache=1`, input);
},
invokeStream: (input: z.input<Input>, cb: (chunk: string) => void) => {
invokeStream: (input: Input, cb: (chunk: string) => void) => {
// TODO: move base url to "create" optional param

@@ -167,11 +158,13 @@ return this.invokeStream(`/api/pipelines/${this.conf.id}?_vercel_no_cache=1`, input, cb);

private async processPipeline<
Input extends z.AnyZodObject,
Output extends z.AnyZodObject | ZodReadableStream
>(pipeline: PipelineConf<Input, Output>, input: z.input<Input>): Promise<z.output<Output>> {
private async processPipeline(input: Input): Promise<Output> {
const retriesCount = this.conf.retries ?? DEFAULT_RETRIES;
try {
await this.notifyEvent('pipeline:start');
const parsedInput = pipeline.input.parse(input);
const values: any = { input: parsedInput };
if (this.conf.validateInput) {
const result = this.conf.validateInput(input);
if (!result.valid) {
throw new Error(result.message);
}
}
const values: any = { input };
let output: any = {};

@@ -178,0 +171,0 @@ const nodes: any[] = this.flow.getNodes();

@@ -6,11 +6,9 @@ import { z } from 'zod';

export interface PipelineConf<
Input extends z.AnyZodObject,
Output extends z.AnyZodObject | ZodReadableStream
Input extends Record<string, unknown>,
Output extends Record<string, unknown> | ReadableStream
> {
id: string;
input: Input;
output: Output;
flow: (
builder: FlowBuilder<Input, Output, [], null>
) => FlowBuilder<Input, Output, any, ConcreteNode<z.input<Output>, z.output<Output>>>;
) => FlowBuilder<Input, Output, any, ConcreteNode<Output, Output>>;
retries?: number;

@@ -20,16 +18,5 @@ stream?: boolean;

updateProgress?: boolean;
validateInput?: (input: Input) => { valid: boolean; message?: string };
}
// export type NodeDefinition<
// Input extends z.AnyZodObject | ZodReadableStream,
// Output extends z.AnyZodObject | ZodReadableStream
// > = {
// id: string;
// schema: {
// input: Input;
// output: Output;
// };
// action: (input: z.output<Input>, apiKeys: Record<string, string>) => Promise<z.output<Output>>;
// };
export type NodeAction<

@@ -36,0 +23,0 @@ Input extends Record<string, unknown> | ReadableStream,

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc