@adaptive-ai/sdk 0.1.36 → 0.1.37
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.
- package/dist/server/index.js +3 -3
- package/package.json +1 -1
package/dist/server/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {z}from'zod';import {createTRPCProxyClient,httpLink}from'@trpc/client';import P from'superjson';import {handleRpc}from'typed-rpc/server';import {inspect}from'util';import {AsyncLocalStorage}from'async_hooks';import Ne from'better-sqlite3';import {better,defineQueue,defineWorker,JobStatus}from'plainjob';var le={GITHUB_USER:"GITHUB_USER",GITHUB_BOT:"GITHUB_BOT",GOOGLE:"GOOGLE",SLACK:"SLACK",SLACK_BOT:"SLACK_BOT",DISCORD:"DISCORD",NOTION:"NOTION",TWITTER:"TWITTER",LINKEDIN:"LINKEDIN",YAHOO:"YAHOO",FIGMA:"FIGMA",SQUARE:"SQUARE",SHOPIFY:"SHOPIFY",WHOOP:"WHOOP"},fe={...le,PLAID:"PLAID"},C={...fe,AC1:"AC1"};var me=z.object({slug:z.string(),name:z.string().optional(),schedule:z.string(),description:z.string().optional(),rpcEndpoint:z.string(),isEnabled:z.boolean().default(true),stopAt:z.string().datetime().optional(),maxExecutions:z.number().optional(),timezone:z.string().optional()}),$=z.string().refine(e=>/^[a-zA-Z0-9_]+$/.test(e),"Must be a valid identifier (letters, numbers, and underscores only)."),ge=z.object({handler:$,provider:z.nativeEnum(C).nullish(),slug:z.string(),name:z.string(),description:z.string()}),
|
|
1
|
+
import {z}from'zod';import {createTRPCProxyClient,httpLink}from'@trpc/client';import P from'superjson';import {handleRpc}from'typed-rpc/server';import {inspect}from'util';import {AsyncLocalStorage}from'async_hooks';import Ne from'better-sqlite3';import {better,defineQueue,defineWorker,JobStatus}from'plainjob';var le={GITHUB_USER:"GITHUB_USER",GITHUB_BOT:"GITHUB_BOT",GOOGLE:"GOOGLE",SLACK:"SLACK",SLACK_BOT:"SLACK_BOT",DISCORD:"DISCORD",NOTION:"NOTION",TWITTER:"TWITTER",LINKEDIN:"LINKEDIN",YAHOO:"YAHOO",FIGMA:"FIGMA",SQUARE:"SQUARE",SHOPIFY:"SHOPIFY",WHOOP:"WHOOP"},fe={...le,PLAID:"PLAID"},C={...fe,AC1:"AC1"};var me=z.object({slug:z.string(),name:z.string().optional(),schedule:z.string(),description:z.string().optional(),rpcEndpoint:z.string(),isEnabled:z.boolean().default(true),stopAt:z.string().datetime().optional(),maxExecutions:z.number().optional(),timezone:z.string().optional()}),$=z.string().refine(e=>/^[a-zA-Z0-9_]+$/.test(e),"Must be a valid identifier (letters, numbers, and underscores only)."),ge=z.object({handler:$,provider:z.nativeEnum(C).nullish(),slug:z.string(),name:z.string(),description:z.string()}),he=z.object({provider:z.nativeEnum(C),event:z.string().min(1),handler:$,slug:z.string().min(1).max(64),name:z.string().min(1).max(128),description:z.string().min(1).max(256)}),Ee=z.object({crons:z.array(me),events:z.array(he).default([]),webhooks:z.array(ge).default([])});function N(e){let r=Object.create(null);for(let t in e){let o=e[t];r[o]=t;}return r}var x={PARSE_ERROR:-32700,BAD_REQUEST:-32600,INTERNAL_SERVER_ERROR:-32603,NOT_IMPLEMENTED:-32603,UNAUTHORIZED:-32001,FORBIDDEN:-32003,NOT_FOUND:-32004,METHOD_NOT_SUPPORTED:-32005,TIMEOUT:-32008,CONFLICT:-32009,PRECONDITION_FAILED:-32012,PAYLOAD_TOO_LARGE:-32013,UNPROCESSABLE_CONTENT:-32022,TOO_MANY_REQUESTS:-32029,CLIENT_CLOSED_REQUEST:-32099};N(x);N(x);typeof window>"u"||"Deno"in window||globalThis.process?.env?.NODE_ENV==="test"||!!globalThis.process?.env?.JEST_WORKER_ID||!!globalThis.process?.env?.VITEST_WORKER_ID;var S=class e extends Error{static prefix="__MISSING AUTH FOR SCOPE";static jsonRpcCode=-32001;constructor({provider:r,scope:t,accountId:o,popup:n=false}){let s=btoa(JSON.stringify({provider:r,scope:t,accountId:o}));super(`${e.prefix}: ${s}${n?" --popup":" end"}`);}jsonRpcError(){return {code:e.jsonRpcCode,message:this.message}}static check(r){return r?.message?.startsWith(e.prefix)}};var oe=new AsyncLocalStorage;function F(){return oe.getStore()}async function se(e,r){return oe.run(e,r)}function ie({environment:e,dbPath:r="errors.db"}){let t=new Ne(r,{fileMustExist:false});t.pragma("journal_mode = WAL"),t.exec(`
|
|
2
2
|
CREATE TABLE IF NOT EXISTS error_logs (
|
|
3
3
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
4
4
|
environment TEXT NOT NULL,
|
|
@@ -22,5 +22,5 @@ import {z}from'zod';import {createTRPCProxyClient,httpLink}from'@trpc/client';im
|
|
|
22
22
|
SELECT * FROM error_logs
|
|
23
23
|
ORDER BY created_at DESC
|
|
24
24
|
LIMIT ?
|
|
25
|
-
`).all(d)}function
|
|
26
|
-
export{
|
|
25
|
+
`).all(d)}function u({body:d,requestId:p}){let g=d,m,h;try{let T=JSON.parse(d);g=T.message??d,m=T.stack,h=T.metadata;}catch{}let E=g.startsWith("[console.warn]")||g.startsWith("[console.error]");return E&&s({source:"client",message:g,stack:m,metadata:h,requestId:p}),{message:g,persisted:E}}function a({result:d,requestId:p}){let m=d.json?.error;return m?(s({source:"server",message:m.message??"Unknown RPC error",stack:m.stack,requestId:p,metadata:m.data?{errorData:m.data}:void 0}),true):false}function l({logger:d=console}={}){n||(process.on("uncaughtException",p=>{s({source:"server",message:p.message,stack:p.stack,metadata:{type:"uncaughtException"}}),d.error("Uncaught exception:",p);}),process.on("unhandledRejection",p=>{s({source:"server",message:p instanceof Error?p.message:String(p),stack:p instanceof Error?p.stack:void 0,metadata:{type:"unhandledRejection"}}),d.error("Unhandled rejection:",p);}),n=true);}return {captureClientLog:u,captureRpcError:a,getRecentErrors:c,hasErrors:i,logError:s,registerProcessHandlers:l}}var Me={error:console.error.bind(console),warn:console.warn.bind(console),info:()=>{},debug:()=>{}};function j(e){try{return JSON.parse(e.data)}catch{return null}}function ae({dbPath:e,handlers:r,errorTracker:t,queueName:o="default",logger:n=Me}){let s=new Ne(e,{fileMustExist:false});s.pragma("journal_mode = WAL");let i=better(s),c=defineQueue({connection:i}),u=new Proxy({},{get(m,h){return E=>c.add(o,{action:h,payload:E})}});function a(m){return c.getJobById(m)}function l(){return c.countJobs({status:JobStatus.Processing})}function d(){return c.countJobs({status:JobStatus.Pending})}function p(){return {pending:c.countJobs({status:JobStatus.Pending}),processing:c.countJobs({status:JobStatus.Processing}),done:c.countJobs({status:JobStatus.Done}),failed:c.countJobs({status:JobStatus.Failed})}}function g(){let m=defineWorker(o,async h=>{let E=j(h);if(!E)throw new Error(`Failed to parse queue payload for job ${h.id}`);let T=r[E.action];if(!T)throw new Error(`No handler registered for action: ${E.action}`);console.log(`Processing job ${h.id} with action: ${E.action}`),await T(E.payload,h);},{queue:c,logger:n,onCompleted:h=>{let T=j(h)?.action??"unknown";console.log(`Job ${h.id} completed: ${T}`);},onFailed:(h,E)=>{let T=j(h);t?.logError({source:"worker",message:E instanceof Error?E.message:String(E),stack:E instanceof Error?E.stack:void 0,metadata:{jobId:h.id,action:T?.action}}),console.error(`Job ${h.id} failed: ${T?.action??"unknown"}`,E);}});return m.start(),m}return {getActiveJobCount:l,getJob:a,getJobCounts:p,getPendingJobCount:d,queue:u,startWorker:g}}var J=createTRPCProxyClient({transformer:P,links:[]}),w;function Hr({baseUrl:e,realtimeDomain:r,guestServicesUrl:t,environment:o,queueDbPath:n,errorsDbPath:s,apiKey:i}){return globalThis.env||(globalThis.env={},globalThis.env.BASE_URL=e,globalThis.env.REALTIME_DOMAIN=r,globalThis.env.GUEST_SERVICES_URL=t,J=createTRPCProxyClient({transformer:P,links:[httpLink({url:t,transformer:P,headers:()=>{let c=F();return {...c?.requestId?{"x-request-id":c.requestId}:{},...i?{"x-boxman-api-key":i}:{},"x-boxman-app-base-url":e}}})]}),console.log("Adaptive SDK server environment initialized")),w?(w.environment=o,w.queueDbPath=n,w.errorsDbPath=s):w={environment:o,queueDbPath:n,errorsDbPath:s},w}function I(){if(!w)throw new Error("Adaptive SDK server environment is not initialized. Please call initializeServerEnvironment first.");return w}function pe(){let e=I();!e.errorTracker&&e.errorsDbPath&&(e.errorTracker=ie({environment:e.environment,dbPath:e.errorsDbPath}),e.errorTracker.registerProcessHandlers());let{errorTracker:r}=e;if(!r)throw new Error("Adaptive SDK error tracking is not initialized. Pass `errorsDbPath` to initializeServerEnvironment first.");return r}function Qe({handlers:e,queueName:r,logger:t,autoStartWorker:o=true}){let n=I();if(!n.queue){if(!n.queueDbPath)throw new Error("Adaptive SDK queue is not initialized. Pass `queueDbPath` to initializeServerEnvironment first.");n.queue=ae({dbPath:n.queueDbPath,handlers:e,queueName:r,logger:t,errorTracker:n.errorsDbPath?pe():void 0});}o&&!n.queueWorkerStarted&&(n.queue.startWorker(),n.queueWorkerStarted=true);let{queue:s}=n;if(!s)throw new Error("Adaptive SDK queue is not initialized. Pass `queueDbPath` to initializeServerEnvironment first.");return s}function Lr(){return new Proxy({},{get(e,r){let t=I();if(!t.queue)throw new Error("Adaptive SDK queue is not initialized. Pass `queueDbPath` to initializeServerEnvironment first.");return r==="getJob"?t.queue.getJob:t.queue.queue[r]}})}function Q(e,r){return r.endsWith("*")?e.startsWith(r.slice(0,-1)):e===r}function Je(e){return e?.toLowerCase().startsWith("curl/")??false}function Mr({procedures:e,jobs:r,transcoder:t,rpcPath:o="/api/*",loggerPath:n="/_logger",queueStatusPath:s="/_queue/status"}){let i=I(),c=i.errorsDbPath?pe():void 0,u=r&&i.queueDbPath?Qe({handlers:r}):void 0;return async(a,l)=>{let d=new URL(a.req.url).pathname;if(n&&c&&a.req.method==="POST"&&Q(d,n)){let p=await a.req.text(),g=a.req.header("x-request-id"),{message:m}=c.captureClientLog({body:p,requestId:g??void 0});return console.log("[browser]",m),a.json({status:"ok"})}if(s&&u&&a.req.method==="GET"&&Q(d,s))return a.json({activeJobs:u.getActiveJobCount(),pendingJobs:u.getPendingJobCount()});if(a.req.method==="POST"&&Q(d,o)){let p=await a.req.json(),g=a.req.header("x-request-id"),m=a.req.header("x-channel-id"),h=a.req.header("user-agent");g||console.warn("Request is missing x-request-id header. Adaptive AI SDK relies on this for request context."),Je(h)&&console.error(`[${g??"unknown-request-id"}] Curl request received by Adaptive SDK server. Use the run RPC endpoint MCP instead.`,{method:a.req.method,url:a.req.url,userAgent:h}),console.log(`[${g}] Starting request ${a.req.method} ${a.req.url}`),m&&console.log(`[${g}] Channel ID: ${m}`);let T=await se({requestId:g??"unknown-request-id",channelId:m,hasTasks:false},async()=>await handleRpc(p,e,{transcoder:t}));return console.log(`[${g}] Response:`,inspect(T,{depth:3,colors:true})),c?.captureRpcError({result:T,requestId:g??void 0}),a.json(T)}await l();}}var Be=new Proxy({},{get(e,r){return async t=>{if(globalThis.env===void 0)throw new Error("Adaptive SDK server environment is not initialized. Please call initializeServerEnvironment first.");let n=J[r];if(!n||typeof n.mutate!="function")throw new Error(`Property "${String(r)}" is not a mutation procedure`);return n.mutate(t)}}});async function Ur(e){return await J.executeComposioTool.mutate(e)}function Fr(){return globalThis.env.BASE_URL}var B=null;function jr(){return B}function Qr({channelId:e,onUpdate:r}){let t=new WebSocket(`wss://${globalThis.env.REALTIME_DOMAIN}/${e}`),o=-1;function n(s){r&&(B=Date.now());try{let i=JSON.parse(s.data.toString());if(i?.id&&i.id>o){let c=P.parse(i.payload);r?.(c),o=i.id;}}catch{}}return t.addEventListener("message",n),{destroy(){t.close(),t.removeEventListener("message",n);}}}async function ue({channelId:e,data:r}){B=Date.now(),await fetch(`https://${globalThis.env.REALTIME_DOMAIN}/${e}`,{method:"POST",body:P.stringify(r)}).catch(console.error);}async function Jr(){let e,r=F()?.channelId;if(!r)throw new Error("API's using `startRealtimeResponse` must be called via `useRealtimeMutation`.");return {next(t){e=t,ue({channelId:r,data:t});},end(){return ue({channelId:r,data:e}),e}}}function ce(e){throw new S({provider:"AC1",popup:true})}async function Br(e){let r=await Be.getCurrentUser();if(r?.error==="SEED")throw new Error('Call to "getAuth" in seed function is not allowed. Seed functions should not depend on user data.');if(r.userId)return {userId:r.userId,status:"authenticated",signIn:ce,providers:r.providers};if(e?.required)throw new S({provider:"AC1"});return {userId:null,status:"unauthenticated",signIn:ce,providers:[]}}
|
|
26
|
+
export{Ee as appConfigSchema,Ur as executeComposioTool,Br as getAuth,Fr as getBaseUrl,pe as getErrorTracker,jr as getLastStreamTime,Lr as getQueue,Qr as getRealtimeStore,Mr as honoMiddleware,Hr as initializeServerEnvironment,Be as mcp,se as runWithContext,ue as setRealtimeStore,Jr as startRealtimeResponse};
|