@bty/feed_app-runtime-sdk 0.0.7 → 0.0.8

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/ai/index.js CHANGED
@@ -1,3 +1,3 @@
1
- var Y={version:"0.0.7"};var A="/v1/feed-app/runtime/ai",U=`${A}/chat/completions`,H=`${A}/messages`,K=`${A}/images/generations`,X=`${A}/audio/speech`,W=`${A}/video/generations`,z="Authorization",Z="x-bty-extend",ee="x-bty-app",te=Y.version;var He=/\r\n|\r|\n/,Le=(()=>{let e=new TextDecoder;return (t,n)=>e.decode(t,{stream:n})})();async function*ne(e){let t=e.getReader(),n="",r="",s=[],o=()=>{if(s.length===0&&!r)return null;let c={event:r||"message",data:s.join(`
2
- `)};return r="",s=[],c};try{for(;;){let{done:c,value:p}=await t.read();if(c){let i=o();i&&(yield i);return}for(n+=Le(p,!0);;){let i=He.exec(n);if(!i)break;let d=n.slice(0,i.index);if(n=n.slice(i.index+i[0].length),d===""){let f=o();f&&(yield f);continue}if(d.startsWith(":"))continue;let _=d.indexOf(":"),I=_===-1?d:d.slice(0,_),l=_===-1?"":d.slice(_+1);l.startsWith(" ")&&(l=l.slice(1)),I==="event"?r=l:I==="data"&&s.push(l);}}}finally{t.releaseLock();}}async function*re(e){for await(let t of ne(e)){if(t.data==="[DONE]")return;t.data&&(yield JSON.parse(t.data));}}async function*se(e){for await(let t of ne(e))t.data&&(yield JSON.parse(t.data));}var De="https://reactus-api.betteryeah.com",oe=e=>{try{let t=e();if(typeof t=="string"&&t.length>0)return t}catch{}},Be=()=>oe(()=>typeof __BTY_RUNTIME_API_BASE_URL__=="string"?__BTY_RUNTIME_API_BASE_URL__:void 0),Fe=()=>oe(()=>typeof __BTY_RUNTIME_PROJECT_ID__=="string"?__BTY_RUNTIME_PROJECT_ID__:void 0),L={apiBaseUrl:(Be()??De).replace(/\/+$/,""),projectId:Fe()??""},qe=e=>{L={...L,...e,...e.apiBaseUrl?{apiBaseUrl:e.apiBaseUrl.replace(/\/+$/,"")}:{}};},x=()=>L;var m=class extends Error{status;code;body;constructor(t,n,r,s=null){super(t),this.name="AiError",this.code=n,this.status=r,this.body=s;}},g=class extends m{constructor(t="Auth required",n=null){super(t,"auth_required",401,n),this.name="AuthRequiredError";}},P=class extends m{constructor(t="Rate limit exceeded",n=null){super(t,"rate_limit",429,n),this.name="RateLimitError";}},k=class extends m{constructor(t="Quota exceeded",n=null){super(t,"quota_exceeded",402,n),this.name="QuotaExceededError";}},O=class extends m{constructor(t,n=400,r=null){super(t,"bad_input",n,r),this.name="BadInputError";}},N=class extends m{constructor(t,n=500,r=null){super(t,"server",n,r),this.name="ServerError";}},y=class extends m{constructor(t="Network error",n){super(t,"network",-1,n),this.name="NetworkError";}},S=class extends m{constructor(t="Request aborted"){super(t,"aborted",-1,null),this.name="AbortedError";}},ie=e=>typeof e=="object"&&e!==null,je=(e,t)=>{if(typeof e=="string")return e||t;if(!ie(e))return t;let n=e.message;if(typeof n=="string"&&n.length>0)return n;let r=e.error;if(typeof r=="string"&&r.length>0)return r;if(ie(r)&&typeof r.message=="string"&&r.message.length>0)return r.message;let s=e.detail;return typeof s=="string"&&s.length>0?s:t},D=(e,t)=>{let n=je(t,`HTTP ${e}`);return e===401||e===403?new g(n,t):e===402?new k(n,t):e===429?new P(n,t):e>=400&&e<500?new O(n,e,t):e>=500?new N(n,e,t):new m(n,"unknown",e,t)};var u=()=>typeof window<"u"&&typeof document<"u";var Ge="hostRuntime",B=class{listeners=new Map;on(t,n){let r=this.listeners.get(t),s=r??new Set;return r||this.listeners.set(t,s),s.add(n),()=>{s.delete(n),s.size===0&&this.listeners.delete(t);}}emit(t,n){let r=this.listeners.get(t);if(r)for(let s of r)s(n);}},a=new B,ae=0,F=e=>(ae+=1,`${e}.${ae}`),ce=false,pe=()=>{if(!u()||ce)return;ce=true,Reflect.set(window,Ge,{receiveMessage(t){if(!t)return;let n=t.endpoint;n&&a.emit(n,t.data??t);}});};var C=e=>typeof e=="object"&&e!==null,h=(e,t)=>{if(e)for(let n of t){let r=e[n];if(typeof r=="string"&&r.length>0)return r}},Ve=(e,t)=>{if(e)for(let n of t){let r=e[n];if(typeof r=="string"&&r.length>0||typeof r=="number"&&Number.isFinite(r))return r}},E=e=>{if(!C(e))return null;let t=C(e.credentials)?e.credentials:void 0,n=C(e.user)?e.user:void 0,r=h(e,["uid","userId","id"])??h(t,["uid","userId","id"])??h(n,["uid","userId","id"]),s=h(e,["token","authToken"])??h(t,["token","authToken"]);return !r||!s?null:{uid:r,token:s}},v=e=>{if(!C(e))return null;let t=C(e.data)?e.data:e,n=Ve(t,["userId","id","uid"]);if(n===void 0)return null;let r=h(t,["username","nickname","nickName","name"]),s=h(t,["nickname","nickName","username"]);return {...t,userId:n,...r?{username:r}:{},...s?{nickname:s}:{}}};var ue="HostApp",q="hostListener";var de="processUserCredentials",le="processUserInfo",me="user.getCredentials";var R="user.credentials",j="user.info",fe="user-credentials-request",Ee="user-credentials-response";var ge="user-info-response",he={iOS:[1,6,7],Android:[1,1,8]},_e=3e3,ye=500,Re=50,Te=1500;var Je=e=>typeof e!="object"||e===null?false:typeof Reflect.get(e,"type")=="string",Ae=false,Se=()=>{!u()||Ae||(Ae=true,pe(),Reflect.set(window,de,e=>{E(e)&&a.emit(R,e);}),Reflect.set(window,le,e=>{v(e)&&a.emit(j,e);}),window.addEventListener("message",e=>{let t=e.data;if(Je(t))switch(t.type){case Ee:a.emit("iframe.credentials",t);break;case ge:a.emit("iframe.userinfo",t);break}}));};var $e=new RegExp(`${ue}\\/(\\d+\\.\\d+\\.\\d+)\\/(\\d+)\\/(iOS|Android)`),Qe=e=>{let t=e.split(".").map(n=>Number.parseInt(n,10));return [t[0]??0,t[1]??0,t[2]??0]},Ye=(e,t)=>{for(let n=0;n<3;n++){if(e[n]>t[n])return true;if(e[n]<t[n])return false}return true},Ke=e=>{let t=e.match($e);if(!t)return null;let[,n,r,s]=t;if(!n||!r||s!=="iOS"&&s!=="Android")return null;let o=Ye(Qe(n),he[s]);return {type:"native_app",platform:s,appVersion:n,buildNumber:r,meetsMinVersion:o}},Ce=()=>{if(!u())return {type:"web",meetsMinVersion:false};let e=Ke(navigator.userAgent??"");return e||(window.parent!==window?{type:"iframe",meetsMinVersion:false}:{type:"web",meetsMinVersion:false})};var Xe=(e,t,n)=>new Promise(r=>{let s=false,o=i=>{s||(s=true,c(),clearTimeout(p),r(i));},c=a.on(t,i=>{let d=n(i);d&&o(d);}),p=setTimeout(()=>o(null),ye);try{window.parent.postMessage({type:e,timestamp:Date.now()},"*");}catch{o(null);}}),we=()=>Xe(fe,"iframe.credentials",E);var Ie=e=>typeof e!="object"||e===null?false:typeof Reflect.get(e,"postMessage")=="function",G=e=>{let t=Reflect.get(window,"webkit");if(typeof t=="object"&&t!==null){let r=Reflect.get(t,"messageHandlers");if(typeof r=="object"&&r!==null){let s=Reflect.get(r,e);if(Ie(s))return s}}let n=Reflect.get(window,e);return Ie(n)?n:null},xe=(e,t={})=>{let{pollIntervalMs:n=50,timeoutMs:r=1500}=t;return new Promise(s=>{let o=Date.now(),c=()=>{let p=G(e);if(p){s(p);return}if(Date.now()-o>=r){s(null);return}setTimeout(c,n);};c();})};var We=async(e,t,n,r)=>{let s=e.platform==="Android"?await xe(q,{pollIntervalMs:Re,timeoutMs:Te}):G(q);if(!s)return null;let o=F(n);return new Promise(c=>{let p=false,i=l=>{p||(p=true,d(),_(),clearTimeout(I),c(l));},d=a.on(o,l=>{let f=r(l);f&&i(f);}),_=a.on(n,l=>{let f=r(l);f&&i(f);}),I=setTimeout(()=>i(null),_e);try{s.postMessage({command:t,parameters:JSON.stringify({timestamp:Date.now(),endpoint:o})});}catch{i(null);}})},Pe=e=>We(e,me,R,E);Se();var V=null,w=null,ze=e=>{switch(e.type){case "native_app":return e.meetsMinVersion?Pe(e):Promise.resolve(null);case "iframe":return we();case "web":return Promise.resolve(null)}};var ke=e=>{V=e;},Oe=()=>w||(w=ze(Ce()).then(e=>(e&&ke(e),e)).finally(()=>{w=null;}),w);u()&&a.on(R,e=>{let t=E(e);t&&ke(t);});var J=async()=>u()?V?V.token:(await Oe())?.token??"":"",Ne=async()=>u()?(await Oe())?.token??"":"";var Ze=e=>JSON.stringify({"sdk-version":te,...e}),ve=async(e={})=>{let t=await J(),n=new Headers;t&&n.set(z,`Bearer ${t}`),n.set(Z,Ze(e.extend));let{projectId:r}=x();if(r&&n.set(ee,r),e.contentType&&n.set("Content-Type",e.contentType),e.accept&&n.set("Accept",e.accept),e.extra)for(let[s,o]of Object.entries(e.extra))n.set(s,o);return n};var et="feed-app-runtime-sdk:auth-required",$=e=>{u()&&window.dispatchEvent(new CustomEvent(et,{detail:e}));};var tt=e=>e instanceof DOMException&&e.name==="AbortError",nt=async e=>{let t=e.headers.get("content-type")??"";try{return t.includes("application/json")?await e.json():await e.text()}catch{return null}},rt=e=>typeof e=="object"&&e!==null,st=(e,t)=>{if(!rt(e)||typeof e.success!="boolean")return e;if(e.success)return e.data;let n=typeof e.code=="number"?e.code:t;throw D(n,e)},be=async(e,t)=>{let{apiBaseUrl:n}=x(),r=`${n}${e}`,s=await ve(t),o;try{o=await fetch(r,{method:t.method??"POST",headers:s,body:t.body,signal:t.signal});}catch(p){throw tt(p)?new S:new y("Failed to reach AI backend",p)}if(o.ok)return o;let c=await nt(o);throw D(o.status,c)},Q=async(e,t={})=>{try{return await be(e,t)}catch(n){if(n instanceof g&&!t.skipAuthRetry&&!t.signal?.aborted){if(!await Ne())throw $({reason:"refresh_failed",error:n}),n;try{return await be(e,{...t,skipAuthRetry:!0})}catch(s){throw s instanceof g&&$({reason:"retry_rejected",error:s}),s}}throw n}},T=async(e,t,n={})=>{let r=await Q(e,{...n,method:"POST",contentType:"application/json",body:JSON.stringify(t)});return st(await r.json(),r.status)};var b=async(e,t,n={})=>{let r=await Q(e,{...n,method:"POST",contentType:"application/json",accept:"text/event-stream",body:JSON.stringify(t)});if(!r.body)throw new y("Streaming response has no body");return r.body},Me=async(e,t,n={})=>await(await Q(e,{...n,method:"POST",contentType:"application/json",body:JSON.stringify(t)})).blob();var M=e=>{let{signal:t,headers:n,...r}=e;return {transport:{signal:t,extra:n},payload:r}},ot=(async e=>{let{transport:t,payload:n}=M(e);if(e.stream){let r=await b(U,n,t);return re(r)}return await T(U,n,t)}),it={create:ot},at={async generate(e){let{transport:t,payload:n}=M(e);return T(K,n,t)}},ct={speech:{async create(e){let{transport:t,payload:n}=M(e);return Me(X,n,t)}}},pt={generations:{async create(e){let{transport:t,payload:n}=M(e);return T(W,n,t)}}},ut={chat:{completions:it},images:at,audio:ct,video:pt};var dt=e=>{let{signal:t,headers:n,...r}=e;return {transport:{signal:t,extra:n},payload:r}},lt=(async e=>{let{transport:t,payload:n}=dt(e);if(e.stream){let r=await b(H,n,t);return se(r)}return await T(H,n,t)}),mt={messages:{create:lt}};
3
- export{S as AbortedError,m as AiError,g as AuthRequiredError,O as BadInputError,y as NetworkError,k as QuotaExceededError,P as RateLimitError,N as ServerError,mt as anthropic,qe as configureRuntime,ut as openai};
1
+ import {c as c$1,a,b as b$1}from'../chunk-IOHVFMVA.js';var M={version:"0.0.8"};var f="/v1/feed-app/runtime/ai",w=`${f}/chat/completions`,P=`${f}/messages`,D=`${f}/images/generations`,U=`${f}/audio/speech`,j=`${f}/video/generations`,G="Authorization",q="x-bty-extend",J="x-bty-app",V=M.version;var Z=/\r\n|\r|\n/,ee=(()=>{let e=new TextDecoder;return (t,r)=>e.decode(t,{stream:r})})();async function*L(e){let t=e.getReader(),r="",n="",o=[],a=()=>{if(o.length===0&&!n)return null;let m={event:n||"message",data:o.join(`
2
+ `)};return n="",o=[],m};try{for(;;){let{done:m,value:h}=await t.read();if(m){let i=a();i&&(yield i);return}for(r+=ee(h,!0);;){let i=Z.exec(r);if(!i)break;let p=r.slice(0,i.index);if(r=r.slice(i.index+i[0].length),p===""){let v=a();v&&(yield v);continue}if(p.startsWith(":"))continue;let y=p.indexOf(":"),I=y===-1?p:p.slice(0,y),l=y===-1?"":p.slice(y+1);l.startsWith(" ")&&(l=l.slice(1)),I==="event"?n=l:I==="data"&&o.push(l);}}}finally{t.releaseLock();}}async function*$(e){for await(let t of L(e)){if(t.data==="[DONE]")return;t.data&&(yield JSON.parse(t.data));}}async function*F(e){for await(let t of L(e))t.data&&(yield JSON.parse(t.data));}var te="https://reactus-api.betteryeah.com",Y=e=>{try{let t=e();if(typeof t=="string"&&t.length>0)return t}catch{}},re=()=>Y(()=>typeof __BTY_RUNTIME_API_BASE_URL__=="string"?__BTY_RUNTIME_API_BASE_URL__:void 0),ne=()=>Y(()=>typeof __BTY_RUNTIME_PROJECT_ID__=="string"?__BTY_RUNTIME_PROJECT_ID__:void 0),S={apiBaseUrl:(re()??te).replace(/\/+$/,""),projectId:ne()??""},oe=e=>{S={...S,...e,...e.apiBaseUrl?{apiBaseUrl:e.apiBaseUrl.replace(/\/+$/,"")}:{}};},A=()=>S;var s=class extends Error{status;code;body;constructor(t,r,n,o=null){super(t),this.name="AiError",this.code=r,this.status=n,this.body=o;}},c=class extends s{constructor(t="Auth required",r=null){super(t,"auth_required",401,r),this.name="AuthRequiredError";}},R=class extends s{constructor(t="Rate limit exceeded",r=null){super(t,"rate_limit",429,r),this.name="RateLimitError";}},C=class extends s{constructor(t="Quota exceeded",r=null){super(t,"quota_exceeded",402,r),this.name="QuotaExceededError";}},E=class extends s{constructor(t,r=400,n=null){super(t,"bad_input",r,n),this.name="BadInputError";}},x=class extends s{constructor(t,r=500,n=null){super(t,"server",r,n),this.name="ServerError";}},d=class extends s{constructor(t="Network error",r){super(t,"network",-1,r),this.name="NetworkError";}},g=class extends s{constructor(t="Request aborted"){super(t,"aborted",-1,null),this.name="AbortedError";}},K=e=>typeof e=="object"&&e!==null,se=(e,t)=>{if(typeof e=="string")return e||t;if(!K(e))return t;let r=e.message;if(typeof r=="string"&&r.length>0)return r;let n=e.error;if(typeof n=="string"&&n.length>0)return n;if(K(n)&&typeof n.message=="string"&&n.message.length>0)return n.message;let o=e.detail;return typeof o=="string"&&o.length>0?o:t},b=(e,t)=>{let r=se(t,`HTTP ${e}`);return e===401||e===403?new c(r,t):e===402?new C(r,t):e===429?new R(r,t):e>=400&&e<500?new E(r,e,t):e>=500?new x(r,e,t):new s(r,"unknown",e,t)};var ae=e=>JSON.stringify({"sdk-version":V,...e}),Q=async(e={})=>{let t=await b$1(),r=new Headers;t&&r.set(G,`Bearer ${t}`),r.set(q,ae(e.extend));let{projectId:n}=A();if(n&&r.set(J,n),e.contentType&&r.set("Content-Type",e.contentType),e.accept&&r.set("Accept",e.accept),e.extra)for(let[o,a]of Object.entries(e.extra))r.set(o,a);return r};var ie="feed-app-runtime-sdk:auth-required",k=e=>{a()&&window.dispatchEvent(new CustomEvent(ie,{detail:e}));};var ce=e=>e instanceof DOMException&&e.name==="AbortError",pe=async e=>{let t=e.headers.get("content-type")??"";try{return t.includes("application/json")?await e.json():await e.text()}catch{return null}},de=e=>typeof e=="object"&&e!==null,ue=(e,t)=>{if(!de(e)||typeof e.success!="boolean")return e;if(e.success)return e.data;let r=typeof e.code=="number"?e.code:t;throw b(r,e)},W=async(e,t)=>{let{apiBaseUrl:r}=A(),n=`${r}${e}`,o=await Q(t),a;try{a=await fetch(n,{method:t.method??"POST",headers:o,body:t.body,signal:t.signal});}catch(h){throw ce(h)?new g:new d("Failed to reach AI backend",h)}if(a.ok)return a;let m=await pe(a);throw b(a.status,m)},O=async(e,t={})=>{try{return await W(e,t)}catch(r){if(r instanceof c&&!t.skipAuthRetry&&!t.signal?.aborted){if(!await c$1())throw k({reason:"refresh_failed",error:r}),r;try{return await W(e,{...t,skipAuthRetry:!0})}catch(o){throw o instanceof c&&k({reason:"retry_rejected",error:o}),o}}throw r}},u=async(e,t,r={})=>{let n=await O(e,{...r,method:"POST",contentType:"application/json",body:JSON.stringify(t)});return ue(await n.json(),n.status)};var _=async(e,t,r={})=>{let n=await O(e,{...r,method:"POST",contentType:"application/json",accept:"text/event-stream",body:JSON.stringify(t)});if(!n.body)throw new d("Streaming response has no body");return n.body},X=async(e,t,r={})=>await(await O(e,{...r,method:"POST",contentType:"application/json",body:JSON.stringify(t)})).blob();var T=e=>{let{signal:t,headers:r,...n}=e;return {transport:{signal:t,extra:r},payload:n}},me=(async e=>{let{transport:t,payload:r}=T(e);if(e.stream){let n=await _(w,r,t);return $(n)}return await u(w,r,t)}),le={create:me},fe={async generate(e){let{transport:t,payload:r}=T(e);return u(D,r,t)}},ge={speech:{async create(e){let{transport:t,payload:r}=T(e);return X(U,r,t)}}},he={generations:{async create(e){let{transport:t,payload:r}=T(e);return u(j,r,t)}}},ye={chat:{completions:le},images:fe,audio:ge,video:he};var Ae=e=>{let{signal:t,headers:r,...n}=e;return {transport:{signal:t,extra:r},payload:n}},Re=(async e=>{let{transport:t,payload:r}=Ae(e);if(e.stream){let n=await _(P,r,t);return F(n)}return await u(P,r,t)}),Ce={messages:{create:Re}};
3
+ export{g as AbortedError,s as AiError,c as AuthRequiredError,E as BadInputError,d as NetworkError,C as QuotaExceededError,R as RateLimitError,x as ServerError,Ce as anthropic,oe as configureRuntime,ye as openai};
@@ -0,0 +1 @@
1
+ var i=()=>typeof window<"u"&&typeof document<"u";var se="hostRuntime",g=class{listeners=new Map;on(n,t){let r=this.listeners.get(n),s=r??new Set;return r||this.listeners.set(n,s),s.add(t),()=>{s.delete(t),s.size===0&&this.listeners.delete(n);}}emit(n,t){let r=this.listeners.get(n);if(r)for(let s of r)s(t);}},o=new g,y=0,N=e=>(y+=1,`${e}.${y}`),k=false,v=()=>{if(!i()||k)return;k=true,Reflect.set(window,se,{receiveMessage(n){if(!n)return;let t=n.endpoint;t&&o.emit(t,n.data??n);}});};var _=e=>typeof e=="object"&&e!==null,f=(e,n)=>{if(e)for(let t of n){let r=e[t];if(typeof r=="string"&&r.length>0)return r}},oe=(e,n)=>{if(e)for(let t of n){let r=e[t];if(typeof r=="string"&&r.length>0||typeof r=="number"&&Number.isFinite(r))return r}},a=e=>{if(!_(e))return null;let n=_(e.credentials)?e.credentials:void 0,t=_(e.user)?e.user:void 0,r=f(e,["uid","userId","id"])??f(n,["uid","userId","id"])??f(t,["uid","userId","id"]),s=f(e,["token","authToken"])??f(n,["token","authToken"]);return !r||!s?null:{uid:r,token:s}},m=e=>{if(!_(e))return null;let n=_(e.data)?e.data:e,t=oe(n,["userId","id","uid"]);if(t===void 0)return null;let r=f(n,["username","nickname","nickName","name"]),s=f(n,["nickname","nickName","username"]);return {...n,userId:t,...r?{username:r}:{},...s?{nickname:s}:{}}};var O="HostApp",A="hostListener";var U="processUserCredentials",P="processUserInfo",x="user.getCredentials",L="user.getUserInfo",d="user.credentials",R="user.info",h="user-credentials-request",b="user-credentials-response",F="user-info-request",H="user-info-response",D={iOS:[1,6,7],Android:[1,1,8]},q=3e3,B=500,V=50,j=1500;var ie=e=>typeof e!="object"||e===null?false:typeof Reflect.get(e,"type")=="string",G=false,Q=()=>{!i()||G||(G=true,v(),Reflect.set(window,U,e=>{a(e)&&o.emit(d,e);}),Reflect.set(window,P,e=>{m(e)&&o.emit(R,e);}),window.addEventListener("message",e=>{let n=e.data;if(ie(n))switch(n.type){case b:o.emit("iframe.credentials",n);break;case H:o.emit("iframe.userinfo",n);break}}));};var ue=new RegExp(`${O}\\/(\\d+\\.\\d+\\.\\d+)\\/(\\d+)\\/(iOS|Android)`),le=e=>{let n=e.split(".").map(t=>Number.parseInt(t,10));return [n[0]??0,n[1]??0,n[2]??0]},ae=(e,n)=>{for(let t=0;t<3;t++){if(e[t]>n[t])return true;if(e[t]<n[t])return false}return true},ce=e=>{let n=e.match(ue);if(!n)return null;let[,t,r,s]=n;if(!t||!r||s!=="iOS"&&s!=="Android")return null;let u=ae(le(t),D[s]);return {type:"native_app",platform:s,appVersion:t,buildNumber:r,meetsMinVersion:u}},w=()=>{if(!i())return {type:"web",meetsMinVersion:false};let e=ce(navigator.userAgent??"");return e||(window.parent!==window?{type:"iframe",meetsMinVersion:false}:{type:"web",meetsMinVersion:false})};var $=(e,n,t)=>new Promise(r=>{let s=false,u=l=>{s||(s=true,p(),clearTimeout(c),r(l));},p=o.on(n,l=>{let T=t(l);T&&u(T);}),c=setTimeout(()=>u(null),B);try{window.parent.postMessage({type:e,timestamp:Date.now()},"*");}catch{u(null);}}),K=()=>$(h,"iframe.credentials",a),z=()=>$(F,"iframe.userinfo",m);var J=e=>typeof e!="object"||e===null?false:typeof Reflect.get(e,"postMessage")=="function",M=e=>{let n=Reflect.get(window,"webkit");if(typeof n=="object"&&n!==null){let r=Reflect.get(n,"messageHandlers");if(typeof r=="object"&&r!==null){let s=Reflect.get(r,e);if(J(s))return s}}let t=Reflect.get(window,e);return J(t)?t:null},X=(e,n={})=>{let{pollIntervalMs:t=50,timeoutMs:r=1500}=n;return new Promise(s=>{let u=Date.now(),p=()=>{let c=M(e);if(c){s(c);return}if(Date.now()-u>=r){s(null);return}setTimeout(p,t);};p();})};var W=async(e,n,t,r)=>{let s=e.platform==="Android"?await X(A,{pollIntervalMs:V,timeoutMs:j}):M(A);if(!s)return null;let u=N(t);return new Promise(p=>{let c=false,l=E=>{c||(c=true,T(),te(),clearTimeout(re),p(E));},T=o.on(u,E=>{let I=r(E);I&&l(I);}),te=o.on(t,E=>{let I=r(E);I&&l(I);}),re=setTimeout(()=>l(null),q);try{s.postMessage({command:n,parameters:JSON.stringify({timestamp:Date.now(),endpoint:u})});}catch{l(null);}})},Y=e=>W(e,x,d,a),Z=e=>W(e,L,R,m);Q();var C=null,S=null,fe=e=>{switch(e.type){case "native_app":return e.meetsMinVersion?Y(e):Promise.resolve(null);case "iframe":return K();case "web":return Promise.resolve(null)}},pe=e=>{switch(e.type){case "native_app":return e.meetsMinVersion?Z(e):Promise.resolve(null);case "iframe":return z();case "web":return Promise.resolve(null)}},ee=e=>{C=e;},ne=()=>S||(S=fe(w()).then(e=>(e&&ee(e),e)).finally(()=>{S=null;}),S);i()&&o.on(d,e=>{let n=a(e);n&&ee(n);});var me=async()=>i()?C?C.token:(await ne())?.token??"":"",$e=async()=>i()?(await ne())?.token??"":"",de=async()=>i()?pe(w()):null;export{i as a,me as b,$e as c,de as d};
@@ -1 +1 @@
1
- import {useState,useCallback,useEffect}from'react';var l=()=>typeof window<"u"&&typeof document<"u";var ue="hostRuntime",N=class{listeners=new Map;on(t,r){let n=this.listeners.get(t),s=n??new Set;return n||this.listeners.set(t,s),s.add(r),()=>{s.delete(r),s.size===0&&this.listeners.delete(t);}}emit(t,r){let n=this.listeners.get(t);if(n)for(let s of n)s(r);}},i=new N,C=0,U=e=>(C+=1,`${e}.${C}`),M=false,h=()=>{if(!l()||M)return;M=true,Reflect.set(window,ue,{receiveMessage(t){if(!t)return;let r=t.endpoint;r&&i.emit(r,t.data??t);}});};var _=e=>typeof e=="object"&&e!==null,p=(e,t)=>{if(e)for(let r of t){let n=e[r];if(typeof n=="string"&&n.length>0)return n}},le=(e,t)=>{if(e)for(let r of t){let n=e[r];if(typeof n=="string"&&n.length>0||typeof n=="number"&&Number.isFinite(n))return n}},f=e=>{if(!_(e))return null;let t=_(e.credentials)?e.credentials:void 0,r=_(e.user)?e.user:void 0,n=p(e,["uid","userId","id"])??p(t,["uid","userId","id"])??p(r,["uid","userId","id"]),s=p(e,["token","authToken"])??p(t,["token","authToken"]);return !n||!s?null:{uid:n,token:s}},m=e=>{if(!_(e))return null;let t=_(e.data)?e.data:e,r=le(t,["userId","id","uid"]);if(r===void 0)return null;let n=p(t,["username","nickname","nickName","name"]),s=p(t,["nickname","nickName","username"]);return {...t,userId:r,...n?{username:n}:{},...s?{nickname:s}:{}}};var O="HostApp",k="hostListener";var x="processUserCredentials",P="processUserInfo",L="user.getCredentials",b="user.getUserInfo",d="user.credentials",g="user.info",F="user-credentials-request",H="user-credentials-response",D="user-info-request",q="user-info-response",B={iOS:[1,6,7],Android:[1,1,8]},V=3e3,j=500,G=50,Q=1500;var ae=e=>typeof e!="object"||e===null?false:typeof Reflect.get(e,"type")=="string",$=false,K=()=>{!l()||$||($=true,h(),Reflect.set(window,x,e=>{f(e)&&i.emit(d,e);}),Reflect.set(window,P,e=>{m(e)&&i.emit(g,e);}),window.addEventListener("message",e=>{let t=e.data;if(ae(t))switch(t.type){case H:i.emit("iframe.credentials",t);break;case q:i.emit("iframe.userinfo",t);break}}));};var fe=new RegExp(`${O}\\/(\\d+\\.\\d+\\.\\d+)\\/(\\d+)\\/(iOS|Android)`),ce=e=>{let t=e.split(".").map(r=>Number.parseInt(r,10));return [t[0]??0,t[1]??0,t[2]??0]},pe=(e,t)=>{for(let r=0;r<3;r++){if(e[r]>t[r])return true;if(e[r]<t[r])return false}return true},me=e=>{let t=e.match(fe);if(!t)return null;let[,r,n,s]=t;if(!r||!n||s!=="iOS"&&s!=="Android")return null;let o=pe(ce(r),B[s]);return {type:"native_app",platform:s,appVersion:r,buildNumber:n,meetsMinVersion:o}},w=()=>{if(!l())return {type:"web",meetsMinVersion:false};let e=me(navigator.userAgent??"");return e||(window.parent!==window?{type:"iframe",meetsMinVersion:false}:{type:"web",meetsMinVersion:false})};var z=(e,t,r)=>new Promise(n=>{let s=false,o=a=>{s||(s=true,u(),clearTimeout(c),n(a));},u=i.on(t,a=>{let S=r(a);S&&o(S);}),c=setTimeout(()=>o(null),j);try{window.parent.postMessage({type:e,timestamp:Date.now()},"*");}catch{o(null);}}),J=()=>z(F,"iframe.credentials",f),X=()=>z(D,"iframe.userinfo",m);var W=e=>typeof e!="object"||e===null?false:typeof Reflect.get(e,"postMessage")=="function",v=e=>{let t=Reflect.get(window,"webkit");if(typeof t=="object"&&t!==null){let n=Reflect.get(t,"messageHandlers");if(typeof n=="object"&&n!==null){let s=Reflect.get(n,e);if(W(s))return s}}let r=Reflect.get(window,e);return W(r)?r:null},Y=(e,t={})=>{let{pollIntervalMs:r=50,timeoutMs:n=1500}=t;return new Promise(s=>{let o=Date.now(),u=()=>{let c=v(e);if(c){s(c);return}if(Date.now()-o>=n){s(null);return}setTimeout(u,r);};u();})};var Z=async(e,t,r,n)=>{let s=e.platform==="Android"?await Y(k,{pollIntervalMs:G,timeoutMs:Q}):v(k);if(!s)return null;let o=U(r);return new Promise(u=>{let c=false,a=E=>{c||(c=true,S(),oe(),clearTimeout(ie),u(E));},S=i.on(o,E=>{let I=n(E);I&&a(I);}),oe=i.on(r,E=>{let I=n(E);I&&a(I);}),ie=setTimeout(()=>a(null),V);try{s.postMessage({command:t,parameters:JSON.stringify({timestamp:Date.now(),endpoint:o})});}catch{a(null);}})},ee=e=>Z(e,L,d,f),te=e=>Z(e,b,g,m);K();var y=null,T=null,de=e=>{switch(e.type){case "native_app":return e.meetsMinVersion?ee(e):Promise.resolve(null);case "iframe":return J();case "web":return Promise.resolve(null)}},Ee=e=>{switch(e.type){case "native_app":return e.meetsMinVersion?te(e):Promise.resolve(null);case "iframe":return X();case "web":return Promise.resolve(null)}},ne=e=>{y=e;},Ie=()=>T||(T=de(w()).then(e=>(e&&ne(e),e)).finally(()=>{T=null;}),T);l()&&i.on(d,e=>{let t=f(e);t&&ne(t);});var R=async()=>l()?y?y.token:(await Ie())?.token??"":"";var A=async()=>l()?Ee(w()):null;var Se=()=>{let[e,t]=useState(""),[r,n]=useState(true),s=useCallback(()=>{n(true),R().then(o=>{t(o),n(false);});},[]);return useEffect(()=>{let o=true;return R().then(u=>{o&&(t(u),n(false));}),()=>{o=false;}},[]),{token:e,loading:r,refetch:s}};var Ae=()=>{let[e,t]=useState(null),[r,n]=useState(true),s=useCallback(()=>{n(true),A().then(o=>{t(o),n(false);});},[]);return useEffect(()=>{let o=true;return A().then(u=>{o&&(t(u),n(false));}),()=>{o=false;}},[]),{user:e,loading:r,refetch:s}};export{Se as useAuthToken,Ae as useUserInfo};
1
+ import {b,d as d$1}from'../chunk-IOHVFMVA.js';import {useState,useCallback,useEffect}from'react';var U=()=>{let[s,o]=useState(""),[r,t]=useState(true),n=useCallback(()=>{t(true),b().then(e=>{o(e),t(false);});},[]);return useEffect(()=>{let e=true;return b().then(u=>{e&&(o(u),t(false));}),()=>{e=false;}},[]),{token:s,loading:r,refetch:n}};var d=()=>{let[s,o]=useState(null),[r,t]=useState(true),n=useCallback(()=>{t(true),d$1().then(e=>{o(e),t(false);});},[]);return useEffect(()=>{let e=true;return d$1().then(u=>{e&&(o(u),t(false));}),()=>{e=false;}},[]),{user:s,loading:r,refetch:n}};export{U as useAuthToken,d as useUserInfo};
@@ -1 +1 @@
1
- var u=()=>typeof window<"u"&&typeof document<"u";var re="hostRuntime",g=class{listeners=new Map;on(n,t){let r=this.listeners.get(n),s=r??new Set;return r||this.listeners.set(n,s),s.add(t),()=>{s.delete(t),s.size===0&&this.listeners.delete(n);}}emit(n,t){let r=this.listeners.get(n);if(r)for(let s of r)s(t);}},o=new g,y=0,N=e=>(y+=1,`${e}.${y}`),k=false,v=()=>{if(!u()||k)return;k=true,Reflect.set(window,re,{receiveMessage(n){if(!n)return;let t=n.endpoint;t&&o.emit(t,n.data??n);}});};var _=e=>typeof e=="object"&&e!==null,f=(e,n)=>{if(e)for(let t of n){let r=e[t];if(typeof r=="string"&&r.length>0)return r}},se=(e,n)=>{if(e)for(let t of n){let r=e[t];if(typeof r=="string"&&r.length>0||typeof r=="number"&&Number.isFinite(r))return r}},a=e=>{if(!_(e))return null;let n=_(e.credentials)?e.credentials:void 0,t=_(e.user)?e.user:void 0,r=f(e,["uid","userId","id"])??f(n,["uid","userId","id"])??f(t,["uid","userId","id"]),s=f(e,["token","authToken"])??f(n,["token","authToken"]);return !r||!s?null:{uid:r,token:s}},m=e=>{if(!_(e))return null;let n=_(e.data)?e.data:e,t=se(n,["userId","id","uid"]);if(t===void 0)return null;let r=f(n,["username","nickname","nickName","name"]),s=f(n,["nickname","nickName","username"]);return {...n,userId:t,...r?{username:r}:{},...s?{nickname:s}:{}}};var O="HostApp",A="hostListener";var U="processUserCredentials",P="processUserInfo",x="user.getCredentials",L="user.getUserInfo",d="user.credentials",R="user.info",h="user-credentials-request",b="user-credentials-response",F="user-info-request",H="user-info-response",D={iOS:[1,6,7],Android:[1,1,8]},q=3e3,B=500,V=50,j=1500;var oe=e=>typeof e!="object"||e===null?false:typeof Reflect.get(e,"type")=="string",G=false,Q=()=>{!u()||G||(G=true,v(),Reflect.set(window,U,e=>{a(e)&&o.emit(d,e);}),Reflect.set(window,P,e=>{m(e)&&o.emit(R,e);}),window.addEventListener("message",e=>{let n=e.data;if(oe(n))switch(n.type){case b:o.emit("iframe.credentials",n);break;case H:o.emit("iframe.userinfo",n);break}}));};var ie=new RegExp(`${O}\\/(\\d+\\.\\d+\\.\\d+)\\/(\\d+)\\/(iOS|Android)`),ue=e=>{let n=e.split(".").map(t=>Number.parseInt(t,10));return [n[0]??0,n[1]??0,n[2]??0]},le=(e,n)=>{for(let t=0;t<3;t++){if(e[t]>n[t])return true;if(e[t]<n[t])return false}return true},ae=e=>{let n=e.match(ie);if(!n)return null;let[,t,r,s]=n;if(!t||!r||s!=="iOS"&&s!=="Android")return null;let i=le(ue(t),D[s]);return {type:"native_app",platform:s,appVersion:t,buildNumber:r,meetsMinVersion:i}},w=()=>{if(!u())return {type:"web",meetsMinVersion:false};let e=ae(navigator.userAgent??"");return e||(window.parent!==window?{type:"iframe",meetsMinVersion:false}:{type:"web",meetsMinVersion:false})};var $=(e,n,t)=>new Promise(r=>{let s=false,i=l=>{s||(s=true,p(),clearTimeout(c),r(l));},p=o.on(n,l=>{let T=t(l);T&&i(T);}),c=setTimeout(()=>i(null),B);try{window.parent.postMessage({type:e,timestamp:Date.now()},"*");}catch{i(null);}}),K=()=>$(h,"iframe.credentials",a),z=()=>$(F,"iframe.userinfo",m);var J=e=>typeof e!="object"||e===null?false:typeof Reflect.get(e,"postMessage")=="function",M=e=>{let n=Reflect.get(window,"webkit");if(typeof n=="object"&&n!==null){let r=Reflect.get(n,"messageHandlers");if(typeof r=="object"&&r!==null){let s=Reflect.get(r,e);if(J(s))return s}}let t=Reflect.get(window,e);return J(t)?t:null},X=(e,n={})=>{let{pollIntervalMs:t=50,timeoutMs:r=1500}=n;return new Promise(s=>{let i=Date.now(),p=()=>{let c=M(e);if(c){s(c);return}if(Date.now()-i>=r){s(null);return}setTimeout(p,t);};p();})};var W=async(e,n,t,r)=>{let s=e.platform==="Android"?await X(A,{pollIntervalMs:V,timeoutMs:j}):M(A);if(!s)return null;let i=N(t);return new Promise(p=>{let c=false,l=E=>{c||(c=true,T(),ne(),clearTimeout(te),p(E));},T=o.on(i,E=>{let I=r(E);I&&l(I);}),ne=o.on(t,E=>{let I=r(E);I&&l(I);}),te=setTimeout(()=>l(null),q);try{s.postMessage({command:n,parameters:JSON.stringify({timestamp:Date.now(),endpoint:i})});}catch{l(null);}})},Y=e=>W(e,x,d,a),Z=e=>W(e,L,R,m);Q();var C=null,S=null,ce=e=>{switch(e.type){case "native_app":return e.meetsMinVersion?Y(e):Promise.resolve(null);case "iframe":return K();case "web":return Promise.resolve(null)}},fe=e=>{switch(e.type){case "native_app":return e.meetsMinVersion?Z(e):Promise.resolve(null);case "iframe":return z();case "web":return Promise.resolve(null)}},ee=e=>{C=e;},pe=()=>S||(S=ce(w()).then(e=>(e&&ee(e),e)).finally(()=>{S=null;}),S);u()&&o.on(d,e=>{let n=a(e);n&&ee(n);});var me=async()=>u()?C?C.token:(await pe())?.token??"":"";var de=async()=>u()?fe(w()):null;export{me as getAuthTokenAsync,de as getUserInfoAsync};
1
+ export{b as getAuthTokenAsync,d as getUserInfoAsync}from'../chunk-IOHVFMVA.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bty/feed_app-runtime-sdk",
3
- "version": "0.0.7",
3
+ "version": "0.0.8",
4
4
  "type": "module",
5
5
  "browser": true,
6
6
  "description": "Runtime SDK for feed-app template: auth / AI capabilities, multi-environment bridge (native App / iframe / web).",