@frak-labs/frame-connector 0.1.0-beta.267778ad → 0.1.0-beta.278e9605

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/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "url": "https://twitter.com/QNivelais"
12
12
  }
13
13
  ],
14
- "version": "0.1.0-beta.267778ad",
14
+ "version": "0.1.0-beta.278e9605",
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",
@@ -65,30 +65,26 @@
65
65
  "format:check": "biome check .",
66
66
  "format": "biome check --write .",
67
67
  "clean": "rimraf dist",
68
- "build": "rslib build",
69
- "build:watch": "rslib build --watch",
68
+ "build": "tsdown",
69
+ "build:watch": "tsdown --watch",
70
70
  "check-exports": "attw --pack .",
71
71
  "typecheck": "tsc --noEmit",
72
72
  "prepublish": "bun run lint && bun run build",
73
73
  "publish": "echo 'Publishing rpc...'"
74
74
  },
75
75
  "dependencies": {
76
- "@jsonjoy.com/json-pack": "^1.2.0"
76
+ "@jsonjoy.com/json-pack": "^1.21.0"
77
77
  },
78
78
  "peerDependencies": {
79
- "viem": "^2.23.14"
79
+ "viem": "^2.x"
80
80
  },
81
81
  "devDependencies": {
82
82
  "@arethetypeswrong/cli": "^0.18.2",
83
- "@frak-labs/browserslist-config": "0.0.1",
84
83
  "@frak-labs/dev-tooling": "0.0.0",
85
- "@microsoft/api-extractor": "^7.52.8",
86
- "@rslib/core": "^0.9.2",
87
- "@types/node": "^24",
84
+ "@rolldown/plugin-node-polyfills": "^1.0.0",
85
+ "@types/node": "^24.10.0",
86
+ "tsdown": "^0.16.1",
88
87
  "typescript": "^5",
89
- "viem": "^2.23.14"
90
- },
91
- "browserslist": [
92
- "extends @frak-labs/browserslist-config"
93
- ]
88
+ "viem": "^2.38.6"
89
+ }
94
90
  }
