@metagptx/web-sdk 0.0.57 → 0.0.59-beta.2
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/index.d.ts +49 -9
- package/dist/index.js +2 -2
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -87,6 +87,12 @@ declare const createClient: (config?: ClientConfig) => {
|
|
|
87
87
|
genimg: (genParams: GenImgParams, options?: AiOptions) => Promise<{
|
|
88
88
|
data: GenImgResponse;
|
|
89
89
|
}>;
|
|
90
|
+
genvideo: (genParams: GenVideoParams, options?: AiOptions) => Promise<{
|
|
91
|
+
data: GenVideoResponse;
|
|
92
|
+
}>;
|
|
93
|
+
genaudio: (genParams: GenAudioParams, options?: AiOptions) => Promise<{
|
|
94
|
+
data: GenAudioResponse;
|
|
95
|
+
}>;
|
|
90
96
|
};
|
|
91
97
|
storage: {
|
|
92
98
|
createBucket: (createParams: CreateBucketParams) => Promise<{
|
|
@@ -115,7 +121,7 @@ declare const createClient: (config?: ClientConfig) => {
|
|
|
115
121
|
};
|
|
116
122
|
};
|
|
117
123
|
//#endregion
|
|
118
|
-
//#region src/modules/ai.d.ts
|
|
124
|
+
//#region src/modules/ai.types.d.ts
|
|
119
125
|
/**
|
|
120
126
|
* Message content for multimodal input
|
|
121
127
|
*/
|
|
@@ -221,19 +227,53 @@ interface GenImgResponse {
|
|
|
221
227
|
/** Generated image URLs or Base64 Data URIs */
|
|
222
228
|
images: string[];
|
|
223
229
|
}
|
|
230
|
+
/**
|
|
231
|
+
* Parameters for video generation (text-to-video or image-to-video)
|
|
232
|
+
*/
|
|
233
|
+
interface GenVideoParams {
|
|
234
|
+
/** Text prompt describing the desired video */
|
|
235
|
+
prompt: string;
|
|
236
|
+
/** Model to use for generation (e.g., 'wan2.6-t2v', 'wan2.6-i2v') */
|
|
237
|
+
model: string;
|
|
238
|
+
/** Video size (default: "1280x720") */
|
|
239
|
+
size?: string;
|
|
240
|
+
/** Video duration in seconds (default: "8") */
|
|
241
|
+
seconds?: string;
|
|
242
|
+
/** Base64 Data URI image as the first frame reference (for image-to-video) */
|
|
243
|
+
image?: string;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Response from genvideo
|
|
247
|
+
*/
|
|
248
|
+
interface GenVideoResponse {
|
|
249
|
+
/** CDN URL of the generated video */
|
|
250
|
+
url: string;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Parameters for audio generation (text-to-speech)
|
|
254
|
+
*/
|
|
255
|
+
interface GenAudioParams {
|
|
256
|
+
/** Text content to convert to speech */
|
|
257
|
+
text: string;
|
|
258
|
+
/** Model to use for generation (e.g., 'qwen3-tts-flash', 'eleven-v3-alpha') */
|
|
259
|
+
model: string;
|
|
260
|
+
/** Voice gender (default: "female") */
|
|
261
|
+
gender?: 'male' | 'female';
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Response from genaudio
|
|
265
|
+
*/
|
|
266
|
+
interface GenAudioResponse {
|
|
267
|
+
/** CDN URL of the generated audio (mp3) */
|
|
268
|
+
url: string;
|
|
269
|
+
}
|
|
224
270
|
/**
|
|
225
271
|
* Options for AI module methods
|
|
226
272
|
*/
|
|
227
273
|
interface AiOptions {
|
|
228
|
-
/** Request timeout in milliseconds (default: 60000 for gentxt, 600000 for genimg) */
|
|
274
|
+
/** Request timeout in milliseconds (default: 60000 for gentxt, 600000 for genimg/genvideo) */
|
|
229
275
|
timeout?: number;
|
|
230
276
|
}
|
|
231
|
-
/**
|
|
232
|
-
* Creates an AI module for text and image generation
|
|
233
|
-
* @param params - Configuration object
|
|
234
|
-
* @param params.requestInstance - Axios instance for making HTTP requests
|
|
235
|
-
* @returns Object containing gentxt and genimg methods
|
|
236
|
-
*/
|
|
237
277
|
//#endregion
|
|
238
278
|
//#region src/types/index.d.ts
|
|
239
279
|
/**
|
|
@@ -457,4 +497,4 @@ interface DownloadParams {
|
|
|
457
497
|
*/
|
|
458
498
|
|
|
459
499
|
//#endregion
|
|
460
|
-
export { type AiOptions, type AnyType, type ApiCallParams, type BucketInfo, type BucketVisibility, type ChatMessage, type ClientConfig, type CreateBucketParams, type CreateBucketResponse, type DownloadParams, type GenImgParams, type GenImgResponse, type GenTxtNonStreamParams, type GenTxtParams, type GenTxtResponse, type GenTxtStreamParams, type GetDownloadUrlParams, type GetDownloadUrlResponse, type GetObjectInfoParams, type GetObjectInfoResponse, type GetUploadUrlParams, type GetUploadUrlResponse, type ImageContent, type IntegrationFunction, type IntegrationParams, type ListBucketsResponse, type ListObjectsParams, type ListObjectsResponse, type MessageContent, type ObjectInfo, type RenameObjectParams, type RenameObjectResponse, type RequestConfig, type StreamChunk, type StreamResult, type TextContent, type UploadParams, type UploadResult, createClient };
|
|
500
|
+
export { type AiOptions, type AnyType, type ApiCallParams, type BucketInfo, type BucketVisibility, type ChatMessage, type ClientConfig, type CreateBucketParams, type CreateBucketResponse, type DownloadParams, type GenAudioParams, type GenAudioResponse, type GenImgParams, type GenImgResponse, type GenTxtNonStreamParams, type GenTxtParams, type GenTxtResponse, type GenTxtStreamParams, type GenVideoParams, type GenVideoResponse, type GetDownloadUrlParams, type GetDownloadUrlResponse, type GetObjectInfoParams, type GetObjectInfoResponse, type GetUploadUrlParams, type GetUploadUrlResponse, type ImageContent, type IntegrationFunction, type IntegrationParams, type ListBucketsResponse, type ListObjectsParams, type ListObjectsResponse, type MessageContent, type ObjectInfo, type RenameObjectParams, type RenameObjectResponse, type RequestConfig, type StreamChunk, type StreamResult, type TextContent, type UploadParams, type UploadResult, createClient };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e from"axios";import t from"qs";const n=e=>{let t=e.response?.status;if(t&&t>=400&&t!==401)try{typeof window<`u`&&window.top&&window.top?.postMessage({type:`mgx-appview-error`,targetName:window.name,data:{errMsg:e.response?.data?.message||e.response?.data?.detail||`Server Error`,stack:JSON.stringify({url:e.response?.config?.url,data:e.response?.data,status:e.response?.status})}},`*`)}catch(e){console.warn(`Failed to notify parent window about API error:`,e)}},r=(r={})=>{let{onUnauthorized:i,...a}=r,o=typeof globalThis<`u`&&`localStorage`in globalThis&&typeof globalThis.localStorage?.getItem==`function`?globalThis.localStorage.getItem(`token`)??void 0:void 0,s={timeout:6e4,paramsSerializer:e=>t.stringify(e,{arrayFormat:`brackets`}),...a,headers:{"Content-Type":`application/json`,"App-Host":globalThis?.window?.location?.origin??``,...o?{Authorization:`Bearer ${o}`}:{},...a.headers}},c=e.create(s);return c.interceptors.request.use(e=>e,e=>Promise.reject(e)),c.interceptors.response.use(e=>e,e=>{let t=e.response?.status;return t===401&&i&&i(),n(e),Promise.reject(e)}),c},i=[`stripe.com`],a=e=>typeof e==`string`?e.startsWith(`_`)||e.startsWith(`$`)||e===`constructor`||e===`toString`||e===`valueOf`||e===`inspect`||e===`toJSON`:!0,o=()=>{let e=window.location?.href??``,t=``;e.startsWith(`/`)?t=e:e&&(t=e.replace(/^[a-z][a-z0-9+.-]*:\/\/[^/]+/i,``));let n=new URLSearchParams({from_url:t});window.location.href=`/api/v1/auth/login?${n.toString()}`},s=()=>globalThis?.window?.name?.includes(`devIframe`),c=e=>e?i.some(t=>e.toString().includes(t)):!1,l=e=>{let{requestInstance:t}=e;return{async login(){let e=new URLSearchParams(window.location.search),t=e.get(`token`);t&&typeof globalThis<`u`&&`localStorage`in globalThis?(globalThis.localStorage?.setItem(`token`,t),globalThis.localStorage?.setItem(`isLougOutManual`,`false`),window.location.href=`/`):o()},async me(){return t.get(`/api/v1/auth/me`)},async logout(){typeof globalThis<`u`&&`localStorage`in globalThis&&(globalThis.localStorage?.removeItem(`token`),globalThis.localStorage?.setItem(`isLougOutManual`,`true`));let e=await t.get(`/api/v1/auth/logout`);return typeof globalThis<`u`&&`window`in globalThis&&(globalThis.window.opener=null),window.location.href=`/`,e},toLogin:o}},u=e=>{let{requestInstance:t,entityName:n}=e,r=`/api/v1/entities/${n}`,i=e=>{if(!e)return;let t={...e};return e.fields&&Array.isArray(e.fields)&&(t.fields=e.fields.join(`,`)),e.query&&typeof e.query==`object`&&(t.query=JSON.stringify(e.query)),t};return{async query(e){let n=i(e);return t.get(r,{params:n})},async queryAll(e){let n=i(e);return t.get(`${r}/all`,{params:n})},async get(e){let{id:n,...a}=e,o=i(a);return t.get(`${r}/${n}`,{params:o})},async create(e){return t.post(r,e.data)},async update(e){return t.put(`${r}/${e.id}`,e.data)},async delete(e){return t.delete(`${r}/${e.id}`)},async deleteBatch(e){return t.delete(`${r}/batch`,{data:{ids:e.ids}})},async createBatch(e){return t.post(`${r}/batch`,e.data)},async updateBatch(e){return t.put(`${r}/batch`,e.data)}}},d=e=>{let{requestInstance:t}=e,n=new Map;return new Proxy({},{get(e,r){if(!a(r))return n.has(r)||n.set(r,u({requestInstance:t,entityName:r})),n.get(r)}})},f=e=>{let{requestInstance:t}=e;return{async invoke(e){let{url:n,method:r=`GET`,data:i,options:a={}}=e;if(typeof window<`u`&&a?.responseType===`stream`){let e;try{typeof globalThis<`u`&&`localStorage`in globalThis&&typeof globalThis.localStorage?.getItem==`function`&&(e=globalThis.localStorage.getItem(`token`)??void 0)}catch{}let t={"Content-Type":`application/json`,"App-Host":globalThis?.window?.location?.origin??``,...e?{Authorization:`Bearer ${e}`}:{},...a.headers||{}},o;i&&[`POST`,`PUT`,`PATCH`].includes(r.toUpperCase())&&(o=JSON.stringify(i));let s=await fetch(n,{method:r.toUpperCase(),headers:t,body:o});return s}let o={method:r.toUpperCase(),url:n,...a};return i&&[`POST`,`PUT`,`PATCH`].includes(o.method)?o.data=i:i&&[`GET`,`DELETE`].includes(o.method)&&(o.params=i),t.request(o)}}},p=e=>{let{requestInstance:t}=e;return new Proxy({},{get(e,n){if(!a(n))return new Proxy({},{get(e,r){if(!a(r))return(e={})=>{let i=`/api/integrations/core/${r}`;n!==`core`&&(i=`/api/integrations/providers/${n}/${r}`);let{payload:a={},option:o={}}=e,s=a instanceof FormData?{...o,headers:{...o.headers,"Content-Type":void 0}}:o;return t.post(i,a,s)}}})}})};let m=null;const h=e=>{if(m)return;let{requestInstance:t}=e,n=async e=>{let n=globalThis?.localStorage?.getItem(`token`);if(n)return;let r=e.token,i=await t.post(`/api/v1/auth/token/exchange`,{platform_token:r});i.status===200&&i.data.token&&(globalThis?.localStorage?.setItem(`token`,i.data.token),window.location.href=`/`)},r=e=>{switch(e.data.type){case`mgx-token-saved`:n(e.data.data);break;default:break}};m={requestInstance:t,handleMessage:r},globalThis?.window?.addEventListener(`message`,r)},g=()=>{let e=(e,t,n,r)=>{if(globalThis?.window===void 0||!globalThis?.window?.top){console.warn(`postMessage: window.top is not available`);return}try{let{targetOrigin:i=`*`,targetName:a=globalThis?.window?.name??``}=n||{},o={type:e,targetName:a,data:t};(r??globalThis?.window?.top)?.postMessage(o,i)}catch(e){console.warn(`Failed to send postMessage:`,e)}};return{postMessage:e}};let _=!1;const v=e=>{h(e);let{postMessage:t}=g(),n=()=>{if(_)return;_=!0;let e=globalThis?.localStorage?.getItem(`token`),n=globalThis?.localStorage?.getItem(`isLougOutManual`)===`true`,r=window.self!==window.top&&window.name?.includes(`devIframe`);!e&&!n&&r&&(t(`mgx-token-request`,{domain:globalThis?.window?.location?.href??``},{},globalThis?.window?.opener),t(`mgx-token-request`,{domain:globalThis?.window?.location?.href??``}))};return n(),{createPage(e){let{path:n,prompt:r}=e;t(`mgx-create-page`,{path:n??globalThis?.window?.location?.pathname??``,prompt:r})}}},y=()=>{let{postMessage:e}=g(),t=t=>{if(t){if(globalThis?.window===void 0){console.warn(`openUrl: window is not available`);return}if(c(t)&&s()){e(`mgx-open-url`,{url:t.toString()},{},globalThis?.window?.opener);return}globalThis.window.location.href=t.toString()}};return{openUrl:t}},b=e=>{let{requestInstance:t}=e;async function n(e,t,n,r){let i=e.body?.getReader();if(!i){let e=Error(`Response body is not readable`);throw r?.(e),e}let a=new TextDecoder,o=``,s=``;try{for(;;){let{done:e,value:n}=await i.read();if(e)break;s+=a.decode(n,{stream:!0});let c=s.split(`
|
|
2
|
-
`);s=c.pop()||``;for(let e of c){if(!e.startsWith(`data: `))continue;let n=e.slice(6).trim();if(n===`[DONE]`)continue;try{let e=JSON.parse(n);if(e.content?.startsWith(`[ERROR]`)){let t=Error(e.content);throw r?.(t),t}e.content&&(o+=e.content,t?.({content:e.content}))}catch(e){if(e.message?.startsWith(`[ERROR]`))throw e}}}if(s.startsWith(`data: `)){let e=s.slice(6).trim();if(e!==`[DONE]`)try{let n=JSON.parse(e);if(n.content?.startsWith(`[ERROR]`)){let e=Error(n.content);throw r?.(e),e}n.content&&(o+=n.content,t?.({content:n.content}))}catch(e){if(e.message?.startsWith(`[ERROR]`))throw e}}let e={content:o};return n?.(e),e}catch(e){throw e instanceof Error&&r?.(e),e}}async function r(e){let{messages:r,model:i,stream:a,timeout:o}=e,s=`/api/v1/aihub/gentxt`,c={messages:r,model:i,stream:a};if(a){let r=e,{onChunk:i,onComplete:a,onError:l}=r;if(typeof window<`u`){let e;try{typeof globalThis<`u`&&`localStorage`in globalThis&&typeof globalThis.localStorage?.getItem==`function`&&(e=globalThis.localStorage.getItem(`token`)??void 0)}catch{}let t={"Content-Type":`application/json`,"App-Host":globalThis?.window?.location?.origin??``,...e?{Authorization:`Bearer ${e}`}:{}},r=new AbortController,u=o?setTimeout(()=>r.abort(),o):void 0;try{let e=await fetch(s,{method:`POST`,headers:t,body:JSON.stringify(c),signal:r.signal});if(u&&clearTimeout(u),!e.ok){let t=Error(`HTTP error! status: ${e.status}`);throw l?.(t),t}return await n(e,i,a,l)}catch(e){throw u&&clearTimeout(u),e instanceof Error&&l?.(e),e}}let u=await t.request({method:`POST`,url:s,data:c,responseType:`stream`,timeout:o});return{content:u.data}}return t.request({method:`POST`,url:s,data:c,timeout:o})}async function i(e,n={}){let{prompt:r,model:i,size:a=`1024x1024`,quality:o=`standard`,n:s=1,image:c}=e,{timeout:l=6e5}=n,u=`/api/v1/aihub/genimg`,d={prompt:r,model:i,size:a,n:s};return c||(d.quality=o),c&&(d.image=c),t.request({method:`POST`,url:u,data:d,timeout:l})}return{gentxt:r,genimg:i}};function x(e){return new Promise(t=>{let n=document.createElement(`input`);n.type=`file`,e&&(n.accept=e),n.onchange=()=>{let e=n.files?.[0]??null;t(e)},n.oncancel=()=>{t(null)};let r=()=>{setTimeout(()=>{n.files?.length||t(null),window.removeEventListener(`focus`,r)},300)};window.addEventListener(`focus`,r),n.click()})}const S=e=>{let{requestInstance:t}=e;async function n(e){return t.request({method:`POST`,url:`/api/v1/storage/create-bucket`,data:e})}async function r(){return t.request({method:`GET`,url:`/api/v1/storage/list-buckets`})}async function i(e){return t.request({method:`GET`,url:`/api/v1/storage/list-objects`,params:e})}async function a(e){return t.request({method:`GET`,url:`/api/v1/storage/get-object-info`,params:e})}async function o(e){return t.request({method:`POST`,url:`/api/v1/storage/rename-object`,data:e})}async function s(e){return t.request({method:`POST`,url:`/api/v1/storage/upload-url`,data:e})}async function c(e){return t.request({method:`POST`,url:`/api/v1/storage/download-url`,data:e})}async function l(e){let{bucket_name:t,accept:n}=e,{file:r,object_key:i}=e;if(!r){if(typeof window>`u`||typeof document>`u`)throw TypeError(`File picker is only available in browser environment. Please provide a file.`);let e=await x(n);if(!e)throw Error(`File selection cancelled`);r=e}i||=r.name;let{data:a}=await s({bucket_name:t,object_key:i}),o=await fetch(a.upload_url,{method:`PUT`,body:r,headers:{"Content-Type":r.type||`application/octet-stream`}});if(!o.ok)throw Error(`Upload failed with status ${o.status}: ${o.statusText}`);return{bucket_name:t,object_key:i,size:r.size,file_name:r.name}}async function u(e){let{data:t}=await c(e);if(typeof window<`u`&&typeof document<`u`){let n=document.createElement(`a`);n.href=t.download_url;let r=e.object_key.split(`/`).pop()||`download`;n.download=r,document.body.appendChild(n),n.click(),document.body.removeChild(n)}return t.download_url}return{createBucket:n,listBuckets:r,listObjects:i,getObjectInfo:a,renameObject:o,getUploadUrl:s,getDownloadUrl:c,upload:l,download:u}},C=(e={})=>{let t=r({baseURL:`/`,...e}),n=l({requestInstance:t}),i=d({requestInstance:t}),a=f({requestInstance:t}),o=p({requestInstance:t}),s=v({requestInstance:t}),c=y(),u=b({requestInstance:t}),m=S({requestInstance:t});return{auth:n,entities:i,apiCall:a,integrations:o,frame:s,utils:c,ai:u,storage:m}};export{C as createClient};
|
|
1
|
+
import e from"axios";import t from"qs";const n=e=>{let t=e.response?.status;if(t&&t>=400&&t!==401)try{typeof window<`u`&&window.top&&window.top?.postMessage({type:`mgx-appview-error`,targetName:window.name,data:{errMsg:e.response?.data?.message||e.response?.data?.detail||`Server Error`,stack:JSON.stringify({url:e.response?.config?.url,data:e.response?.data,status:e.response?.status})}},`*`)}catch(e){console.warn(`Failed to notify parent window about API error:`,e)}},r=(r={})=>{let{onUnauthorized:i,...a}=r,o=typeof globalThis<`u`&&`localStorage`in globalThis&&typeof globalThis.localStorage?.getItem==`function`?globalThis.localStorage.getItem(`token`)??void 0:void 0,s={timeout:6e4,paramsSerializer:e=>t.stringify(e,{arrayFormat:`brackets`}),...a,headers:{"Content-Type":`application/json`,"App-Host":globalThis?.window?.location?.origin??``,...o?{Authorization:`Bearer ${o}`}:{},...a.headers}},c=e.create(s);return c.interceptors.request.use(e=>e,e=>Promise.reject(e)),c.interceptors.response.use(e=>e,e=>{let t=e.response?.status;return t===401&&i&&i(),n(e),Promise.reject(e)}),c},i=[`stripe.com`],a=e=>typeof e==`string`?e.startsWith(`_`)||e.startsWith(`$`)||e===`constructor`||e===`toString`||e===`valueOf`||e===`inspect`||e===`toJSON`:!0,o=()=>{let e=window.location?.href??``,t=``;e.startsWith(`/`)?t=e:e&&(t=e.replace(/^[a-z][a-z0-9+.-]*:\/\/[^/]+/i,``));let n=new URLSearchParams({from_url:t});window.location.href=`/api/v1/auth/login?${n.toString()}`},s=()=>globalThis?.window?.name?.includes(`devIframe`),c=e=>e?i.some(t=>e.toString().includes(t)):!1,l=e=>{let{requestInstance:t}=e;return{async login(){let e=new URLSearchParams(window.location.search),t=e.get(`token`);t&&typeof globalThis<`u`&&`localStorage`in globalThis?(globalThis.localStorage?.setItem(`token`,t),globalThis.localStorage?.setItem(`isLougOutManual`,`false`),window.location.href=`/`):setTimeout(()=>{o()})},async me(){return t.get(`/api/v1/auth/me`)},async logout(){typeof globalThis<`u`&&`localStorage`in globalThis&&(globalThis.localStorage?.removeItem(`token`),globalThis.localStorage?.setItem(`isLougOutManual`,`true`));let e=await t.get(`/api/v1/auth/logout`);return typeof globalThis<`u`&&`window`in globalThis&&(globalThis.window.opener=null),window.location.href=`/`,e},toLogin:o}},u=e=>{let{requestInstance:t,entityName:n}=e,r=`/api/v1/entities/${n}`,i=e=>{if(!e)return;let t={...e};return e.fields&&Array.isArray(e.fields)&&(t.fields=e.fields.join(`,`)),e.query&&typeof e.query==`object`&&(t.query=JSON.stringify(e.query)),t};return{async query(e){let n=i(e);return t.get(r,{params:n})},async queryAll(e){let n=i(e);return t.get(`${r}/all`,{params:n})},async get(e){let{id:n,...a}=e,o=i(a);return t.get(`${r}/${n}`,{params:o})},async create(e){return t.post(r,e.data)},async update(e){return t.put(`${r}/${e.id}`,e.data)},async delete(e){return t.delete(`${r}/${e.id}`)},async deleteBatch(e){return t.delete(`${r}/batch`,{data:{ids:e.ids}})},async createBatch(e){return t.post(`${r}/batch`,e.data)},async updateBatch(e){return t.put(`${r}/batch`,e.data)}}},d=e=>{let{requestInstance:t}=e,n=new Map;return new Proxy({},{get(e,r){if(!a(r))return n.has(r)||n.set(r,u({requestInstance:t,entityName:r})),n.get(r)}})},f=e=>{let{requestInstance:t}=e;return{async invoke(e){let{url:n,method:r=`GET`,data:i,options:a={}}=e;if(typeof window<`u`&&a?.responseType===`stream`){let e;try{typeof globalThis<`u`&&`localStorage`in globalThis&&typeof globalThis.localStorage?.getItem==`function`&&(e=globalThis.localStorage.getItem(`token`)??void 0)}catch{}let t={"Content-Type":`application/json`,"App-Host":globalThis?.window?.location?.origin??``,...e?{Authorization:`Bearer ${e}`}:{},...a.headers||{}},o;i&&[`POST`,`PUT`,`PATCH`].includes(r.toUpperCase())&&(o=JSON.stringify(i));let s=await fetch(n,{method:r.toUpperCase(),headers:t,body:o});return s}let o={method:r.toUpperCase(),url:n,...a};return i&&[`POST`,`PUT`,`PATCH`].includes(o.method)?o.data=i:i&&[`GET`,`DELETE`].includes(o.method)&&(o.params=i),t.request(o)}}},p=e=>{let{requestInstance:t}=e;return new Proxy({},{get(e,n){if(!a(n))return new Proxy({},{get(e,r){if(!a(r))return(e={})=>{let i=`/api/integrations/core/${r}`;n!==`core`&&(i=`/api/integrations/providers/${n}/${r}`);let{payload:a={},option:o={}}=e,s=a instanceof FormData?{...o,headers:{...o.headers,"Content-Type":void 0}}:o;return t.post(i,a,s)}}})}})};let m=null;const h=e=>{if(m)return;let{requestInstance:t}=e,n=async e=>{let n=globalThis?.localStorage?.getItem(`token`);if(n)return;let r=e.token,i=await t.post(`/api/v1/auth/token/exchange`,{platform_token:r});i.status===200&&i.data.token&&(globalThis?.localStorage?.setItem(`token`,i.data.token),window.location.href=`/`)},r=e=>{switch(e.data.type){case`mgx-token-saved`:n(e.data.data);break;default:break}};m={requestInstance:t,handleMessage:r},globalThis?.window?.addEventListener(`message`,r)},g=()=>{let e=(e,t,n,r)=>{if(globalThis?.window===void 0||!globalThis?.window?.top){console.warn(`postMessage: window.top is not available`);return}try{let{targetOrigin:i=`*`,targetName:a=globalThis?.window?.name??``}=n||{},o={type:e,targetName:a,data:t};(r??globalThis?.window?.top)?.postMessage(o,i)}catch(e){console.warn(`Failed to send postMessage:`,e)}};return{postMessage:e}};let _=!1;const v=e=>{h(e);let{postMessage:t}=g(),n=()=>{if(_)return;_=!0;let e=globalThis?.localStorage?.getItem(`token`),n=globalThis?.localStorage?.getItem(`isLougOutManual`)===`true`,r=window.self!==window.top&&window.name?.includes(`devIframe`);!e&&!n&&r&&(t(`mgx-token-request`,{domain:globalThis?.window?.location?.href??``},{},globalThis?.window?.opener),t(`mgx-token-request`,{domain:globalThis?.window?.location?.href??``}))};return n(),{createPage(e){let{path:n,prompt:r}=e;t(`mgx-create-page`,{path:n??globalThis?.window?.location?.pathname??``,prompt:r})}}},y=()=>{let{postMessage:e}=g(),t=t=>{if(t){if(globalThis?.window===void 0){console.warn(`openUrl: window is not available`);return}if(c(t)&&s()){e(`mgx-open-url`,{url:t.toString()},{},globalThis?.window?.opener);return}globalThis.window.location.href=t.toString()}};return{openUrl:t}},b=e=>{let{requestInstance:t}=e;async function n(e,t,n,r){let i=e.body?.getReader();if(!i){let e=Error(`Response body is not readable`);throw r?.(e),e}let a=new TextDecoder,o=``,s=``;try{for(;;){let{done:e,value:n}=await i.read();if(e)break;s+=a.decode(n,{stream:!0});let c=s.split(`
|
|
2
|
+
`);s=c.pop()||``;for(let e of c){if(!e.startsWith(`data: `))continue;let n=e.slice(6).trim();if(n===`[DONE]`)continue;try{let e=JSON.parse(n);if(e.content?.startsWith(`[ERROR]`)){let t=Error(e.content);throw r?.(t),t}e.content&&(o+=e.content,t?.({content:e.content}))}catch(e){if(e.message?.startsWith(`[ERROR]`))throw e}}}if(s.startsWith(`data: `)){let e=s.slice(6).trim();if(e!==`[DONE]`)try{let n=JSON.parse(e);if(n.content?.startsWith(`[ERROR]`)){let e=Error(n.content);throw r?.(e),e}n.content&&(o+=n.content,t?.({content:n.content}))}catch(e){if(e.message?.startsWith(`[ERROR]`))throw e}}let e={content:o};return n?.(e),e}catch(e){throw e instanceof Error&&r?.(e),e}}async function r(e){let{messages:r,model:i,stream:a,timeout:o}=e,s=`/api/v1/aihub/gentxt`,c={messages:r,model:i,stream:a};if(a){let r=e,{onChunk:i,onComplete:a,onError:l}=r;if(typeof window<`u`){let e;try{typeof globalThis<`u`&&`localStorage`in globalThis&&typeof globalThis.localStorage?.getItem==`function`&&(e=globalThis.localStorage.getItem(`token`)??void 0)}catch{}let t={"Content-Type":`application/json`,"App-Host":globalThis?.window?.location?.origin??``,...e?{Authorization:`Bearer ${e}`}:{}},r=new AbortController,u=o?setTimeout(()=>r.abort(),o):void 0;try{let e=await fetch(s,{method:`POST`,headers:t,body:JSON.stringify(c),signal:r.signal});if(u&&clearTimeout(u),!e.ok){let t=Error(`HTTP error! status: ${e.status}`);throw l?.(t),t}return await n(e,i,a,l)}catch(e){throw u&&clearTimeout(u),e instanceof Error&&l?.(e),e}}let u=await t.request({method:`POST`,url:s,data:c,responseType:`stream`,timeout:o});return{content:u.data}}return t.request({method:`POST`,url:s,data:c,timeout:o})}async function i(e,n={}){let{prompt:r,model:i,size:a=`1024x1024`,quality:o=`standard`,n:s=1,image:c}=e,{timeout:l=6e5}=n,u=`/api/v1/aihub/genimg`,d={prompt:r,model:i,size:a,n:s};return c||(d.quality=o),c&&(d.image=c),t.request({method:`POST`,url:u,data:d,timeout:l})}async function a(e,n={}){let{prompt:r,model:i,size:a=`1280x720`,seconds:o=`8`,image:s}=e,{timeout:c=6e5}=n,l=`/api/v1/aihub/genvideo`,u={prompt:r,model:i,size:a,seconds:o};return s&&(u.image=s),t.request({method:`POST`,url:l,data:u,timeout:c})}async function o(e,n={}){let{text:r,model:i,gender:a=`female`}=e,{timeout:o=6e4}=n,s=`/api/v1/aihub/genaudio`,c={text:r,model:i,gender:a};return t.request({method:`POST`,url:s,data:c,timeout:o})}return{gentxt:r,genimg:i,genvideo:a,genaudio:o}};function x(e){return new Promise(t=>{let n=document.createElement(`input`);n.type=`file`,e&&(n.accept=e),n.onchange=()=>{let e=n.files?.[0]??null;t(e)},n.oncancel=()=>{t(null)};let r=()=>{setTimeout(()=>{n.files?.length||t(null),window.removeEventListener(`focus`,r)},300)};window.addEventListener(`focus`,r),n.click()})}const S=e=>{let{requestInstance:t}=e;async function n(e){return t.request({method:`POST`,url:`/api/v1/storage/create-bucket`,data:e})}async function r(){return t.request({method:`GET`,url:`/api/v1/storage/list-buckets`})}async function i(e){return t.request({method:`GET`,url:`/api/v1/storage/list-objects`,params:e})}async function a(e){return t.request({method:`GET`,url:`/api/v1/storage/get-object-info`,params:e})}async function o(e){return t.request({method:`POST`,url:`/api/v1/storage/rename-object`,data:e})}async function s(e){return t.request({method:`POST`,url:`/api/v1/storage/upload-url`,data:e})}async function c(e){return t.request({method:`POST`,url:`/api/v1/storage/download-url`,data:e})}async function l(e){let{bucket_name:t,accept:n}=e,{file:r,object_key:i}=e;if(!r){if(typeof window>`u`||typeof document>`u`)throw TypeError(`File picker is only available in browser environment. Please provide a file.`);let e=await x(n);if(!e)throw Error(`File selection cancelled`);r=e}i||=r.name;let{data:a}=await s({bucket_name:t,object_key:i}),o=await fetch(a.upload_url,{method:`PUT`,body:r,headers:{"Content-Type":r.type||`application/octet-stream`}});if(!o.ok)throw Error(`Upload failed with status ${o.status}: ${o.statusText}`);return{bucket_name:t,object_key:i,size:r.size,file_name:r.name}}async function u(e){let{data:t}=await c(e);if(typeof window<`u`&&typeof document<`u`){let n=document.createElement(`a`);n.href=t.download_url;let r=e.object_key.split(`/`).pop()||`download`;n.download=r,document.body.appendChild(n),n.click(),document.body.removeChild(n)}return t.download_url}return{createBucket:n,listBuckets:r,listObjects:i,getObjectInfo:a,renameObject:o,getUploadUrl:s,getDownloadUrl:c,upload:l,download:u}},C=(e={})=>{let t=r({baseURL:`/`,...e}),n=l({requestInstance:t}),i=d({requestInstance:t}),a=f({requestInstance:t}),o=p({requestInstance:t}),s=v({requestInstance:t}),c=y(),u=b({requestInstance:t}),m=S({requestInstance:t});return{auth:n,entities:i,apiCall:a,integrations:o,frame:s,utils:c,ai:u,storage:m}};export{C as createClient};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metagptx/web-sdk",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.59-beta.2",
|
|
5
5
|
"packageManager": "pnpm@10.15.0+sha512.486ebc259d3e999a4e8691ce03b5cac4a71cbeca39372a9b762cb500cfdf0873e2cb16abe3d951b1ee2cf012503f027b98b6584e4df22524e0c7450d9ec7aa7b",
|
|
6
6
|
"description": "TypeScript SDK for interacting with FuncSea API",
|
|
7
7
|
"author": "MetaGPTX",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"test": "vitest run",
|
|
38
38
|
"test:coverage": "vitest --coverage run",
|
|
39
39
|
"typecheck": "tsc --noEmit",
|
|
40
|
-
"release": "bumpp && npm publish",
|
|
40
|
+
"release": "bumpp && npm publish --tag beta",
|
|
41
41
|
"lint": "eslint",
|
|
42
42
|
"lint:fix": "eslint --fix",
|
|
43
43
|
"precommit": "npm run typecheck && lint-staged && npm run test:coverage",
|