@frak-labs/frame-connector 0.2.0-beta.eb3cff34 → 0.2.0-beta.f2f8cb0c

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.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e={parseError:-32700,invalidRequest:-32600,methodNotFound:-32601,invalidParams:-32602,internalError:-32603,serverError:-32e3,clientNotConnected:-32001,configError:-32002,corruptedResponse:-32003,clientAborted:-32004,walletNotConnected:-32005,serverErrorForInteractionDelegation:-32006,userRejected:-32007};var t=class extends Error{constructor(e,t,n){super(t),this.code=e,this.data=n}toJSON(){return{code:this.code,message:this.message,data:this.data}}},n=class extends t{constructor(t,n){super(e.methodNotFound,t,{method:n})}},r=class extends t{constructor(t){super(e.internalError,t)}},i=class extends t{constructor(){super(e.clientNotConnected,`Client not found`)}},a=class{_promise;_resolve;_reject;constructor(){this._promise=new Promise((e,t)=>{this._resolve=e,this._reject=t})}get promise(){return this._promise}resolve=e=>{this._resolve?.(e)};reject=e=>{this._reject?.(e)}};function o(e){let{emittingTransport:n,listeningTransport:r,targetOrigin:i,middleware:o=[],lifecycleHandlers:s}=e,c=new Map;function l(e){return typeof e!=`object`||!e?!1:`clientLifecycle`in e||`iframeLifecycle`in e}function u(e){return typeof e!=`object`||!e?!1:`id`in e&&`topic`in e&&`data`in e}async function d(e){try{`clientLifecycle`in e&&s?.clientLifecycle?await s.clientLifecycle(e,{origin:i,source:null}):`iframeLifecycle`in e&&s?.iframeLifecycle&&await s.iframeLifecycle(e,{origin:i,source:null})}catch(e){console.error(`[RPC Client] Lifecycle handler error:`,e)}}async function f(e){let t={origin:i,source:null};for(let n of o)n.onRequest&&await n.onRequest(e,t);return e}async function p(e,t){let n={origin:i,source:null},r=t;for(let t of o)t.onResponse&&(r=await t.onResponse(e,r,n));return r}async function m(e){try{let t=new URL(e.origin).origin.toLowerCase(),n=new URL(i).origin.toLowerCase();if(t!==n){console.log(`Not expected origin`,t,n);return}}catch(e){console.error(`[RPC Client] Invalid origin`,e);return}if(l(e.data)){await d(e.data);return}if(!u(e.data))return;let t;try{let n=e.data.data,r=n instanceof Uint8Array||ArrayBuffer.isView(n)?{result:n}:n;t=await p(e.data,r)}catch(e){console.error(`[RPC Client] Middleware error on response:`,e);return}let n=c.get(e.data.id);n&&n(t)}async function h(e){let t=e;try{t=await f(e)}catch(e){throw console.error(`[RPC Client] Middleware error on request:`,e),e}n.postMessage(t,i)}function g(e){n.postMessage(e,i)}function _(){return`${Date.now()}-${Math.random().toString(36).substring(2,9)}`}r.addEventListener(`message`,m);function v(e){let n=_(),r=new a;return c.set(n,e=>{e.error?r.reject(new t(e.error.code,e.error.message,e.error.data)):r.resolve(e.result),c.delete(n)}),h({id:n,topic:e.method,data:{method:e.method,params:e.params}}).catch(e=>{c.delete(n),r.reject(e)}),r.promise}function y(e,t){let n=_();return c.set(n,e=>{e.error?(console.error(`[RPC Client] Listener error:`,e.error),c.delete(n)):t(e.result)}),h({id:n,topic:e.method,data:{method:e.method,params:e.params}}).catch(e=>{console.error(`[RPC Client] Failed to send listener request:`,e),c.delete(n)}),()=>{c.delete(n)}}function b(){r.removeEventListener(`message`,m),c.clear()}return{request:v,listen:y,sendLifecycle:g,cleanup:b}}function s(n){let{transport:r,allowedOrigins:i,middleware:a=[],lifecycleHandlers:o}=n,s=Array.isArray(i)?i:[i],c=new Map,l=new Map;function u(e){try{if(s.includes(`*`))return!0;let t=new URL(e).origin.toLowerCase();return s.some(e=>t===new URL(e).origin.toLowerCase())}catch(e){return console.error(`[RPC Listener] Invalid origin`,e),!1}}function d(e){return typeof e!=`object`||!e?!1:`clientLifecycle`in e||`iframeLifecycle`in e}function f(e){return typeof e!=`object`||!e?!1:`id`in e&&`topic`in e&&`data`in e}async function p(e,t){let n=t;for(let t of a)t.onRequest&&(n=await t.onRequest(e,n));return n}async function m(e,t,n){let r=t;for(let t of a)t.onResponse&&(r=await t.onResponse(e,r,n));return r}function h(e,t,n,r,i){if(!e){console.error(`[RPC Listener] No source to send response to`);return}let a={id:n,topic:r,data:!i.error&&(i.result instanceof Uint8Array||ArrayBuffer.isView(i.result))?i.result:i};`postMessage`in e&&typeof e.postMessage==`function`&&e.postMessage(a,{targetOrigin:t})}function g(n,r,i,a,o){h(n,r,i,a,{error:o instanceof t?o.toJSON():{code:e.internalError,message:o.message}})}async function _(e,t){try{`clientLifecycle`in e&&o?.clientLifecycle?await o.clientLifecycle(e,t):`iframeLifecycle`in e&&o?.iframeLifecycle&&await o.iframeLifecycle(e,t)}catch(e){console.error(`[RPC Listener] Lifecycle handler error:`,e)}}async function v(e){if(!u(e.origin)){console.warn(`[RPC Listener] Message from disallowed origin:`,e.origin);return}let t={origin:e.origin,source:e.source};if(d(e.data)){await _(e.data,t);return}if(!f(e.data))return;let n;try{n=await p(e.data,t)}catch(t){g(e.source,e.origin,e.data.id,e.data.topic,t instanceof Error?t:Error(String(t)));return}try{await y(e,n)}catch(t){g(e.source,e.origin,e.data.id,e.data.topic,t instanceof Error?t:Error(String(t)))}}async function y(n,r){let{id:i,topic:a,data:o}=n.data,s=o.params??o,u=c.get(a);if(u){let e=await u(s,r),t=await m(n.data,{result:e},r);h(n.source,n.origin,i,a,t);return}let d=l.get(a);if(d){await d(s,async e=>{let t;try{t=await m(n.data,{result:e},r)}catch(e){console.error(`[RPC Listener] Middleware failed on stream chunk:`,e);return}h(n.source,n.origin,i,a,t)},r);return}console.error(`[RPC Listener] No handler found for method:`,{topic:a,handlers:l.keys(),promiseHandler:c.keys()}),g(n.source,n.origin,i,a,new t(e.methodNotFound,`Method not found: ${a}`))}r.addEventListener(`message`,v);function b(e,t){c.set(e,t)}function x(e,t){l.set(e,t)}function S(e){c.delete(e),l.delete(e)}function C(){r.removeEventListener(`message`,v),c.clear(),l.clear()}return{handle:b,handleStream:x,unregister:S,cleanup:C}}function c(e){return new TextEncoder().encode(JSON.stringify(e))}function l(e){try{return JSON.parse(new TextDecoder().decode(e))}catch{return null}}exports.ClientNotFound=i,exports.Deferred=a,exports.FrakRpcError=t,exports.InternalError=r,exports.MethodNotFoundError=n,exports.RpcErrorCodes=e,exports.createRpcClient=o,exports.createRpcListener=s,exports.jsonDecode=l,exports.jsonEncode=c;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e={parseError:-32700,invalidRequest:-32600,methodNotFound:-32601,invalidParams:-32602,internalError:-32603,serverError:-32e3,clientNotConnected:-32001,configError:-32002,corruptedResponse:-32003,clientAborted:-32004,walletNotConnected:-32005,serverErrorForInteractionDelegation:-32006,userRejected:-32007};var t=class extends Error{code;data;constructor(e,t,n){super(t),this.code=e,this.data=n}toJSON(){return{code:this.code,message:this.message,data:this.data}}},n=class extends t{constructor(t,n){super(e.methodNotFound,t,{method:n})}},r=class extends t{constructor(t){super(e.internalError,t)}},i=class extends t{constructor(){super(e.clientNotConnected,`Client not found`)}},a=class{_promise;_resolve;_reject;constructor(){this._promise=new Promise((e,t)=>{this._resolve=e,this._reject=t})}get promise(){return this._promise}resolve=e=>{this._resolve?.(e)};reject=e=>{this._reject?.(e)}};function o(e){let{emittingTransport:n,listeningTransport:r,targetOrigin:i,middleware:o=[],lifecycleHandlers:s}=e,c=new Map;function l(e){return typeof e!=`object`||!e?!1:`clientLifecycle`in e||`iframeLifecycle`in e}function u(e){return typeof e!=`object`||!e?!1:`id`in e&&`topic`in e&&`data`in e}async function d(e){try{`clientLifecycle`in e&&s?.clientLifecycle?await s.clientLifecycle(e,{origin:i,source:null}):`iframeLifecycle`in e&&s?.iframeLifecycle&&await s.iframeLifecycle(e,{origin:i,source:null})}catch(e){console.error(`[RPC Client] Lifecycle handler error:`,e)}}async function f(e){let t={origin:i,source:null};for(let n of o)n.onRequest&&await n.onRequest(e,t);return e}async function p(e,t){let n={origin:i,source:null},r=t;for(let t of o)t.onResponse&&(r=await t.onResponse(e,r,n));return r}async function m(e){try{let t=new URL(e.origin).origin.toLowerCase(),n=new URL(i).origin.toLowerCase();if(t!==n){console.log(`Not expected origin`,t,n);return}}catch(e){console.error(`[RPC Client] Invalid origin`,e);return}if(l(e.data)){await d(e.data);return}if(!u(e.data))return;let t;try{let n=e.data.data,r=n instanceof Uint8Array||ArrayBuffer.isView(n)?{result:n}:n;t=await p(e.data,r)}catch(e){console.error(`[RPC Client] Middleware error on response:`,e);return}let n=c.get(e.data.id);n&&n(t)}async function h(e){let t=e;try{t=await f(e)}catch(e){throw console.error(`[RPC Client] Middleware error on request:`,e),e}n.postMessage(t,i)}function g(e){n.postMessage(e,i)}function _(){return`${Date.now()}-${Math.random().toString(36).substring(2,9)}`}r.addEventListener(`message`,m);function v(e){let n=_(),r=new a;return c.set(n,e=>{e.error?r.reject(new t(e.error.code,e.error.message,e.error.data)):r.resolve(e.result),c.delete(n)}),h({id:n,topic:e.method,data:{method:e.method,params:e.params}}).catch(e=>{c.delete(n),r.reject(e)}),r.promise}function y(e,t){let n=_();return c.set(n,e=>{e.error?(console.error(`[RPC Client] Listener error:`,e.error),c.delete(n)):t(e.result)}),h({id:n,topic:e.method,data:{method:e.method,params:e.params}}).catch(e=>{console.error(`[RPC Client] Failed to send listener request:`,e),c.delete(n)}),()=>{c.delete(n)}}function b(){r.removeEventListener(`message`,m),c.clear()}return{request:v,listen:y,sendLifecycle:g,cleanup:b}}function s(n){let{transport:r,allowedOrigins:i,middleware:a=[],lifecycleHandlers:o}=n,s=Array.isArray(i)?i:[i],c=new Map,l=new Map;function u(e){try{if(s.includes(`*`))return!0;let t=new URL(e).origin.toLowerCase();return s.some(e=>t===new URL(e).origin.toLowerCase())}catch(e){return console.error(`[RPC Listener] Invalid origin`,e),!1}}function d(e){return typeof e!=`object`||!e?!1:`clientLifecycle`in e||`iframeLifecycle`in e}function f(e){return typeof e!=`object`||!e?!1:`id`in e&&`topic`in e&&`data`in e}async function p(e,t){let n=t;for(let t of a)t.onRequest&&(n=await t.onRequest(e,n));return n}async function m(e,t,n){let r=t;for(let t of a)t.onResponse&&(r=await t.onResponse(e,r,n));return r}function h(e,t,n,r,i){if(!e){console.error(`[RPC Listener] No source to send response to`);return}let a={id:n,topic:r,data:!i.error&&(i.result instanceof Uint8Array||ArrayBuffer.isView(i.result))?i.result:i};`postMessage`in e&&typeof e.postMessage==`function`&&e.postMessage(a,{targetOrigin:t})}function g(n,r,i,a,o){h(n,r,i,a,{error:o instanceof t?o.toJSON():{code:e.internalError,message:o.message}})}async function _(e,t){try{`clientLifecycle`in e&&o?.clientLifecycle?await o.clientLifecycle(e,t):`iframeLifecycle`in e&&o?.iframeLifecycle&&await o.iframeLifecycle(e,t)}catch(e){console.error(`[RPC Listener] Lifecycle handler error:`,e)}}async function v(e){if(!u(e.origin)){console.warn(`[RPC Listener] Message from disallowed origin:`,e.origin);return}let t={origin:e.origin,source:e.source};if(d(e.data)){await _(e.data,t);return}if(!f(e.data))return;let n;try{n=await p(e.data,t)}catch(t){g(e.source,e.origin,e.data.id,e.data.topic,t instanceof Error?t:Error(String(t)));return}try{await y(e,n)}catch(t){g(e.source,e.origin,e.data.id,e.data.topic,t instanceof Error?t:Error(String(t)))}}async function y(n,r){let{id:i,topic:a,data:o}=n.data,s=o.params??o,u=c.get(a);if(u){let e=await u(s,r),t=await m(n.data,{result:e},r);h(n.source,n.origin,i,a,t);return}let d=l.get(a);if(d){await d(s,async e=>{let t;try{t=await m(n.data,{result:e},r)}catch(e){console.error(`[RPC Listener] Middleware failed on stream chunk:`,e);return}h(n.source,n.origin,i,a,t)},r);return}console.error(`[RPC Listener] No handler found for method:`,{topic:a,handlers:l.keys(),promiseHandler:c.keys()}),g(n.source,n.origin,i,a,new t(e.methodNotFound,`Method not found: ${a}`))}r.addEventListener(`message`,v);function b(e,t){c.set(e,t)}function x(e,t){l.set(e,t)}function S(e){c.delete(e),l.delete(e)}function C(){r.removeEventListener(`message`,v),c.clear(),l.clear()}return{handle:b,handleStream:x,unregister:S,cleanup:C}}function c(e){return new TextEncoder().encode(JSON.stringify(e))}function l(e){try{return JSON.parse(new TextDecoder().decode(e))}catch{return null}}exports.ClientNotFound=i,exports.Deferred=a,exports.FrakRpcError=t,exports.InternalError=r,exports.MethodNotFoundError=n,exports.RpcErrorCodes=e,exports.createRpcClient=o,exports.createRpcListener=s,exports.jsonDecode=l,exports.jsonEncode=c;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- const e={parseError:-32700,invalidRequest:-32600,methodNotFound:-32601,invalidParams:-32602,internalError:-32603,serverError:-32e3,clientNotConnected:-32001,configError:-32002,corruptedResponse:-32003,clientAborted:-32004,walletNotConnected:-32005,serverErrorForInteractionDelegation:-32006,userRejected:-32007};var t=class extends Error{constructor(e,t,n){super(t),this.code=e,this.data=n}toJSON(){return{code:this.code,message:this.message,data:this.data}}},n=class extends t{constructor(t,n){super(e.methodNotFound,t,{method:n})}},r=class extends t{constructor(t){super(e.internalError,t)}},i=class extends t{constructor(){super(e.clientNotConnected,`Client not found`)}},a=class{_promise;_resolve;_reject;constructor(){this._promise=new Promise((e,t)=>{this._resolve=e,this._reject=t})}get promise(){return this._promise}resolve=e=>{this._resolve?.(e)};reject=e=>{this._reject?.(e)}};function o(e){let{emittingTransport:n,listeningTransport:r,targetOrigin:i,middleware:o=[],lifecycleHandlers:s}=e,c=new Map;function l(e){return typeof e!=`object`||!e?!1:`clientLifecycle`in e||`iframeLifecycle`in e}function u(e){return typeof e!=`object`||!e?!1:`id`in e&&`topic`in e&&`data`in e}async function d(e){try{`clientLifecycle`in e&&s?.clientLifecycle?await s.clientLifecycle(e,{origin:i,source:null}):`iframeLifecycle`in e&&s?.iframeLifecycle&&await s.iframeLifecycle(e,{origin:i,source:null})}catch(e){console.error(`[RPC Client] Lifecycle handler error:`,e)}}async function f(e){let t={origin:i,source:null};for(let n of o)n.onRequest&&await n.onRequest(e,t);return e}async function p(e,t){let n={origin:i,source:null},r=t;for(let t of o)t.onResponse&&(r=await t.onResponse(e,r,n));return r}async function m(e){try{let t=new URL(e.origin).origin.toLowerCase(),n=new URL(i).origin.toLowerCase();if(t!==n){console.log(`Not expected origin`,t,n);return}}catch(e){console.error(`[RPC Client] Invalid origin`,e);return}if(l(e.data)){await d(e.data);return}if(!u(e.data))return;let t;try{let n=e.data.data,r=n instanceof Uint8Array||ArrayBuffer.isView(n)?{result:n}:n;t=await p(e.data,r)}catch(e){console.error(`[RPC Client] Middleware error on response:`,e);return}let n=c.get(e.data.id);n&&n(t)}async function h(e){let t=e;try{t=await f(e)}catch(e){throw console.error(`[RPC Client] Middleware error on request:`,e),e}n.postMessage(t,i)}function g(e){n.postMessage(e,i)}function _(){return`${Date.now()}-${Math.random().toString(36).substring(2,9)}`}r.addEventListener(`message`,m);function v(e){let n=_(),r=new a;return c.set(n,e=>{e.error?r.reject(new t(e.error.code,e.error.message,e.error.data)):r.resolve(e.result),c.delete(n)}),h({id:n,topic:e.method,data:{method:e.method,params:e.params}}).catch(e=>{c.delete(n),r.reject(e)}),r.promise}function y(e,t){let n=_();return c.set(n,e=>{e.error?(console.error(`[RPC Client] Listener error:`,e.error),c.delete(n)):t(e.result)}),h({id:n,topic:e.method,data:{method:e.method,params:e.params}}).catch(e=>{console.error(`[RPC Client] Failed to send listener request:`,e),c.delete(n)}),()=>{c.delete(n)}}function b(){r.removeEventListener(`message`,m),c.clear()}return{request:v,listen:y,sendLifecycle:g,cleanup:b}}function s(n){let{transport:r,allowedOrigins:i,middleware:a=[],lifecycleHandlers:o}=n,s=Array.isArray(i)?i:[i],c=new Map,l=new Map;function u(e){try{if(s.includes(`*`))return!0;let t=new URL(e).origin.toLowerCase();return s.some(e=>t===new URL(e).origin.toLowerCase())}catch(e){return console.error(`[RPC Listener] Invalid origin`,e),!1}}function d(e){return typeof e!=`object`||!e?!1:`clientLifecycle`in e||`iframeLifecycle`in e}function f(e){return typeof e!=`object`||!e?!1:`id`in e&&`topic`in e&&`data`in e}async function p(e,t){let n=t;for(let t of a)t.onRequest&&(n=await t.onRequest(e,n));return n}async function m(e,t,n){let r=t;for(let t of a)t.onResponse&&(r=await t.onResponse(e,r,n));return r}function h(e,t,n,r,i){if(!e){console.error(`[RPC Listener] No source to send response to`);return}let a={id:n,topic:r,data:!i.error&&(i.result instanceof Uint8Array||ArrayBuffer.isView(i.result))?i.result:i};`postMessage`in e&&typeof e.postMessage==`function`&&e.postMessage(a,{targetOrigin:t})}function g(n,r,i,a,o){h(n,r,i,a,{error:o instanceof t?o.toJSON():{code:e.internalError,message:o.message}})}async function _(e,t){try{`clientLifecycle`in e&&o?.clientLifecycle?await o.clientLifecycle(e,t):`iframeLifecycle`in e&&o?.iframeLifecycle&&await o.iframeLifecycle(e,t)}catch(e){console.error(`[RPC Listener] Lifecycle handler error:`,e)}}async function v(e){if(!u(e.origin)){console.warn(`[RPC Listener] Message from disallowed origin:`,e.origin);return}let t={origin:e.origin,source:e.source};if(d(e.data)){await _(e.data,t);return}if(!f(e.data))return;let n;try{n=await p(e.data,t)}catch(t){g(e.source,e.origin,e.data.id,e.data.topic,t instanceof Error?t:Error(String(t)));return}try{await y(e,n)}catch(t){g(e.source,e.origin,e.data.id,e.data.topic,t instanceof Error?t:Error(String(t)))}}async function y(n,r){let{id:i,topic:a,data:o}=n.data,s=o.params??o,u=c.get(a);if(u){let e=await u(s,r),t=await m(n.data,{result:e},r);h(n.source,n.origin,i,a,t);return}let d=l.get(a);if(d){await d(s,async e=>{let t;try{t=await m(n.data,{result:e},r)}catch(e){console.error(`[RPC Listener] Middleware failed on stream chunk:`,e);return}h(n.source,n.origin,i,a,t)},r);return}console.error(`[RPC Listener] No handler found for method:`,{topic:a,handlers:l.keys(),promiseHandler:c.keys()}),g(n.source,n.origin,i,a,new t(e.methodNotFound,`Method not found: ${a}`))}r.addEventListener(`message`,v);function b(e,t){c.set(e,t)}function x(e,t){l.set(e,t)}function S(e){c.delete(e),l.delete(e)}function C(){r.removeEventListener(`message`,v),c.clear(),l.clear()}return{handle:b,handleStream:x,unregister:S,cleanup:C}}function c(e){return new TextEncoder().encode(JSON.stringify(e))}function l(e){try{return JSON.parse(new TextDecoder().decode(e))}catch{return null}}export{i as ClientNotFound,a as Deferred,t as FrakRpcError,r as InternalError,n as MethodNotFoundError,e as RpcErrorCodes,o as createRpcClient,s as createRpcListener,l as jsonDecode,c as jsonEncode};
1
+ const e={parseError:-32700,invalidRequest:-32600,methodNotFound:-32601,invalidParams:-32602,internalError:-32603,serverError:-32e3,clientNotConnected:-32001,configError:-32002,corruptedResponse:-32003,clientAborted:-32004,walletNotConnected:-32005,serverErrorForInteractionDelegation:-32006,userRejected:-32007};var t=class extends Error{code;data;constructor(e,t,n){super(t),this.code=e,this.data=n}toJSON(){return{code:this.code,message:this.message,data:this.data}}},n=class extends t{constructor(t,n){super(e.methodNotFound,t,{method:n})}},r=class extends t{constructor(t){super(e.internalError,t)}},i=class extends t{constructor(){super(e.clientNotConnected,`Client not found`)}},a=class{_promise;_resolve;_reject;constructor(){this._promise=new Promise((e,t)=>{this._resolve=e,this._reject=t})}get promise(){return this._promise}resolve=e=>{this._resolve?.(e)};reject=e=>{this._reject?.(e)}};function o(e){let{emittingTransport:n,listeningTransport:r,targetOrigin:i,middleware:o=[],lifecycleHandlers:s}=e,c=new Map;function l(e){return typeof e!=`object`||!e?!1:`clientLifecycle`in e||`iframeLifecycle`in e}function u(e){return typeof e!=`object`||!e?!1:`id`in e&&`topic`in e&&`data`in e}async function d(e){try{`clientLifecycle`in e&&s?.clientLifecycle?await s.clientLifecycle(e,{origin:i,source:null}):`iframeLifecycle`in e&&s?.iframeLifecycle&&await s.iframeLifecycle(e,{origin:i,source:null})}catch(e){console.error(`[RPC Client] Lifecycle handler error:`,e)}}async function f(e){let t={origin:i,source:null};for(let n of o)n.onRequest&&await n.onRequest(e,t);return e}async function p(e,t){let n={origin:i,source:null},r=t;for(let t of o)t.onResponse&&(r=await t.onResponse(e,r,n));return r}async function m(e){try{let t=new URL(e.origin).origin.toLowerCase(),n=new URL(i).origin.toLowerCase();if(t!==n){console.log(`Not expected origin`,t,n);return}}catch(e){console.error(`[RPC Client] Invalid origin`,e);return}if(l(e.data)){await d(e.data);return}if(!u(e.data))return;let t;try{let n=e.data.data,r=n instanceof Uint8Array||ArrayBuffer.isView(n)?{result:n}:n;t=await p(e.data,r)}catch(e){console.error(`[RPC Client] Middleware error on response:`,e);return}let n=c.get(e.data.id);n&&n(t)}async function h(e){let t=e;try{t=await f(e)}catch(e){throw console.error(`[RPC Client] Middleware error on request:`,e),e}n.postMessage(t,i)}function g(e){n.postMessage(e,i)}function _(){return`${Date.now()}-${Math.random().toString(36).substring(2,9)}`}r.addEventListener(`message`,m);function v(e){let n=_(),r=new a;return c.set(n,e=>{e.error?r.reject(new t(e.error.code,e.error.message,e.error.data)):r.resolve(e.result),c.delete(n)}),h({id:n,topic:e.method,data:{method:e.method,params:e.params}}).catch(e=>{c.delete(n),r.reject(e)}),r.promise}function y(e,t){let n=_();return c.set(n,e=>{e.error?(console.error(`[RPC Client] Listener error:`,e.error),c.delete(n)):t(e.result)}),h({id:n,topic:e.method,data:{method:e.method,params:e.params}}).catch(e=>{console.error(`[RPC Client] Failed to send listener request:`,e),c.delete(n)}),()=>{c.delete(n)}}function b(){r.removeEventListener(`message`,m),c.clear()}return{request:v,listen:y,sendLifecycle:g,cleanup:b}}function s(n){let{transport:r,allowedOrigins:i,middleware:a=[],lifecycleHandlers:o}=n,s=Array.isArray(i)?i:[i],c=new Map,l=new Map;function u(e){try{if(s.includes(`*`))return!0;let t=new URL(e).origin.toLowerCase();return s.some(e=>t===new URL(e).origin.toLowerCase())}catch(e){return console.error(`[RPC Listener] Invalid origin`,e),!1}}function d(e){return typeof e!=`object`||!e?!1:`clientLifecycle`in e||`iframeLifecycle`in e}function f(e){return typeof e!=`object`||!e?!1:`id`in e&&`topic`in e&&`data`in e}async function p(e,t){let n=t;for(let t of a)t.onRequest&&(n=await t.onRequest(e,n));return n}async function m(e,t,n){let r=t;for(let t of a)t.onResponse&&(r=await t.onResponse(e,r,n));return r}function h(e,t,n,r,i){if(!e){console.error(`[RPC Listener] No source to send response to`);return}let a={id:n,topic:r,data:!i.error&&(i.result instanceof Uint8Array||ArrayBuffer.isView(i.result))?i.result:i};`postMessage`in e&&typeof e.postMessage==`function`&&e.postMessage(a,{targetOrigin:t})}function g(n,r,i,a,o){h(n,r,i,a,{error:o instanceof t?o.toJSON():{code:e.internalError,message:o.message}})}async function _(e,t){try{`clientLifecycle`in e&&o?.clientLifecycle?await o.clientLifecycle(e,t):`iframeLifecycle`in e&&o?.iframeLifecycle&&await o.iframeLifecycle(e,t)}catch(e){console.error(`[RPC Listener] Lifecycle handler error:`,e)}}async function v(e){if(!u(e.origin)){console.warn(`[RPC Listener] Message from disallowed origin:`,e.origin);return}let t={origin:e.origin,source:e.source};if(d(e.data)){await _(e.data,t);return}if(!f(e.data))return;let n;try{n=await p(e.data,t)}catch(t){g(e.source,e.origin,e.data.id,e.data.topic,t instanceof Error?t:Error(String(t)));return}try{await y(e,n)}catch(t){g(e.source,e.origin,e.data.id,e.data.topic,t instanceof Error?t:Error(String(t)))}}async function y(n,r){let{id:i,topic:a,data:o}=n.data,s=o.params??o,u=c.get(a);if(u){let e=await u(s,r),t=await m(n.data,{result:e},r);h(n.source,n.origin,i,a,t);return}let d=l.get(a);if(d){await d(s,async e=>{let t;try{t=await m(n.data,{result:e},r)}catch(e){console.error(`[RPC Listener] Middleware failed on stream chunk:`,e);return}h(n.source,n.origin,i,a,t)},r);return}console.error(`[RPC Listener] No handler found for method:`,{topic:a,handlers:l.keys(),promiseHandler:c.keys()}),g(n.source,n.origin,i,a,new t(e.methodNotFound,`Method not found: ${a}`))}r.addEventListener(`message`,v);function b(e,t){c.set(e,t)}function x(e,t){l.set(e,t)}function S(e){c.delete(e),l.delete(e)}function C(){r.removeEventListener(`message`,v),c.clear(),l.clear()}return{handle:b,handleStream:x,unregister:S,cleanup:C}}function c(e){return new TextEncoder().encode(JSON.stringify(e))}function l(e){try{return JSON.parse(new TextDecoder().decode(e))}catch{return null}}export{i as ClientNotFound,a as Deferred,t as FrakRpcError,r as InternalError,n as MethodNotFoundError,e as RpcErrorCodes,o as createRpcClient,s as createRpcListener,l as jsonDecode,c as jsonEncode};
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "url": "https://twitter.com/QNivelais"
12
12
  }
13
13
  ],
14
- "version": "0.2.0-beta.eb3cff34",
14
+ "version": "0.2.0-beta.f2f8cb0c",
15
15
  "description": "Generic, type-safe RPC communication layer for bidirectional postMessage communication",
16
16
  "repository": {
17
17
  "url": "https://github.com/frak-id/wallet",
@@ -69,7 +69,7 @@
69
69
  "@arethetypeswrong/cli": "^0.18.2",
70
70
  "@rolldown/plugin-node-polyfills": "^1.0.3",
71
71
  "@types/node": "^25.6.0",
72
- "tsdown": "^0.21.8",
72
+ "tsdown": "^0.22.0",
73
73
  "typescript": "^6.0.2",
74
74
  "viem": "^2.47.16"
75
75
  }