package/dist/index.cjs DELETED
@@ -1 +0,0 @@
1
- "use strict";let __rslib_import_meta_url__="undefined"==typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.d=(e,r)=>{for(var t in r)__webpack_require__.o(r,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},__webpack_require__.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{createRpcListener:()=>createRpcListener,RpcErrorCodes:()=>RpcErrorCodes,ClientNotFound:()=>ClientNotFound,InternalError:()=>InternalError,decompressJson:()=>decompressJson,MethodNotFoundError:()=>MethodNotFoundError,compressJson:()=>compressJson,Deferred:()=>Deferred,createClientCompressionMiddleware:()=>createClientCompressionMiddleware,createListenerCompressionMiddleware:()=>createListenerCompressionMiddleware,createRpcClient:()=>createRpcClient,hashAndCompressData:()=>hashAndCompressData,FrakRpcError:()=>FrakRpcError,decompressDataAndCheckHash:()=>decompressDataAndCheckHash});let RpcErrorCodes={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};class FrakRpcError extends Error{code;data;constructor(e,r,t){super(r),this.code=e,this.data=t}toJSON(){return{code:this.code,message:this.message,data:this.data}}}class MethodNotFoundError extends FrakRpcError{constructor(e,r){super(RpcErrorCodes.methodNotFound,e,{method:r})}}class InternalError extends FrakRpcError{constructor(e){super(RpcErrorCodes.internalError,e)}}class ClientNotFound extends FrakRpcError{constructor(){super(RpcErrorCodes.clientNotConnected,"Client not found")}}class Deferred{_promise;_resolve;_reject;constructor(){this._promise=new Promise((e,r)=>{this._resolve=e,this._reject=r})}get promise(){return this._promise}resolve=e=>{this._resolve?.(e)};reject=e=>{this._reject?.(e)}}function createRpcClient(e){let{emittingTransport:r,listeningTransport:t,targetOrigin:o,middleware:n=[],lifecycleHandlers:s}=e,a=new Map;async function i(e){try{"clientLifecycle"in e&&s?.clientLifecycle?await s.clientLifecycle(e,{origin:o,source:null}):"iframeLifecycle"in e&&s?.iframeLifecycle&&await s.iframeLifecycle(e,{origin:o,source:null})}catch(e){console.error("[RPC Client] Lifecycle handler error:",e)}}async function c(e){let r={origin:o,source:null};for(let t of n)t.onRequest&&await t.onRequest(e,r);return e}async function d(e,r){let t={origin:o,source:null},s=r;for(let r of n)r.onResponse&&(s=await r.onResponse(e,s,t));return s}async function l(e){var r,t;let n;try{let r=new URL(e.origin).origin.toLowerCase(),t=new URL(o).origin.toLowerCase();if(r!==t)return void console.log("Not expected origin",r,t)}catch(e){console.error("[RPC Client] Invalid origin",e);return}if("object"==typeof(r=e.data)&&r&&("clientLifecycle"in r||"iframeLifecycle"in r))return void await i(e.data);if(!("object"==typeof(t=e.data)&&t&&"id"in t&&"topic"in t&&"data"in t))return;try{let r=e.data.data,t=r instanceof Uint8Array||ArrayBuffer.isView(r);n=await d(e.data,t?{result:r}:r)}catch(e){console.error("[RPC Client] Middleware error on response:",e);return}let s=a.get(e.data.id);s&&s(n)}async function p(e){let t=e;try{t=await c(e)}catch(e){throw console.error("[RPC Client] Middleware error on request:",e),e}r.postMessage(t,o)}function u(){return`${Date.now()}-${Math.random().toString(36).substring(2,9)}`}return t.addEventListener("message",l),{request:function(e){let r=u(),t=new Deferred;return a.set(r,e=>{e.error?t.reject(new FrakRpcError(e.error.code,e.error.message,e.error.data)):t.resolve(e.result),a.delete(r)}),p({id:r,topic:e.method,data:{method:e.method,params:e.params}}).catch(e=>{a.delete(r),t.reject(e)}),t.promise},listen:function(e,r){let t=u();return a.set(t,e=>{e.error?(console.error("[RPC Client] Listener error:",e.error),a.delete(t)):r(e.result)}),p({id:t,topic:e.method,data:{method:e.method,params:e.params}}).catch(e=>{console.error("[RPC Client] Failed to send listener request:",e),a.delete(t)}),()=>{a.delete(t)}},sendLifecycle:function(e){r.postMessage(e,o)},cleanup:function(){t.removeEventListener("message",l),a.clear()}}}function createRpcListener(e){let{transport:r,allowedOrigins:t,middleware:o=[],lifecycleHandlers:n}=e,s=Array.isArray(t)?t:[t],a=new Map,i=new Map;async function c(e,r){let t=r;for(let r of o)r.onRequest&&(t=await r.onRequest(e,t));return t}async function d(e,r,t){let n=r;for(let r of o)r.onResponse&&(n=await r.onResponse(e,n,t));return n}function l(e,r,t,o,n){if(!e)return void console.error("[RPC Listener] No source to send response to");let s={id:t,topic:o,data:!n.error&&(n.result instanceof Uint8Array||ArrayBuffer.isView(n.result))?n.result:n};"postMessage"in e&&"function"==typeof e.postMessage&&e.postMessage(s,{targetOrigin:r})}function p(e,r,t,o,n){l(e,r,t,o,{error:n instanceof FrakRpcError?n.toJSON():{code:RpcErrorCodes.internalError,message:n.message}})}async function u(e,r){try{"clientLifecycle"in e&&n?.clientLifecycle?await n.clientLifecycle(e,r):"iframeLifecycle"in e&&n?.iframeLifecycle&&await n.iframeLifecycle(e,r)}catch(e){console.error("[RPC Listener] Lifecycle handler error:",e)}}async function _(e){var r,t;let o;if(!function(e){try{if(s.includes("*"))return!0;let r=new URL(e).origin.toLowerCase();return s.some(e=>{let t=new URL(e).origin.toLowerCase();return r===t})}catch(e){return console.error("[RPC Listener] Invalid origin",e),!1}}(e.origin))return void console.warn("[RPC Listener] Message from disallowed origin:",e.origin);let n={origin:e.origin,source:e.source};if("object"==typeof(r=e.data)&&r&&("clientLifecycle"in r||"iframeLifecycle"in r))return void await u(e.data,n);if("object"==typeof(t=e.data)&&t&&"id"in t&&"topic"in t&&"data"in t){try{o=await c(e.data,n)}catch(r){p(e.source,e.origin,e.data.id,e.data.topic,r instanceof Error?r:Error(String(r)));return}try{await f(e,o)}catch(r){p(e.source,e.origin,e.data.id,e.data.topic,r instanceof Error?r:Error(String(r)))}}}async function f(e,r){let{id:t,topic:o,data:n}=e.data,s=a.get(o);if(s){let a=await s(n,r),i=await d(e.data,{result:a},r);l(e.source,e.origin,t,o,i);return}let c=i.get(o);if(c){let s=async n=>{let s;try{s=await d(e.data,{result:n},r)}catch(e){console.error("[RPC Listener] Middleware failed on stream chunk:",e);return}l(e.source,e.origin,t,o,s)};await c(n,s,r);return}console.error("[RPC Listener] No handler found for method:",{topic:o,handlers:i.keys(),promiseHandler:a.keys()}),p(e.source,e.origin,t,o,new FrakRpcError(RpcErrorCodes.methodNotFound,`Method not found: ${o}`))}return r.addEventListener("message",_),{handle:function(e,r){a.set(e,r)},handleStream:function(e,r){i.set(e,r)},unregister:function(e){a.delete(e),i.delete(e)},cleanup:function(){r.removeEventListener("message",_),a.clear(),i.clear()}}}let index_js_namespaceObject=require("@jsonjoy.com/json-pack/lib/cbor/index.js"),external_viem_namespaceObject=require("viem"),encoder=new index_js_namespaceObject.CborEncoder,decoder=new index_js_namespaceObject.CborDecoder;function hashAndCompressData(e){let r={...e,validationHash:hashJson(e??{})};return encoder.encode(r)}function decompressDataAndCheckHash(e){if(!e.length)throw new FrakRpcError(RpcErrorCodes.corruptedResponse,"Missing compressed data");let r=decompressJson(e);if(!r)throw new FrakRpcError(RpcErrorCodes.corruptedResponse,"Invalid compressed data");if(!r?.validationHash)throw new FrakRpcError(RpcErrorCodes.corruptedResponse,"Missing validation hash");let{validationHash:t,...o}=r,n=hashJson(o);if(n!==r.validationHash)throw console.warn("Validation error",{validationHash:t,rawResultData:o,parsedData:r,expectedValidationHashes:n,recomputedHash:hashJson(void 0)}),new FrakRpcError(RpcErrorCodes.corruptedResponse,"Invalid validation hash");return r}function compressJson(e){return encoder.encode(e)}function decompressJson(e){try{return decoder.decode(e)}catch(r){return console.error("Invalid compressed data",{e:r,data:e}),null}}function hashJson(e){return(0,external_viem_namespaceObject.sha256)(encoder.encode(e))}let createClientCompressionMiddleware=()=>({onRequest:(e,r)=>{if(e.data instanceof Uint8Array||ArrayBuffer.isView(e.data))return r;try{e.data=hashAndCompressData(e.data)}catch(e){console.error("[Compression Middleware] Failed to compress request",e)}return r},onResponse:(e,r,t)=>{if(r.error||!(r.result instanceof Uint8Array||ArrayBuffer.isView(r.result)))return r;try{let{validationHash:e,...t}=decompressDataAndCheckHash(r.result);"object"==typeof t&&null!==t&&"result"in t?r.result=t.result:r.result=t}catch(e){console.error("[Compression Middleware] Failed to decompress response",e)}return r}}),createListenerCompressionMiddleware=()=>({onRequest:(e,r)=>{if(!(e.data instanceof Uint8Array||ArrayBuffer.isView(e.data)))return r;try{let{validationHash:r,...t}=decompressDataAndCheckHash(e.data);"object"==typeof t&&"params"in t?e.data=t.params:e.data=t}catch(e){throw console.error("[Compression Middleware] Failed to decompress request",e),e}return r},onResponse:(e,r,t)=>{if(r.error||r.result instanceof Uint8Array||ArrayBuffer.isView(r.result))return r;try{let t={method:e.topic,result:r.result};r.result=hashAndCompressData(t)}catch(e){console.error("[Compression Middleware] Failed to compress response",e)}return r}});for(var __webpack_i__ in exports.ClientNotFound=__webpack_exports__.ClientNotFound,exports.Deferred=__webpack_exports__.Deferred,exports.FrakRpcError=__webpack_exports__.FrakRpcError,exports.InternalError=__webpack_exports__.InternalError,exports.MethodNotFoundError=__webpack_exports__.MethodNotFoundError,exports.RpcErrorCodes=__webpack_exports__.RpcErrorCodes,exports.compressJson=__webpack_exports__.compressJson,exports.createClientCompressionMiddleware=__webpack_exports__.createClientCompressionMiddleware,exports.createListenerCompressionMiddleware=__webpack_exports__.createListenerCompressionMiddleware,exports.createRpcClient=__webpack_exports__.createRpcClient,exports.createRpcListener=__webpack_exports__.createRpcListener,exports.decompressDataAndCheckHash=__webpack_exports__.decompressDataAndCheckHash,exports.decompressJson=__webpack_exports__.decompressJson,exports.hashAndCompressData=__webpack_exports__.hashAndCompressData,__webpack_exports__)-1===["ClientNotFound","Deferred","FrakRpcError","InternalError","MethodNotFoundError","RpcErrorCodes","compressJson","createClientCompressionMiddleware","createListenerCompressionMiddleware","createRpcClient","createRpcListener","decompressDataAndCheckHash","decompressJson","hashAndCompressData"].indexOf(__webpack_i__)&&(exports[__webpack_i__]=__webpack_exports__[__webpack_i__]);Object.defineProperty(exports,"__esModule",{value:!0});