@adaptive-ai/sdk 0.0.9 → 0.1.0

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.
@@ -62,6 +62,11 @@ declare global {
62
62
  __REALTIME_DOMAIN__: string;
63
63
  __OPEN_AUTH_DRAWER__: (url: string) => void;
64
64
  }
65
+ var env: {
66
+ BASE_URL: string;
67
+ REALTIME_DOMAIN: string;
68
+ GUEST_SERVICES_URL: string;
69
+ };
65
70
  }
66
71
 
67
72
  declare function encodeFileAsBase64DataURL(file: File): Promise<string>;
@@ -128,6 +128,11 @@ declare global {
128
128
  __REALTIME_DOMAIN__: string;
129
129
  __OPEN_AUTH_DRAWER__: (url: string) => void;
130
130
  }
131
+ var env: {
132
+ BASE_URL: string;
133
+ REALTIME_DOMAIN: string;
134
+ GUEST_SERVICES_URL: string;
135
+ };
131
136
  }
132
137
 
133
138
  interface RequestContext {
@@ -135,6 +140,11 @@ interface RequestContext {
135
140
  channelId?: string;
136
141
  hasTasks?: boolean;
137
142
  }
143
+ declare function initializeServerEnvironment({ baseUrl, realtimeDomain, guestServicesUrl, }: {
144
+ baseUrl: string;
145
+ realtimeDomain: string;
146
+ guestServicesUrl: string;
147
+ }): void;
138
148
  declare function getRequestContext(): RequestContext | undefined;
139
149
  declare function setRequestContext(context: Partial<RequestContext>): void;
140
150
  declare function runWithContext<T>(context: RequestContext, fn: () => Promise<T>): Promise<T>;
@@ -379,4 +389,4 @@ declare function getImageModelsCatalog(input: {
379
389
  declare function getBaseUrl(): string;
380
390
  declare function getLastStreamTime(): number | null;
381
391
 
382
- export { createProduct, deleteOAuthConnection, discontinueProduct, extractTextFromContent, generateCrossAppToken, generateDialogue, generateMusic, generateSoundEffect, getAuth, getBaseUrl, getDialogueVoicesCatalog, getImageModelsCatalog, getLastStreamTime, getOAuthConnection, getOAuthConnectionForCurrentUser, getOAuthToken, getRealtimeStore, getRequestContext, getStructuredDataFromContent, getTTSVoicesCatalog, getTaskStatus, getUserId, inviteUser, isAppOwner, listProducts, listUserPurchases, queryOAuthConnections, queueTask, requestMultimodalModel, runWithContext, searchWithGoogle, sendEmail, setRealtimeStore, setRequestContext, startRealtimeResponse, textToImage, textToSpeech, upload };
392
+ export { createProduct, deleteOAuthConnection, discontinueProduct, extractTextFromContent, generateCrossAppToken, generateDialogue, generateMusic, generateSoundEffect, getAuth, getBaseUrl, getDialogueVoicesCatalog, getImageModelsCatalog, getLastStreamTime, getOAuthConnection, getOAuthConnectionForCurrentUser, getOAuthToken, getRealtimeStore, getRequestContext, getStructuredDataFromContent, getTTSVoicesCatalog, getTaskStatus, getUserId, initializeServerEnvironment, inviteUser, isAppOwner, listProducts, listUserPurchases, queryOAuthConnections, queueTask, requestMultimodalModel, runWithContext, searchWithGoogle, sendEmail, setRealtimeStore, setRequestContext, startRealtimeResponse, textToImage, textToSpeech, upload };
@@ -1,2 +1,2 @@
1
- import {createTRPCProxyClient,httpLink}from'@trpc/client';import {AsyncLocalStorage}from'async_hooks';import {nanoid}from'nanoid';import S from'superjson';import*as I from'zod';import {z}from'zod';function C(e){let t=Object.create(null);for(let r in e){let n=e[r];t[n]=r;}return t}var E={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};C(E);C(E);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 h=class e extends Error{static prefix="__MISSING AUTH FOR SCOPE";static jsonRpcCode=-32001;constructor({provider:t,scope:r,accountId:n,popup:o=false}){let s=btoa(JSON.stringify({provider:t,scope:r,accountId:n}));super(`${e.prefix}: ${s}${o?" --popup":" end"}`);}jsonRpcError(){return {code:e.jsonRpcCode,message:this.message}}static check(t){return t?.message?.startsWith(e.prefix)}};var we=z.object({GUEST_SERVICES_URL:z.string().url().default("http://localhost:3000/trpc"),VITE_REALTIME_DOMAIN:z.string().default("localhost:3002"),VITE_BASE_URL:z.string().url().default("http://localhost:3001"),NODE_ENV:z.enum(["development","production","test"]).default("development")}),F=we.safeParse({GUEST_SERVICES_URL:process.env.GUEST_SERVICES_URL,VITE_REALTIME_DOMAIN:process.env.VITE_REALTIME_DOMAIN,VITE_BASE_URL:process.env.VITE_BASE_URL,NODE_ENV:process.env.NODE_ENV});if(!F.success)throw console.error("Invalid environment variables:",F.error.format()),new Error("Invalid environment variables");var _=F.data;var ee=new AsyncLocalStorage,U=null,Q=new Set,v=null;function u(){return U||(U=createTRPCProxyClient({transformer:S,links:[httpLink({url:_.GUEST_SERVICES_URL,transformer:S,headers:()=>{let e=q();if(!e)throw new Error("Missing request context");return {"x-request-id":e.requestId}}})]})),U}function q(){return ee.getStore()}function _e(e){let t=q();t&&Object.assign(t,e);}async function Xe(e,t){return ee.run(e,t)}function Z(e){throw new h({provider:e?.provider??"AC1",popup:true})}async function et(e){let r=await u().getCurrentUser.mutate(e);if(r?.error==="SEED")throw new Error('Call to "getUserId" in seed function is not allowed. Seed functions should not depend on user data.');if(!r?.userId){if(e?.throwIfNotLoggedIn??true)throw new h({provider:"AC1"});return null}return r.userId}async function tt(e){let r=await u().getCurrentUser.mutate({throwIfNotLoggedIn:e?.required});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:Z,providers:r.providers};if(e?.required)throw new h({provider:"AC1"});return {userId:null,status:"unauthenticated",signIn:Z,providers:[]}}async function rt(e){let t=u(),r=await t.upsertTaskStatus.mutate({status:"RUNNING"});return Q.add(r.id),_e({hasTasks:true}),(async()=>{let n=r.id;try{await e(),await t.upsertTaskStatus.mutate({id:n,status:"COMPLETED"});}catch(o){console.error(`Task ${n} failed:`,o.message),await t.upsertTaskStatus.mutate({id:n,status:"FAILED",error:o});}finally{Q.delete(r.id);}})(),r}async function nt(e){return await u().getTaskStatus.mutate({id:e})}async function ot(e){let t=u(),r={...e,schema:I.toJSONSchema(e.schema)};return await t.extractStructuredDataFromContent.mutate(r)}async function st(e){return await u().extractTextFromContent.mutate(e)}async function it(e){let t=u(),{stream:r,onProgress:n,...o}=e,s={...o,returnType:I.toJSONSchema(e.returnType),customTools:e.customTools?.map(d=>({...d,inputSchema:I.toJSONSchema(d.inputSchema)}))};if(r??n){let d=nanoid(32),a=new WebSocket(`wss://${_.VITE_REALTIME_DOMAIN}/${d}`),l=-1,c=p=>{v=Date.now();try{let g=JSON.parse(p.data.toString());if(g?.id&&g.id>l){let te=S.parse(g.payload);g.requestAgentToolCalls instanceof Array?n?.(g.requestAgentToolCalls):r?.(te),l=g.id;}}catch{}};a.addEventListener("message",c);let m=await t.requestMultimodalModel.mutate({...s,realtimeChannelId:d});return r&&r(m),a.close(),a.removeEventListener("message",c),m}return await t.requestMultimodalModel.mutate(s)}async function at(e){return await u().textToImage.mutate(e)}async function ut(e){return await u().textToSpeech.mutate(e)}async function ct(e){return await u().generateSoundEffect.mutate(e)}async function dt(e){return await u().generateDialogue.mutate(e)}async function lt(e){return await u().generateMusic.mutate(e)}async function ft(e){let t=u(),r;return typeof e.bufferOrBase64=="string"?r=e.bufferOrBase64:r=e.bufferOrBase64.toString("base64"),await t.uploadToBucket.mutate({base64:r,fileName:e.fileName})}async function pt(e){return await u().getOAuthToken.mutate({connectionId:e.connectionId})}async function mt(e){let r=await u().getOAuthConnectionForCurrentUser.mutate({...e,scope:e.scope??[]});if(!r&&e.required)throw new h({provider:e.provider,scope:e.scope,popup:true});return r}async function gt(e){return await u().getOAuthConnection.mutate(e)}async function wt(e){return await u().queryOAuthConnections.mutate(e)}async function ht(e){return await u().deleteOAuthConnection.mutate(e)}async function Et(e){await u().sendEmail.mutate(e);}async function yt(e){let t=u();if(!e.email)throw new Error("Email is required");if(!e.markdown)throw new Error("`markdown` content is required when inviting by email");return await t.inviteUser.mutate(e)}async function Tt(e){return await u().searchWithGoogle.mutate(e)}async function _t(){return await u().isAppOwner.mutate()}async function Rt(e){return await u().generateCrossAppToken.mutate(e)}async function St(e){return await u().createProduct.mutate(e)}async function Pt(){return await u().listProducts.mutate()}async function It(e){return await u().listUserPurchases.mutate(e)}async function vt(e){await u().discontinueProduct.mutate(e);}function xt({channelId:e,onUpdate:t}){let r=new WebSocket(`wss://${_.VITE_REALTIME_DOMAIN}/${e}`),n=-1;function o(s){t&&(v=Date.now());try{let i=JSON.parse(s.data.toString());if(i?.id&&i.id>n){let d=S.parse(i.payload);t?.(d),n=i.id;}}catch{}}return r.addEventListener("message",o),{destroy(){r.close(),r.removeEventListener("message",o);}}}async function X({channelId:e,data:t}){v=Date.now(),await fetch(`https://${_.VITE_REALTIME_DOMAIN}/${e}`,{method:"POST",body:S.stringify(t)}).catch(console.error);}async function Ot(){let e,t=q()?.channelId;if(!t)throw new Error("API's using `startRealtimeResponse` must be called via `useRealtimeMutation`.");return {next(r){e=r,X({channelId:t,data:r});},end(){return X({channelId:t,data:e}),e}}}async function Ct(e){return await u().getTTSVoicesCatalog.mutate(e)}async function bt(e){return await u().getDialogueVoicesCatalog.mutate(e)}async function At(e){return await u().getImageModelsCatalog.mutate(e)}function Nt(){return _.VITE_BASE_URL}function Dt(){return v}
2
- export{St as createProduct,ht as deleteOAuthConnection,vt as discontinueProduct,st as extractTextFromContent,Rt as generateCrossAppToken,dt as generateDialogue,lt as generateMusic,ct as generateSoundEffect,tt as getAuth,Nt as getBaseUrl,bt as getDialogueVoicesCatalog,At as getImageModelsCatalog,Dt as getLastStreamTime,gt as getOAuthConnection,mt as getOAuthConnectionForCurrentUser,pt as getOAuthToken,xt as getRealtimeStore,q as getRequestContext,ot as getStructuredDataFromContent,Ct as getTTSVoicesCatalog,nt as getTaskStatus,et as getUserId,yt as inviteUser,_t as isAppOwner,Pt as listProducts,It as listUserPurchases,wt as queryOAuthConnections,rt as queueTask,it as requestMultimodalModel,Xe as runWithContext,Tt as searchWithGoogle,Et as sendEmail,X as setRealtimeStore,_e as setRequestContext,Ot as startRealtimeResponse,at as textToImage,ut as textToSpeech,ft as upload};
1
+ import {createTRPCProxyClient,httpLink}from'@trpc/client';import {AsyncLocalStorage}from'async_hooks';import {nanoid}from'nanoid';import _ from'superjson';import*as S from'zod';function O(e){let t=Object.create(null);for(let r in e){let n=e[r];t[n]=r;}return t}var y={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};O(y);O(y);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 h=class e extends Error{static prefix="__MISSING AUTH FOR SCOPE";static jsonRpcCode=-32001;constructor({provider:t,scope:r,accountId:n,popup:o=false}){let s=btoa(JSON.stringify({provider:t,scope:r,accountId:n}));super(`${e.prefix}: ${s}${o?" --popup":" end"}`);}jsonRpcError(){return {code:e.jsonRpcCode,message:this.message}}static check(t){return t?.message?.startsWith(e.prefix)}};function Ge({baseUrl:e,realtimeDomain:t,guestServicesUrl:r}){globalThis.env||(globalThis.env={},globalThis.env.BASE_URL=e,globalThis.env.REALTIME_DOMAIN=t,globalThis.env.GUEST_SERVICES_URL=r,console.log("Adaptive SDK server environment initialized"));}var Q=new AsyncLocalStorage,k=null,K=new Set,P=null;function u(){return k||(k=createTRPCProxyClient({transformer:_,links:[httpLink({url:env.GUEST_SERVICES_URL,transformer:_,headers:()=>{let e=M();if(!e)throw new Error("Missing request context");return {"x-request-id":e.requestId}}})]})),k}function M(){return Q.getStore()}function he(e){let t=M();t&&Object.assign(t,e);}async function We(e,t){return Q.run(e,t)}function J(e){throw new h({provider:e?.provider??"AC1",popup:true})}async function Ke(e){let r=await u().getCurrentUser.mutate(e);if(r?.error==="SEED")throw new Error('Call to "getUserId" in seed function is not allowed. Seed functions should not depend on user data.');if(!r?.userId){if(e?.throwIfNotLoggedIn??true)throw new h({provider:"AC1"});return null}return r.userId}async function Je(e){let r=await u().getCurrentUser.mutate({throwIfNotLoggedIn:e?.required});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:J,providers:r.providers};if(e?.required)throw new h({provider:"AC1"});return {userId:null,status:"unauthenticated",signIn:J,providers:[]}}async function He(e){let t=u(),r=await t.upsertTaskStatus.mutate({status:"RUNNING"});return K.add(r.id),he({hasTasks:true}),(async()=>{let n=r.id;try{await e(),await t.upsertTaskStatus.mutate({id:n,status:"COMPLETED"});}catch(o){console.error(`Task ${n} failed:`,o.message),await t.upsertTaskStatus.mutate({id:n,status:"FAILED",error:o});}finally{K.delete(r.id);}})(),r}async function Qe(e){return await u().getTaskStatus.mutate({id:e})}async function Ze(e){let t=u(),r={...e,schema:S.toJSONSchema(e.schema)};return await t.extractStructuredDataFromContent.mutate(r)}async function Xe(e){return await u().extractTextFromContent.mutate(e)}async function et(e){let t=u(),{stream:r,onProgress:n,...o}=e,s={...o,returnType:S.toJSONSchema(e.returnType),customTools:e.customTools?.map(d=>({...d,inputSchema:S.toJSONSchema(d.inputSchema)}))};if(r??n){let d=nanoid(32),a=new WebSocket(`wss://${env.REALTIME_DOMAIN}/${d}`),l=-1,c=p=>{P=Date.now();try{let g=JSON.parse(p.data.toString());if(g?.id&&g.id>l){let Z=_.parse(g.payload);g.requestAgentToolCalls instanceof Array?n?.(g.requestAgentToolCalls):r?.(Z),l=g.id;}}catch{}};a.addEventListener("message",c);let m=await t.requestMultimodalModel.mutate({...s,realtimeChannelId:d});return r&&r(m),a.close(),a.removeEventListener("message",c),m}return await t.requestMultimodalModel.mutate(s)}async function tt(e){return await u().textToImage.mutate(e)}async function rt(e){return await u().textToSpeech.mutate(e)}async function nt(e){return await u().generateSoundEffect.mutate(e)}async function ot(e){return await u().generateDialogue.mutate(e)}async function st(e){return await u().generateMusic.mutate(e)}async function it(e){let t=u(),r;return typeof e.bufferOrBase64=="string"?r=e.bufferOrBase64:r=e.bufferOrBase64.toString("base64"),await t.uploadToBucket.mutate({base64:r,fileName:e.fileName})}async function at(e){return await u().getOAuthToken.mutate({connectionId:e.connectionId})}async function ut(e){let r=await u().getOAuthConnectionForCurrentUser.mutate({...e,scope:e.scope??[]});if(!r&&e.required)throw new h({provider:e.provider,scope:e.scope,popup:true});return r}async function ct(e){return await u().getOAuthConnection.mutate(e)}async function dt(e){return await u().queryOAuthConnections.mutate(e)}async function lt(e){return await u().deleteOAuthConnection.mutate(e)}async function ft(e){await u().sendEmail.mutate(e);}async function pt(e){let t=u();if(!e.email)throw new Error("Email is required");if(!e.markdown)throw new Error("`markdown` content is required when inviting by email");return await t.inviteUser.mutate(e)}async function mt(e){return await u().searchWithGoogle.mutate(e)}async function gt(){return await u().isAppOwner.mutate()}async function wt(e){return await u().generateCrossAppToken.mutate(e)}async function ht(e){return await u().createProduct.mutate(e)}async function yt(){return await u().listProducts.mutate()}async function Et(e){return await u().listUserPurchases.mutate(e)}async function Tt(e){await u().discontinueProduct.mutate(e);}function _t({channelId:e,onUpdate:t}){let r=new WebSocket(`wss://${env.REALTIME_DOMAIN}/${e}`),n=-1;function o(s){t&&(P=Date.now());try{let i=JSON.parse(s.data.toString());if(i?.id&&i.id>n){let d=_.parse(i.payload);t?.(d),n=i.id;}}catch{}}return r.addEventListener("message",o),{destroy(){r.close(),r.removeEventListener("message",o);}}}async function H({channelId:e,data:t}){P=Date.now(),await fetch(`https://${env.REALTIME_DOMAIN}/${e}`,{method:"POST",body:_.stringify(t)}).catch(console.error);}async function Rt(){let e,t=M()?.channelId;if(!t)throw new Error("API's using `startRealtimeResponse` must be called via `useRealtimeMutation`.");return {next(r){e=r,H({channelId:t,data:r});},end(){return H({channelId:t,data:e}),e}}}async function St(e){return await u().getTTSVoicesCatalog.mutate(e)}async function Pt(e){return await u().getDialogueVoicesCatalog.mutate(e)}async function vt(e){return await u().getImageModelsCatalog.mutate(e)}function xt(){return env.BASE_URL}function Ot(){return P}
2
+ export{ht as createProduct,lt as deleteOAuthConnection,Tt as discontinueProduct,Xe as extractTextFromContent,wt as generateCrossAppToken,ot as generateDialogue,st as generateMusic,nt as generateSoundEffect,Je as getAuth,xt as getBaseUrl,Pt as getDialogueVoicesCatalog,vt as getImageModelsCatalog,Ot as getLastStreamTime,ct as getOAuthConnection,ut as getOAuthConnectionForCurrentUser,at as getOAuthToken,_t as getRealtimeStore,M as getRequestContext,Ze as getStructuredDataFromContent,St as getTTSVoicesCatalog,Qe as getTaskStatus,Ke as getUserId,Ge as initializeServerEnvironment,pt as inviteUser,gt as isAppOwner,yt as listProducts,Et as listUserPurchases,dt as queryOAuthConnections,He as queueTask,et as requestMultimodalModel,We as runWithContext,mt as searchWithGoogle,ft as sendEmail,H as setRealtimeStore,he as setRequestContext,Rt as startRealtimeResponse,tt as textToImage,rt as textToSpeech,it as upload};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adaptive-ai/sdk",
3
- "version": "0.0.9",
3
+ "version": "0.1.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "exports": {