From 4fffae2a28844d15f0c06df2060179ce2b10288d Mon Sep 17 00:00:00 2001 From: fainashalts Date: Thu, 30 Jul 2026 10:03:49 -0700 Subject: [PATCH 1/2] fix: prevent cross-origin replay --- .../dist/bundle.6a4c3b0995683838803c.js | 3 + ...undle.6a4c3b0995683838803c.js.LICENSE.txt} | 0 .../dist/bundle.6a4c3b0995683838803c.js.map | 1 + .../dist/bundle.6f3ad536a859e78bdbd5.js | 3 - .../dist/bundle.6f3ad536a859e78bdbd5.js.map | 1 - export-and-sign/dist/index.html | 2 +- export-and-sign/index.test.js | 665 +++++++++++++++++- export-and-sign/src/event-handlers.js | 133 +++- export-and-sign/src/index.js | 30 +- export-and-sign/src/index.template.html | 4 + export-and-sign/src/telemetry.js | 62 ++ export-and-sign/src/turnkey-core.js | 161 ++++- export-and-sign/webpack.config.js | 6 +- kustomize/base/resources.yaml | 12 +- shared/turnkey-core.js | 64 +- 15 files changed, 1086 insertions(+), 61 deletions(-) create mode 100644 export-and-sign/dist/bundle.6a4c3b0995683838803c.js rename export-and-sign/dist/{bundle.6f3ad536a859e78bdbd5.js.LICENSE.txt => bundle.6a4c3b0995683838803c.js.LICENSE.txt} (100%) create mode 100644 export-and-sign/dist/bundle.6a4c3b0995683838803c.js.map delete mode 100644 export-and-sign/dist/bundle.6f3ad536a859e78bdbd5.js delete mode 100644 export-and-sign/dist/bundle.6f3ad536a859e78bdbd5.js.map create mode 100644 export-and-sign/src/telemetry.js diff --git a/export-and-sign/dist/bundle.6a4c3b0995683838803c.js b/export-and-sign/dist/bundle.6a4c3b0995683838803c.js new file mode 100644 index 00000000..7d652e0f --- /dev/null +++ b/export-and-sign/dist/bundle.6a4c3b0995683838803c.js @@ -0,0 +1,3 @@ +/*! For license information please see bundle.6a4c3b0995683838803c.js.LICENSE.txt */ +(()=>{var e,t,r,n,a,o={750:(e,t,r)=>{"use strict";var n=r(7598),a=r(4443),o=r(566);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e){for(var t=1;t3?(a=y===n)&&(u=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=p&&((a=r<2&&pn||n>y)&&(o[4]=r,o[5]=n,d.n=y,c=0))}if(a||r>1)return i;throw l=!0,n}return function(a,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&p(f,y),c=f,u=y;(t=c<2?e:u)||!l;){o||(c?c<3?(c>1&&(d.n=-1),p(c,u)):d.n=u:d.v=u);try{if(s=2,o){if(c||(a="next"),t=o[a]){if(!(t=t.call(o,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);o=e}else if((t=(l=d.n<0)?u:r.call(n,d))!==i)break}catch(t){o=e,c=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,a,o),!0),s}var i={};function c(){}function u(){}function s(){}t=Object.getPrototypeOf;var d=[][n]?t(t([][n]())):(l(t={},n,function(){return this}),t),p=s.prototype=c.prototype=Object.create(d);function y(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,l(e,a,"GeneratorFunction")),e.prototype=Object.create(p),e}return u.prototype=s,l(p,"constructor",s),l(s,"constructor",u),u.displayName="GeneratorFunction",l(s,a,"GeneratorFunction"),l(p),l(p,a,"Generator"),l(p,n,function(){return this}),l(p,"toString",function(){return"[object Generator]"}),(f=function(){return{w:o,m:y}})()}function l(e,t,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}l=function(e,t,r,n){function o(t,r){l(e,t,function(e){return this._invoke(t,r,e)})}t?a?a(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(o("next",0),o("throw",1),o("return",2))},l(e,t,r,n)}function d(e){return function(e){if(Array.isArray(e))return y(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||p(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p(e,t){if(e){if("string"==typeof e)return y(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?y(e,t):void 0}}function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r1:window.parent!==window.top}function S(){return(S=b(f().m(function e(t){var r;return f().w(function(e){for(;;)switch(e.n){case 0:if(r=w()){e.n=1;break}throw new Error("WebCrypto subtle API is unavailable");case 1:return e.n=2,r.importKey("raw",t,{name:"ECDSA",namedCurve:"P-256"},!0,["verify"]);case 2:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function O(e){if("string"!=typeof e||0===e.length)throw new Error("an explicit embedded key storage key is required")}function k(){return(k=b(f().m(function e(t){return f().w(function(e){for(;;)switch(e.n){case 0:if(O(t),!E()){e.n=1;break}throw new Error("Doubly iframed");case 1:return e.n=2,P(t);case 2:if(null!==e.v){e.n=4;break}return e.n=3,_();case 3:T(e.v,t);case 4:return e.a(2)}},e)}))).apply(this,arguments)}function _(){return j.apply(this,arguments)}function j(){return(j=b(f().m(function e(){var t,r;return f().w(function(e){for(;;)switch(e.n){case 0:if(t=w()){e.n=1;break}throw new Error("WebCrypto subtle API is unavailable");case 1:return e.n=2,t.generateKey({name:"ECDH",namedCurve:"P-256"},!0,["deriveBits"]);case 2:return r=e.v,e.n=3,t.exportKey("jwk",r.privateKey);case 3:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function P(e){O(e);var t=A(e);return t?JSON.parse(t):null}function T(e,t){O(t),I(t,JSON.stringify(e),1728e5)}function I(e,t,r){var n={value:t,expiry:(new Date).getTime()+r};window.localStorage.setItem(e,JSON.stringify(n))}function A(e){var t=window.localStorage.getItem(e);if(!t)return null;var r=JSON.parse(t);return Object.prototype.hasOwnProperty.call(r,"expiry")&&Object.prototype.hasOwnProperty.call(r,"value")?(new Date).getTime()>r.expiry?(window.localStorage.removeItem(e),null):r.value:(window.localStorage.removeItem(e),null)}function x(e){if(!e||"string"!=typeof e)throw new Error("cannot create uint8array from invalid hex string");var t=e.startsWith("0x")||e.startsWith("0X")?e.slice(2):e;if(t.length%2!=0||!/^[0-9A-Fa-f]+$/.test(t))throw new Error("cannot create uint8array from invalid hex string");return new Uint8Array(t.match(/../g).map(function(e){return parseInt(e,16)}))}function D(e){return d(e).map(function(e){return e.toString(16).padStart(2,"0")}).join("")}function R(e,t){var r=Array.from(new Uint8Array(e)),n=Array.from(new Uint8Array(t));return new Uint8Array([].concat(r,n))}function N(e){var t=document.getElementById("message-log");if(t){var r=document.createElement("p");r.innerText=e,t.appendChild(r)}}function M(e){return K.apply(this,arguments)}function K(){return(K=b(f().m(function e(t){var r,n,a,o;return f().w(function(e){for(;;)switch(e.n){case 0:if(r=w()){e.n=1;break}throw new Error("WebCrypto subtle API is unavailable");case 1:return delete(n=u({},t)).d,n.key_ops=["verify"],e.n=2,r.importKey("jwk",n,{name:"ECDSA",namedCurve:"P-256"},!0,["verify"]);case 2:return a=e.v,e.n=3,r.exportKey("raw",a);case 3:return o=e.v,e.a(2,new Uint8Array(o))}},e)}))).apply(this,arguments)}function U(e){for(var t="",r=[0],n=0;n0;)r.push(a%58),a=a/58|0}for(var i=0;i0;){var c=r[i];o=(c=void 0===c?o:58*c+o)>>8,r[i]=c%256,i++}}var u=n.concat(r.reverse());return new Uint8Array(u)}function G(){return(G=b(f().m(function e(t,r,n){var a,o;return f().w(function(e){for(;;)switch(e.n){case 0:o=r,e.n="SOLANA"===o?1:"HEXADECIMAL"===o?5:6;break;case 1:if(n){e.n=2;break}throw new Error("public key must be specified for SOLANA key format");case 2:if(32===t.length){e.n=3;break}throw new Error("invalid private key length. Expected 32 bytes. Got ".concat(t.length,"."));case 3:if(32===n.length){e.n=4;break}throw new Error("invalid public key length. Expected 32 bytes. Got ".concat(n.length,"."));case 4:return(a=new Uint8Array(64)).set(t,0),a.set(n,32),e.a(2,U(a));case 5:return e.a(2,"0x"+D(t));case 6:return console.warn("invalid key format: ".concat(r,". Defaulting to HEXADECIMAL.")),e.a(2,"0x"+D(t));case 7:return e.a(2)}},e)}))).apply(this,arguments)}function L(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",a=r.toStringTag||"@@toStringTag";function o(r,n,a,o){var u=n&&n.prototype instanceof c?n:c,s=Object.create(u.prototype);return B(s,"_invoke",function(r,n,a){var o,c,u,s=0,f=a||[],l=!1,d={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,r){return o=t,c=0,u=e,d.n=r,i}};function p(r,n){for(c=r,u=n,t=0;!l&&s&&!a&&t3?(a=y===n)&&(u=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=p&&((a=r<2&&pn||n>y)&&(o[4]=r,o[5]=n,d.n=y,c=0))}if(a||r>1)return i;throw l=!0,n}return function(a,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&p(f,y),c=f,u=y;(t=c<2?e:u)||!l;){o||(c?c<3?(c>1&&(d.n=-1),p(c,u)):d.n=u:d.v=u);try{if(s=2,o){if(c||(a="next"),t=o[a]){if(!(t=t.call(o,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);o=e}else if((t=(l=d.n<0)?u:r.call(n,d))!==i)break}catch(t){o=e,c=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,a,o),!0),s}var i={};function c(){}function u(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(B(t={},n,function(){return this}),t),l=s.prototype=c.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,B(e,a,"GeneratorFunction")),e.prototype=Object.create(l),e}return u.prototype=s,B(l,"constructor",s),B(s,"constructor",u),u.displayName="GeneratorFunction",B(s,a,"GeneratorFunction"),B(l),B(l,a,"Generator"),B(l,n,function(){return this}),B(l,"toString",function(){return"[object Generator]"}),(L=function(){return{w:o,m:d}})()}function B(e,t,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}B=function(e,t,r,n){function o(t,r){B(e,t,function(e){return this._invoke(t,r,e)})}t?a?a(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(o("next",0),o("throw",1),o("return",2))},B(e,t,r,n)}function H(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r0){var n=new Uint8Array(r).fill(0);return new Uint8Array([].concat(d(n),d(e)))}if(r<0){for(var a=-1*r,o=0,i=0;i]*$',color:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",labelColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",backgroundColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",width:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$",height:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$",maxWidth:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$",maxHeight:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$",lineHeight:"^(\\d+(\\.\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$",boxShadow:"^(none|(\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)) ?(inset)?)$",textAlign:"^(left|right|center|justify|initial|inherit)$",overflowWrap:"^(normal|break-word|anywhere)$",wordWrap:"^(normal|break-word)$",resize:"^(none|both|horizontal|vertical|block|inline)$"};return Object.entries(e).forEach(function(e){var t,a,o=(a=2,function(e){if(Array.isArray(e))return e}(t=e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,c=[],u=!0,s=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=o.call(r)).done)&&(c.push(n.value),c.length!==t);u=!0);}catch(e){s=!0,a=e}finally{try{if(!u&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return c}}(t,a)||p(t,a)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),i=o[0],c=o[1],u=i.trim();if(0===u.length)throw new Error("css style property cannot be empty");var s=n[u];if(!s)throw new Error('invalid or unsupported css style property: "'.concat(u,'"'));var f=new RegExp(s),l=c.trim();if(0==l.length)throw new Error('css style for "'.concat(u,'" is empty'));if(!f.test(l))throw new Error('invalid css style value for property "'.concat(u,'"'));r[u]=l}),r},ie=E,ce=function(e){return S.apply(this,arguments)},ue=new WeakMap;function se(e){if("string"!=typeof e||0===e.length||"null"===e)throw new Error("a non-opaque parent origin is required");var t=new URL(e).origin;if(t!==e)throw new Error("invalid parent origin: ".concat(e));return t}function fe(){window.localStorage.removeItem("TURNKEY_EMBEDDED_KEY"),window.localStorage.removeItem("TURNKEY_EMBEDDED_KEY_ORIGIN")}function le(){return(le=Y(L().m(function e(t){var r,n,a,o;return L().w(function(e){for(;;)switch(e.n){case 0:if(!ie()){e.n=1;break}throw new Error("Doubly iframed");case 1:if(r=se(t),"persistent"!==(null==(n=ue.get(window))?void 0:n.mode)||n.origin===r){e.n=2;break}throw new Error("parent origin is already bound to ".concat(n.origin,"; refusing ").concat(r));case 2:return fe(),a="".concat("TURNKEY_EMBEDDED_KEY_V2",":").concat(encodeURIComponent(r)),(o={mode:"persistent",origin:r,storageKey:a}).ready=q(a).catch(function(e){throw ue.get(window)===o&&(n?ue.set(window,n):ue.delete(window)),e}),ue.set(window,o),e.n=3,o.ready;case 3:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function de(){return(de=Y(L().m(function e(){var t,r,n,a;return L().w(function(e){for(;;)switch(e.p=e.n){case 0:if(!ie()){e.n=1;break}throw new Error("Doubly iframed");case 1:if("persistent"!==(null==(r=ue.get(window))?void 0:r.mode)){e.n=3;break}return e.n=2,r.ready;case 2:return e.a(2,e.v);case 3:if(null==r||!r.key){e.n=4;break}return e.a(2);case 4:return fe(),e.n=5,z();case 5:if(n=e.v,"persistent"!==(null==(a=ue.get(window))?void 0:a.mode)){e.n=9;break}return e.p=6,e.n=7,a.ready;case 7:return e.a(2,e.v);case 8:e.p=8,e.v;case 9:"persistent"!==(null===(t=ue.get(window))||void 0===t?void 0:t.mode)&&ue.set(window,{mode:"ephemeral",key:n});case 10:return e.a(2)}},e,null,[[6,8]])}))).apply(this,arguments)}function pe(){return(pe=Y(L().m(function e(t,r,n){var a,i,c,u,s,f,l,d;return L().w(function(e){for(;;)switch(e.n){case 0:if(a={prod:"04cf288fe433cc4e1aa0ce1632feac4ea26bf2f5a09dcfe5a42c398e06898710330f0572882f4dbdf0f5304b8fc8703acd69adca9a4bbf7f5d00d20a5e364b2569",preprod:"04f3422b8afbe425d6ece77b8d2469954715a2ff273ab7ac89f1ed70e0a9325eaa1698b4351fd1b23734e65c0b6a86b62dd49d70b37c94606aac402cbd84353212"},i=null,"undefined"!=typeof document&&(c=document.querySelector('meta[name="turnkey-signer-environment"]'))&&c.content&&"__TURNKEY_SIGNER_ENVIRONMENT__"!==c.content&&(i=c.content),i||"undefined"==typeof window||(i=window.__TURNKEY_SIGNER_ENVIRONMENT__),void 0!==(u=a[i])){e.n=1;break}throw new Error("Configuration error: TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY is undefined");case 1:if(t===u){e.n=2;break}throw new Error("enclave quorum public keys from client and bundle do not match. Client: ".concat(u,". Bundle: ").concat(t,"."));case 2:return s=new Uint8Array(te(u)),e.n=3,ce(s);case 3:if(f=e.v){e.n=4;break}throw new Error("failed to load quorum key");case 4:return l=(0,o.g8)(r),d=te(n),e.n=5,crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},f,l,d);case 5:return e.a(2,e.v)}},e)}))).apply(this,arguments)}var ye={initEmbeddedKey:function(e){return le.apply(this,arguments)},initEphemeralEmbeddedKey:function(){return de.apply(this,arguments)},generateTargetKey:z,setItemWithExpiry:J,getItemWithExpiry:$,getEmbeddedKey:function(){var e=ue.get(window);return e?"persistent"===e.mode?W(e.storageKey):e.key:null},setEmbeddedKey:function(e){var t=ue.get(window);if(!t)throw new Error("embedded key has not been initialized");"persistent"===t.mode?X(e,t.storageKey):t.key=e},onResetEmbeddedKey:function(){var e,t=ue.get(window);if(!t)throw new Error("embedded key has not been initialized");"persistent"===t.mode?(O(e=t.storageKey),window.localStorage.removeItem(e)):t.key=null},p256JWKPrivateToPublic:V,base58Encode:Q,base58Decode:Z,encodeKey:function(e,t,r){return G.apply(this,arguments)},sendMessageUp:function(e,t,r){var n={type:e,value:t};r&&(n.requestId=r),m?m.postMessage(n):window.parent!==window&&window.parent.postMessage(n,h),N("⬆️ Sent message ".concat(e,": ").concat(t))},logMessage:ee,uint8arrayFromHexString:te,uint8arrayToHexString:re,setParentFrameMessageChannelPort:function(e){m=e},setParentFrameOrigin:function(e){if("string"!=typeof e||0===e.length||"*"===e)throw new Error("a concrete parent frame origin is required");h=e},normalizePadding:ne,fromDerSignature:o.g8,additionalAssociatedData:ae,verifyEnclaveSignature:function(e,t,r){return pe.apply(this,arguments)},getEd25519PublicKey:function(e){return n.jn.sha512Sync=function(){var e;return a.Zf((e=n.jn).concatBytes.apply(e,arguments))},n.lG(e)},applySettings:function(e){var t={};if(!e)return JSON.stringify(t);var r=JSON.parse(e);if(r.styles){var n=document.getElementById("key-div");if(!n)throw new Error("no key-div HTML element found to apply settings to.");var a=oe(r.styles);Object.entries(a).forEach(function(e){var t,r,a=(r=2,function(e){if(Array.isArray(e))return e}(t=e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,c=[],u=!0,s=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=o.call(r)).done)&&(c.push(n.value),c.length!==t);u=!0);}catch(e){s=!0,a=e}finally{try{if(!u&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return c}}(t,r)||function(e,t){if(e){if("string"==typeof e)return H(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?H(e,t):void 0}}(t,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),o=a[0],i=a[1];n.style[o]=i}),t.styles=a}return JSON.stringify(t)},validateStyles:oe,getSettings:function(){var e=window.localStorage.getItem(g);return e?JSON.parse(e):null},setSettings:function(e){window.localStorage.setItem(g,JSON.stringify(e))},parsePrivateKey:function(e){if(Array.isArray(e))return new Uint8Array(e);if("string"==typeof e){if(e.startsWith("0x")&&(e=e.slice(2)),64===e.length&&/^[0-9a-fA-F]+$/.test(e))return x(e);try{return C(e)}catch(e){throw new Error("Invalid private key format. Use hex (64 chars) or base58 format.")}}throw new Error("Private key must be a string (hex/base58) or number array")}},ve="message_channel";function be(e,t,r){try{var n=function(){if("undefined"==typeof document)return null;var e=document.querySelector('meta[name="'.concat("turnkey-telemetry-endpoint",'"]'));return e&&e.content&&"__TURNKEY_TELEMETRY_ENDPOINT__"!==e.content?e.content:null}();if(!n||"undefined"==typeof navigator||"function"!=typeof navigator.sendBeacon)return;var a=JSON.stringify({frame:"export-and-sign",channel:e,eventType:t||null,parentOrigin:r||null,timestamp:(new Date).toISOString()});navigator.sendBeacon(n,new Blob([a],{type:"application/json"}))}catch(e){}}var ge=r(2542),me=r(6092),he=r(7270);function we(e){return we="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},we(e)}function Ee(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function Se(e){for(var t=1;t3?(a=y===n)&&(u=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=p&&((a=r<2&&pn||n>y)&&(o[4]=r,o[5]=n,d.n=y,c=0))}if(a||r>1)return i;throw l=!0,n}return function(a,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&p(f,y),c=f,u=y;(t=c<2?e:u)||!l;){o||(c?c<3?(c>1&&(d.n=-1),p(c,u)):d.n=u:d.v=u);try{if(s=2,o){if(c||(a="next"),t=o[a]){if(!(t=t.call(o,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);o=e}else if((t=(l=d.n<0)?u:r.call(n,d))!==i)break}catch(t){o=e,c=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,a,o),!0),s}var i={};function c(){}function u(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(_e(t={},n,function(){return this}),t),l=s.prototype=c.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,_e(e,a,"GeneratorFunction")),e.prototype=Object.create(l),e}return u.prototype=s,_e(l,"constructor",s),_e(s,"constructor",u),u.displayName="GeneratorFunction",_e(s,a,"GeneratorFunction"),_e(l),_e(l,a,"Generator"),_e(l,n,function(){return this}),_e(l,"toString",function(){return"[object Generator]"}),(ke=function(){return{w:o,m:d}})()}function _e(e,t,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}_e=function(e,t,r,n){function o(t,r){_e(e,t,function(e){return this._invoke(t,r,e)})}t?a?a(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(o("next",0),o("throw",1),o("return",2))},_e(e,t,r,n)}function je(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,c=[],u=!0,s=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=o.call(r)).done)&&(c.push(n.value),c.length!==t);u=!0);}catch(e){s=!0,a=e}finally{try{if(!u&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Pe(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Pe(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Pe(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r= v2.0.0 to pass "organizationId" for security purposes.');case 8:if(a.organizationId&&a.organizationId===r){e.n=9;break}throw new Error("organization id does not match expected value. Expected: ".concat(r,". Found: ").concat(a.organizationId,"."));case 9:if(a.encappedPublic){e.n=10;break}throw new Error('missing "encappedPublic" in bundle signed data');case 10:if(a.ciphertext){e.n=11;break}throw new Error('missing "ciphertext" in bundle signed data');case 11:return e.a(2,a)}},e)}))).apply(this,arguments)}function Ke(e,t,r){return Ue.apply(this,arguments)}function Ue(){return Ue=Ie(ke().m(function e(t,r,n){var a,o,i,c,u;return ke().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,Ne(t,r);case 1:if(a=e.v,o=ye.uint8arrayFromHexString(a.encappedPublic),i=ye.uint8arrayFromHexString(a.ciphertext),u=xe){e.n=3;break}return e.n=2,ye.getEmbeddedKey();case 2:u=e.v;case 3:return c=u,e.n=4,n({ciphertextBuf:i,encappedKeyBuf:o,receiverPrivJwk:c});case 4:return e.a(2,e.v)}},e)})),Ue.apply(this,arguments)}function Ce(e){return Ge.apply(this,arguments)}function Ge(){return(Ge=Ie(ke().m(function e(t){var r,n,a;return ke().w(function(e){for(;;)switch(e.n){case 0:if(r=ye.getEmbeddedKey()){e.n=1;break}return ye.sendMessageUp("EMBEDDED_PUBLIC_KEY","",t),e.a(2);case 1:return e.n=2,ye.p256JWKPrivateToPublic(r);case 2:n=e.v,a=ye.uint8arrayToHexString(n),ye.sendMessageUp("EMBEDDED_PUBLIC_KEY",a,t);case 3:return e.a(2)}},e)}))).apply(this,arguments)}function Le(e,t,r,n){return Be.apply(this,arguments)}function Be(){return(Be=Ie(ke().m(function e(t,r,n,a){var o,i,c,u,s,f;return ke().w(function(e){for(;;)switch(e.n){case 0:if(i=new Uint8Array(r),"SOLANA"!==n){e.n=2;break}return c=ye.uint8arrayToHexString(i.subarray(0,32)),u=ye.getEd25519PublicKey(c),e.n=1,ye.encodeKey(i,n,u);case 1:o=e.v,e.n=4;break;case 2:return e.n=3,ye.encodeKey(i,n);case 3:o=e.v;case 4:if(s=t||"default","SOLANA"!==n){e.n=5;break}f=ge.AX.fromSecretKey(ye.base58Decode(o)),e.n=7;break;case 5:if("HEXADECIMAL"!==n){e.n=7;break}return e.n=6,tt(Array.from(ye.uint8arrayFromHexString(o)));case 6:f=e.v;case 7:Ae=Se(Se({},Ae),{},Oe({},s,{organizationId:a,privateKey:o,format:n,expiry:(new Date).getTime()+864e5,keypair:f}));case 8:return e.a(2)}},e)}))).apply(this,arguments)}function He(e,t,r,n,a,o){return Fe.apply(this,arguments)}function Fe(){return Fe=Ie(ke().m(function e(t,r,n,a,o,i){var c;return ke().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,Ke(n,r,i);case 1:return c=e.v,e.n=2,Le(o,c,a,r);case 2:ye.sendMessageUp("BUNDLE_INJECTED",!0,t);case 3:return e.a(2)}},e)})),Fe.apply(this,arguments)}function Ye(e,t){return qe.apply(this,arguments)}function qe(){return(qe=Ie(ke().m(function e(t,r){var n;return ke().w(function(e){for(;;)switch(e.n){case 0:n=ye.applySettings(t),ye.setSettings(n),ye.sendMessageUp("SETTINGS_APPLIED",!0,r);case 1:return e.a(2)}},e)}))).apply(this,arguments)}function ze(e,t,r){return Je.apply(this,arguments)}function Je(){return(Je=Ie(ke().m(function e(t,r,n){var a,o,i,c,u,s,f,l,d,p;return ke().w(function(e){for(;;)switch(e.n){case 0:if(it(o=Ae[a=n||"default"],a)){e.n=1;break}return e.a(2);case 1:if(i=JSON.parse(r),c=i.transaction,"SOLANA"!==(u=i.type)){e.n=3;break}return e.n=2,ct(o);case 2:f=e.v,l=ye.uint8arrayFromHexString(c),(d=ge.Kt.deserialize(l)).sign([f]),s=d.serialize(),e.n=6;break;case 3:if("ETHEREUM"!==u){e.n=5;break}return e.n=4,lt(o,c);case 4:s=e.v,e.n=6;break;case 5:throw new Error("unsupported transaction type");case 6:p="string"==typeof s?s:ye.uint8arrayToHexString(s),ye.sendMessageUp("TRANSACTION_SIGNED",p,t);case 7:return e.a(2)}},e)}))).apply(this,arguments)}function $e(e,t,r){return We.apply(this,arguments)}function We(){return We=Ie(ke().m(function e(t,r,o){var i,c,u,s,f,l,d,p,y,v,b;return ke().w(function(e){for(;;)switch(e.n){case 0:if(it(c=Ae[i=o||"default"],i)){e.n=1;break}return e.a(2);case 1:if(u=JSON.parse(r),s=u.message,f=u.type,l=De.encode(s),"SOLANA"!==f){e.n=3;break}return e.n=2,ct(c);case 2:p=e.v,n.jn.sha512Sync=function(){var e;return a.Zf((e=n.jn).concatBytes.apply(e,arguments))},y=p.secretKey.slice(0,32),v=n._S(l,y),d=ye.uint8arrayToHexString(v),e.n=7;break;case 3:if("ETHEREUM"!==f){e.n=6;break}return e.n=4,st(c);case 4:return b=e.v,e.n=5,b.signMessage({message:s});case 5:d=e.v,e.n=7;break;case 6:return ye.sendMessageUp("ERROR","unsupported message type",t),e.a(2);case 7:ye.sendMessageUp("MESSAGE_SIGNED",d,t);case 8:return e.a(2)}},e)})),We.apply(this,arguments)}function Xe(e,t){return Ve.apply(this,arguments)}function Ve(){return(Ve=Ie(ke().m(function e(t,r){return ke().w(function(e){for(;;)switch(e.n){case 0:if(r){e.n=1;break}return Ae={},ye.sendMessageUp("EMBEDDED_PRIVATE_KEY_CLEARED",!0,t),e.a(2);case 1:if(Ae[r]){e.n=2;break}return ye.sendMessageUp("ERROR",new Error("key not found for address ".concat(r,". Note that address is case sensitive.")).toString(),t),e.a(2);case 2:delete Ae[r],ye.sendMessageUp("EMBEDDED_PRIVATE_KEY_CLEARED",!0,t);case 3:return e.a(2)}},e)}))).apply(this,arguments)}function Qe(e,t,r,n){return Ze.apply(this,arguments)}function Ze(){return Ze=Ie(ke().m(function e(t,r,n,a){var o,i;return ke().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,Ke(n,r,a);case 1:return o=e.v,e.n=2,nt(new Uint8Array(o));case 2:i=e.v,xe=i,ye.sendMessageUp("EMBEDDED_KEY_OVERRIDE_SET",!0,t);case 3:return e.a(2)}},e)})),Ze.apply(this,arguments)}function et(e){xe=null,ye.sendMessageUp("RESET_TO_DEFAULT_EMBEDDED_KEY",!0,e)}function tt(e){return rt.apply(this,arguments)}function rt(){return(rt=Ie(ke().m(function e(t){var r,n;return ke().w(function(e){for(;;)switch(e.n){case 0:if(32!==(r=ye.parsePrivateKey(t)).length){e.n=1;break}n=ge.AX.fromSeed(r),e.n=3;break;case 1:if(64!==r.length){e.n=2;break}n=ge.AX.fromSecretKey(r),e.n=3;break;case 2:throw new Error("Invalid private key length: ".concat(r.length,". Expected 32 or 64 bytes."));case 3:return e.a(2,n)}},e)}))).apply(this,arguments)}function nt(e){return at.apply(this,arguments)}function at(){return(at=Ie(ke().m(function e(t){var r,n,a;return ke().w(function(e){for(;;)switch(e.n){case 0:if(32===t.length){e.n=1;break}throw new Error("invalid decryption key length: expected 32 bytes, got ".concat(t.length));case 1:return r=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),(n=new Uint8Array(r.length+32)).set(r),n.set(t,r.length),e.n=2,crypto.subtle.importKey("pkcs8",n,{name:"ECDH",namedCurve:"P-256"},!0,["deriveBits"]);case 2:return a=e.v,e.n=3,crypto.subtle.exportKey("jwk",a);case 3:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function ot(e){Ae[e]&&delete Ae[e]}function it(e,t){if(!e)throw new Error("key bytes not found. Please re-inject export bundle for address ".concat(t," into iframe. Note that address is case sensitive.")).toString();if((new Date).getTime()>=e.expiry)throw function(){for(var e=(new Date).getTime(),t=[],r=0,n=Object.entries(Ae);r=i.expiry&&t.push(o)}for(var c=0,u=t;c3?(a=y===n)&&(u=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=p&&((a=r<2&&pn||n>y)&&(o[4]=r,o[5]=n,d.n=y,c=0))}if(a||r>1)return i;throw l=!0,n}return function(a,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&p(f,y),c=f,u=y;(t=c<2?e:u)||!l;){o||(c?c<3?(c>1&&(d.n=-1),p(c,u)):d.n=u:d.v=u);try{if(s=2,o){if(c||(a="next"),t=o[a]){if(!(t=t.call(o,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);o=e}else if((t=(l=d.n<0)?u:r.call(n,d))!==i)break}catch(t){o=e,c=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,a,o),!0),s}var i={};function c(){}function u(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(gt(t={},n,function(){return this}),t),l=s.prototype=c.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,gt(e,a,"GeneratorFunction")),e.prototype=Object.create(l),e}return u.prototype=s,gt(l,"constructor",s),gt(s,"constructor",u),u.displayName="GeneratorFunction",gt(s,a,"GeneratorFunction"),gt(l),gt(l,a,"Generator"),gt(l,n,function(){return this}),gt(l,"toString",function(){return"[object Generator]"}),(bt=function(){return{w:o,m:d}})()}function gt(e,t,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}gt=function(e,t,r,n){function o(t,r){gt(e,t,function(e){return this._invoke(t,r,e)})}t?a?a(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(o("next",0),o("throw",1),o("return",2))},gt(e,t,r,n)}function mt(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function ht(e){for(var t=1;t3?(a=y===n)&&(u=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=p&&((a=r<2&&pn||n>y)&&(o[4]=r,o[5]=n,d.n=y,c=0))}if(a||r>1)return i;throw l=!0,n}return function(a,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&p(f,y),c=f,u=y;(t=c<2?e:u)||!l;){o||(c?c<3?(c>1&&(d.n=-1),p(c,u)):d.n=u:d.v=u);try{if(s=2,o){if(c||(a="next"),t=o[a]){if(!(t=t.call(o,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);o=e}else if((t=(l=d.n<0)?u:r.call(n,d))!==i)break}catch(t){o=e,c=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,a,o),!0),s}var i={};function c(){}function u(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(jt(t={},n,function(){return this}),t),l=s.prototype=c.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,jt(e,a,"GeneratorFunction")),e.prototype=Object.create(l),e}return u.prototype=s,jt(l,"constructor",s),jt(s,"constructor",u),u.displayName="GeneratorFunction",jt(s,a,"GeneratorFunction"),jt(l),jt(l,a,"Generator"),jt(l,n,function(){return this}),jt(l,"toString",function(){return"[object Generator]"}),(_t=function(){return{w:o,m:d}})()}function jt(e,t,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}jt=function(e,t,r,n){function o(t,r){jt(e,t,function(e){return this._invoke(t,r,e)})}t?a?a(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(o("next",0),o("throw",1),o("return",2))},jt(e,t,r,n)}function Pt(e,t,r,n,a,o,i){try{var c=e[o](i),u=c.value}catch(e){return void r(e)}c.done?t(u):Promise.resolve(u).then(n,a)}function Tt(e){return function(){var t=this,r=arguments;return new Promise(function(n,a){var o=e.apply(t,r);function i(e){Pt(o,n,a,i,c,"next",e)}function c(e){Pt(o,n,a,i,c,"throw",e)}i(void 0)})}}window.TKHQ=ye,document.addEventListener("DOMContentLoaded",Tt(_t().m(function e(){var t,r,n,a;return _t().w(function(e){for(;;)switch(e.n){case 0:if(pt(Ot),(t=ye.getSettings())&&ye.applySettings(t),window.parent!==window){e.n=2;break}return e.n=1,ye.initEmbeddedKey(window.location.origin);case 1:e.n=3;break;case 2:return e.n=3,ye.initEphemeralEmbeddedKey();case 3:return e.n=4,ye.getEmbeddedKey();case 4:return r=e.v,e.n=5,ye.p256JWKPrivateToPublic(r);case 5:n=e.v,a=ye.uint8arrayToHexString(n),document.getElementById("embedded-key").value=a,window.parent!==window&&ye.sendMessageUp("PUBLIC_KEY_READY",a);case 6:return e.a(2)}},e)})))},3846:e=>{"use strict";e.exports=crypto},7790:()=>{}},i={};function c(e){var t=i[e];if(void 0!==t)return t.exports;var r=i[e]={id:e,loaded:!1,exports:{}};return o[e].call(r.exports,r,r.exports,c),r.loaded=!0,r.exports}c.m=o,e=[],c.O=(t,r,n,a)=>{if(!r){var o=1/0;for(f=0;f=a)&&Object.keys(c.O).every(e=>c.O[e](r[u]))?r.splice(u--,1):(i=!1,a0&&e[f-1][2]>a;f--)e[f]=e[f-1];e[f]=[r,n,a]},c.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return c.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,c.t=function(e,n){if(1&n&&(e=this(e)),8&n)return e;if("object"==typeof e&&e){if(4&n&&e.__esModule)return e;if(16&n&&"function"==typeof e.then)return e}var a=Object.create(null);c.r(a);var o={};t=t||[null,r({}),r([]),r(r)];for(var i=2&n&&e;("object"==typeof i||"function"==typeof i)&&!~t.indexOf(i);i=r(i))Object.getOwnPropertyNames(i).forEach(t=>o[t]=()=>e[t]);return o.default=()=>e,c.d(a,o),a},c.d=(e,t)=>{for(var r in t)c.o(t,r)&&!c.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},c.f={},c.e=e=>Promise.all(Object.keys(c.f).reduce((t,r)=>(c.f[r](e,t),t),[])),c.u=e=>"bundle."+{291:"c9a8b8d5055f705bd308",825:"29203a225e88524b9cba"}[e]+".js",c.miniCssF=e=>{},c.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),c.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n={},a="export-and-sign:",c.l=(e,t,r,o)=>{if(n[e])n[e].push(t);else{var i,u;if(void 0!==r)for(var s=document.getElementsByTagName("script"),f=0;f{i.onerror=i.onload=null,clearTimeout(p);var a=n[e];if(delete n[e],i.parentNode&&i.parentNode.removeChild(i),a&&a.forEach(e=>e(r)),t)return t(r)},p=setTimeout(d.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=d.bind(null,i.onerror),i.onload=d.bind(null,i.onload),u&&document.head.appendChild(i)}},c.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),c.p="/",c.sriHashes={291:"sha384-NziyQFa0c+tM/folhGewwHGB+kndrJOhSqc+I6I58zjk3ee0ZF/F0HIPyk5cdxYN",825:"sha384-tka20zEdSvhDidwx3jpd3ODdJVt6y+tmsVdN//IcKAo80EdBzm93OpxaFjB9NQxL"},(()=>{var e={792:0};c.f.j=(t,r)=>{var n=c.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var a=new Promise((r,a)=>n=e[t]=[r,a]);r.push(n[2]=a);var o=c.p+c.u(t),i=new Error;c.l(o,r=>{if(c.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var a=r&&("load"===r.type?"missing":r.type),o=r&&r.target&&r.target.src;i.message="Loading chunk "+t+" failed.\n("+a+": "+o+")",i.name="ChunkLoadError",i.type=a,i.request=o,n[1](i)}},"chunk-"+t,t)}},c.O.j=t=>0===e[t];var t=(t,r)=>{var n,a,[o,i,u]=r,s=0;if(o.some(t=>0!==e[t])){for(n in i)c.o(i,n)&&(c.m[n]=i[n]);if(u)var f=u(c)}for(t&&t(r);sc(750));u=c.O(u)})(); +//# sourceMappingURL=bundle.6a4c3b0995683838803c.js.map \ No newline at end of file diff --git a/export-and-sign/dist/bundle.6f3ad536a859e78bdbd5.js.LICENSE.txt b/export-and-sign/dist/bundle.6a4c3b0995683838803c.js.LICENSE.txt similarity index 100% rename from export-and-sign/dist/bundle.6f3ad536a859e78bdbd5.js.LICENSE.txt rename to export-and-sign/dist/bundle.6a4c3b0995683838803c.js.LICENSE.txt diff --git a/export-and-sign/dist/bundle.6a4c3b0995683838803c.js.map b/export-and-sign/dist/bundle.6a4c3b0995683838803c.js.map new file mode 100644 index 00000000..1f1bc0a2 --- /dev/null +++ b/export-and-sign/dist/bundle.6a4c3b0995683838803c.js.map @@ -0,0 +1 @@ +{"version":3,"file":"bundle.6a4c3b0995683838803c.js","mappings":"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","sources":["webpack://export-and-sign/webpack/runtime/chunk loaded","webpack://export-and-sign/webpack/runtime/create fake namespace object","webpack://export-and-sign/webpack/runtime/load script","webpack://export-and-sign/../shared/turnkey-core.js","webpack://export-and-sign/./src/turnkey-core.js","webpack://export-and-sign/./src/telemetry.js","webpack://export-and-sign/./src/event-handlers.js","webpack://export-and-sign/../shared/crypto-utils.js","webpack://export-and-sign/./src/index.js","webpack://export-and-sign/external var \"crypto\"","webpack://export-and-sign/webpack/bootstrap","webpack://export-and-sign/webpack/runtime/compat get default export","webpack://export-and-sign/webpack/runtime/define property getters","webpack://export-and-sign/webpack/runtime/ensure chunk","webpack://export-and-sign/webpack/runtime/get javascript chunk filename","webpack://export-and-sign/webpack/runtime/get mini-css chunk filename","webpack://export-and-sign/webpack/runtime/global","webpack://export-and-sign/webpack/runtime/hasOwnProperty shorthand","webpack://export-and-sign/webpack/runtime/make namespace object","webpack://export-and-sign/webpack/runtime/node module decorator","webpack://export-and-sign/webpack/runtime/publicPath","webpack://export-and-sign/webpack/runtime/compat","webpack://export-and-sign/webpack/runtime/jsonp chunk loading","webpack://export-and-sign/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"export-and-sign:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t\tif (script.src.indexOf(window.location.origin + '/') !== 0) {\n\t\t\tscript.crossOrigin = \"anonymous\";\n\t\t}\n\t\tscript.integrity = __webpack_require__.sriHashes[chunkId];\n\t\tscript.crossOrigin = \"anonymous\";\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import { bech32 } from \"bech32\";\n\n/**\n * Turnkey Core Module - Shared\n * Contains all the core cryptographic and utility functions shared across frames\n */\n\n/** constants for LocalStorage */\nconst TURNKEY_TARGET_EMBEDDED_KEY = \"TURNKEY_TARGET_EMBEDDED_KEY\";\nconst TURNKEY_SETTINGS = \"TURNKEY_SETTINGS\";\n/** 48 hours in milliseconds */\nconst TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS = 1000 * 60 * 60 * 48;\n\nlet parentFrameMessageChannelPort = null;\nlet parentFrameTargetOrigin = \"*\";\nvar cryptoProviderOverride = null;\n\n/*\n * Returns a reference to the WebCrypto subtle interface regardless of the host environment.\n */\nfunction getSubtleCrypto() {\n if (cryptoProviderOverride && cryptoProviderOverride.subtle) {\n return cryptoProviderOverride.subtle;\n }\n if (\n typeof globalThis !== \"undefined\" &&\n globalThis.crypto &&\n globalThis.crypto.subtle\n ) {\n return globalThis.crypto.subtle;\n }\n if (typeof window !== \"undefined\" && window.crypto && window.crypto.subtle) {\n return window.crypto.subtle;\n }\n if (typeof global !== \"undefined\" && global.crypto && global.crypto.subtle) {\n return global.crypto.subtle;\n }\n if (typeof crypto !== \"undefined\" && crypto.subtle) {\n return crypto.subtle;\n }\n\n return null;\n}\n\n/*\n * Allows tests to explicitly set the crypto provider (e.g. crypto.webcrypto) when the runtime\n * environment does not expose one on the global/window objects.\n */\nfunction setCryptoProvider(cryptoProvider) {\n cryptoProviderOverride = cryptoProvider || null;\n}\n\n/* Security functions */\n\nfunction isDoublyIframed() {\n if (window.location.ancestorOrigins !== undefined) {\n // Does not exist in IE and firefox.\n // See https://developer.mozilla.org/en-US/docs/Web/API/Location/ancestorOrigins for how this works\n return window.location.ancestorOrigins.length > 1;\n } else {\n return window.parent !== window.top;\n }\n}\n\n/*\n * Loads the quorum public key as a CryptoKey.\n */\nasync function loadQuorumKey(quorumPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.importKey(\n \"raw\",\n quorumPublic,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n [\"verify\"]\n );\n}\n\n/*\n * Load a key to encrypt to as a CryptoKey and return it as a JSON Web Key.\n */\nasync function loadTargetKey(targetPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const targetKey = await subtle.importKey(\n \"raw\",\n targetPublic,\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n\n return await subtle.exportKey(\"jwk\", targetKey);\n}\n\n/**\n * Throws unless the caller provided an explicit storage key. Consumers must\n * choose a key slot deliberately (e.g. scoped by parent origin); an implicit\n * global default is what enabled cross-origin bundle replay (INT-697).\n * @param {string} storageKey\n */\nfunction requireStorageKey(storageKey) {\n if (typeof storageKey !== \"string\" || storageKey.length === 0) {\n throw new Error(\"an explicit embedded key storage key is required\");\n }\n}\n\n/**\n * Creates a new public/private key pair and persists it in localStorage\n * @param {string} storageKey localStorage key used for persistence\n */\nasync function initEmbeddedKey(storageKey) {\n requireStorageKey(storageKey);\n if (isDoublyIframed()) {\n throw new Error(\"Doubly iframed\");\n }\n const retrievedKey = await getEmbeddedKey(storageKey);\n if (retrievedKey === null) {\n const targetKey = await generateTargetKey();\n setEmbeddedKey(targetKey, storageKey);\n }\n // Nothing to do, key is correctly initialized!\n}\n\n/*\n * Generate a key to encrypt to and export it as a JSON Web Key.\n */\nasync function generateTargetKey() {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const p256key = await subtle.generateKey(\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n [\"deriveBits\"]\n );\n\n return await subtle.exportKey(\"jwk\", p256key.privateKey);\n}\n\n/**\n * Gets the current embedded private key JWK. Returns `null` if not found.\n * @param {string} storageKey localStorage key used for persistence\n */\nfunction getEmbeddedKey(storageKey) {\n requireStorageKey(storageKey);\n const jwtKey = getItemWithExpiry(storageKey);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the embedded private key JWK with the default expiration time.\n * @param {JsonWebKey} targetKey\n * @param {string} storageKey localStorage key used for persistence\n */\nfunction setEmbeddedKey(targetKey, storageKey) {\n requireStorageKey(storageKey);\n setItemWithExpiry(\n storageKey,\n JSON.stringify(targetKey),\n TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS\n );\n}\n\n/**\n * Gets the current target embedded private key JWK. Returns `null` if not found.\n */\nfunction getTargetEmbeddedKey() {\n const jwtKey = window.localStorage.getItem(TURNKEY_TARGET_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the target embedded public key JWK.\n * @param {JsonWebKey} targetKey\n */\nfunction setTargetEmbeddedKey(targetKey) {\n window.localStorage.setItem(\n TURNKEY_TARGET_EMBEDDED_KEY,\n JSON.stringify(targetKey)\n );\n}\n\n/**\n * Resets the current embedded private key JWK.\n * @param {string} storageKey localStorage key used for persistence\n */\nfunction onResetEmbeddedKey(storageKey) {\n requireStorageKey(storageKey);\n window.localStorage.removeItem(storageKey);\n}\n\n/**\n * Resets the current target embedded private key JWK.\n */\nfunction resetTargetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_TARGET_EMBEDDED_KEY);\n}\n\nfunction setParentFrameMessageChannelPort(port) {\n parentFrameMessageChannelPort = port;\n}\n\n/**\n * Restricts direct window.parent postMessages to the given origin. Used by\n * the legacy (< 2.1.0 iframe-stamper) path once the parent origin is bound,\n * so responses are only readable by that origin.\n * @param {string} origin\n */\nfunction setParentFrameOrigin(origin) {\n if (typeof origin !== \"string\" || origin.length === 0 || origin === \"*\") {\n throw new Error(\"a concrete parent frame origin is required\");\n }\n parentFrameTargetOrigin = origin;\n}\n\n/**\n * Gets the current settings.\n */\nfunction getSettings() {\n const settings = window.localStorage.getItem(TURNKEY_SETTINGS);\n return settings ? JSON.parse(settings) : null;\n}\n\n/**\n * Sets the settings object.\n * @param {Object} settings\n */\nfunction setSettings(settings) {\n window.localStorage.setItem(TURNKEY_SETTINGS, JSON.stringify(settings));\n}\n\n/**\n * Set an item in localStorage with an expiration time\n * @param {string} key\n * @param {string} value\n * @param {number} ttl expiration time in milliseconds\n */\nfunction setItemWithExpiry(key, value, ttl) {\n const now = new Date();\n const item = {\n value: value,\n expiry: now.getTime() + ttl,\n };\n window.localStorage.setItem(key, JSON.stringify(item));\n}\n\n/**\n * Get an item from localStorage. Returns `null` and\n * removes the item from localStorage if expired or\n * expiry time is missing.\n * @param {string} key\n */\nfunction getItemWithExpiry(key) {\n const itemStr = window.localStorage.getItem(key);\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n if (\n !Object.prototype.hasOwnProperty.call(item, \"expiry\") ||\n !Object.prototype.hasOwnProperty.call(item, \"value\")\n ) {\n window.localStorage.removeItem(key);\n return null;\n }\n const now = new Date();\n if (now.getTime() > item.expiry) {\n window.localStorage.removeItem(key);\n return null;\n }\n return item.value;\n}\n\n/**\n * Takes a hex string (e.g. \"e4567ab\" or \"0xe4567ab\") and returns an array buffer (Uint8Array)\n * @param {string} hexString - Hex string with or without \"0x\" prefix\n * @returns {Uint8Array}\n */\nfunction uint8arrayFromHexString(hexString) {\n if (!hexString || typeof hexString !== \"string\") {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n\n // Remove 0x prefix if present\n const hexWithoutPrefix =\n hexString.startsWith(\"0x\") || hexString.startsWith(\"0X\")\n ? hexString.slice(2)\n : hexString;\n\n var hexRegex = /^[0-9A-Fa-f]+$/;\n if (hexWithoutPrefix.length % 2 != 0 || !hexRegex.test(hexWithoutPrefix)) {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n return new Uint8Array(\n hexWithoutPrefix.match(/../g).map((h) => parseInt(h, 16))\n );\n}\n\n/**\n * Takes a Uint8Array and returns a hex string\n * @param {Uint8Array} buffer\n * @return {string}\n */\nfunction uint8arrayToHexString(buffer) {\n return [...buffer].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n/**\n * Function to normalize padding of byte array with 0's to a target length\n */\nfunction normalizePadding(byteArray, targetLength) {\n const paddingLength = targetLength - byteArray.length;\n\n // Add leading 0's to array\n if (paddingLength > 0) {\n const padding = new Uint8Array(paddingLength).fill(0);\n return new Uint8Array([...padding, ...byteArray]);\n }\n\n // Remove leading 0's from array\n if (paddingLength < 0) {\n const expectedZeroCount = paddingLength * -1;\n let zeroCount = 0;\n for (let i = 0; i < expectedZeroCount && i < byteArray.length; i++) {\n if (byteArray[i] === 0) {\n zeroCount++;\n }\n }\n // Check if the number of zeros found equals the number of zeroes expected\n if (zeroCount !== expectedZeroCount) {\n throw new Error(\n `invalid number of starting zeroes. Expected number of zeroes: ${expectedZeroCount}. Found: ${zeroCount}.`\n );\n }\n return byteArray.slice(expectedZeroCount, expectedZeroCount + targetLength);\n }\n return byteArray;\n}\n\n/**\n * Additional Associated Data (AAD) in the format dictated by the enclave_encrypt crate.\n */\nfunction additionalAssociatedData(senderPubBuf, receiverPubBuf) {\n const s = Array.from(new Uint8Array(senderPubBuf));\n const r = Array.from(new Uint8Array(receiverPubBuf));\n return new Uint8Array([...s, ...r]);\n}\n\n/**\n * Converts an ASN.1 DER-encoded ECDSA signature to the raw format that WebCrypto uses.\n */\nfunction fromDerSignature(derSignature) {\n const derSignatureBuf = uint8arrayFromHexString(derSignature);\n\n // Check and skip the sequence tag (0x30)\n let index = 2;\n\n // Parse 'r' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for r\"\n );\n }\n index++; // Move past the INTEGER tag\n const rLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const r = derSignatureBuf.slice(index, index + rLength);\n index += rLength; // Move to the start of s\n\n // Parse 's' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for s\"\n );\n }\n index++; // Move past the INTEGER tag\n const sLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const s = derSignatureBuf.slice(index, index + sLength);\n\n // Normalize 'r' and 's' to 32 bytes each\n const rPadded = normalizePadding(r, 32);\n const sPadded = normalizePadding(s, 32);\n\n // Concatenate and return the raw signature\n return new Uint8Array([...rPadded, ...sPadded]);\n}\n\n/**\n * Function to verify enclave signature on import bundle received from the server.\n * @param {string} enclaveQuorumPublic uncompressed public key for the quorum key which produced the signature\n * @param {string} publicSignature signature bytes encoded as a hexadecimal string\n * @param {string} signedData signed bytes encoded as a hexadecimal string. This could be public key bytes directly, or JSON-encoded bytes\n */\nasync function verifyEnclaveSignature(\n enclaveQuorumPublic,\n publicSignature,\n signedData\n) {\n /** Turnkey Signer enclave's public keys */\n const TURNKEY_SIGNERS_ENCLAVES = {\n prod: \"04cf288fe433cc4e1aa0ce1632feac4ea26bf2f5a09dcfe5a42c398e06898710330f0572882f4dbdf0f5304b8fc8703acd69adca9a4bbf7f5d00d20a5e364b2569\",\n preprod:\n \"04f3422b8afbe425d6ece77b8d2469954715a2ff273ab7ac89f1ed70e0a9325eaa1698b4351fd1b23734e65c0b6a86b62dd49d70b37c94606aac402cbd84353212\",\n dev: \"048cf9ed5f579298cc1571823a3222b82d80c529c551f6070fbe712ae1a9e8d1a23b7006e306d27190358dfcd9c44624918a00f23c920a33cb14f5b026eafc865d\",\n };\n\n // Use window.__TURNKEY_SIGNER_ENVIRONMENT__ if available (for testing), otherwise use the webpack replacement\n const environment =\n (typeof window !== \"undefined\" && window.__TURNKEY_SIGNER_ENVIRONMENT__) ||\n \"__TURNKEY_SIGNER_ENVIRONMENT__\";\n const TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY =\n TURNKEY_SIGNERS_ENCLAVES[environment];\n\n if (TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY === undefined) {\n throw new Error(\n `Configuration error: TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY is undefined`\n );\n }\n\n // todo(olivia): throw error if enclave quorum public is null once server changes are deployed\n if (enclaveQuorumPublic) {\n if (enclaveQuorumPublic !== TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY) {\n throw new Error(\n `enclave quorum public keys from client and bundle do not match. Client: ${TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY}. Bundle: ${enclaveQuorumPublic}.`\n );\n }\n }\n\n const encryptionQuorumPublicBuf = new Uint8Array(\n uint8arrayFromHexString(TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY)\n );\n const quorumKey = await loadQuorumKey(encryptionQuorumPublicBuf);\n if (!quorumKey) {\n throw new Error(\"failed to load quorum key\");\n }\n\n // The ECDSA signature is ASN.1 DER encoded but WebCrypto uses raw format\n const publicSignatureBuf = fromDerSignature(publicSignature);\n const signedDataBuf = uint8arrayFromHexString(signedData);\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.verify(\n { name: \"ECDSA\", hash: \"SHA-256\" },\n quorumKey,\n publicSignatureBuf,\n signedDataBuf\n );\n}\n\n/**\n * Function to send a message.\n *\n * If this page is embedded as an iframe we'll send a postMessage\n * in one of two ways depending on the version of @turnkey/iframe-stamper:\n * 1. newer versions (>=v2.1.0) pass a MessageChannel MessagePort from the parent frame for postMessages.\n * 2. older versions ( 0) {\n digits.push(carry % 58);\n carry = (carry / 58) | 0;\n }\n }\n // Convert digits to a base58 string\n for (let k = 0; k < digits.length; k++) {\n result = alphabet[digits[k]] + result;\n }\n\n // Add '1' for each leading 0 byte\n for (let i = 0; bytes[i] === 0 && i < bytes.length - 1; i++) {\n result = \"1\" + result;\n }\n return result;\n}\n\n/**\n * Decodes a base58-encoded string into a buffer\n * This function throws an error when the string contains invalid characters.\n * @param {string} s The base58-encoded string.\n * @return {Uint8Array} The decoded buffer.\n */\nfunction base58Decode(s) {\n // See https://en.bitcoin.it/wiki/Base58Check_encoding\n var alphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\n var decodedBytes = [];\n var leadingZeros = [];\n for (var i = 0; i < s.length; i++) {\n if (alphabet.indexOf(s[i]) === -1) {\n throw new Error(`cannot base58-decode: ${s[i]} isn't a valid character`);\n }\n var carry = alphabet.indexOf(s[i]);\n\n // If the current base58 digit is 0, append a 0 byte.\n // \"i == leadingZeros.length\" can only be true if we have not seen non-zero bytes so far.\n // If we had seen a non-zero byte, carry wouldn't be 0, and i would be strictly more than `leadingZeros.length`\n if (carry == 0 && i === leadingZeros.length) {\n leadingZeros.push(0);\n }\n\n var j = 0;\n while (j < decodedBytes.length || carry > 0) {\n var currentByte = decodedBytes[j];\n\n // shift the current byte 58 units and add the carry amount\n // (or just add the carry amount if this is a new byte -- undefined case)\n if (currentByte === undefined) {\n currentByte = carry;\n } else {\n currentByte = currentByte * 58 + carry;\n }\n\n // find the new carry amount (1-byte shift of current byte value)\n carry = currentByte >> 8;\n // reset the current byte to the remainder (the carry amount will pass on the overflow)\n decodedBytes[j] = currentByte % 256;\n j++;\n }\n }\n\n var result = leadingZeros.concat(decodedBytes.reverse());\n return new Uint8Array(result);\n}\n\n/**\n * Decodes a base58check-encoded string and verifies the checksum.\n * Base58Check encoding includes a 4-byte checksum at the end to detect errors.\n * The checksum is the first 4 bytes of SHA256(SHA256(payload)).\n * This function throws an error if the checksum is invalid.\n * @param {string} s The base58check-encoded string.\n * @return {Promise} The decoded payload (without checksum).\n */\nasync function base58CheckDecode(s) {\n const decoded = base58Decode(s);\n\n if (decoded.length < 5) {\n throw new Error(\n `invalid base58check length: expected at least 5 bytes, got ${decoded.length}`\n );\n }\n\n const payload = decoded.subarray(0, decoded.length - 4);\n const checksum = decoded.subarray(decoded.length - 4);\n\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n\n // Compute double SHA256 hash\n const hash1Buf = await subtle.digest(\"SHA-256\", payload);\n const hash1 = new Uint8Array(hash1Buf);\n const hash2Buf = await subtle.digest(\"SHA-256\", hash1);\n const hash2 = new Uint8Array(hash2Buf);\n const computedChecksum = hash2.subarray(0, 4);\n\n // Verify checksum\n const mismatch =\n (checksum[0] ^ computedChecksum[0]) |\n (checksum[1] ^ computedChecksum[1]) |\n (checksum[2] ^ computedChecksum[2]) |\n (checksum[3] ^ computedChecksum[3]);\n if (mismatch !== 0) {\n throw new Error(\"invalid base58check checksum\");\n }\n\n return payload;\n}\n\n/**\n * Returns private key bytes from a private key, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {string} privateKey\n * @param {string} keyFormat Can be \"HEXADECIMAL\", \"SUI_BECH32\", \"BITCOIN_MAINNET_WIF\", \"BITCOIN_TESTNET_WIF\" or \"SOLANA\"\n * @return {Promise}\n */\nasync function decodeKey(privateKey, keyFormat) {\n switch (keyFormat) {\n case \"SOLANA\": {\n const decodedKeyBytes = base58Decode(privateKey);\n if (decodedKeyBytes.length !== 64) {\n throw new Error(\n `invalid key length. Expected 64 bytes. Got ${decodedKeyBytes.length}.`\n );\n }\n return decodedKeyBytes.subarray(0, 32);\n }\n case \"HEXADECIMAL\":\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n case \"BITCOIN_MAINNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0x80 = mainnet\n if (version !== 0x80) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0x80 (mainnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"BITCOIN_TESTNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0xEF = testnet\n if (version !== 0xef) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0xEF (testnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"SUI_BECH32\": {\n const { prefix, words } = bech32.decode(privateKey);\n\n if (prefix !== \"suiprivkey\") {\n throw new Error(\n `invalid SUI private key human-readable part (HRP): expected \"suiprivkey\"`\n );\n }\n\n const bytes = bech32.fromWords(words);\n if (bytes.length !== 33) {\n throw new Error(\n `invalid SUI private key length: expected 33 bytes, got ${bytes.length}`\n );\n }\n\n const schemeFlag = bytes[0];\n const privkey = bytes.slice(1);\n\n // schemeFlag = 0 is Ed25519; We currently only support Ed25519 keys for SUI.\n if (schemeFlag !== 0) {\n throw new Error(\n `invalid SUI private key scheme flag: expected 0 (Ed25519). Turnkey only supports Ed25519 keys for SUI.`\n );\n }\n\n return new Uint8Array(privkey);\n }\n default:\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n }\n}\n\n/**\n * Returns a private key from private key bytes, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {Uint8Array} privateKeyBytes\n * @param {string} keyFormat Can be \"HEXADECIMAL\" or \"SOLANA\"\n */\nasync function encodeKey(privateKeyBytes, keyFormat, publicKeyBytes) {\n switch (keyFormat) {\n case \"SOLANA\":\n if (!publicKeyBytes) {\n throw new Error(\"public key must be specified for SOLANA key format\");\n }\n if (privateKeyBytes.length !== 32) {\n throw new Error(\n `invalid private key length. Expected 32 bytes. Got ${privateKeyBytes.length}.`\n );\n }\n if (publicKeyBytes.length !== 32) {\n throw new Error(\n `invalid public key length. Expected 32 bytes. Got ${publicKeyBytes.length}.`\n );\n }\n {\n const concatenatedBytes = new Uint8Array(64);\n concatenatedBytes.set(privateKeyBytes, 0);\n concatenatedBytes.set(publicKeyBytes, 32);\n return base58Encode(concatenatedBytes);\n }\n case \"HEXADECIMAL\":\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n default:\n // keeping console.warn for debugging purposes.\n // eslint-disable-next-line no-console\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n }\n}\n\n// Helper to parse a private key into a Solana base58 private key.\n// To be used if a wallet account is exported without the `SOLANA` address format.\nfunction parsePrivateKey(privateKey) {\n if (Array.isArray(privateKey)) {\n return new Uint8Array(privateKey);\n }\n\n if (typeof privateKey === \"string\") {\n // Remove 0x prefix if present\n if (privateKey.startsWith(\"0x\")) {\n privateKey = privateKey.slice(2);\n }\n\n // Check if it's hex-formatted correctly (i.e. 64 hex chars)\n if (privateKey.length === 64 && /^[0-9a-fA-F]+$/.test(privateKey)) {\n return uint8arrayFromHexString(privateKey);\n }\n\n // Otherwise assume it's base58 format (for Solana)\n try {\n return base58Decode(privateKey);\n } catch (error) {\n throw new Error(\n \"Invalid private key format. Use hex (64 chars) or base58 format.\"\n );\n }\n }\n\n throw new Error(\"Private key must be a string (hex/base58) or number array\");\n}\n\n/**\n * Function to validate and sanitize the styles object using the accepted map of style keys and values (as regular expressions).\n * Any invalid style throws an error. Returns an object of valid styles.\n * @param {Object} styles\n * @param {HTMLElement} element - Optional element parameter (for import frame)\n * @return {Object}\n */\nfunction validateStyles(styles, element) {\n const validStyles = {};\n\n const cssValidationRegex = {\n padding: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n margin: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n borderWidth: \"^(\\\\d+(px|em|rem) ?){1,4}$\",\n borderStyle:\n \"^(none|solid|dashed|dotted|double|groove|ridge|inset|outset)$\",\n borderColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n borderRadius: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n fontSize: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax))$\",\n fontWeight: \"^(normal|bold|bolder|lighter|\\\\d{3})$\",\n fontFamily: '^[^\";<>]*$', // checks for the absence of some characters that could lead to CSS/HTML injection\n color:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n labelColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n backgroundColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n width: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n height: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n maxWidth: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n maxHeight:\n \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n lineHeight:\n \"^(\\\\d+(\\\\.\\\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$\",\n boxShadow:\n \"^(none|(\\\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)) ?(inset)?)$\",\n textAlign: \"^(left|right|center|justify|initial|inherit)$\",\n overflowWrap: \"^(normal|break-word|anywhere)$\",\n wordWrap: \"^(normal|break-word)$\",\n resize: \"^(none|both|horizontal|vertical|block|inline)$\",\n };\n\n Object.entries(styles).forEach(([property, value]) => {\n const styleProperty = property.trim();\n if (styleProperty.length === 0) {\n throw new Error(\"css style property cannot be empty\");\n }\n const styleRegexStr = cssValidationRegex[styleProperty];\n if (!styleRegexStr) {\n throw new Error(\n `invalid or unsupported css style property: \"${styleProperty}\"`\n );\n }\n const styleRegex = new RegExp(styleRegexStr);\n const styleValue = value.trim();\n if (styleValue.length == 0) {\n throw new Error(`css style for \"${styleProperty}\" is empty`);\n }\n const isValidStyle = styleRegex.test(styleValue);\n if (!isValidStyle) {\n throw new Error(\n `invalid css style value for property \"${styleProperty}\"`\n );\n }\n validStyles[styleProperty] = styleValue;\n });\n\n return validStyles;\n}\n\n// Export all shared functions\nexport {\n setCryptoProvider,\n getSubtleCrypto,\n isDoublyIframed,\n loadQuorumKey,\n loadTargetKey,\n initEmbeddedKey,\n generateTargetKey,\n getEmbeddedKey,\n setEmbeddedKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n onResetEmbeddedKey,\n resetTargetEmbeddedKey,\n setParentFrameMessageChannelPort,\n setParentFrameOrigin,\n getSettings,\n setSettings,\n setItemWithExpiry,\n getItemWithExpiry,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n normalizePadding,\n additionalAssociatedData,\n fromDerSignature,\n verifyEnclaveSignature,\n sendMessageUp,\n logMessage,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n base58CheckDecode,\n decodeKey,\n encodeKey,\n parsePrivateKey,\n validateStyles,\n};\n","import * as nobleEd25519 from \"@noble/ed25519\";\nimport * as nobleHashes from \"@noble/hashes/sha512\";\nimport { fromDerSignature } from \"@turnkey/crypto\";\nimport * as SharedTKHQ from \"@shared/turnkey-core.js\";\n\nconst {\n initEmbeddedKey: sharedInitEmbeddedKey,\n generateTargetKey,\n setItemWithExpiry,\n getItemWithExpiry,\n getEmbeddedKey: sharedGetEmbeddedKey,\n setEmbeddedKey: sharedSetEmbeddedKey,\n onResetEmbeddedKey: sharedOnResetEmbeddedKey,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n encodeKey,\n sendMessageUp,\n logMessage,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n setParentFrameMessageChannelPort,\n setParentFrameOrigin,\n normalizePadding,\n additionalAssociatedData,\n getSettings,\n setSettings,\n parsePrivateKey,\n validateStyles,\n isDoublyIframed,\n loadQuorumKey,\n} = SharedTKHQ;\n\nconst LEGACY_EMBEDDED_KEY = \"TURNKEY_EMBEDDED_KEY\";\nconst LEGACY_EMBEDDED_KEY_ORIGIN = \"TURNKEY_EMBEDDED_KEY_ORIGIN\";\nconst ORIGIN_SCOPED_EMBEDDED_KEY_PREFIX = \"TURNKEY_EMBEDDED_KEY_V2\";\n\n// Embedded key state for this document, keyed by window so it is tied to the\n// document lifetime. Two shapes:\n// { mode: \"persistent\", origin, storageKey, ready } -- key lives in\n// localStorage, scoped to the browser-authenticated parent origin (or\n// this document's own origin in standalone mode). `ready` resolves once\n// the key has actually been persisted; readers racing the handshake must\n// await it before calling getEmbeddedKey.\n// { mode: \"ephemeral\", key } -- key lives in memory only. Used for legacy\n// (@turnkey/iframe-stamper < 2.1.0) parents: because the key is unique to\n// this document and never persisted, an unrelated embedder can never\n// obtain a key that decrypts another application's bundles (INT-697).\nconst embeddedKeyStates = new WeakMap();\n\nfunction validateParentOrigin(parentOrigin) {\n if (\n typeof parentOrigin !== \"string\" ||\n parentOrigin.length === 0 ||\n parentOrigin === \"null\"\n ) {\n throw new Error(\"a non-opaque parent origin is required\");\n }\n\n const parsedOrigin = new URL(parentOrigin).origin;\n if (parsedOrigin !== parentOrigin) {\n throw new Error(`invalid parent origin: ${parentOrigin}`);\n }\n\n return parsedOrigin;\n}\n\n// Never migrate the old global key: doing so would preserve the cross-origin\n// replay vulnerability for bundles encrypted before this change.\nfunction purgeLegacyEmbeddedKey() {\n window.localStorage.removeItem(LEGACY_EMBEDDED_KEY);\n window.localStorage.removeItem(LEGACY_EMBEDDED_KEY_ORIGIN);\n}\n\n/**\n * Creates (if needed) the persistent embedded key scoped to the given parent\n * origin and persists it in localStorage. A document can bind to exactly one\n * parent origin; an ephemeral key, if any, is superseded.\n * @param {string} parentOrigin\n */\nasync function initEmbeddedKey(parentOrigin) {\n if (isDoublyIframed()) {\n throw new Error(\"Doubly iframed\");\n }\n const validatedOrigin = validateParentOrigin(parentOrigin);\n const previousState = embeddedKeyStates.get(window);\n if (\n previousState?.mode === \"persistent\" &&\n previousState.origin !== validatedOrigin\n ) {\n throw new Error(\n `parent origin is already bound to ${previousState.origin}; refusing ${validatedOrigin}`\n );\n }\n purgeLegacyEmbeddedKey();\n const storageKey = `${ORIGIN_SCOPED_EMBEDDED_KEY_PREFIX}:${encodeURIComponent(\n validatedOrigin\n )}`;\n const state = { mode: \"persistent\", origin: validatedOrigin, storageKey };\n // The state is activated synchronously so a concurrent ephemeral init\n // cannot clobber it, but the key does not exist in localStorage until\n // sharedInitEmbeddedKey resolves; `ready` lets racing readers wait for it.\n // If persistence fails (e.g. blocked third-party storage), roll back so the\n // document keeps operating on its previous key and a retry is possible.\n state.ready = sharedInitEmbeddedKey(storageKey).catch((error) => {\n if (embeddedKeyStates.get(window) === state) {\n if (previousState) {\n embeddedKeyStates.set(window, previousState);\n } else {\n embeddedKeyStates.delete(window);\n }\n }\n throw error;\n });\n embeddedKeyStates.set(window, state);\n return await state.ready;\n}\n\n/**\n * Creates (if needed) an in-memory embedded key unique to this document, for\n * legacy (@turnkey/iframe-stamper < 2.1.0) parents that speak direct\n * postMessage. No-ops if a persistent origin-scoped key is already active\n * (i.e. the MessageChannel handshake completed first).\n */\nasync function initEphemeralEmbeddedKey() {\n if (isDoublyIframed()) {\n throw new Error(\"Doubly iframed\");\n }\n const state = embeddedKeyStates.get(window);\n if (state?.mode === \"persistent\") {\n // Wait for the in-flight persistence so callers can read the key.\n return await state.ready;\n }\n if (state?.key) {\n return;\n }\n purgeLegacyEmbeddedKey();\n const generatedKey = await generateTargetKey();\n // Re-check: a MessageChannel handshake may have activated a persistent key\n // while key generation was in flight; it must not be clobbered. Wait for it\n // so callers can read the key; if it fails (and rolls itself back), the\n // ephemeral key takes over below.\n const latestState = embeddedKeyStates.get(window);\n if (latestState?.mode === \"persistent\") {\n try {\n return await latestState.ready;\n } catch {\n // fall through to the ephemeral key\n }\n }\n if (embeddedKeyStates.get(window)?.mode !== \"persistent\") {\n embeddedKeyStates.set(window, { mode: \"ephemeral\", key: generatedKey });\n }\n}\n\nfunction getEmbeddedKey() {\n const state = embeddedKeyStates.get(window);\n if (!state) {\n return null;\n }\n return state.mode === \"persistent\"\n ? sharedGetEmbeddedKey(state.storageKey)\n : state.key;\n}\n\nfunction setEmbeddedKey(targetKey) {\n const state = embeddedKeyStates.get(window);\n if (!state) {\n throw new Error(\"embedded key has not been initialized\");\n }\n if (state.mode === \"persistent\") {\n sharedSetEmbeddedKey(targetKey, state.storageKey);\n } else {\n state.key = targetKey;\n }\n}\n\nfunction onResetEmbeddedKey() {\n const state = embeddedKeyStates.get(window);\n if (!state) {\n throw new Error(\"embedded key has not been initialized\");\n }\n if (state.mode === \"persistent\") {\n sharedOnResetEmbeddedKey(state.storageKey);\n } else {\n state.key = null;\n }\n}\n\n/**\n * Function to verify enclave signature on import bundle received from the server.\n * @param {string} enclaveQuorumPublic uncompressed public key for the quorum key which produced the signature\n * @param {string} publicSignature signature bytes encoded as a hexadecimal string\n * @param {string} signedData signed bytes encoded as a hexadecimal string. This could be public key bytes directly, or JSON-encoded bytes\n */\nasync function verifyEnclaveSignature(\n enclaveQuorumPublic,\n publicSignature,\n signedData\n) {\n /** Turnkey Signer enclave's public keys */\n const TURNKEY_SIGNERS_ENCLAVES = {\n prod: \"04cf288fe433cc4e1aa0ce1632feac4ea26bf2f5a09dcfe5a42c398e06898710330f0572882f4dbdf0f5304b8fc8703acd69adca9a4bbf7f5d00d20a5e364b2569\",\n preprod:\n \"04f3422b8afbe425d6ece77b8d2469954715a2ff273ab7ac89f1ed70e0a9325eaa1698b4351fd1b23734e65c0b6a86b62dd49d70b37c94606aac402cbd84353212\",\n };\n\n // Read environment from meta tag (templated at deploy time), fall back to window variable (for testing)\n let environment = null;\n if (typeof document !== \"undefined\") {\n const meta = document.querySelector(\n 'meta[name=\"turnkey-signer-environment\"]'\n );\n if (\n meta &&\n meta.content &&\n meta.content !== \"__TURNKEY_SIGNER_ENVIRONMENT__\"\n ) {\n environment = meta.content;\n }\n }\n if (!environment && typeof window !== \"undefined\") {\n environment = window.__TURNKEY_SIGNER_ENVIRONMENT__;\n }\n const TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY =\n TURNKEY_SIGNERS_ENCLAVES[environment];\n\n if (TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY === undefined) {\n throw new Error(\n `Configuration error: TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY is undefined`\n );\n }\n\n if (enclaveQuorumPublic !== TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY) {\n throw new Error(\n `enclave quorum public keys from client and bundle do not match. Client: ${TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY}. Bundle: ${enclaveQuorumPublic}.`\n );\n }\n\n const encryptionQuorumPublicBuf = new Uint8Array(\n uint8arrayFromHexString(TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY)\n );\n const quorumKey = await loadQuorumKey(encryptionQuorumPublicBuf);\n if (!quorumKey) {\n throw new Error(\"failed to load quorum key\");\n }\n\n // The ECDSA signature is ASN.1 DER encoded but WebCrypto uses raw format\n const publicSignatureBuf = fromDerSignature(publicSignature);\n const signedDataBuf = uint8arrayFromHexString(signedData);\n return await crypto.subtle.verify(\n { name: \"ECDSA\", hash: \"SHA-256\" },\n quorumKey,\n publicSignatureBuf,\n signedDataBuf\n );\n}\n\n/**\n * Returns the public key bytes for a hex-encoded Ed25519 private key.\n * @param {string} privateKeyHex\n */\nfunction getEd25519PublicKey(privateKeyHex) {\n nobleEd25519.etc.sha512Sync = (...m) =>\n nobleHashes.sha512(nobleEd25519.etc.concatBytes(...m));\n return nobleEd25519.getPublicKey(privateKeyHex);\n}\n\n/**\n * Function to apply settings on this page. For now, the only settings that can be applied\n * are for \"styles\". Upon successful application, return the valid, sanitized settings JSON string.\n * @param {string} settings\n * @return {string}\n */\nfunction applySettings(settings) {\n const validSettings = {};\n if (!settings) {\n return JSON.stringify(validSettings);\n }\n const settingsObj = JSON.parse(settings);\n if (settingsObj.styles) {\n // Valid styles will be applied the \"key-div\" div HTML element.\n const keyDivTextarea = document.getElementById(\"key-div\");\n if (!keyDivTextarea) {\n throw new Error(\"no key-div HTML element found to apply settings to.\");\n }\n\n // Validate, sanitize, and apply the styles to the \"key-div\" div element.\n const validStyles = validateStyles(settingsObj.styles);\n Object.entries(validStyles).forEach(([key, value]) => {\n keyDivTextarea.style[key] = value;\n });\n\n validSettings[\"styles\"] = validStyles;\n }\n\n return JSON.stringify(validSettings);\n}\n\nexport const TKHQ = {\n initEmbeddedKey,\n initEphemeralEmbeddedKey,\n generateTargetKey,\n setItemWithExpiry,\n getItemWithExpiry,\n getEmbeddedKey,\n setEmbeddedKey,\n onResetEmbeddedKey,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n encodeKey,\n sendMessageUp,\n logMessage,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n setParentFrameMessageChannelPort,\n setParentFrameOrigin,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n getEd25519PublicKey,\n applySettings,\n validateStyles,\n getSettings,\n setSettings,\n parsePrivateKey,\n};\n","/**\n * Best-effort telemetry distinguishing modern MessageChannel clients from\n * legacy direct-postMessage clients (@turnkey/iframe-stamper < 2.1.0). This\n * exists to size and monitor the legacy migration for INT-697. It must never\n * interfere with the export/signing flow: failures are swallowed and nothing\n * is sent unless the deployment templates an endpoint into the page.\n */\n\nexport const CHANNEL_MESSAGE_CHANNEL = \"message_channel\";\nexport const CHANNEL_LEGACY_POST_MESSAGE = \"legacy_post_message\";\n\nconst TELEMETRY_ENDPOINT_META_NAME = \"turnkey-telemetry-endpoint\";\nconst TELEMETRY_ENDPOINT_PLACEHOLDER = \"__TURNKEY_TELEMETRY_ENDPOINT__\";\n\nfunction getTelemetryEndpoint() {\n if (typeof document === \"undefined\") {\n return null;\n }\n const meta = document.querySelector(\n `meta[name=\"${TELEMETRY_ENDPOINT_META_NAME}\"]`\n );\n if (\n !meta ||\n !meta.content ||\n meta.content === TELEMETRY_ENDPOINT_PLACEHOLDER\n ) {\n return null;\n }\n return meta.content;\n}\n\n/**\n * Records one operation received over a parent communication channel.\n * @param {string} channel CHANNEL_MESSAGE_CHANNEL or CHANNEL_LEGACY_POST_MESSAGE\n * @param {string} eventType the message type that was processed\n * @param {string} [parentOrigin] origin of the embedding document, if known\n */\nexport function recordChannelTelemetry(channel, eventType, parentOrigin) {\n try {\n const endpoint = getTelemetryEndpoint();\n if (\n !endpoint ||\n typeof navigator === \"undefined\" ||\n typeof navigator.sendBeacon !== \"function\"\n ) {\n return;\n }\n const payload = JSON.stringify({\n frame: \"export-and-sign\",\n channel,\n eventType: eventType || null,\n parentOrigin: parentOrigin || null,\n timestamp: new Date().toISOString(),\n });\n navigator.sendBeacon(\n endpoint,\n new Blob([payload], { type: \"application/json\" })\n );\n } catch {\n // Telemetry must never break the signing flow; drop the sample.\n }\n}\n","import { TKHQ } from \"./turnkey-core.js\";\nimport {\n recordChannelTelemetry,\n CHANNEL_MESSAGE_CHANNEL,\n CHANNEL_LEGACY_POST_MESSAGE,\n} from \"./telemetry.js\";\nimport { Keypair, VersionedTransaction } from \"@solana/web3.js\";\nimport { parseTransaction } from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport * as nobleEd25519 from \"@noble/ed25519\";\nimport * as nobleHashes from \"@noble/hashes/sha512\";\n\n// Persist keys in memory via mapping of { address --> pk }\nlet inMemoryKeys = {};\n\n// Injected embedded key -- held in memory only, never persisted.\n// When set, decryptBundle uses this P-256 JWK instead of the iframe's embedded key.\nlet injectedEmbeddedKey = null;\n\nexport const DEFAULT_TTL_MILLISECONDS = 1000 * 24 * 60 * 60; // 24 hours or 86,400,000 milliseconds\n\n// Instantiate these once (for perf)\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\n/**\n * Verifies the enclave signature on a v1.0.0 bundle and returns the parsed signed data.\n * @param {string} bundle - JSON-stringified bundle\n * @param {string} organizationId - Expected organization ID\n * @returns {Promise} - The parsed signed data {organizationId, encappedPublic, ciphertext}\n */\nasync function verifyAndParseBundleData(bundle, organizationId) {\n const bundleObj = JSON.parse(bundle);\n\n if (bundleObj.version !== \"v1.0.0\") {\n throw new Error(`unsupported version: ${bundleObj.version}`);\n }\n if (!bundleObj.data) {\n throw new Error('missing \"data\" in bundle');\n }\n if (!bundleObj.dataSignature) {\n throw new Error('missing \"dataSignature\" in bundle');\n }\n if (!bundleObj.enclaveQuorumPublic) {\n throw new Error('missing \"enclaveQuorumPublic\" in bundle');\n }\n\n if (!TKHQ.verifyEnclaveSignature) {\n throw new Error(\"method TKHQ.verifyEnclaveSignature not loaded\");\n }\n const verified = await TKHQ.verifyEnclaveSignature(\n bundleObj.enclaveQuorumPublic,\n bundleObj.dataSignature,\n bundleObj.data\n );\n if (!verified) {\n throw new Error(\n `failed to verify enclave signature. Got signature: ${bundleObj.dataSignature}, enclaveQuorumPublic: ${bundleObj.enclaveQuorumPublic}`\n );\n }\n\n const signedData = JSON.parse(\n textDecoder.decode(TKHQ.uint8arrayFromHexString(bundleObj.data))\n );\n\n if (!organizationId) {\n throw new Error(\n `organization id is required. Please ensure you are using @turnkey/iframe-stamper >= v2.0.0 to pass \"organizationId\" for security purposes.`\n );\n } else if (\n !signedData.organizationId ||\n signedData.organizationId !== organizationId\n ) {\n throw new Error(\n `organization id does not match expected value. Expected: ${organizationId}. Found: ${signedData.organizationId}.`\n );\n }\n\n if (!signedData.encappedPublic) {\n throw new Error('missing \"encappedPublic\" in bundle signed data');\n }\n if (!signedData.ciphertext) {\n throw new Error('missing \"ciphertext\" in bundle signed data');\n }\n\n return signedData;\n}\n\n/**\n * Parse and decrypt the export bundle.\n * The `bundle` param is a JSON string of the encapsulated public\n * key, encapsulated public key signature, and the ciphertext.\n * @param {string} bundle\n * @param {string} organizationId\n * @param {Function} HpkeDecrypt\n */\nasync function decryptBundle(bundle, organizationId, HpkeDecrypt) {\n const signedData = await verifyAndParseBundleData(bundle, organizationId);\n\n const encappedKeyBuf = TKHQ.uint8arrayFromHexString(\n signedData.encappedPublic\n );\n const ciphertextBuf = TKHQ.uint8arrayFromHexString(signedData.ciphertext);\n\n // Use the injected embedded key if available, otherwise fall back to the embedded key\n const receiverPrivJwk = injectedEmbeddedKey || (await TKHQ.getEmbeddedKey());\n return await HpkeDecrypt({\n ciphertextBuf,\n encappedKeyBuf,\n receiverPrivJwk,\n });\n}\n\n/**\n * Function triggered when GET_EMBEDDED_PUBLIC_KEY event is received.\n * @param {string} requestId\n */\nasync function onGetPublicEmbeddedKey(requestId) {\n const embeddedKeyJwk = TKHQ.getEmbeddedKey();\n\n if (!embeddedKeyJwk) {\n TKHQ.sendMessageUp(\"EMBEDDED_PUBLIC_KEY\", \"\", requestId); // no key == empty string\n\n return;\n }\n\n const targetPubBuf = await TKHQ.p256JWKPrivateToPublic(embeddedKeyJwk);\n const targetPubHex = TKHQ.uint8arrayToHexString(targetPubBuf);\n\n // Send up EMBEDDED_PUBLIC_KEY message\n TKHQ.sendMessageUp(\"EMBEDDED_PUBLIC_KEY\", targetPubHex, requestId);\n}\n\n/**\n * Encodes raw key bytes and loads them into the in-memory key store.\n * @param {string} address - Wallet address (case-sensitive)\n * @param {ArrayBuffer} keyBytes - Raw decrypted private key bytes\n * @param {string} keyFormat - \"SOLANA\" | \"HEXADECIMAL\"\n * @param {string} organizationId - Organization ID\n */\nasync function loadKeyIntoMemory(address, keyBytes, keyFormat, organizationId) {\n let key;\n const privateKeyBytes = new Uint8Array(keyBytes);\n\n if (keyFormat === \"SOLANA\") {\n const privateKeyHex = TKHQ.uint8arrayToHexString(\n privateKeyBytes.subarray(0, 32)\n );\n const publicKeyBytes = TKHQ.getEd25519PublicKey(privateKeyHex);\n key = await TKHQ.encodeKey(privateKeyBytes, keyFormat, publicKeyBytes);\n } else {\n key = await TKHQ.encodeKey(privateKeyBytes, keyFormat);\n }\n\n const keyAddress = address || \"default\";\n\n // Cache keypair for improved signing perf\n let cachedKeypair;\n if (keyFormat === \"SOLANA\") {\n cachedKeypair = Keypair.fromSecretKey(TKHQ.base58Decode(key));\n } else if (keyFormat === \"HEXADECIMAL\") {\n cachedKeypair = await createSolanaKeypair(\n Array.from(TKHQ.uint8arrayFromHexString(key))\n );\n }\n\n inMemoryKeys = {\n ...inMemoryKeys,\n [keyAddress]: {\n organizationId,\n privateKey: key,\n format: keyFormat,\n expiry: new Date().getTime() + DEFAULT_TTL_MILLISECONDS,\n keypair: cachedKeypair,\n },\n };\n}\n\n/**\n * Function triggered when INJECT_KEY_EXPORT_BUNDLE event is received.\n * @param {string} requestId\n * @param {string} organizationId\n * @param {string} bundle\n * @param {string} keyFormat\n * @param {string} address\n * @param {Function} HpkeDecrypt // TODO: import this directly (instead of passing around)\n */\nasync function onInjectKeyBundle(\n requestId,\n organizationId,\n bundle,\n keyFormat,\n address,\n HpkeDecrypt\n) {\n // Decrypt the export bundle\n const keyBytes = await decryptBundle(bundle, organizationId, HpkeDecrypt);\n\n // Load decrypted key into memory\n await loadKeyIntoMemory(address, keyBytes, keyFormat, organizationId);\n\n // Send up BUNDLE_INJECTED message\n TKHQ.sendMessageUp(\"BUNDLE_INJECTED\", true, requestId);\n}\n\n/**\n * Function triggered when APPLY_SETTINGS event is received.\n * For now, the only settings that can be applied are for \"styles\".\n * Persist them in local storage so they can be applied on every\n * page load.\n * @param {string} settings: JSON-stringified settings\n * @param {string} requestId\n */\nasync function onApplySettings(settings, requestId) {\n // Apply settings\n const validSettings = TKHQ.applySettings(settings);\n\n // Persist in local storage\n TKHQ.setSettings(validSettings);\n\n // Send up SETTINGS_APPLIED message\n TKHQ.sendMessageUp(\"SETTINGS_APPLIED\", true, requestId);\n}\n\n/**\n * Function triggered when SIGN_TRANSACTION event is received.\n * @param {string} requestId\n * @param {string} transaction (serialized)\n * @param {string} address (case-sensitive --> enforce this, optional for backwards compatibility)\n */\nasync function onSignTransaction(requestId, serializedTransaction, address) {\n // If no address provided, use \"default\"\n const keyAddress = address || \"default\";\n const key = inMemoryKeys[keyAddress];\n\n // Validate key exists and is valid/non-expired\n if (!validateKey(key, keyAddress, requestId)) {\n return;\n }\n\n const transactionWrapper = JSON.parse(serializedTransaction);\n const transactionToSign = transactionWrapper.transaction;\n const transactionType = transactionWrapper.type;\n\n let signedTransaction;\n\n if (transactionType === \"SOLANA\") {\n // Get or create keypair (uses cached keypair if available)\n const keypair = await getOrCreateKeypair(key);\n\n // Fetch the transaction and sign\n const transactionBytes = TKHQ.uint8arrayFromHexString(transactionToSign);\n const transaction = VersionedTransaction.deserialize(transactionBytes);\n transaction.sign([keypair]);\n\n signedTransaction = transaction.serialize();\n } else if (transactionType === \"ETHEREUM\") {\n // viem returns the fully serialized, broadcast-ready signed tx as a\n // 0x-prefixed hex string.\n signedTransaction = await signEthereumTransaction(key, transactionToSign);\n } else {\n throw new Error(\"unsupported transaction type\");\n }\n\n // Solana signing returns raw bytes (encode to hex); Ethereum signing already\n // returns a 0x-prefixed hex string, which we pass through as-is.\n const signedTransactionHex =\n typeof signedTransaction === \"string\"\n ? signedTransaction\n : TKHQ.uint8arrayToHexString(signedTransaction);\n\n TKHQ.sendMessageUp(\"TRANSACTION_SIGNED\", signedTransactionHex, requestId);\n}\n\n/**\n * Function triggered when SIGN_MESSAGE event is received.\n * @param {string} requestId\n * @param {string} message (serialized, JSON-stringified)\n * @param {string} address (case-sensitive --> enforce this, optional for backwards compatibility)\n */\nasync function onSignMessage(requestId, serializedMessage, address) {\n // Backwards compatibility: if no address provided, use \"default\"\n const keyAddress = address || \"default\";\n const key = inMemoryKeys[keyAddress];\n\n // Validate key exists and has not expired\n if (!validateKey(key, keyAddress, requestId)) {\n return;\n }\n\n const messageWrapper = JSON.parse(serializedMessage);\n const messageToSign = messageWrapper.message;\n const messageType = messageWrapper.type;\n const messageBytes = textEncoder.encode(messageToSign);\n\n let signatureHex;\n\n if (messageType === \"SOLANA\") {\n // Get or create keypair (uses cached keypair if available)\n const keypair = await getOrCreateKeypair(key);\n\n // Set up sha512 for nobleEd25519 (required for signing)\n nobleEd25519.etc.sha512Sync = (...m) =>\n nobleHashes.sha512(nobleEd25519.etc.concatBytes(...m));\n\n // Extract the 32-byte private key from the 64-byte secretKey\n // Solana keypair.secretKey format: [32-byte private key][32-byte public key]\n const privateKey = keypair.secretKey.slice(0, 32);\n // Sign the message using nobleEd25519\n const signature = nobleEd25519.sign(messageBytes, privateKey);\n\n // Note: Signature verification is skipped for performance. The signature will always be valid if signing succeeds with a valid keypair.\n // Clients can verify the signature returned.\n\n signatureHex = TKHQ.uint8arrayToHexString(signature);\n } else if (messageType === \"ETHEREUM\") {\n const account = await getOrCreateEthereumAccount(key);\n\n // Match the Solana path: sign the message as a plain UTF-8 string\n // (EIP-191 personal_sign). viem returns a 0x-prefixed signature.\n signatureHex = await account.signMessage({ message: messageToSign });\n } else {\n TKHQ.sendMessageUp(\"ERROR\", \"unsupported message type\", requestId);\n\n return;\n }\n\n TKHQ.sendMessageUp(\"MESSAGE_SIGNED\", signatureHex, requestId);\n}\n\n/**\n * Function triggered when CLEAR_EMBEDDED_PRIVATE_KEY event is received.\n * @param {string} requestId\n * @param {string} address - Optional: The address of the key to clear (case-sensitive). If not provided, clears all keys.\n */\nasync function onClearEmbeddedPrivateKey(requestId, address) {\n // If no address is provided, clear all keys\n if (!address) {\n inMemoryKeys = {};\n TKHQ.sendMessageUp(\"EMBEDDED_PRIVATE_KEY_CLEARED\", true, requestId);\n\n return;\n }\n\n // Check if key exists for the specific address\n if (!inMemoryKeys[address]) {\n TKHQ.sendMessageUp(\n \"ERROR\",\n new Error(\n `key not found for address ${address}. Note that address is case sensitive.`\n ).toString(),\n requestId\n );\n\n return;\n }\n\n // Clear the specific key from memory\n delete inMemoryKeys[address];\n\n TKHQ.sendMessageUp(\"EMBEDDED_PRIVATE_KEY_CLEARED\", true, requestId);\n}\n\n/**\n * Handler for SET_EMBEDDED_KEY_OVERRIDE events.\n * Decrypts a P-256 private key bundle using the iframe's embedded key and\n * overrides the embedded key with it for subsequent bundle decryptions.\n * @param {string} requestId\n * @param {string} organizationId\n * @param {string} bundle - v1.0.0 bundle containing the P-256 private key\n * @param {Function} HpkeDecrypt\n */\nasync function onSetEmbeddedKeyOverride(\n requestId,\n organizationId,\n bundle,\n HpkeDecrypt\n) {\n // Decrypt the private key using the iframe's embedded key.\n // The decrypted payload is a raw 32-byte P-256 private key scalar.\n const keyBytes = await decryptBundle(bundle, organizationId, HpkeDecrypt);\n\n // Convert raw P-256 bytes to a full JWK (derives public key via WebCrypto)\n const keyJwk = await rawP256PrivateKeyToJwk(new Uint8Array(keyBytes));\n\n // Store in module-level variable (memory only)\n injectedEmbeddedKey = keyJwk;\n\n TKHQ.sendMessageUp(\"EMBEDDED_KEY_OVERRIDE_SET\", true, requestId);\n}\n\n/**\n * Handler for RESET_TO_DEFAULT_EMBEDDED_KEY events.\n * Clears the embedded key from memory, replacing it with the iframe's default embedded key.\n * @param {string} requestId\n */\nfunction onResetToDefaultEmbeddedKey(requestId) {\n injectedEmbeddedKey = null;\n TKHQ.sendMessageUp(\"RESET_TO_DEFAULT_EMBEDDED_KEY\", true, requestId);\n}\n\n// Utility functions\nasync function createSolanaKeypair(privateKey) {\n const privateKeyBytes = TKHQ.parsePrivateKey(privateKey);\n\n let keypair;\n if (privateKeyBytes.length === 32) {\n // 32-byte private key (seed)\n keypair = Keypair.fromSeed(privateKeyBytes);\n } else if (privateKeyBytes.length === 64) {\n // 64-byte secret key (private + public)\n keypair = Keypair.fromSecretKey(privateKeyBytes);\n } else {\n throw new Error(\n `Invalid private key length: ${privateKeyBytes.length}. Expected 32 or 64 bytes.`\n );\n }\n\n return keypair;\n}\n\n/**\n * Converts raw P-256 private key bytes (32-byte scalar) to a JWK.\n * Constructs a PKCS8 wrapper around the raw bytes, imports via WebCrypto\n * (which derives the public key), then exports as JWK.\n * @param {Uint8Array} rawPrivateKeyBytes - 32-byte P-256 private key scalar\n * @returns {Promise} - Full P-256 ECDH private key JWK\n */\nasync function rawP256PrivateKeyToJwk(rawPrivateKeyBytes) {\n if (rawPrivateKeyBytes.length !== 32) {\n throw new Error(\n `invalid decryption key length: expected 32 bytes, got ${rawPrivateKeyBytes.length}`\n );\n }\n\n // Fixed PKCS#8 DER prefix for a P-256 private key (36 bytes).\n // This wraps a raw 32-byte scalar into the PrivateKeyInfo structure\n // that WebCrypto's importKey(\"pkcs8\", ...) expects.\n //\n // Structure (per RFC 5958 §2 / RFC 5208 §5):\n // SEQUENCE {\n // INTEGER 0 -- version (v1)\n // SEQUENCE { -- AlgorithmIdentifier (RFC 5480 §2.1.1)\n // OID 1.2.840.10045.2.1 -- id-ecPublicKey\n // OID 1.2.840.10045.3.1.7 -- secp256r1 (P-256)\n // }\n // OCTET STRING { -- privateKey (SEC 1 §C.4 / RFC 5915 §3)\n // SEQUENCE {\n // INTEGER 1 -- version\n // OCTET STRING (32 bytes) -- raw private key scalar\n // }\n // }\n // }\n //\n // References:\n // - RFC 5958 / RFC 5208: PKCS#8 PrivateKeyInfo\n // - RFC 5480 §2.1.1: ECC AlgorithmIdentifier (OIDs)\n // - RFC 5915 / SEC 1 v2 §C.4: ECPrivateKey encoding\n const pkcs8Prefix = new Uint8Array([\n 0x30, 0x41, 0x02, 0x01, 0x00, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48,\n 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03,\n 0x01, 0x07, 0x04, 0x27, 0x30, 0x25, 0x02, 0x01, 0x01, 0x04, 0x20,\n ]);\n\n const pkcs8 = new Uint8Array(pkcs8Prefix.length + 32);\n pkcs8.set(pkcs8Prefix);\n pkcs8.set(rawPrivateKeyBytes, pkcs8Prefix.length);\n\n const cryptoKey = await crypto.subtle.importKey(\n \"pkcs8\",\n pkcs8,\n { name: \"ECDH\", namedCurve: \"P-256\" },\n true,\n [\"deriveBits\"]\n );\n\n return await crypto.subtle.exportKey(\"jwk\", cryptoKey);\n}\n\n/**\n * Generates the error message for missing or expired keys.\n * @param {string} keyAddress - The address of the key\n * @returns {string} - The error message string\n */\nexport function getKeyNotFoundErrorMessage(keyAddress) {\n return `key bytes have expired. Please re-inject export bundle for address ${keyAddress} into iframe. Note that address is case sensitive.`;\n}\n\n/**\n * Clears an expired key from memory. This is an internal helper function\n * that clears the key without sending messages to the parent frame.\n * @param {string} keyAddress - The address of the key to clear\n */\nfunction clearExpiredKey(keyAddress) {\n if (inMemoryKeys[keyAddress]) {\n delete inMemoryKeys[keyAddress];\n }\n}\n\n/**\n * Clears all expired keys from memory.\n * This function iterates through all keys and removes any that have expired.\n */\nfunction clearAllExpiredKeys() {\n const now = new Date().getTime();\n const addressesToRemove = [];\n\n for (const [address, key] of Object.entries(inMemoryKeys)) {\n if (key.expiry && now >= key.expiry) {\n addressesToRemove.push(address);\n }\n }\n\n for (const address of addressesToRemove) {\n clearExpiredKey(address);\n }\n}\n\n/**\n * Validates that a key exists and has not expired.\n * Clears the key from memory if it has expired.\n * Throws error if validation fails (and caller will send message up back to parent).\n * @param {Object} key - The key object from inMemoryKeys\n * @param {string} keyAddress - The address of the key\n * @returns {boolean} - True if key is valid, false otherwise\n */\nfunction validateKey(key, keyAddress) {\n if (!key) {\n throw new Error(\n `key bytes not found. Please re-inject export bundle for address ${keyAddress} into iframe. Note that address is case sensitive.`\n ).toString();\n }\n\n const now = new Date().getTime();\n if (now >= key.expiry) {\n // Clear all expired keys before processing the signing request\n clearAllExpiredKeys();\n throw new Error(getKeyNotFoundErrorMessage(keyAddress)).toString();\n }\n\n return true;\n}\n\n/**\n * Gets or creates a Solana keypair from a key object.\n * Uses cached keypair if available, otherwise creates a new one.\n * @param {Object} key - The key object containing format and privateKey\n * @returns {Promise} - The Solana keypair\n */\nasync function getOrCreateKeypair(key) {\n if (key.keypair) {\n return key.keypair;\n }\n\n if (key.format === \"SOLANA\") {\n return Keypair.fromSecretKey(TKHQ.base58Decode(key.privateKey));\n } else {\n return await createSolanaKeypair(\n Array.from(TKHQ.uint8arrayFromHexString(key.privateKey))\n );\n }\n}\n\n/**\n * Gets or creates a viem Ethereum account from a key object.\n * Caches the account on the key object for improved signing perf.\n * @param {Object} key - The key object containing the privateKey and format\n * @returns {Promise} - The viem account (from privateKeyToAccount)\n */\nasync function getOrCreateEthereumAccount(key) {\n if (key.ethereumAccount) {\n return key.ethereumAccount;\n }\n\n // Ethereum keys are exported in HEXADECIMAL format, where privateKey is a\n // 0x-prefixed hex string — exactly what viem's privateKeyToAccount expects.\n if (key.format !== \"HEXADECIMAL\") {\n throw new Error(\n `cannot sign Ethereum payload with key format \"${key.format}\"; expected \"HEXADECIMAL\"`\n );\n }\n\n key.ethereumAccount = privateKeyToAccount(key.privateKey);\n return key.ethereumAccount;\n}\n\n/**\n * Signs a serialized Ethereum transaction and returns the broadcast-ready,\n * 0x-prefixed serialized signed transaction.\n *\n * Mirrors the Solana path: the caller builds and serializes the *unsigned*\n * transaction with any library, then passes the 0x-prefixed serialized hex.\n * We parse it back into viem's transaction shape, sign, and re-serialize.\n *\n * Note: for legacy (non-typed) transactions, the serialized unsigned tx must\n * include the chainId so the resulting signature carries EIP-155 replay\n * protection. Typed txs (EIP-1559/2930) always encode the chainId.\n * @param {Object} key - The key object containing the privateKey and format\n * @param {string} transactionToSign - 0x-prefixed serialized unsigned transaction\n * @returns {Promise} - The 0x-prefixed serialized signed transaction\n */\nasync function signEthereumTransaction(key, transactionToSign) {\n const account = await getOrCreateEthereumAccount(key);\n return await account.signTransaction(parseTransaction(transactionToSign));\n}\n\n/**\n * DOM Event handlers to power the export flow in standalone mode\n * Instead of receiving events from the parent page, forms trigger them.\n * This is useful for debugging as well.\n */\nfunction addDOMEventListeners() {\n // only support injected keys, not wallets\n document.getElementById(\"inject-key\").addEventListener(\n \"click\",\n async (e) => {\n e.preventDefault();\n window.postMessage({\n type: \"INJECT_KEY_EXPORT_BUNDLE\",\n value: document.getElementById(\"key-export-bundle\").value,\n keyFormat: document.getElementById(\"key-export-format\").value,\n organizationId: document.getElementById(\"key-organization-id\").value,\n });\n },\n false\n );\n document.getElementById(\"sign-transaction\").addEventListener(\n \"click\",\n async (e) => {\n e.preventDefault();\n window.postMessage({\n type: \"SIGN_TRANSACTION\",\n value: document.getElementById(\"transaction-to-sign\").value,\n });\n },\n false\n );\n document.getElementById(\"sign-message\").addEventListener(\n \"click\",\n async (e) => {\n e.preventDefault();\n window.postMessage({\n type: \"SIGN_MESSAGE\",\n value: document.getElementById(\"message-to-sign\").value,\n });\n },\n false\n );\n document.getElementById(\"reset\").addEventListener(\n \"click\",\n async (e) => {\n e.preventDefault();\n window.postMessage({ type: \"RESET_EMBEDDED_KEY\" });\n },\n false\n );\n\n // Add wallet injection support\n const injectWalletBtn = document.getElementById(\"inject-wallet\");\n if (injectWalletBtn) {\n injectWalletBtn.addEventListener(\n \"click\",\n async (e) => {\n e.preventDefault();\n window.postMessage({\n type: \"INJECT_WALLET_EXPORT_BUNDLE\",\n value: document.getElementById(\"wallet-export-bundle\").value,\n organizationId: document.getElementById(\"wallet-organization-id\")\n .value,\n });\n },\n false\n );\n }\n}\n\n/**\n * Message Event Handlers to process messages from the parent frame\n */\nfunction initMessageEventListener(HpkeDecrypt) {\n return async function messageEventListener(event) {\n if (event.data && event.data[\"type\"] == \"INJECT_KEY_EXPORT_BUNDLE\") {\n TKHQ.logMessage(\n `⬇️ Received message ${event.data[\"type\"]}: ${event.data[\"value\"]}, ${event.data[\"keyFormat\"]}, ${event.data[\"organizationId\"]}`\n );\n try {\n await onInjectKeyBundle(\n event.data[\"requestId\"],\n event.data[\"organizationId\"],\n event.data[\"value\"], // bundle\n event.data[\"keyFormat\"],\n event.data[\"address\"],\n HpkeDecrypt\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"INJECT_WALLET_EXPORT_BUNDLE\") {\n TKHQ.logMessage(\n `⬇️ Received message ${event.data[\"type\"]}: ${event.data[\"value\"]}, ${event.data[\"organizationId\"]}`\n );\n try {\n await onInjectKeyBundle(\n event.data[\"requestId\"],\n event.data[\"organizationId\"],\n event.data[\"value\"],\n undefined, // keyFormat - default to HEXADECIMAL\n undefined, // address - default to \"default\"\n HpkeDecrypt\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"APPLY_SETTINGS\") {\n try {\n await onApplySettings(event.data[\"value\"], event.data[\"requestId\"]);\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"RESET_EMBEDDED_KEY\") {\n TKHQ.logMessage(`⬇️ Received message ${event.data[\"type\"]}`);\n try {\n TKHQ.onResetEmbeddedKey();\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString());\n }\n }\n if (event.data && event.data[\"type\"] == \"SIGN_TRANSACTION\") {\n TKHQ.logMessage(\n `⬇️ Received message ${event.data[\"type\"]}: ${event.data[\"value\"]}`\n );\n try {\n await onSignTransaction(\n event.data[\"requestId\"],\n event.data[\"value\"],\n event.data[\"address\"] // signing address (case sensitive)\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"SIGN_MESSAGE\") {\n TKHQ.logMessage(\n `⬇️ Received message ${event.data[\"type\"]}: ${event.data[\"value\"]}`\n );\n try {\n await onSignMessage(\n event.data[\"requestId\"],\n event.data[\"value\"],\n event.data[\"address\"] // signing address (case sensitive)\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"CLEAR_EMBEDDED_PRIVATE_KEY\") {\n TKHQ.logMessage(`⬇️ Received message ${event.data[\"type\"]}`);\n try {\n await onClearEmbeddedPrivateKey(\n event.data[\"requestId\"],\n event.data[\"address\"]\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"GET_EMBEDDED_PUBLIC_KEY\") {\n TKHQ.logMessage(`⬇️ Received message ${event.data[\"type\"]}`);\n try {\n await onGetPublicEmbeddedKey(event.data[\"requestId\"]);\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"SET_EMBEDDED_KEY_OVERRIDE\") {\n TKHQ.logMessage(`⬇️ Received message ${event.data[\"type\"]}`);\n try {\n await onSetEmbeddedKeyOverride(\n event.data[\"requestId\"],\n event.data[\"organizationId\"],\n event.data[\"value\"],\n HpkeDecrypt\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"RESET_TO_DEFAULT_EMBEDDED_KEY\") {\n TKHQ.logMessage(`⬇️ Received message ${event.data[\"type\"]}`);\n try {\n onResetToDefaultEmbeddedKey(event.data[\"requestId\"]);\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n };\n}\n\n/**\n * Set up event handlers for both DOM and message events\n * @param {Function} HpkeDecrypt\n */\nexport function initEventHandlers(HpkeDecrypt) {\n const messageEventListener = initMessageEventListener(HpkeDecrypt);\n\n // controllers to remove event listeners\n const messageListenerController = new AbortController();\n const turnkeyInitController = new AbortController();\n\n // Origin of a legacy (@turnkey/iframe-stamper < 2.1.0) parent, bound on its\n // first valid message. A document belongs to exactly one embedder for its\n // lifetime, so every subsequent message must come from the same origin.\n let legacyParentOrigin = null;\n\n if (window.parent === window) {\n // Standalone mode: the DOM forms drive the flow by posting messages to\n // this same window. Messages from other windows (e.g. a window.opener)\n // are not accepted.\n addDOMEventListeners();\n window.addEventListener(\n \"message\",\n async function (event) {\n if (event.source !== window) {\n return;\n }\n await messageEventListener(event);\n },\n {\n capture: false,\n signal: messageListenerController.signal,\n }\n );\n return { messageEventListener };\n }\n\n // Legacy embedded mode: @turnkey/iframe-stamper < 2.1.0 posts requests\n // straight to this window instead of establishing a MessageChannel.\n // These clients operate on the document-scoped ephemeral key (never\n // persisted -- see initEphemeralEmbeddedKey), so a malicious embedder can\n // only ever obtain a key that no legitimate bundle is encrypted to\n // (INT-697). Modern clients upgrade to the MessageChannel path below.\n window.addEventListener(\n \"message\",\n async function (event) {\n if (!event.data || !event.data[\"type\"]) {\n return;\n }\n // Channel establishment is owned by the handshake listener below.\n if (event.data[\"type\"] === \"TURNKEY_INIT_MESSAGE_CHANNEL\") {\n return;\n }\n // Only the direct parent, with a real (non-opaque) origin, may drive\n // the legacy path.\n if (event.source !== window.parent) {\n return;\n }\n if (!event.origin || event.origin === \"null\") {\n return;\n }\n if (legacyParentOrigin === null) {\n legacyParentOrigin = event.origin;\n // From now on, responses posted to window.parent are only readable\n // by the bound origin.\n TKHQ.setParentFrameOrigin(event.origin);\n } else if (event.origin !== legacyParentOrigin) {\n return;\n }\n recordChannelTelemetry(\n CHANNEL_LEGACY_POST_MESSAGE,\n event.data[\"type\"],\n event.origin\n );\n await messageEventListener(event);\n },\n { capture: false, signal: messageListenerController.signal }\n );\n\n // Guard to prevent concurrent channel establishment from multiple senders\n let channelEstablished = false;\n\n // Handle MessageChannel initialization for iframe communication\n window.addEventListener(\n \"message\",\n async function (event) {\n /**\n * @turnkey/iframe-stamper >= v2.1.0 is using a MessageChannel to communicate with the parent frame.\n * The parent frame sends a TURNKEY_INIT_MESSAGE_CHANNEL event with the MessagePort.\n * If we receive this event, we want to remove the message event listener that was added in the DOMContentLoaded event to avoid processing messages twice.\n * We persist the MessagePort so we can use it to communicate with the parent window in subsequent calls to TKHQ.sendMessageUp\n */\n if (\n event.data &&\n event.data[\"type\"] == \"TURNKEY_INIT_MESSAGE_CHANNEL\" &&\n event.source === window.parent &&\n event.origin &&\n event.origin !== \"null\" &&\n event.ports?.length === 1\n ) {\n // A legacy-bound document may upgrade to the MessageChannel protocol,\n // but never on behalf of a different origin.\n if (\n legacyParentOrigin !== null &&\n legacyParentOrigin !== event.origin\n ) {\n return;\n }\n\n // Synchronously check-and-set the flag before any await. This prevents\n // a second concurrent invocation from racing through while the first is\n // suspended at an await, which would allow multiple origins to establish\n // a channel before turnkeyInitController.abort() is reached.\n if (channelEstablished) {\n return;\n }\n channelEstablished = true;\n\n const iframeMessagePort = event.ports[0];\n\n var targetPubHex;\n try {\n // Supersedes the ephemeral key, if the legacy bootstrap created one.\n await TKHQ.initEmbeddedKey(event.origin);\n var embeddedKeyJwk = await TKHQ.getEmbeddedKey();\n var targetPubBuf = await TKHQ.p256JWKPrivateToPublic(embeddedKeyJwk);\n targetPubHex = TKHQ.uint8arrayToHexString(targetPubBuf);\n } catch (e) {\n // Key setup failed (e.g. blocked third-party storage). Roll back so\n // the parent can retry the handshake, and keep the legacy/standalone\n // listener alive so the frame stays functional in the meantime.\n channelEstablished = false;\n iframeMessagePort.postMessage({ type: \"ERROR\", value: e.toString() });\n return;\n }\n\n // Commit: the MessagePort carries all requests from here on; stop\n // accepting legacy/standalone window messages.\n messageListenerController.abort();\n TKHQ.setParentFrameMessageChannelPort(iframeMessagePort);\n document.getElementById(\"embedded-key\").value = targetPubHex;\n\n iframeMessagePort.onmessage = function (portEvent) {\n recordChannelTelemetry(\n CHANNEL_MESSAGE_CHANNEL,\n portEvent.data && portEvent.data[\"type\"],\n event.origin\n );\n return messageEventListener(portEvent);\n };\n recordChannelTelemetry(\n CHANNEL_MESSAGE_CHANNEL,\n \"TURNKEY_INIT_MESSAGE_CHANNEL\",\n event.origin\n );\n TKHQ.sendMessageUp(\"PUBLIC_KEY_READY\", targetPubHex);\n\n // remove the listener for TURNKEY_INIT_MESSAGE_CHANNEL after it's been processed\n turnkeyInitController.abort();\n }\n },\n { signal: turnkeyInitController.signal }\n );\n\n return { messageEventListener };\n}\n/**\n * Expose internal handlers for targeted testing.\n */\nexport {\n onInjectKeyBundle,\n onSignTransaction,\n onSignMessage,\n onClearEmbeddedPrivateKey,\n onSetEmbeddedKeyOverride,\n onResetToDefaultEmbeddedKey,\n};\n","/**\n * Crypto Utilities - Shared\n * Contains HPKE encryption and decryption functions\n */\n\nimport {\n p256JWKPrivateToPublic,\n additionalAssociatedData,\n uint8arrayToHexString,\n} from \"./turnkey-core.js\";\nimport {\n CipherSuite,\n DhkemP256HkdfSha256,\n HkdfSha256,\n Aes256Gcm,\n} from \"@hpke/core\";\n\n// Pre-compute const (for perf)\nconst TURNKEY_HPKE_INFO = new TextEncoder().encode(\"turnkey_hpke\");\n\n/**\n * Decrypt the ciphertext (ArrayBuffer) given an encapsulation key (ArrayBuffer)\n * and the receivers private key (JSON Web Key).\n */\nexport async function HpkeDecrypt({\n ciphertextBuf,\n encappedKeyBuf,\n receiverPrivJwk,\n}) {\n const kemContext = new DhkemP256HkdfSha256();\n var receiverPriv = await kemContext.importKey(\n \"jwk\",\n { ...receiverPrivJwk },\n false\n );\n\n var suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n var recipientCtx = await suite.createRecipientContext({\n recipientKey: receiverPriv,\n enc: encappedKeyBuf,\n info: TURNKEY_HPKE_INFO,\n });\n\n var receiverPubBuf = await p256JWKPrivateToPublic(receiverPrivJwk);\n var aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n var res;\n try {\n res = await recipientCtx.open(ciphertextBuf, aad);\n } catch (e) {\n throw new Error(\n \"unable to decrypt bundle using embedded key. the bundle may be incorrect. failed with error: \" +\n e.toString()\n );\n }\n return res;\n}\n\n/**\n * Encrypt plaintext using HPKE with the receiver's public key.\n * @param {Object} params\n * @param {Uint8Array} params.plaintextBuf - Plaintext to encrypt\n * @param {JsonWebKey} params.receiverPubJwk - Receiver's public key in JWK format\n * @returns {Promise} JSON stringified encrypted bundle with encappedPublic and ciphertext\n */\nexport async function HpkeEncrypt({ plaintextBuf, receiverPubJwk }) {\n const kemContext = new DhkemP256HkdfSha256();\n const receiverPub = await kemContext.importKey(\n \"jwk\",\n { ...receiverPubJwk },\n true\n );\n\n const suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n const senderCtx = await suite.createSenderContext({\n recipientPublicKey: receiverPub,\n info: TURNKEY_HPKE_INFO,\n });\n\n // Need to import the key again as a JWK to export as a raw key, the format needed to\n // create the aad with the newly generated raw encapped key.\n const receiverPubCryptoKey = await crypto.subtle.importKey(\n \"jwk\",\n receiverPubJwk,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n const receiverPubRaw = await crypto.subtle.exportKey(\n \"raw\",\n receiverPubCryptoKey\n );\n const receiverPubBuf = new Uint8Array(receiverPubRaw);\n\n const encappedKeyBuf = new Uint8Array(senderCtx.enc);\n\n const aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n\n var ciphertextBuf;\n try {\n ciphertextBuf = await senderCtx.seal(plaintextBuf, aad);\n } catch (e) {\n throw new Error(\"failed to encrypt import bundle: \" + e.toString());\n }\n\n const ciphertextHex = uint8arrayToHexString(new Uint8Array(ciphertextBuf));\n const encappedKeyBufHex = uint8arrayToHexString(encappedKeyBuf);\n const encryptedBundle = JSON.stringify({\n encappedPublic: encappedKeyBufHex,\n ciphertext: ciphertextHex,\n });\n return encryptedBundle;\n}\n","// This file is the main entrypoint of the webpack-bundled application\n\n// Import relevant modules\nimport { TKHQ } from \"./turnkey-core.js\";\nimport { initEventHandlers } from \"./event-handlers.js\";\nimport { HpkeDecrypt } from \"@shared/crypto-utils.js\";\nimport \"./styles.css\";\n\n// Surface TKHQ for external access\nwindow.TKHQ = TKHQ;\n\n// Init app\ndocument.addEventListener(\"DOMContentLoaded\", async function () {\n initEventHandlers(HpkeDecrypt);\n\n // If styles are saved in local storage, sanitize and apply them\n const styleSettings = TKHQ.getSettings();\n if (styleSettings) {\n TKHQ.applySettings(styleSettings);\n }\n\n if (window.parent === window) {\n // Standalone mode has no parent; scope the persisted key to this\n // document's own origin.\n await TKHQ.initEmbeddedKey(window.location.origin);\n } else {\n // Embedded mode: create a document-scoped ephemeral key so legacy\n // (@turnkey/iframe-stamper < 2.1.0) parents, which passively wait for\n // PUBLIC_KEY_READY, can finish init(). Modern parents supersede it with\n // a persistent key scoped to their browser-authenticated origin during\n // the MessageChannel handshake (see event-handlers.js).\n await TKHQ.initEphemeralEmbeddedKey();\n }\n\n const embeddedKeyJwk = await TKHQ.getEmbeddedKey();\n const targetPubBuf = await TKHQ.p256JWKPrivateToPublic(embeddedKeyJwk);\n const targetPubHex = TKHQ.uint8arrayToHexString(targetPubBuf);\n document.getElementById(\"embedded-key\").value = targetPubHex;\n\n if (window.parent !== window) {\n // The parent origin is not known yet, but announcing the (non-secret)\n // public key broadly is required to bootstrap legacy clients.\n TKHQ.sendMessageUp(\"PUBLIC_KEY_READY\", targetPubHex);\n }\n});\n","module.exports = crypto;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"bundle.\" + {\"291\":\"c9a8b8d5055f705bd308\",\"825\":\"29203a225e88524b9cba\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","\n__webpack_require__.sriHashes = {\"291\":\"*-*-*-CHUNK-SRI-HASH-r3NPGwA4ft5fHgGXhVIptCiDVf06qPa+sxzG6L+8GwPuhn89e/\",\"825\":\"*-*-*-CHUNK-SRI-HASH-mfog3UJdGPOmSk4QZbKxsxHPFZtt298WnZNc1aQ1MCgc6YirFj\"};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t792: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkexport_and_sign\"] = self[\"webpackChunkexport_and_sign\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [96], () => (__webpack_require__(750)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","inProgress","dataWebpackPrefix","e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_invoke","enumerable","configurable","writable","_toConsumableArray","Array","isArray","_arrayLikeToArray","_arrayWithoutHoles","from","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","toString","slice","constructor","name","test","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","TURNKEY_SETTINGS","parentFrameMessageChannelPort","parentFrameTargetOrigin","getSubtleCrypto","globalThis","crypto","subtle","window","global","isDoublyIframed","undefined","location","ancestorOrigins","parent","top","_loadQuorumKey","_callee","quorumPublic","_context","Error","importKey","namedCurve","requireStorageKey","storageKey","_initEmbeddedKey","_callee3","_context3","getEmbeddedKey","generateTargetKey","setEmbeddedKey","_generateTargetKey","_callee4","p256key","_context4","generateKey","exportKey","privateKey","jwtKey","getItemWithExpiry","JSON","parse","targetKey","setItemWithExpiry","stringify","key","ttl","item","expiry","Date","getTime","localStorage","setItem","itemStr","getItem","hasOwnProperty","removeItem","uint8arrayFromHexString","hexString","hexWithoutPrefix","startsWith","Uint8Array","match","map","h","parseInt","uint8arrayToHexString","buffer","x","padStart","join","additionalAssociatedData","senderPubBuf","receiverPubBuf","s","concat","logMessage","content","messageLog","document","getElementById","message","createElement","innerText","appendChild","p256JWKPrivateToPublic","_x7","_p256JWKPrivateToPublic","_callee6","jwkPrivate","jwkPrivateCopy","publicKey","_context6","_objectSpread","key_ops","base58Encode","bytes","result","digits","carry","j","push","k","base58Decode","alphabet","decodedBytes","leadingZeros","indexOf","currentByte","reverse","_encodeKey","_callee9","privateKeyBytes","keyFormat","publicKeyBytes","concatenatedBytes","_t2","_context9","set","console","warn","sharedInitEmbeddedKey","_x3","SharedTKHQ","sharedGetEmbeddedKey","sharedSetEmbeddedKey","normalizePadding","byteArray","targetLength","paddingLength","padding","fill","expectedZeroCount","zeroCount","validateStyles","styles","element","validStyles","cssValidationRegex","margin","borderWidth","borderStyle","borderColor","borderRadius","fontSize","fontWeight","fontFamily","color","labelColor","backgroundColor","width","height","maxWidth","maxHeight","lineHeight","boxShadow","textAlign","overflowWrap","wordWrap","resize","entries","forEach","_ref","_ref2","_arrayWithHoles","next","_iterableToArrayLimit","_nonIterableRest","property","styleProperty","trim","styleRegexStr","styleRegex","RegExp","styleValue","loadQuorumKey","_x","embeddedKeyStates","WeakMap","validateParentOrigin","parentOrigin","parsedOrigin","URL","origin","purgeLegacyEmbeddedKey","validatedOrigin","previousState","state","get","mode","encodeURIComponent","ready","error","_initEphemeralEmbeddedKey","_callee2","_embeddedKeyStates$ge","generatedKey","latestState","_context2","_verifyEnclaveSignature","enclaveQuorumPublic","publicSignature","signedData","TURNKEY_SIGNERS_ENCLAVES","environment","meta","TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY","encryptionQuorumPublicBuf","quorumKey","publicSignatureBuf","signedDataBuf","prod","preprod","querySelector","__TURNKEY_SIGNER_ENVIRONMENT__","fromDerSignature","verify","hash","TKHQ","initEmbeddedKey","initEphemeralEmbeddedKey","onResetEmbeddedKey","encodeKey","_x1","_x10","_x11","sendMessageUp","type","requestId","postMessage","setParentFrameMessageChannelPort","port","setParentFrameOrigin","verifyEnclaveSignature","_x2","_x4","getEd25519PublicKey","privateKeyHex","nobleEd25519","sha512Sync","_nobleEd25519$etc","nobleHashes","concatBytes","applySettings","settings","validSettings","settingsObj","keyDivTextarea","style","getSettings","setSettings","parsePrivateKey","CHANNEL_MESSAGE_CHANNEL","recordChannelTelemetry","channel","eventType","endpoint","getTelemetryEndpoint","navigator","sendBeacon","payload","frame","timestamp","toISOString","Blob","_unused","_slicedToArray","inMemoryKeys","injectedEmbeddedKey","textEncoder","TextEncoder","textDecoder","TextDecoder","verifyAndParseBundleData","_verifyAndParseBundleData","_callee0","bundle","organizationId","bundleObj","_context0","version","data","dataSignature","decode","encappedPublic","ciphertext","decryptBundle","_x5","_decryptBundle","_callee1","HpkeDecrypt","encappedKeyBuf","ciphertextBuf","receiverPrivJwk","_t0","_context1","onGetPublicEmbeddedKey","_x6","_onGetPublicEmbeddedKey","_callee10","embeddedKeyJwk","targetPubBuf","targetPubHex","_context10","loadKeyIntoMemory","_x8","_x9","_x0","_loadKeyIntoMemory","_callee11","address","keyBytes","keyAddress","cachedKeypair","_context11","subarray","Keypair","fromSecretKey","createSolanaKeypair","_defineProperty","format","keypair","onInjectKeyBundle","_x12","_x13","_x14","_onInjectKeyBundle","_callee12","_context12","onApplySettings","_x15","_x16","_onApplySettings","_callee13","_context13","onSignTransaction","_x17","_x18","_x19","_onSignTransaction","_callee14","serializedTransaction","transactionWrapper","transactionToSign","transactionType","signedTransaction","transactionBytes","transaction","signedTransactionHex","_context14","validateKey","getOrCreateKeypair","VersionedTransaction","deserialize","sign","serialize","signEthereumTransaction","onSignMessage","_x20","_x21","_x22","_onSignMessage","_callee15","serializedMessage","messageWrapper","messageToSign","messageType","messageBytes","signatureHex","signature","account","_context15","encode","secretKey","getOrCreateEthereumAccount","signMessage","onClearEmbeddedPrivateKey","_x23","_x24","_onClearEmbeddedPrivateKey","_callee16","_context16","onSetEmbeddedKeyOverride","_x25","_x26","_x27","_x28","_onSetEmbeddedKeyOverride","_callee17","keyJwk","_context17","rawP256PrivateKeyToJwk","onResetToDefaultEmbeddedKey","_x29","_createSolanaKeypair","_callee18","_context18","fromSeed","_x30","_rawP256PrivateKeyToJwk","_callee19","rawPrivateKeyBytes","pkcs8Prefix","pkcs8","cryptoKey","_context19","clearExpiredKey","now","addressesToRemove","_i","_Object$entries","_Object$entries$_i","_i2","_addressesToRemove","clearAllExpiredKeys","getKeyNotFoundErrorMessage","_x31","_getOrCreateKeypair","_callee20","_context20","_x32","_getOrCreateEthereumAccount","_callee21","_context21","ethereumAccount","privateKeyToAccount","_x33","_x34","_signEthereumTransaction","_callee22","_context22","signTransaction","parseTransaction","initEventHandlers","messageEventListener","_messageEventListener","event","_t","_t3","_t4","_t5","_t6","_t7","_t8","_x40","initMessageEventListener","messageListenerController","AbortController","turnkeyInitController","legacyParentOrigin","addEventListener","preventDefault","_x35","_x36","_ref3","_x37","_ref4","_x38","injectWalletBtn","_ref5","_callee5","_context5","_x39","addDOMEventListeners","_ref6","_callee7","_context7","source","_x41","capture","signal","_ref7","_callee8","_context8","_x42","channelEstablished","_ref8","_event$ports","iframeMessagePort","_t9","ports","abort","onmessage","portEvent","_x43","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","getOwnPropertyDescriptors","defineProperties","_typeof","toPrimitive","String","_toPrimitive","_toPropertyKey","TURNKEY_HPKE_INFO","_HpkeDecrypt","kemContext","receiverPriv","suite","recipientCtx","aad","res","DhkemP256HkdfSha256","CipherSuite","kem","kdf","HkdfSha256","aead","Aes256Gcm","createRecipientContext","recipientKey","enc","info","open","styleSettings","module","exports","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","id","loaded","__webpack_modules__","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","every","splice","getter","__esModule","obj","this","ns","def","current","getOwnPropertyNames","definition","chunkId","all","reduce","promises","miniCssF","g","Function","prop","url","script","needAttach","scripts","getElementsByTagName","getAttribute","charset","nc","setAttribute","src","crossOrigin","integrity","sriHashes","onScriptComplete","prev","onerror","onload","clearTimeout","timeout","doneFns","parentNode","removeChild","setTimeout","target","head","nmd","paths","children","installedChunks","installedChunkData","promise","reject","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file diff --git a/export-and-sign/dist/bundle.6f3ad536a859e78bdbd5.js b/export-and-sign/dist/bundle.6f3ad536a859e78bdbd5.js deleted file mode 100644 index 1e42c27b..00000000 --- a/export-and-sign/dist/bundle.6f3ad536a859e78bdbd5.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see bundle.6f3ad536a859e78bdbd5.js.LICENSE.txt */ -(()=>{var e,t,r,n,a,o={3846:e=>{"use strict";e.exports=crypto},4560:(e,t,r)=>{"use strict";var n=r(7598),a=r(4443),o=r(566);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e){for(var t=1;t3?(a=y===n)&&(u=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=p&&((a=r<2&&pn||n>y)&&(o[4]=r,o[5]=n,d.n=y,c=0))}if(a||r>1)return i;throw l=!0,n}return function(a,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&p(f,y),c=f,u=y;(t=c<2?e:u)||!l;){o||(c?c<3?(c>1&&(d.n=-1),p(c,u)):d.n=u:d.v=u);try{if(s=2,o){if(c||(a="next"),t=o[a]){if(!(t=t.call(o,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);o=e}else if((t=(l=d.n<0)?u:r.call(n,d))!==i)break}catch(t){o=e,c=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,a,o),!0),s}var i={};function c(){}function u(){}function s(){}t=Object.getPrototypeOf;var d=[][n]?t(t([][n]())):(l(t={},n,function(){return this}),t),p=s.prototype=c.prototype=Object.create(d);function y(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,l(e,a,"GeneratorFunction")),e.prototype=Object.create(p),e}return u.prototype=s,l(p,"constructor",s),l(s,"constructor",u),u.displayName="GeneratorFunction",l(s,a,"GeneratorFunction"),l(p),l(p,a,"Generator"),l(p,n,function(){return this}),l(p,"toString",function(){return"[object Generator]"}),(f=function(){return{w:o,m:y}})()}function l(e,t,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}l=function(e,t,r,n){function o(t,r){l(e,t,function(e){return this._invoke(t,r,e)})}t?a?a(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(o("next",0),o("throw",1),o("return",2))},l(e,t,r,n)}function d(e){return function(e){if(Array.isArray(e))return y(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||p(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p(e,t){if(e){if("string"==typeof e)return y(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?y(e,t):void 0}}function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r1:window.parent!==window.top}function S(){return(S=b(f().m(function e(t){var r;return f().w(function(e){for(;;)switch(e.n){case 0:if(r=w()){e.n=1;break}throw new Error("WebCrypto subtle API is unavailable");case 1:return e.n=2,r.importKey("raw",t,{name:"ECDSA",namedCurve:"P-256"},!0,["verify"]);case 2:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function O(){return(O=b(f().m(function e(){return f().w(function(e){for(;;)switch(e.n){case 0:if(!E()){e.n=1;break}throw new Error("Doubly iframed");case 1:return e.n=2,P();case 2:if(null!==e.v){e.n=4;break}return e.n=3,k();case 3:_(e.v);case 4:return e.a(2)}},e)}))).apply(this,arguments)}function k(){return j.apply(this,arguments)}function j(){return(j=b(f().m(function e(){var t,r;return f().w(function(e){for(;;)switch(e.n){case 0:if(t=w()){e.n=1;break}throw new Error("WebCrypto subtle API is unavailable");case 1:return e.n=2,t.generateKey({name:"ECDH",namedCurve:"P-256"},!0,["deriveBits"]);case 2:return r=e.v,e.n=3,t.exportKey("jwk",r.privateKey);case 3:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function P(){var e=x(m);return e?JSON.parse(e):null}function _(e){T(m,JSON.stringify(e),1728e5)}function T(e,t,r){var n={value:t,expiry:(new Date).getTime()+r};window.localStorage.setItem(e,JSON.stringify(n))}function x(e){var t=window.localStorage.getItem(e);if(!t)return null;var r=JSON.parse(t);return Object.prototype.hasOwnProperty.call(r,"expiry")&&Object.prototype.hasOwnProperty.call(r,"value")?(new Date).getTime()>r.expiry?(window.localStorage.removeItem(e),null):r.value:(window.localStorage.removeItem(e),null)}function A(e){if(!e||"string"!=typeof e)throw new Error("cannot create uint8array from invalid hex string");var t=e.startsWith("0x")||e.startsWith("0X")?e.slice(2):e;if(t.length%2!=0||!/^[0-9A-Fa-f]+$/.test(t))throw new Error("cannot create uint8array from invalid hex string");return new Uint8Array(t.match(/../g).map(function(e){return parseInt(e,16)}))}function I(e){return d(e).map(function(e){return e.toString(16).padStart(2,"0")}).join("")}function D(e,t){var r=Array.from(new Uint8Array(e)),n=Array.from(new Uint8Array(t));return new Uint8Array([].concat(r,n))}function R(e){var t=document.getElementById("message-log");if(t){var r=document.createElement("p");r.innerText=e,t.appendChild(r)}}function M(e){return N.apply(this,arguments)}function N(){return(N=b(f().m(function e(t){var r,n,a,o;return f().w(function(e){for(;;)switch(e.n){case 0:if(r=w()){e.n=1;break}throw new Error("WebCrypto subtle API is unavailable");case 1:return delete(n=u({},t)).d,n.key_ops=["verify"],e.n=2,r.importKey("jwk",n,{name:"ECDSA",namedCurve:"P-256"},!0,["verify"]);case 2:return a=e.v,e.n=3,r.exportKey("raw",a);case 3:return o=e.v,e.a(2,new Uint8Array(o))}},e)}))).apply(this,arguments)}function K(e){for(var t="",r=[0],n=0;n0;)r.push(a%58),a=a/58|0}for(var i=0;i0;){var c=r[i];o=(c=void 0===c?o:58*c+o)>>8,r[i]=c%256,i++}}var u=n.concat(r.reverse());return new Uint8Array(u)}function C(){return(C=b(f().m(function e(t,r,n){var a,o;return f().w(function(e){for(;;)switch(e.n){case 0:o=r,e.n="SOLANA"===o?1:"HEXADECIMAL"===o?5:6;break;case 1:if(n){e.n=2;break}throw new Error("public key must be specified for SOLANA key format");case 2:if(32===t.length){e.n=3;break}throw new Error("invalid private key length. Expected 32 bytes. Got ".concat(t.length,"."));case 3:if(32===n.length){e.n=4;break}throw new Error("invalid public key length. Expected 32 bytes. Got ".concat(n.length,"."));case 4:return(a=new Uint8Array(64)).set(t,0),a.set(n,32),e.a(2,K(a));case 5:return e.a(2,"0x"+I(t));case 6:return console.warn("invalid key format: ".concat(r,". Defaulting to HEXADECIMAL.")),e.a(2,"0x"+I(t));case 7:return e.a(2)}},e)}))).apply(this,arguments)}function G(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",a=r.toStringTag||"@@toStringTag";function o(r,n,a,o){var u=n&&n.prototype instanceof c?n:c,s=Object.create(u.prototype);return B(s,"_invoke",function(r,n,a){var o,c,u,s=0,f=a||[],l=!1,d={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,r){return o=t,c=0,u=e,d.n=r,i}};function p(r,n){for(c=r,u=n,t=0;!l&&s&&!a&&t3?(a=y===n)&&(u=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=p&&((a=r<2&&pn||n>y)&&(o[4]=r,o[5]=n,d.n=y,c=0))}if(a||r>1)return i;throw l=!0,n}return function(a,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&p(f,y),c=f,u=y;(t=c<2?e:u)||!l;){o||(c?c<3?(c>1&&(d.n=-1),p(c,u)):d.n=u:d.v=u);try{if(s=2,o){if(c||(a="next"),t=o[a]){if(!(t=t.call(o,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);o=e}else if((t=(l=d.n<0)?u:r.call(n,d))!==i)break}catch(t){o=e,c=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,a,o),!0),s}var i={};function c(){}function u(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(B(t={},n,function(){return this}),t),l=s.prototype=c.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,B(e,a,"GeneratorFunction")),e.prototype=Object.create(l),e}return u.prototype=s,B(l,"constructor",s),B(s,"constructor",u),u.displayName="GeneratorFunction",B(s,a,"GeneratorFunction"),B(l),B(l,a,"Generator"),B(l,n,function(){return this}),B(l,"toString",function(){return"[object Generator]"}),(G=function(){return{w:o,m:d}})()}function B(e,t,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}B=function(e,t,r,n){function o(t,r){B(e,t,function(e){return this._invoke(t,r,e)})}t?a?a(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(o("next",0),o("throw",1),o("return",2))},B(e,t,r,n)}function L(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r]*$',color:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",labelColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",backgroundColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",width:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$",height:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$",maxWidth:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$",maxHeight:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$",lineHeight:"^(\\d+(\\.\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$",boxShadow:"^(none|(\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)) ?(inset)?)$",textAlign:"^(left|right|center|justify|initial|inherit)$",overflowWrap:"^(normal|break-word|anywhere)$",wordWrap:"^(normal|break-word)$",resize:"^(none|both|horizontal|vertical|block|inline)$"};return Object.entries(e).forEach(function(e){var t,a,o=(a=2,function(e){if(Array.isArray(e))return e}(t=e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,c=[],u=!0,s=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=o.call(r)).done)&&(c.push(n.value),c.length!==t);u=!0);}catch(e){s=!0,a=e}finally{try{if(!u&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return c}}(t,a)||p(t,a)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),i=o[0],c=o[1],u=i.trim();if(0===u.length)throw new Error("css style property cannot be empty");var s=n[u];if(!s)throw new Error('invalid or unsupported css style property: "'.concat(u,'"'));var f=new RegExp(s),l=c.trim();if(0==l.length)throw new Error('css style for "'.concat(u,'" is empty'));if(!f.test(l))throw new Error('invalid css style value for property "'.concat(u,'"'));r[u]=l}),r},$=E,W=function(e){return S.apply(this,arguments)};function X(){return(X=F(G().m(function e(){return G().w(function(e){for(;;)switch(e.n){case 0:if(!$()){e.n=1;break}throw new Error("Doubly iframed");case 1:return e.n=2,Y();case 2:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function Q(){return(Q=F(G().m(function e(t,r,n){var a,i,c,u,s,f,l,d;return G().w(function(e){for(;;)switch(e.n){case 0:if(a={prod:"04cf288fe433cc4e1aa0ce1632feac4ea26bf2f5a09dcfe5a42c398e06898710330f0572882f4dbdf0f5304b8fc8703acd69adca9a4bbf7f5d00d20a5e364b2569",preprod:"04f3422b8afbe425d6ece77b8d2469954715a2ff273ab7ac89f1ed70e0a9325eaa1698b4351fd1b23734e65c0b6a86b62dd49d70b37c94606aac402cbd84353212"},i=null,"undefined"!=typeof document&&(c=document.querySelector('meta[name="turnkey-signer-environment"]'))&&c.content&&"__TURNKEY_SIGNER_ENVIRONMENT__"!==c.content&&(i=c.content),i||"undefined"==typeof window||(i=window.__TURNKEY_SIGNER_ENVIRONMENT__),void 0!==(u=a[i])){e.n=1;break}throw new Error("Configuration error: TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY is undefined");case 1:if(t===u){e.n=2;break}throw new Error("enclave quorum public keys from client and bundle do not match. Client: ".concat(u,". Bundle: ").concat(t,"."));case 2:return s=new Uint8Array(q(u)),e.n=3,W(s);case 3:if(f=e.v){e.n=4;break}throw new Error("failed to load quorum key");case 4:return l=(0,o.g8)(r),d=q(n),e.n=5,crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},f,l,d);case 5:return e.a(2,e.v)}},e)}))).apply(this,arguments)}var V={initEmbeddedKey:function(){return X.apply(this,arguments)},generateTargetKey:k,setItemWithExpiry:T,getItemWithExpiry:x,getEmbeddedKey:P,setEmbeddedKey:_,onResetEmbeddedKey:function(){window.localStorage.removeItem(m),window.localStorage.removeItem("TURNKEY_EMBEDDED_KEY_ORIGIN")},p256JWKPrivateToPublic:M,base58Encode:K,base58Decode:U,encodeKey:function(e,t,r){return C.apply(this,arguments)},sendMessageUp:function(e,t,r){var n={type:e,value:t};r&&(n.requestId=r),h?h.postMessage(n):window.parent!==window&&window.parent.postMessage({type:e,value:t},"*"),R("⬆️ Sent message ".concat(e,": ").concat(t))},logMessage:R,uint8arrayFromHexString:q,uint8arrayToHexString:I,setParentFrameMessageChannelPort:function(e){h=e},normalizePadding:function(e,t){var r=t-e.length;if(r>0){var n=new Uint8Array(r).fill(0);return new Uint8Array([].concat(d(n),d(e)))}if(r<0){for(var a=-1*r,o=0,i=0;i3?(a=y===n)&&(u=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=p&&((a=r<2&&pn||n>y)&&(o[4]=r,o[5]=n,d.n=y,c=0))}if(a||r>1)return i;throw l=!0,n}return function(a,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&p(f,y),c=f,u=y;(t=c<2?e:u)||!l;){o||(c?c<3?(c>1&&(d.n=-1),p(c,u)):d.n=u:d.v=u);try{if(s=2,o){if(c||(a="next"),t=o[a]){if(!(t=t.call(o,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);o=e}else if((t=(l=d.n<0)?u:r.call(n,d))!==i)break}catch(t){o=e,c=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,a,o),!0),s}var i={};function c(){}function u(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(ce(t={},n,function(){return this}),t),l=s.prototype=c.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,ce(e,a,"GeneratorFunction")),e.prototype=Object.create(l),e}return u.prototype=s,ce(l,"constructor",s),ce(s,"constructor",u),u.displayName="GeneratorFunction",ce(s,a,"GeneratorFunction"),ce(l),ce(l,a,"Generator"),ce(l,n,function(){return this}),ce(l,"toString",function(){return"[object Generator]"}),(ie=function(){return{w:o,m:d}})()}function ce(e,t,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}ce=function(e,t,r,n){function o(t,r){ce(e,t,function(e){return this._invoke(t,r,e)})}t?a?a(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(o("next",0),o("throw",1),o("return",2))},ce(e,t,r,n)}function ue(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,c=[],u=!0,s=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=o.call(r)).done)&&(c.push(n.value),c.length!==t);u=!0);}catch(e){s=!0,a=e}finally{try{if(!u&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return se(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?se(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function se(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r= v2.0.0 to pass "organizationId" for security purposes.');case 8:if(a.organizationId&&a.organizationId===r){e.n=9;break}throw new Error("organization id does not match expected value. Expected: ".concat(r,". Found: ").concat(a.organizationId,"."));case 9:if(a.encappedPublic){e.n=10;break}throw new Error('missing "encappedPublic" in bundle signed data');case 10:if(a.ciphertext){e.n=11;break}throw new Error('missing "ciphertext" in bundle signed data');case 11:return e.a(2,a)}},e)}))).apply(this,arguments)}function ge(e,t,r){return he.apply(this,arguments)}function he(){return he=le(ie().m(function e(t,r,n){var a,o,i,c,u;return ie().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,be(t,r);case 1:if(a=e.v,o=V.uint8arrayFromHexString(a.encappedPublic),i=V.uint8arrayFromHexString(a.ciphertext),u=pe){e.n=3;break}return e.n=2,V.getEmbeddedKey();case 2:u=e.v;case 3:return c=u,e.n=4,n({ciphertextBuf:i,encappedKeyBuf:o,receiverPrivJwk:c});case 4:return e.a(2,e.v)}},e)})),he.apply(this,arguments)}function we(e){return Ee.apply(this,arguments)}function Ee(){return(Ee=le(ie().m(function e(t){var r,n,a;return ie().w(function(e){for(;;)switch(e.n){case 0:if(r=V.getEmbeddedKey()){e.n=1;break}return V.sendMessageUp("EMBEDDED_PUBLIC_KEY","",t),e.a(2);case 1:return e.n=2,V.p256JWKPrivateToPublic(r);case 2:n=e.v,a=V.uint8arrayToHexString(n),V.sendMessageUp("EMBEDDED_PUBLIC_KEY",a,t);case 3:return e.a(2)}},e)}))).apply(this,arguments)}function Se(e,t,r,n){return Oe.apply(this,arguments)}function Oe(){return(Oe=le(ie().m(function e(t,r,n,a){var o,i,c,u,s,f;return ie().w(function(e){for(;;)switch(e.n){case 0:if(i=new Uint8Array(r),"SOLANA"!==n){e.n=2;break}return c=V.uint8arrayToHexString(i.subarray(0,32)),u=V.getEd25519PublicKey(c),e.n=1,V.encodeKey(i,n,u);case 1:o=e.v,e.n=4;break;case 2:return e.n=3,V.encodeKey(i,n);case 3:o=e.v;case 4:if(s=t||"default","SOLANA"!==n){e.n=5;break}f=Z.AX.fromSecretKey(V.base58Decode(o)),e.n=7;break;case 5:if("HEXADECIMAL"!==n){e.n=7;break}return e.n=6,Ue(Array.from(V.uint8arrayFromHexString(o)));case 6:f=e.v;case 7:de=ae(ae({},de),{},oe({},s,{organizationId:a,privateKey:o,format:n,expiry:(new Date).getTime()+864e5,keypair:f}));case 8:return e.a(2)}},e)}))).apply(this,arguments)}function ke(e,t,r,n,a,o){return je.apply(this,arguments)}function je(){return je=le(ie().m(function e(t,r,n,a,o,i){var c;return ie().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,ge(n,r,i);case 1:return c=e.v,e.n=2,Se(o,c,a,r);case 2:V.sendMessageUp("BUNDLE_INJECTED",!0,t);case 3:return e.a(2)}},e)})),je.apply(this,arguments)}function Pe(e,t){return _e.apply(this,arguments)}function _e(){return(_e=le(ie().m(function e(t,r){var n;return ie().w(function(e){for(;;)switch(e.n){case 0:n=V.applySettings(t),V.setSettings(n),V.sendMessageUp("SETTINGS_APPLIED",!0,r);case 1:return e.a(2)}},e)}))).apply(this,arguments)}function Te(e,t,r){return xe.apply(this,arguments)}function xe(){return(xe=le(ie().m(function e(t,r,n){var a,o,i,c,u,s,f,l,d,p;return ie().w(function(e){for(;;)switch(e.n){case 0:if(He(o=de[a=n||"default"],a)){e.n=1;break}return e.a(2);case 1:if(i=JSON.parse(r),c=i.transaction,"SOLANA"!==(u=i.type)){e.n=3;break}return e.n=2,Fe(o);case 2:f=e.v,l=V.uint8arrayFromHexString(c),(d=Z.Kt.deserialize(l)).sign([f]),s=d.serialize(),e.n=6;break;case 3:if("ETHEREUM"!==u){e.n=5;break}return e.n=4,Je(o,c);case 4:s=e.v,e.n=6;break;case 5:throw new Error("unsupported transaction type");case 6:p="string"==typeof s?s:V.uint8arrayToHexString(s),V.sendMessageUp("TRANSACTION_SIGNED",p,t);case 7:return e.a(2)}},e)}))).apply(this,arguments)}function Ae(e,t,r){return Ie.apply(this,arguments)}function Ie(){return Ie=le(ie().m(function e(t,r,o){var i,c,u,s,f,l,d,p,y,v,b;return ie().w(function(e){for(;;)switch(e.n){case 0:if(He(c=de[i=o||"default"],i)){e.n=1;break}return e.a(2);case 1:if(u=JSON.parse(r),s=u.message,f=u.type,l=ye.encode(s),"SOLANA"!==f){e.n=3;break}return e.n=2,Fe(c);case 2:p=e.v,n.jn.sha512Sync=function(){var e;return a.Zf((e=n.jn).concatBytes.apply(e,arguments))},y=p.secretKey.slice(0,32),v=n._S(l,y),d=V.uint8arrayToHexString(v),e.n=7;break;case 3:if("ETHEREUM"!==f){e.n=6;break}return e.n=4,qe(c);case 4:return b=e.v,e.n=5,b.signMessage({message:s});case 5:d=e.v,e.n=7;break;case 6:return V.sendMessageUp("ERROR","unsupported message type",t),e.a(2);case 7:V.sendMessageUp("MESSAGE_SIGNED",d,t);case 8:return e.a(2)}},e)})),Ie.apply(this,arguments)}function De(e,t){return Re.apply(this,arguments)}function Re(){return(Re=le(ie().m(function e(t,r){return ie().w(function(e){for(;;)switch(e.n){case 0:if(r){e.n=1;break}return de={},V.sendMessageUp("EMBEDDED_PRIVATE_KEY_CLEARED",!0,t),e.a(2);case 1:if(de[r]){e.n=2;break}return V.sendMessageUp("ERROR",new Error("key not found for address ".concat(r,". Note that address is case sensitive.")).toString(),t),e.a(2);case 2:delete de[r],V.sendMessageUp("EMBEDDED_PRIVATE_KEY_CLEARED",!0,t);case 3:return e.a(2)}},e)}))).apply(this,arguments)}function Me(e,t,r,n){return Ne.apply(this,arguments)}function Ne(){return Ne=le(ie().m(function e(t,r,n,a){var o,i;return ie().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,ge(n,r,a);case 1:return o=e.v,e.n=2,Ge(new Uint8Array(o));case 2:i=e.v,pe=i,V.sendMessageUp("EMBEDDED_KEY_OVERRIDE_SET",!0,t);case 3:return e.a(2)}},e)})),Ne.apply(this,arguments)}function Ke(e){pe=null,V.sendMessageUp("RESET_TO_DEFAULT_EMBEDDED_KEY",!0,e)}function Ue(e){return Ce.apply(this,arguments)}function Ce(){return(Ce=le(ie().m(function e(t){var r,n;return ie().w(function(e){for(;;)switch(e.n){case 0:if(32!==(r=V.parsePrivateKey(t)).length){e.n=1;break}n=Z.AX.fromSeed(r),e.n=3;break;case 1:if(64!==r.length){e.n=2;break}n=Z.AX.fromSecretKey(r),e.n=3;break;case 2:throw new Error("Invalid private key length: ".concat(r.length,". Expected 32 or 64 bytes."));case 3:return e.a(2,n)}},e)}))).apply(this,arguments)}function Ge(e){return Be.apply(this,arguments)}function Be(){return(Be=le(ie().m(function e(t){var r,n,a;return ie().w(function(e){for(;;)switch(e.n){case 0:if(32===t.length){e.n=1;break}throw new Error("invalid decryption key length: expected 32 bytes, got ".concat(t.length));case 1:return r=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),(n=new Uint8Array(r.length+32)).set(r),n.set(t,r.length),e.n=2,crypto.subtle.importKey("pkcs8",n,{name:"ECDH",namedCurve:"P-256"},!0,["deriveBits"]);case 2:return a=e.v,e.n=3,crypto.subtle.exportKey("jwk",a);case 3:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function Le(e){de[e]&&delete de[e]}function He(e,t){if(!e)throw new Error("key bytes not found. Please re-inject export bundle for address ".concat(t," into iframe. Note that address is case sensitive.")).toString();if((new Date).getTime()>=e.expiry)throw function(){for(var e=(new Date).getTime(),t=[],r=0,n=Object.entries(de);r=i.expiry&&t.push(o)}for(var c=0,u=t;c3?(a=y===n)&&(u=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=p&&((a=r<2&&pn||n>y)&&(o[4]=r,o[5]=n,d.n=y,c=0))}if(a||r>1)return i;throw l=!0,n}return function(a,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&p(f,y),c=f,u=y;(t=c<2?e:u)||!l;){o||(c?c<3?(c>1&&(d.n=-1),p(c,u)):d.n=u:d.v=u);try{if(s=2,o){if(c||(a="next"),t=o[a]){if(!(t=t.call(o,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);o=e}else if((t=(l=d.n<0)?u:r.call(n,d))!==i)break}catch(t){o=e,c=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,a,o),!0),s}var i={};function c(){}function u(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(Ze(t={},n,function(){return this}),t),l=s.prototype=c.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,Ze(e,a,"GeneratorFunction")),e.prototype=Object.create(l),e}return u.prototype=s,Ze(l,"constructor",s),Ze(s,"constructor",u),u.displayName="GeneratorFunction",Ze(s,a,"GeneratorFunction"),Ze(l),Ze(l,a,"Generator"),Ze(l,n,function(){return this}),Ze(l,"toString",function(){return"[object Generator]"}),(Ve=function(){return{w:o,m:d}})()}function Ze(e,t,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}Ze=function(e,t,r,n){function o(t,r){Ze(e,t,function(e){return this._invoke(t,r,e)})}t?a?a(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(o("next",0),o("throw",1),o("return",2))},Ze(e,t,r,n)}function et(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function tt(e){for(var t=1;t3?(a=y===n)&&(u=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=p&&((a=r<2&&pn||n>y)&&(o[4]=r,o[5]=n,d.n=y,c=0))}if(a||r>1)return i;throw l=!0,n}return function(a,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&p(f,y),c=f,u=y;(t=c<2?e:u)||!l;){o||(c?c<3?(c>1&&(d.n=-1),p(c,u)):d.n=u:d.v=u);try{if(s=2,o){if(c||(a="next"),t=o[a]){if(!(t=t.call(o,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);o=e}else if((t=(l=d.n<0)?u:r.call(n,d))!==i)break}catch(t){o=e,c=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,a,o),!0),s}var i={};function c(){}function u(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(ut(t={},n,function(){return this}),t),l=s.prototype=c.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,ut(e,a,"GeneratorFunction")),e.prototype=Object.create(l),e}return u.prototype=s,ut(l,"constructor",s),ut(s,"constructor",u),u.displayName="GeneratorFunction",ut(s,a,"GeneratorFunction"),ut(l),ut(l,a,"Generator"),ut(l,n,function(){return this}),ut(l,"toString",function(){return"[object Generator]"}),(ct=function(){return{w:o,m:d}})()}function ut(e,t,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}ut=function(e,t,r,n){function o(t,r){ut(e,t,function(e){return this._invoke(t,r,e)})}t?a?a(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(o("next",0),o("throw",1),o("return",2))},ut(e,t,r,n)}function st(e,t,r,n,a,o,i){try{var c=e[o](i),u=c.value}catch(e){return void r(e)}c.done?t(u):Promise.resolve(u).then(n,a)}function ft(e){return function(){var t=this,r=arguments;return new Promise(function(n,a){var o=e.apply(t,r);function i(e){st(o,n,a,i,c,"next",e)}function c(e){st(o,n,a,i,c,"throw",e)}i(void 0)})}}window.TKHQ=V,document.addEventListener("DOMContentLoaded",ft(ct().m(function e(){var t,r,n,a;return ct().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,V.initEmbeddedKey();case 1:return e.n=2,V.getEmbeddedKey();case 2:return t=e.v,e.n=3,V.p256JWKPrivateToPublic(t);case 3:r=e.v,n=V.uint8arrayToHexString(r),document.getElementById("embedded-key").value=n,We(ot),(a=V.getSettings())&&V.applySettings(a),V.sendMessageUp("PUBLIC_KEY_READY",n);case 4:return e.a(2)}},e)})))},7790:()=>{}},i={};function c(e){var t=i[e];if(void 0!==t)return t.exports;var r=i[e]={id:e,loaded:!1,exports:{}};return o[e].call(r.exports,r,r.exports,c),r.loaded=!0,r.exports}c.m=o,e=[],c.O=(t,r,n,a)=>{if(!r){var o=1/0;for(f=0;f=a)&&Object.keys(c.O).every(e=>c.O[e](r[u]))?r.splice(u--,1):(i=!1,a0&&e[f-1][2]>a;f--)e[f]=e[f-1];e[f]=[r,n,a]},c.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return c.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,c.t=function(e,n){if(1&n&&(e=this(e)),8&n)return e;if("object"==typeof e&&e){if(4&n&&e.__esModule)return e;if(16&n&&"function"==typeof e.then)return e}var a=Object.create(null);c.r(a);var o={};t=t||[null,r({}),r([]),r(r)];for(var i=2&n&&e;("object"==typeof i||"function"==typeof i)&&!~t.indexOf(i);i=r(i))Object.getOwnPropertyNames(i).forEach(t=>o[t]=()=>e[t]);return o.default=()=>e,c.d(a,o),a},c.d=(e,t)=>{for(var r in t)c.o(t,r)&&!c.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},c.f={},c.e=e=>Promise.all(Object.keys(c.f).reduce((t,r)=>(c.f[r](e,t),t),[])),c.u=e=>"bundle."+{291:"c9a8b8d5055f705bd308",825:"29203a225e88524b9cba"}[e]+".js",c.miniCssF=e=>{},c.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),c.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n={},a="export-and-sign:",c.l=(e,t,r,o)=>{if(n[e])n[e].push(t);else{var i,u;if(void 0!==r)for(var s=document.getElementsByTagName("script"),f=0;f{i.onerror=i.onload=null,clearTimeout(p);var a=n[e];if(delete n[e],i.parentNode&&i.parentNode.removeChild(i),a&&a.forEach(e=>e(r)),t)return t(r)},p=setTimeout(d.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=d.bind(null,i.onerror),i.onload=d.bind(null,i.onload),u&&document.head.appendChild(i)}},c.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),c.p="/",c.sriHashes={291:"sha384-NziyQFa0c+tM/folhGewwHGB+kndrJOhSqc+I6I58zjk3ee0ZF/F0HIPyk5cdxYN",825:"sha384-tka20zEdSvhDidwx3jpd3ODdJVt6y+tmsVdN//IcKAo80EdBzm93OpxaFjB9NQxL"},(()=>{var e={792:0};c.f.j=(t,r)=>{var n=c.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var a=new Promise((r,a)=>n=e[t]=[r,a]);r.push(n[2]=a);var o=c.p+c.u(t),i=new Error;c.l(o,r=>{if(c.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var a=r&&("load"===r.type?"missing":r.type),o=r&&r.target&&r.target.src;i.message="Loading chunk "+t+" failed.\n("+a+": "+o+")",i.name="ChunkLoadError",i.type=a,i.request=o,n[1](i)}},"chunk-"+t,t)}},c.O.j=t=>0===e[t];var t=(t,r)=>{var n,a,[o,i,u]=r,s=0;if(o.some(t=>0!==e[t])){for(n in i)c.o(i,n)&&(c.m[n]=i[n]);if(u)var f=u(c)}for(t&&t(r);sc(4560));u=c.O(u)})(); -//# sourceMappingURL=bundle.6f3ad536a859e78bdbd5.js.map \ No newline at end of file diff --git a/export-and-sign/dist/bundle.6f3ad536a859e78bdbd5.js.map b/export-and-sign/dist/bundle.6f3ad536a859e78bdbd5.js.map deleted file mode 100644 index 609d95df..00000000 --- a/export-and-sign/dist/bundle.6f3ad536a859e78bdbd5.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"bundle.6f3ad536a859e78bdbd5.js","mappings":"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","sources":["webpack://export-and-sign/webpack/runtime/chunk loaded","webpack://export-and-sign/webpack/runtime/create fake namespace object","webpack://export-and-sign/webpack/runtime/load script","webpack://export-and-sign/external var \"crypto\"","webpack://export-and-sign/../shared/turnkey-core.js","webpack://export-and-sign/./src/turnkey-core.js","webpack://export-and-sign/./src/event-handlers.js","webpack://export-and-sign/../shared/crypto-utils.js","webpack://export-and-sign/./src/index.js","webpack://export-and-sign/webpack/bootstrap","webpack://export-and-sign/webpack/runtime/compat get default export","webpack://export-and-sign/webpack/runtime/define property getters","webpack://export-and-sign/webpack/runtime/ensure chunk","webpack://export-and-sign/webpack/runtime/get javascript chunk filename","webpack://export-and-sign/webpack/runtime/get mini-css chunk filename","webpack://export-and-sign/webpack/runtime/global","webpack://export-and-sign/webpack/runtime/hasOwnProperty shorthand","webpack://export-and-sign/webpack/runtime/make namespace object","webpack://export-and-sign/webpack/runtime/node module decorator","webpack://export-and-sign/webpack/runtime/publicPath","webpack://export-and-sign/webpack/runtime/compat","webpack://export-and-sign/webpack/runtime/jsonp chunk loading","webpack://export-and-sign/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"export-and-sign:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t\tif (script.src.indexOf(window.location.origin + '/') !== 0) {\n\t\t\tscript.crossOrigin = \"anonymous\";\n\t\t}\n\t\tscript.integrity = __webpack_require__.sriHashes[chunkId];\n\t\tscript.crossOrigin = \"anonymous\";\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","module.exports = crypto;","import { bech32 } from \"bech32\";\n\n/**\n * Turnkey Core Module - Shared\n * Contains all the core cryptographic and utility functions shared across frames\n */\n\n/** constants for LocalStorage */\nconst TURNKEY_EMBEDDED_KEY = \"TURNKEY_EMBEDDED_KEY\";\nconst TURNKEY_TARGET_EMBEDDED_KEY = \"TURNKEY_TARGET_EMBEDDED_KEY\";\nconst TURNKEY_SETTINGS = \"TURNKEY_SETTINGS\";\n/** 48 hours in milliseconds */\nconst TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS = 1000 * 60 * 60 * 48;\nconst TURNKEY_EMBEDDED_KEY_ORIGIN = \"TURNKEY_EMBEDDED_KEY_ORIGIN\";\n\nlet parentFrameMessageChannelPort = null;\nvar cryptoProviderOverride = null;\n\n/*\n * Returns a reference to the WebCrypto subtle interface regardless of the host environment.\n */\nfunction getSubtleCrypto() {\n if (cryptoProviderOverride && cryptoProviderOverride.subtle) {\n return cryptoProviderOverride.subtle;\n }\n if (\n typeof globalThis !== \"undefined\" &&\n globalThis.crypto &&\n globalThis.crypto.subtle\n ) {\n return globalThis.crypto.subtle;\n }\n if (typeof window !== \"undefined\" && window.crypto && window.crypto.subtle) {\n return window.crypto.subtle;\n }\n if (typeof global !== \"undefined\" && global.crypto && global.crypto.subtle) {\n return global.crypto.subtle;\n }\n if (typeof crypto !== \"undefined\" && crypto.subtle) {\n return crypto.subtle;\n }\n\n return null;\n}\n\n/*\n * Allows tests to explicitly set the crypto provider (e.g. crypto.webcrypto) when the runtime\n * environment does not expose one on the global/window objects.\n */\nfunction setCryptoProvider(cryptoProvider) {\n cryptoProviderOverride = cryptoProvider || null;\n}\n\n/* Security functions */\n\nfunction isDoublyIframed() {\n if (window.location.ancestorOrigins !== undefined) {\n // Does not exist in IE and firefox.\n // See https://developer.mozilla.org/en-US/docs/Web/API/Location/ancestorOrigins for how this works\n return window.location.ancestorOrigins.length > 1;\n } else {\n return window.parent !== window.top;\n }\n}\n\n/*\n * Loads the quorum public key as a CryptoKey.\n */\nasync function loadQuorumKey(quorumPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.importKey(\n \"raw\",\n quorumPublic,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n [\"verify\"]\n );\n}\n\n/*\n * Load a key to encrypt to as a CryptoKey and return it as a JSON Web Key.\n */\nasync function loadTargetKey(targetPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const targetKey = await subtle.importKey(\n \"raw\",\n targetPublic,\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n\n return await subtle.exportKey(\"jwk\", targetKey);\n}\n\n/**\n * Creates a new public/private key pair and persists it in localStorage\n */\nasync function initEmbeddedKey() {\n if (isDoublyIframed()) {\n throw new Error(\"Doubly iframed\");\n }\n const retrievedKey = await getEmbeddedKey();\n if (retrievedKey === null) {\n const targetKey = await generateTargetKey();\n setEmbeddedKey(targetKey);\n }\n // Nothing to do, key is correctly initialized!\n}\n\n/*\n * Generate a key to encrypt to and export it as a JSON Web Key.\n */\nasync function generateTargetKey() {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const p256key = await subtle.generateKey(\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n [\"deriveBits\"]\n );\n\n return await subtle.exportKey(\"jwk\", p256key.privateKey);\n}\n\n/**\n * Gets the current embedded private key JWK. Returns `null` if not found.\n */\nfunction getEmbeddedKey() {\n const jwtKey = getItemWithExpiry(TURNKEY_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the embedded private key JWK with the default expiration time.\n * @param {JsonWebKey} targetKey\n */\nfunction setEmbeddedKey(targetKey) {\n setItemWithExpiry(\n TURNKEY_EMBEDDED_KEY,\n JSON.stringify(targetKey),\n TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS\n );\n}\n\n/**\n * Gets the current target embedded private key JWK. Returns `null` if not found.\n */\nfunction getTargetEmbeddedKey() {\n const jwtKey = window.localStorage.getItem(TURNKEY_TARGET_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the target embedded public key JWK.\n * @param {JsonWebKey} targetKey\n */\nfunction setTargetEmbeddedKey(targetKey) {\n window.localStorage.setItem(\n TURNKEY_TARGET_EMBEDDED_KEY,\n JSON.stringify(targetKey)\n );\n}\n\n/**\n * Resets the current embedded private key JWK.\n */\nfunction onResetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY);\n window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY_ORIGIN);\n}\n\n/**\n * Resets the current target embedded private key JWK.\n */\nfunction resetTargetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_TARGET_EMBEDDED_KEY);\n}\n\nfunction setParentFrameMessageChannelPort(port) {\n parentFrameMessageChannelPort = port;\n}\n\n/**\n * Gets the current settings.\n */\nfunction getSettings() {\n const settings = window.localStorage.getItem(TURNKEY_SETTINGS);\n return settings ? JSON.parse(settings) : null;\n}\n\n/**\n * Sets the settings object.\n * @param {Object} settings\n */\nfunction setSettings(settings) {\n window.localStorage.setItem(TURNKEY_SETTINGS, JSON.stringify(settings));\n}\n\n/**\n * Set an item in localStorage with an expiration time\n * @param {string} key\n * @param {string} value\n * @param {number} ttl expiration time in milliseconds\n */\nfunction setItemWithExpiry(key, value, ttl) {\n const now = new Date();\n const item = {\n value: value,\n expiry: now.getTime() + ttl,\n };\n window.localStorage.setItem(key, JSON.stringify(item));\n}\n\n/**\n * Get an item from localStorage. Returns `null` and\n * removes the item from localStorage if expired or\n * expiry time is missing.\n * @param {string} key\n */\nfunction getItemWithExpiry(key) {\n const itemStr = window.localStorage.getItem(key);\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n if (\n !Object.prototype.hasOwnProperty.call(item, \"expiry\") ||\n !Object.prototype.hasOwnProperty.call(item, \"value\")\n ) {\n window.localStorage.removeItem(key);\n return null;\n }\n const now = new Date();\n if (now.getTime() > item.expiry) {\n window.localStorage.removeItem(key);\n return null;\n }\n return item.value;\n}\n\n/**\n * Takes a hex string (e.g. \"e4567ab\" or \"0xe4567ab\") and returns an array buffer (Uint8Array)\n * @param {string} hexString - Hex string with or without \"0x\" prefix\n * @returns {Uint8Array}\n */\nfunction uint8arrayFromHexString(hexString) {\n if (!hexString || typeof hexString !== \"string\") {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n\n // Remove 0x prefix if present\n const hexWithoutPrefix =\n hexString.startsWith(\"0x\") || hexString.startsWith(\"0X\")\n ? hexString.slice(2)\n : hexString;\n\n var hexRegex = /^[0-9A-Fa-f]+$/;\n if (hexWithoutPrefix.length % 2 != 0 || !hexRegex.test(hexWithoutPrefix)) {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n return new Uint8Array(\n hexWithoutPrefix.match(/../g).map((h) => parseInt(h, 16))\n );\n}\n\n/**\n * Takes a Uint8Array and returns a hex string\n * @param {Uint8Array} buffer\n * @return {string}\n */\nfunction uint8arrayToHexString(buffer) {\n return [...buffer].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n/**\n * Function to normalize padding of byte array with 0's to a target length\n */\nfunction normalizePadding(byteArray, targetLength) {\n const paddingLength = targetLength - byteArray.length;\n\n // Add leading 0's to array\n if (paddingLength > 0) {\n const padding = new Uint8Array(paddingLength).fill(0);\n return new Uint8Array([...padding, ...byteArray]);\n }\n\n // Remove leading 0's from array\n if (paddingLength < 0) {\n const expectedZeroCount = paddingLength * -1;\n let zeroCount = 0;\n for (let i = 0; i < expectedZeroCount && i < byteArray.length; i++) {\n if (byteArray[i] === 0) {\n zeroCount++;\n }\n }\n // Check if the number of zeros found equals the number of zeroes expected\n if (zeroCount !== expectedZeroCount) {\n throw new Error(\n `invalid number of starting zeroes. Expected number of zeroes: ${expectedZeroCount}. Found: ${zeroCount}.`\n );\n }\n return byteArray.slice(expectedZeroCount, expectedZeroCount + targetLength);\n }\n return byteArray;\n}\n\n/**\n * Additional Associated Data (AAD) in the format dictated by the enclave_encrypt crate.\n */\nfunction additionalAssociatedData(senderPubBuf, receiverPubBuf) {\n const s = Array.from(new Uint8Array(senderPubBuf));\n const r = Array.from(new Uint8Array(receiverPubBuf));\n return new Uint8Array([...s, ...r]);\n}\n\n/**\n * Converts an ASN.1 DER-encoded ECDSA signature to the raw format that WebCrypto uses.\n */\nfunction fromDerSignature(derSignature) {\n const derSignatureBuf = uint8arrayFromHexString(derSignature);\n\n // Check and skip the sequence tag (0x30)\n let index = 2;\n\n // Parse 'r' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for r\"\n );\n }\n index++; // Move past the INTEGER tag\n const rLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const r = derSignatureBuf.slice(index, index + rLength);\n index += rLength; // Move to the start of s\n\n // Parse 's' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for s\"\n );\n }\n index++; // Move past the INTEGER tag\n const sLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const s = derSignatureBuf.slice(index, index + sLength);\n\n // Normalize 'r' and 's' to 32 bytes each\n const rPadded = normalizePadding(r, 32);\n const sPadded = normalizePadding(s, 32);\n\n // Concatenate and return the raw signature\n return new Uint8Array([...rPadded, ...sPadded]);\n}\n\n/**\n * Function to verify enclave signature on import bundle received from the server.\n * @param {string} enclaveQuorumPublic uncompressed public key for the quorum key which produced the signature\n * @param {string} publicSignature signature bytes encoded as a hexadecimal string\n * @param {string} signedData signed bytes encoded as a hexadecimal string. This could be public key bytes directly, or JSON-encoded bytes\n */\nasync function verifyEnclaveSignature(\n enclaveQuorumPublic,\n publicSignature,\n signedData\n) {\n /** Turnkey Signer enclave's public keys */\n const TURNKEY_SIGNERS_ENCLAVES = {\n prod: \"04cf288fe433cc4e1aa0ce1632feac4ea26bf2f5a09dcfe5a42c398e06898710330f0572882f4dbdf0f5304b8fc8703acd69adca9a4bbf7f5d00d20a5e364b2569\",\n preprod:\n \"04f3422b8afbe425d6ece77b8d2469954715a2ff273ab7ac89f1ed70e0a9325eaa1698b4351fd1b23734e65c0b6a86b62dd49d70b37c94606aac402cbd84353212\",\n dev: \"048cf9ed5f579298cc1571823a3222b82d80c529c551f6070fbe712ae1a9e8d1a23b7006e306d27190358dfcd9c44624918a00f23c920a33cb14f5b026eafc865d\",\n };\n\n // Use window.__TURNKEY_SIGNER_ENVIRONMENT__ if available (for testing), otherwise use the webpack replacement\n const environment =\n (typeof window !== \"undefined\" && window.__TURNKEY_SIGNER_ENVIRONMENT__) ||\n \"__TURNKEY_SIGNER_ENVIRONMENT__\";\n const TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY =\n TURNKEY_SIGNERS_ENCLAVES[environment];\n\n if (TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY === undefined) {\n throw new Error(\n `Configuration error: TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY is undefined`\n );\n }\n\n // todo(olivia): throw error if enclave quorum public is null once server changes are deployed\n if (enclaveQuorumPublic) {\n if (enclaveQuorumPublic !== TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY) {\n throw new Error(\n `enclave quorum public keys from client and bundle do not match. Client: ${TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY}. Bundle: ${enclaveQuorumPublic}.`\n );\n }\n }\n\n const encryptionQuorumPublicBuf = new Uint8Array(\n uint8arrayFromHexString(TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY)\n );\n const quorumKey = await loadQuorumKey(encryptionQuorumPublicBuf);\n if (!quorumKey) {\n throw new Error(\"failed to load quorum key\");\n }\n\n // The ECDSA signature is ASN.1 DER encoded but WebCrypto uses raw format\n const publicSignatureBuf = fromDerSignature(publicSignature);\n const signedDataBuf = uint8arrayFromHexString(signedData);\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.verify(\n { name: \"ECDSA\", hash: \"SHA-256\" },\n quorumKey,\n publicSignatureBuf,\n signedDataBuf\n );\n}\n\n/**\n * Function to send a message.\n *\n * If this page is embedded as an iframe we'll send a postMessage\n * in one of two ways depending on the version of @turnkey/iframe-stamper:\n * 1. newer versions (>=v2.1.0) pass a MessageChannel MessagePort from the parent frame for postMessages.\n * 2. older versions ( 0) {\n digits.push(carry % 58);\n carry = (carry / 58) | 0;\n }\n }\n // Convert digits to a base58 string\n for (let k = 0; k < digits.length; k++) {\n result = alphabet[digits[k]] + result;\n }\n\n // Add '1' for each leading 0 byte\n for (let i = 0; bytes[i] === 0 && i < bytes.length - 1; i++) {\n result = \"1\" + result;\n }\n return result;\n}\n\n/**\n * Decodes a base58-encoded string into a buffer\n * This function throws an error when the string contains invalid characters.\n * @param {string} s The base58-encoded string.\n * @return {Uint8Array} The decoded buffer.\n */\nfunction base58Decode(s) {\n // See https://en.bitcoin.it/wiki/Base58Check_encoding\n var alphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\n var decodedBytes = [];\n var leadingZeros = [];\n for (var i = 0; i < s.length; i++) {\n if (alphabet.indexOf(s[i]) === -1) {\n throw new Error(`cannot base58-decode: ${s[i]} isn't a valid character`);\n }\n var carry = alphabet.indexOf(s[i]);\n\n // If the current base58 digit is 0, append a 0 byte.\n // \"i == leadingZeros.length\" can only be true if we have not seen non-zero bytes so far.\n // If we had seen a non-zero byte, carry wouldn't be 0, and i would be strictly more than `leadingZeros.length`\n if (carry == 0 && i === leadingZeros.length) {\n leadingZeros.push(0);\n }\n\n var j = 0;\n while (j < decodedBytes.length || carry > 0) {\n var currentByte = decodedBytes[j];\n\n // shift the current byte 58 units and add the carry amount\n // (or just add the carry amount if this is a new byte -- undefined case)\n if (currentByte === undefined) {\n currentByte = carry;\n } else {\n currentByte = currentByte * 58 + carry;\n }\n\n // find the new carry amount (1-byte shift of current byte value)\n carry = currentByte >> 8;\n // reset the current byte to the remainder (the carry amount will pass on the overflow)\n decodedBytes[j] = currentByte % 256;\n j++;\n }\n }\n\n var result = leadingZeros.concat(decodedBytes.reverse());\n return new Uint8Array(result);\n}\n\n/**\n * Decodes a base58check-encoded string and verifies the checksum.\n * Base58Check encoding includes a 4-byte checksum at the end to detect errors.\n * The checksum is the first 4 bytes of SHA256(SHA256(payload)).\n * This function throws an error if the checksum is invalid.\n * @param {string} s The base58check-encoded string.\n * @return {Promise} The decoded payload (without checksum).\n */\nasync function base58CheckDecode(s) {\n const decoded = base58Decode(s);\n\n if (decoded.length < 5) {\n throw new Error(\n `invalid base58check length: expected at least 5 bytes, got ${decoded.length}`\n );\n }\n\n const payload = decoded.subarray(0, decoded.length - 4);\n const checksum = decoded.subarray(decoded.length - 4);\n\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n\n // Compute double SHA256 hash\n const hash1Buf = await subtle.digest(\"SHA-256\", payload);\n const hash1 = new Uint8Array(hash1Buf);\n const hash2Buf = await subtle.digest(\"SHA-256\", hash1);\n const hash2 = new Uint8Array(hash2Buf);\n const computedChecksum = hash2.subarray(0, 4);\n\n // Verify checksum\n const mismatch =\n (checksum[0] ^ computedChecksum[0]) |\n (checksum[1] ^ computedChecksum[1]) |\n (checksum[2] ^ computedChecksum[2]) |\n (checksum[3] ^ computedChecksum[3]);\n if (mismatch !== 0) {\n throw new Error(\"invalid base58check checksum\");\n }\n\n return payload;\n}\n\n/**\n * Returns private key bytes from a private key, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {string} privateKey\n * @param {string} keyFormat Can be \"HEXADECIMAL\", \"SUI_BECH32\", \"BITCOIN_MAINNET_WIF\", \"BITCOIN_TESTNET_WIF\" or \"SOLANA\"\n * @return {Promise}\n */\nasync function decodeKey(privateKey, keyFormat) {\n switch (keyFormat) {\n case \"SOLANA\": {\n const decodedKeyBytes = base58Decode(privateKey);\n if (decodedKeyBytes.length !== 64) {\n throw new Error(\n `invalid key length. Expected 64 bytes. Got ${decodedKeyBytes.length}.`\n );\n }\n return decodedKeyBytes.subarray(0, 32);\n }\n case \"HEXADECIMAL\":\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n case \"BITCOIN_MAINNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0x80 = mainnet\n if (version !== 0x80) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0x80 (mainnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"BITCOIN_TESTNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0xEF = testnet\n if (version !== 0xef) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0xEF (testnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"SUI_BECH32\": {\n const { prefix, words } = bech32.decode(privateKey);\n\n if (prefix !== \"suiprivkey\") {\n throw new Error(\n `invalid SUI private key human-readable part (HRP): expected \"suiprivkey\"`\n );\n }\n\n const bytes = bech32.fromWords(words);\n if (bytes.length !== 33) {\n throw new Error(\n `invalid SUI private key length: expected 33 bytes, got ${bytes.length}`\n );\n }\n\n const schemeFlag = bytes[0];\n const privkey = bytes.slice(1);\n\n // schemeFlag = 0 is Ed25519; We currently only support Ed25519 keys for SUI.\n if (schemeFlag !== 0) {\n throw new Error(\n `invalid SUI private key scheme flag: expected 0 (Ed25519). Turnkey only supports Ed25519 keys for SUI.`\n );\n }\n\n return new Uint8Array(privkey);\n }\n default:\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n }\n}\n\n/**\n * Returns a private key from private key bytes, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {Uint8Array} privateKeyBytes\n * @param {string} keyFormat Can be \"HEXADECIMAL\" or \"SOLANA\"\n */\nasync function encodeKey(privateKeyBytes, keyFormat, publicKeyBytes) {\n switch (keyFormat) {\n case \"SOLANA\":\n if (!publicKeyBytes) {\n throw new Error(\"public key must be specified for SOLANA key format\");\n }\n if (privateKeyBytes.length !== 32) {\n throw new Error(\n `invalid private key length. Expected 32 bytes. Got ${privateKeyBytes.length}.`\n );\n }\n if (publicKeyBytes.length !== 32) {\n throw new Error(\n `invalid public key length. Expected 32 bytes. Got ${publicKeyBytes.length}.`\n );\n }\n {\n const concatenatedBytes = new Uint8Array(64);\n concatenatedBytes.set(privateKeyBytes, 0);\n concatenatedBytes.set(publicKeyBytes, 32);\n return base58Encode(concatenatedBytes);\n }\n case \"HEXADECIMAL\":\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n default:\n // keeping console.warn for debugging purposes.\n // eslint-disable-next-line no-console\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n }\n}\n\n// Helper to parse a private key into a Solana base58 private key.\n// To be used if a wallet account is exported without the `SOLANA` address format.\nfunction parsePrivateKey(privateKey) {\n if (Array.isArray(privateKey)) {\n return new Uint8Array(privateKey);\n }\n\n if (typeof privateKey === \"string\") {\n // Remove 0x prefix if present\n if (privateKey.startsWith(\"0x\")) {\n privateKey = privateKey.slice(2);\n }\n\n // Check if it's hex-formatted correctly (i.e. 64 hex chars)\n if (privateKey.length === 64 && /^[0-9a-fA-F]+$/.test(privateKey)) {\n return uint8arrayFromHexString(privateKey);\n }\n\n // Otherwise assume it's base58 format (for Solana)\n try {\n return base58Decode(privateKey);\n } catch (error) {\n throw new Error(\n \"Invalid private key format. Use hex (64 chars) or base58 format.\"\n );\n }\n }\n\n throw new Error(\"Private key must be a string (hex/base58) or number array\");\n}\n\n/**\n * Function to validate and sanitize the styles object using the accepted map of style keys and values (as regular expressions).\n * Any invalid style throws an error. Returns an object of valid styles.\n * @param {Object} styles\n * @param {HTMLElement} element - Optional element parameter (for import frame)\n * @return {Object}\n */\nfunction validateStyles(styles, element) {\n const validStyles = {};\n\n const cssValidationRegex = {\n padding: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n margin: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n borderWidth: \"^(\\\\d+(px|em|rem) ?){1,4}$\",\n borderStyle:\n \"^(none|solid|dashed|dotted|double|groove|ridge|inset|outset)$\",\n borderColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n borderRadius: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n fontSize: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax))$\",\n fontWeight: \"^(normal|bold|bolder|lighter|\\\\d{3})$\",\n fontFamily: '^[^\";<>]*$', // checks for the absence of some characters that could lead to CSS/HTML injection\n color:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n labelColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n backgroundColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n width: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n height: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n maxWidth: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n maxHeight:\n \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n lineHeight:\n \"^(\\\\d+(\\\\.\\\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$\",\n boxShadow:\n \"^(none|(\\\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)) ?(inset)?)$\",\n textAlign: \"^(left|right|center|justify|initial|inherit)$\",\n overflowWrap: \"^(normal|break-word|anywhere)$\",\n wordWrap: \"^(normal|break-word)$\",\n resize: \"^(none|both|horizontal|vertical|block|inline)$\",\n };\n\n Object.entries(styles).forEach(([property, value]) => {\n const styleProperty = property.trim();\n if (styleProperty.length === 0) {\n throw new Error(\"css style property cannot be empty\");\n }\n const styleRegexStr = cssValidationRegex[styleProperty];\n if (!styleRegexStr) {\n throw new Error(\n `invalid or unsupported css style property: \"${styleProperty}\"`\n );\n }\n const styleRegex = new RegExp(styleRegexStr);\n const styleValue = value.trim();\n if (styleValue.length == 0) {\n throw new Error(`css style for \"${styleProperty}\" is empty`);\n }\n const isValidStyle = styleRegex.test(styleValue);\n if (!isValidStyle) {\n throw new Error(\n `invalid css style value for property \"${styleProperty}\"`\n );\n }\n validStyles[styleProperty] = styleValue;\n });\n\n return validStyles;\n}\n\n// Export all shared functions\nexport {\n setCryptoProvider,\n getSubtleCrypto,\n isDoublyIframed,\n loadQuorumKey,\n loadTargetKey,\n initEmbeddedKey,\n generateTargetKey,\n getEmbeddedKey,\n setEmbeddedKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n onResetEmbeddedKey,\n resetTargetEmbeddedKey,\n setParentFrameMessageChannelPort,\n getSettings,\n setSettings,\n setItemWithExpiry,\n getItemWithExpiry,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n normalizePadding,\n additionalAssociatedData,\n fromDerSignature,\n verifyEnclaveSignature,\n sendMessageUp,\n logMessage,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n base58CheckDecode,\n decodeKey,\n encodeKey,\n parsePrivateKey,\n validateStyles,\n};\n","import * as nobleEd25519 from \"@noble/ed25519\";\nimport * as nobleHashes from \"@noble/hashes/sha512\";\nimport { fromDerSignature } from \"@turnkey/crypto\";\nimport * as SharedTKHQ from \"@shared/turnkey-core.js\";\n\nconst {\n initEmbeddedKey: sharedInitEmbeddedKey,\n generateTargetKey,\n setItemWithExpiry,\n getItemWithExpiry,\n getEmbeddedKey,\n setEmbeddedKey,\n onResetEmbeddedKey,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n encodeKey,\n sendMessageUp,\n logMessage,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n setParentFrameMessageChannelPort,\n normalizePadding,\n additionalAssociatedData,\n getSettings,\n setSettings,\n parsePrivateKey,\n validateStyles,\n isDoublyIframed,\n loadQuorumKey,\n} = SharedTKHQ;\n\n/**\n * Creates a new public/private key pair and persists it in localStorage\n */\nasync function initEmbeddedKey() {\n if (isDoublyIframed()) {\n throw new Error(\"Doubly iframed\");\n }\n return await sharedInitEmbeddedKey();\n}\n\n/**\n * Function to verify enclave signature on import bundle received from the server.\n * @param {string} enclaveQuorumPublic uncompressed public key for the quorum key which produced the signature\n * @param {string} publicSignature signature bytes encoded as a hexadecimal string\n * @param {string} signedData signed bytes encoded as a hexadecimal string. This could be public key bytes directly, or JSON-encoded bytes\n */\nasync function verifyEnclaveSignature(\n enclaveQuorumPublic,\n publicSignature,\n signedData\n) {\n /** Turnkey Signer enclave's public keys */\n const TURNKEY_SIGNERS_ENCLAVES = {\n prod: \"04cf288fe433cc4e1aa0ce1632feac4ea26bf2f5a09dcfe5a42c398e06898710330f0572882f4dbdf0f5304b8fc8703acd69adca9a4bbf7f5d00d20a5e364b2569\",\n preprod:\n \"04f3422b8afbe425d6ece77b8d2469954715a2ff273ab7ac89f1ed70e0a9325eaa1698b4351fd1b23734e65c0b6a86b62dd49d70b37c94606aac402cbd84353212\",\n };\n\n // Read environment from meta tag (templated at deploy time), fall back to window variable (for testing)\n let environment = null;\n if (typeof document !== \"undefined\") {\n const meta = document.querySelector(\n 'meta[name=\"turnkey-signer-environment\"]'\n );\n if (\n meta &&\n meta.content &&\n meta.content !== \"__TURNKEY_SIGNER_ENVIRONMENT__\"\n ) {\n environment = meta.content;\n }\n }\n if (!environment && typeof window !== \"undefined\") {\n environment = window.__TURNKEY_SIGNER_ENVIRONMENT__;\n }\n const TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY =\n TURNKEY_SIGNERS_ENCLAVES[environment];\n\n if (TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY === undefined) {\n throw new Error(\n `Configuration error: TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY is undefined`\n );\n }\n\n if (enclaveQuorumPublic !== TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY) {\n throw new Error(\n `enclave quorum public keys from client and bundle do not match. Client: ${TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY}. Bundle: ${enclaveQuorumPublic}.`\n );\n }\n\n const encryptionQuorumPublicBuf = new Uint8Array(\n uint8arrayFromHexString(TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY)\n );\n const quorumKey = await loadQuorumKey(encryptionQuorumPublicBuf);\n if (!quorumKey) {\n throw new Error(\"failed to load quorum key\");\n }\n\n // The ECDSA signature is ASN.1 DER encoded but WebCrypto uses raw format\n const publicSignatureBuf = fromDerSignature(publicSignature);\n const signedDataBuf = uint8arrayFromHexString(signedData);\n return await crypto.subtle.verify(\n { name: \"ECDSA\", hash: \"SHA-256\" },\n quorumKey,\n publicSignatureBuf,\n signedDataBuf\n );\n}\n\n/**\n * Returns the public key bytes for a hex-encoded Ed25519 private key.\n * @param {string} privateKeyHex\n */\nfunction getEd25519PublicKey(privateKeyHex) {\n nobleEd25519.etc.sha512Sync = (...m) =>\n nobleHashes.sha512(nobleEd25519.etc.concatBytes(...m));\n return nobleEd25519.getPublicKey(privateKeyHex);\n}\n\n/**\n * Function to apply settings on this page. For now, the only settings that can be applied\n * are for \"styles\". Upon successful application, return the valid, sanitized settings JSON string.\n * @param {string} settings\n * @return {string}\n */\nfunction applySettings(settings) {\n const validSettings = {};\n if (!settings) {\n return JSON.stringify(validSettings);\n }\n const settingsObj = JSON.parse(settings);\n if (settingsObj.styles) {\n // Valid styles will be applied the \"key-div\" div HTML element.\n const keyDivTextarea = document.getElementById(\"key-div\");\n if (!keyDivTextarea) {\n throw new Error(\"no key-div HTML element found to apply settings to.\");\n }\n\n // Validate, sanitize, and apply the styles to the \"key-div\" div element.\n const validStyles = validateStyles(settingsObj.styles);\n Object.entries(validStyles).forEach(([key, value]) => {\n keyDivTextarea.style[key] = value;\n });\n\n validSettings[\"styles\"] = validStyles;\n }\n\n return JSON.stringify(validSettings);\n}\n\nexport const TKHQ = {\n initEmbeddedKey,\n generateTargetKey,\n setItemWithExpiry,\n getItemWithExpiry,\n getEmbeddedKey,\n setEmbeddedKey,\n onResetEmbeddedKey,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n encodeKey,\n sendMessageUp,\n logMessage,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n setParentFrameMessageChannelPort,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n getEd25519PublicKey,\n applySettings,\n validateStyles,\n getSettings,\n setSettings,\n parsePrivateKey,\n};\n","import { TKHQ } from \"./turnkey-core.js\";\nimport { Keypair, VersionedTransaction } from \"@solana/web3.js\";\nimport { parseTransaction } from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport * as nobleEd25519 from \"@noble/ed25519\";\nimport * as nobleHashes from \"@noble/hashes/sha512\";\n\n// Persist keys in memory via mapping of { address --> pk }\nlet inMemoryKeys = {};\n\n// Injected embedded key -- held in memory only, never persisted.\n// When set, decryptBundle uses this P-256 JWK instead of the iframe's embedded key.\nlet injectedEmbeddedKey = null;\n\nexport const DEFAULT_TTL_MILLISECONDS = 1000 * 24 * 60 * 60; // 24 hours or 86,400,000 milliseconds\n\n// Instantiate these once (for perf)\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\n/**\n * Verifies the enclave signature on a v1.0.0 bundle and returns the parsed signed data.\n * @param {string} bundle - JSON-stringified bundle\n * @param {string} organizationId - Expected organization ID\n * @returns {Promise} - The parsed signed data {organizationId, encappedPublic, ciphertext}\n */\nasync function verifyAndParseBundleData(bundle, organizationId) {\n const bundleObj = JSON.parse(bundle);\n\n if (bundleObj.version !== \"v1.0.0\") {\n throw new Error(`unsupported version: ${bundleObj.version}`);\n }\n if (!bundleObj.data) {\n throw new Error('missing \"data\" in bundle');\n }\n if (!bundleObj.dataSignature) {\n throw new Error('missing \"dataSignature\" in bundle');\n }\n if (!bundleObj.enclaveQuorumPublic) {\n throw new Error('missing \"enclaveQuorumPublic\" in bundle');\n }\n\n if (!TKHQ.verifyEnclaveSignature) {\n throw new Error(\"method TKHQ.verifyEnclaveSignature not loaded\");\n }\n const verified = await TKHQ.verifyEnclaveSignature(\n bundleObj.enclaveQuorumPublic,\n bundleObj.dataSignature,\n bundleObj.data\n );\n if (!verified) {\n throw new Error(\n `failed to verify enclave signature. Got signature: ${bundleObj.dataSignature}, enclaveQuorumPublic: ${bundleObj.enclaveQuorumPublic}`\n );\n }\n\n const signedData = JSON.parse(\n textDecoder.decode(TKHQ.uint8arrayFromHexString(bundleObj.data))\n );\n\n if (!organizationId) {\n throw new Error(\n `organization id is required. Please ensure you are using @turnkey/iframe-stamper >= v2.0.0 to pass \"organizationId\" for security purposes.`\n );\n } else if (\n !signedData.organizationId ||\n signedData.organizationId !== organizationId\n ) {\n throw new Error(\n `organization id does not match expected value. Expected: ${organizationId}. Found: ${signedData.organizationId}.`\n );\n }\n\n if (!signedData.encappedPublic) {\n throw new Error('missing \"encappedPublic\" in bundle signed data');\n }\n if (!signedData.ciphertext) {\n throw new Error('missing \"ciphertext\" in bundle signed data');\n }\n\n return signedData;\n}\n\n/**\n * Parse and decrypt the export bundle.\n * The `bundle` param is a JSON string of the encapsulated public\n * key, encapsulated public key signature, and the ciphertext.\n * @param {string} bundle\n * @param {string} organizationId\n * @param {Function} HpkeDecrypt\n */\nasync function decryptBundle(bundle, organizationId, HpkeDecrypt) {\n const signedData = await verifyAndParseBundleData(bundle, organizationId);\n\n const encappedKeyBuf = TKHQ.uint8arrayFromHexString(\n signedData.encappedPublic\n );\n const ciphertextBuf = TKHQ.uint8arrayFromHexString(signedData.ciphertext);\n\n // Use the injected embedded key if available, otherwise fall back to the embedded key\n const receiverPrivJwk = injectedEmbeddedKey || (await TKHQ.getEmbeddedKey());\n return await HpkeDecrypt({\n ciphertextBuf,\n encappedKeyBuf,\n receiverPrivJwk,\n });\n}\n\n/**\n * Function triggered when GET_EMBEDDED_PUBLIC_KEY event is received.\n * @param {string} requestId\n */\nasync function onGetPublicEmbeddedKey(requestId) {\n const embeddedKeyJwk = TKHQ.getEmbeddedKey();\n\n if (!embeddedKeyJwk) {\n TKHQ.sendMessageUp(\"EMBEDDED_PUBLIC_KEY\", \"\", requestId); // no key == empty string\n\n return;\n }\n\n const targetPubBuf = await TKHQ.p256JWKPrivateToPublic(embeddedKeyJwk);\n const targetPubHex = TKHQ.uint8arrayToHexString(targetPubBuf);\n\n // Send up EMBEDDED_PUBLIC_KEY message\n TKHQ.sendMessageUp(\"EMBEDDED_PUBLIC_KEY\", targetPubHex, requestId);\n}\n\n/**\n * Encodes raw key bytes and loads them into the in-memory key store.\n * @param {string} address - Wallet address (case-sensitive)\n * @param {ArrayBuffer} keyBytes - Raw decrypted private key bytes\n * @param {string} keyFormat - \"SOLANA\" | \"HEXADECIMAL\"\n * @param {string} organizationId - Organization ID\n */\nasync function loadKeyIntoMemory(address, keyBytes, keyFormat, organizationId) {\n let key;\n const privateKeyBytes = new Uint8Array(keyBytes);\n\n if (keyFormat === \"SOLANA\") {\n const privateKeyHex = TKHQ.uint8arrayToHexString(\n privateKeyBytes.subarray(0, 32)\n );\n const publicKeyBytes = TKHQ.getEd25519PublicKey(privateKeyHex);\n key = await TKHQ.encodeKey(privateKeyBytes, keyFormat, publicKeyBytes);\n } else {\n key = await TKHQ.encodeKey(privateKeyBytes, keyFormat);\n }\n\n const keyAddress = address || \"default\";\n\n // Cache keypair for improved signing perf\n let cachedKeypair;\n if (keyFormat === \"SOLANA\") {\n cachedKeypair = Keypair.fromSecretKey(TKHQ.base58Decode(key));\n } else if (keyFormat === \"HEXADECIMAL\") {\n cachedKeypair = await createSolanaKeypair(\n Array.from(TKHQ.uint8arrayFromHexString(key))\n );\n }\n\n inMemoryKeys = {\n ...inMemoryKeys,\n [keyAddress]: {\n organizationId,\n privateKey: key,\n format: keyFormat,\n expiry: new Date().getTime() + DEFAULT_TTL_MILLISECONDS,\n keypair: cachedKeypair,\n },\n };\n}\n\n/**\n * Function triggered when INJECT_KEY_EXPORT_BUNDLE event is received.\n * @param {string} requestId\n * @param {string} organizationId\n * @param {string} bundle\n * @param {string} keyFormat\n * @param {string} address\n * @param {Function} HpkeDecrypt // TODO: import this directly (instead of passing around)\n */\nasync function onInjectKeyBundle(\n requestId,\n organizationId,\n bundle,\n keyFormat,\n address,\n HpkeDecrypt\n) {\n // Decrypt the export bundle\n const keyBytes = await decryptBundle(bundle, organizationId, HpkeDecrypt);\n\n // Load decrypted key into memory\n await loadKeyIntoMemory(address, keyBytes, keyFormat, organizationId);\n\n // Send up BUNDLE_INJECTED message\n TKHQ.sendMessageUp(\"BUNDLE_INJECTED\", true, requestId);\n}\n\n/**\n * Function triggered when APPLY_SETTINGS event is received.\n * For now, the only settings that can be applied are for \"styles\".\n * Persist them in local storage so they can be applied on every\n * page load.\n * @param {string} settings: JSON-stringified settings\n * @param {string} requestId\n */\nasync function onApplySettings(settings, requestId) {\n // Apply settings\n const validSettings = TKHQ.applySettings(settings);\n\n // Persist in local storage\n TKHQ.setSettings(validSettings);\n\n // Send up SETTINGS_APPLIED message\n TKHQ.sendMessageUp(\"SETTINGS_APPLIED\", true, requestId);\n}\n\n/**\n * Function triggered when SIGN_TRANSACTION event is received.\n * @param {string} requestId\n * @param {string} transaction (serialized)\n * @param {string} address (case-sensitive --> enforce this, optional for backwards compatibility)\n */\nasync function onSignTransaction(requestId, serializedTransaction, address) {\n // If no address provided, use \"default\"\n const keyAddress = address || \"default\";\n const key = inMemoryKeys[keyAddress];\n\n // Validate key exists and is valid/non-expired\n if (!validateKey(key, keyAddress, requestId)) {\n return;\n }\n\n const transactionWrapper = JSON.parse(serializedTransaction);\n const transactionToSign = transactionWrapper.transaction;\n const transactionType = transactionWrapper.type;\n\n let signedTransaction;\n\n if (transactionType === \"SOLANA\") {\n // Get or create keypair (uses cached keypair if available)\n const keypair = await getOrCreateKeypair(key);\n\n // Fetch the transaction and sign\n const transactionBytes = TKHQ.uint8arrayFromHexString(transactionToSign);\n const transaction = VersionedTransaction.deserialize(transactionBytes);\n transaction.sign([keypair]);\n\n signedTransaction = transaction.serialize();\n } else if (transactionType === \"ETHEREUM\") {\n // viem returns the fully serialized, broadcast-ready signed tx as a\n // 0x-prefixed hex string.\n signedTransaction = await signEthereumTransaction(key, transactionToSign);\n } else {\n throw new Error(\"unsupported transaction type\");\n }\n\n // Solana signing returns raw bytes (encode to hex); Ethereum signing already\n // returns a 0x-prefixed hex string, which we pass through as-is.\n const signedTransactionHex =\n typeof signedTransaction === \"string\"\n ? signedTransaction\n : TKHQ.uint8arrayToHexString(signedTransaction);\n\n TKHQ.sendMessageUp(\"TRANSACTION_SIGNED\", signedTransactionHex, requestId);\n}\n\n/**\n * Function triggered when SIGN_MESSAGE event is received.\n * @param {string} requestId\n * @param {string} message (serialized, JSON-stringified)\n * @param {string} address (case-sensitive --> enforce this, optional for backwards compatibility)\n */\nasync function onSignMessage(requestId, serializedMessage, address) {\n // Backwards compatibility: if no address provided, use \"default\"\n const keyAddress = address || \"default\";\n const key = inMemoryKeys[keyAddress];\n\n // Validate key exists and has not expired\n if (!validateKey(key, keyAddress, requestId)) {\n return;\n }\n\n const messageWrapper = JSON.parse(serializedMessage);\n const messageToSign = messageWrapper.message;\n const messageType = messageWrapper.type;\n const messageBytes = textEncoder.encode(messageToSign);\n\n let signatureHex;\n\n if (messageType === \"SOLANA\") {\n // Get or create keypair (uses cached keypair if available)\n const keypair = await getOrCreateKeypair(key);\n\n // Set up sha512 for nobleEd25519 (required for signing)\n nobleEd25519.etc.sha512Sync = (...m) =>\n nobleHashes.sha512(nobleEd25519.etc.concatBytes(...m));\n\n // Extract the 32-byte private key from the 64-byte secretKey\n // Solana keypair.secretKey format: [32-byte private key][32-byte public key]\n const privateKey = keypair.secretKey.slice(0, 32);\n // Sign the message using nobleEd25519\n const signature = nobleEd25519.sign(messageBytes, privateKey);\n\n // Note: Signature verification is skipped for performance. The signature will always be valid if signing succeeds with a valid keypair.\n // Clients can verify the signature returned.\n\n signatureHex = TKHQ.uint8arrayToHexString(signature);\n } else if (messageType === \"ETHEREUM\") {\n const account = await getOrCreateEthereumAccount(key);\n\n // Match the Solana path: sign the message as a plain UTF-8 string\n // (EIP-191 personal_sign). viem returns a 0x-prefixed signature.\n signatureHex = await account.signMessage({ message: messageToSign });\n } else {\n TKHQ.sendMessageUp(\"ERROR\", \"unsupported message type\", requestId);\n\n return;\n }\n\n TKHQ.sendMessageUp(\"MESSAGE_SIGNED\", signatureHex, requestId);\n}\n\n/**\n * Function triggered when CLEAR_EMBEDDED_PRIVATE_KEY event is received.\n * @param {string} requestId\n * @param {string} address - Optional: The address of the key to clear (case-sensitive). If not provided, clears all keys.\n */\nasync function onClearEmbeddedPrivateKey(requestId, address) {\n // If no address is provided, clear all keys\n if (!address) {\n inMemoryKeys = {};\n TKHQ.sendMessageUp(\"EMBEDDED_PRIVATE_KEY_CLEARED\", true, requestId);\n\n return;\n }\n\n // Check if key exists for the specific address\n if (!inMemoryKeys[address]) {\n TKHQ.sendMessageUp(\n \"ERROR\",\n new Error(\n `key not found for address ${address}. Note that address is case sensitive.`\n ).toString(),\n requestId\n );\n\n return;\n }\n\n // Clear the specific key from memory\n delete inMemoryKeys[address];\n\n TKHQ.sendMessageUp(\"EMBEDDED_PRIVATE_KEY_CLEARED\", true, requestId);\n}\n\n/**\n * Handler for SET_EMBEDDED_KEY_OVERRIDE events.\n * Decrypts a P-256 private key bundle using the iframe's embedded key and\n * overrides the embedded key with it for subsequent bundle decryptions.\n * @param {string} requestId\n * @param {string} organizationId\n * @param {string} bundle - v1.0.0 bundle containing the P-256 private key\n * @param {Function} HpkeDecrypt\n */\nasync function onSetEmbeddedKeyOverride(\n requestId,\n organizationId,\n bundle,\n HpkeDecrypt\n) {\n // Decrypt the private key using the iframe's embedded key.\n // The decrypted payload is a raw 32-byte P-256 private key scalar.\n const keyBytes = await decryptBundle(bundle, organizationId, HpkeDecrypt);\n\n // Convert raw P-256 bytes to a full JWK (derives public key via WebCrypto)\n const keyJwk = await rawP256PrivateKeyToJwk(new Uint8Array(keyBytes));\n\n // Store in module-level variable (memory only)\n injectedEmbeddedKey = keyJwk;\n\n TKHQ.sendMessageUp(\"EMBEDDED_KEY_OVERRIDE_SET\", true, requestId);\n}\n\n/**\n * Handler for RESET_TO_DEFAULT_EMBEDDED_KEY events.\n * Clears the embedded key from memory, replacing it with the iframe's default embedded key.\n * @param {string} requestId\n */\nfunction onResetToDefaultEmbeddedKey(requestId) {\n injectedEmbeddedKey = null;\n TKHQ.sendMessageUp(\"RESET_TO_DEFAULT_EMBEDDED_KEY\", true, requestId);\n}\n\n// Utility functions\nasync function createSolanaKeypair(privateKey) {\n const privateKeyBytes = TKHQ.parsePrivateKey(privateKey);\n\n let keypair;\n if (privateKeyBytes.length === 32) {\n // 32-byte private key (seed)\n keypair = Keypair.fromSeed(privateKeyBytes);\n } else if (privateKeyBytes.length === 64) {\n // 64-byte secret key (private + public)\n keypair = Keypair.fromSecretKey(privateKeyBytes);\n } else {\n throw new Error(\n `Invalid private key length: ${privateKeyBytes.length}. Expected 32 or 64 bytes.`\n );\n }\n\n return keypair;\n}\n\n/**\n * Converts raw P-256 private key bytes (32-byte scalar) to a JWK.\n * Constructs a PKCS8 wrapper around the raw bytes, imports via WebCrypto\n * (which derives the public key), then exports as JWK.\n * @param {Uint8Array} rawPrivateKeyBytes - 32-byte P-256 private key scalar\n * @returns {Promise} - Full P-256 ECDH private key JWK\n */\nasync function rawP256PrivateKeyToJwk(rawPrivateKeyBytes) {\n if (rawPrivateKeyBytes.length !== 32) {\n throw new Error(\n `invalid decryption key length: expected 32 bytes, got ${rawPrivateKeyBytes.length}`\n );\n }\n\n // Fixed PKCS#8 DER prefix for a P-256 private key (36 bytes).\n // This wraps a raw 32-byte scalar into the PrivateKeyInfo structure\n // that WebCrypto's importKey(\"pkcs8\", ...) expects.\n //\n // Structure (per RFC 5958 §2 / RFC 5208 §5):\n // SEQUENCE {\n // INTEGER 0 -- version (v1)\n // SEQUENCE { -- AlgorithmIdentifier (RFC 5480 §2.1.1)\n // OID 1.2.840.10045.2.1 -- id-ecPublicKey\n // OID 1.2.840.10045.3.1.7 -- secp256r1 (P-256)\n // }\n // OCTET STRING { -- privateKey (SEC 1 §C.4 / RFC 5915 §3)\n // SEQUENCE {\n // INTEGER 1 -- version\n // OCTET STRING (32 bytes) -- raw private key scalar\n // }\n // }\n // }\n //\n // References:\n // - RFC 5958 / RFC 5208: PKCS#8 PrivateKeyInfo\n // - RFC 5480 §2.1.1: ECC AlgorithmIdentifier (OIDs)\n // - RFC 5915 / SEC 1 v2 §C.4: ECPrivateKey encoding\n const pkcs8Prefix = new Uint8Array([\n 0x30, 0x41, 0x02, 0x01, 0x00, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48,\n 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03,\n 0x01, 0x07, 0x04, 0x27, 0x30, 0x25, 0x02, 0x01, 0x01, 0x04, 0x20,\n ]);\n\n const pkcs8 = new Uint8Array(pkcs8Prefix.length + 32);\n pkcs8.set(pkcs8Prefix);\n pkcs8.set(rawPrivateKeyBytes, pkcs8Prefix.length);\n\n const cryptoKey = await crypto.subtle.importKey(\n \"pkcs8\",\n pkcs8,\n { name: \"ECDH\", namedCurve: \"P-256\" },\n true,\n [\"deriveBits\"]\n );\n\n return await crypto.subtle.exportKey(\"jwk\", cryptoKey);\n}\n\n/**\n * Generates the error message for missing or expired keys.\n * @param {string} keyAddress - The address of the key\n * @returns {string} - The error message string\n */\nexport function getKeyNotFoundErrorMessage(keyAddress) {\n return `key bytes have expired. Please re-inject export bundle for address ${keyAddress} into iframe. Note that address is case sensitive.`;\n}\n\n/**\n * Clears an expired key from memory. This is an internal helper function\n * that clears the key without sending messages to the parent frame.\n * @param {string} keyAddress - The address of the key to clear\n */\nfunction clearExpiredKey(keyAddress) {\n if (inMemoryKeys[keyAddress]) {\n delete inMemoryKeys[keyAddress];\n }\n}\n\n/**\n * Clears all expired keys from memory.\n * This function iterates through all keys and removes any that have expired.\n */\nfunction clearAllExpiredKeys() {\n const now = new Date().getTime();\n const addressesToRemove = [];\n\n for (const [address, key] of Object.entries(inMemoryKeys)) {\n if (key.expiry && now >= key.expiry) {\n addressesToRemove.push(address);\n }\n }\n\n for (const address of addressesToRemove) {\n clearExpiredKey(address);\n }\n}\n\n/**\n * Validates that a key exists and has not expired.\n * Clears the key from memory if it has expired.\n * Throws error if validation fails (and caller will send message up back to parent).\n * @param {Object} key - The key object from inMemoryKeys\n * @param {string} keyAddress - The address of the key\n * @returns {boolean} - True if key is valid, false otherwise\n */\nfunction validateKey(key, keyAddress) {\n if (!key) {\n throw new Error(\n `key bytes not found. Please re-inject export bundle for address ${keyAddress} into iframe. Note that address is case sensitive.`\n ).toString();\n }\n\n const now = new Date().getTime();\n if (now >= key.expiry) {\n // Clear all expired keys before processing the signing request\n clearAllExpiredKeys();\n throw new Error(getKeyNotFoundErrorMessage(keyAddress)).toString();\n }\n\n return true;\n}\n\n/**\n * Gets or creates a Solana keypair from a key object.\n * Uses cached keypair if available, otherwise creates a new one.\n * @param {Object} key - The key object containing format and privateKey\n * @returns {Promise} - The Solana keypair\n */\nasync function getOrCreateKeypair(key) {\n if (key.keypair) {\n return key.keypair;\n }\n\n if (key.format === \"SOLANA\") {\n return Keypair.fromSecretKey(TKHQ.base58Decode(key.privateKey));\n } else {\n return await createSolanaKeypair(\n Array.from(TKHQ.uint8arrayFromHexString(key.privateKey))\n );\n }\n}\n\n/**\n * Gets or creates a viem Ethereum account from a key object.\n * Caches the account on the key object for improved signing perf.\n * @param {Object} key - The key object containing the privateKey and format\n * @returns {Promise} - The viem account (from privateKeyToAccount)\n */\nasync function getOrCreateEthereumAccount(key) {\n if (key.ethereumAccount) {\n return key.ethereumAccount;\n }\n\n // Ethereum keys are exported in HEXADECIMAL format, where privateKey is a\n // 0x-prefixed hex string — exactly what viem's privateKeyToAccount expects.\n if (key.format !== \"HEXADECIMAL\") {\n throw new Error(\n `cannot sign Ethereum payload with key format \"${key.format}\"; expected \"HEXADECIMAL\"`\n );\n }\n\n key.ethereumAccount = privateKeyToAccount(key.privateKey);\n return key.ethereumAccount;\n}\n\n/**\n * Signs a serialized Ethereum transaction and returns the broadcast-ready,\n * 0x-prefixed serialized signed transaction.\n *\n * Mirrors the Solana path: the caller builds and serializes the *unsigned*\n * transaction with any library, then passes the 0x-prefixed serialized hex.\n * We parse it back into viem's transaction shape, sign, and re-serialize.\n *\n * Note: for legacy (non-typed) transactions, the serialized unsigned tx must\n * include the chainId so the resulting signature carries EIP-155 replay\n * protection. Typed txs (EIP-1559/2930) always encode the chainId.\n * @param {Object} key - The key object containing the privateKey and format\n * @param {string} transactionToSign - 0x-prefixed serialized unsigned transaction\n * @returns {Promise} - The 0x-prefixed serialized signed transaction\n */\nasync function signEthereumTransaction(key, transactionToSign) {\n const account = await getOrCreateEthereumAccount(key);\n return await account.signTransaction(parseTransaction(transactionToSign));\n}\n\n/**\n * DOM Event handlers to power the export flow in standalone mode\n * Instead of receiving events from the parent page, forms trigger them.\n * This is useful for debugging as well.\n */\nfunction addDOMEventListeners() {\n // only support injected keys, not wallets\n document.getElementById(\"inject-key\").addEventListener(\n \"click\",\n async (e) => {\n e.preventDefault();\n window.postMessage({\n type: \"INJECT_KEY_EXPORT_BUNDLE\",\n value: document.getElementById(\"key-export-bundle\").value,\n keyFormat: document.getElementById(\"key-export-format\").value,\n organizationId: document.getElementById(\"key-organization-id\").value,\n });\n },\n false\n );\n document.getElementById(\"sign-transaction\").addEventListener(\n \"click\",\n async (e) => {\n e.preventDefault();\n window.postMessage({\n type: \"SIGN_TRANSACTION\",\n value: document.getElementById(\"transaction-to-sign\").value,\n });\n },\n false\n );\n document.getElementById(\"sign-message\").addEventListener(\n \"click\",\n async (e) => {\n e.preventDefault();\n window.postMessage({\n type: \"SIGN_MESSAGE\",\n value: document.getElementById(\"message-to-sign\").value,\n });\n },\n false\n );\n document.getElementById(\"reset\").addEventListener(\n \"click\",\n async (e) => {\n e.preventDefault();\n window.postMessage({ type: \"RESET_EMBEDDED_KEY\" });\n },\n false\n );\n\n // Add wallet injection support\n const injectWalletBtn = document.getElementById(\"inject-wallet\");\n if (injectWalletBtn) {\n injectWalletBtn.addEventListener(\n \"click\",\n async (e) => {\n e.preventDefault();\n window.postMessage({\n type: \"INJECT_WALLET_EXPORT_BUNDLE\",\n value: document.getElementById(\"wallet-export-bundle\").value,\n organizationId: document.getElementById(\"wallet-organization-id\")\n .value,\n });\n },\n false\n );\n }\n}\n\n/**\n * Message Event Handlers to process messages from the parent frame\n */\nfunction initMessageEventListener(HpkeDecrypt) {\n return async function messageEventListener(event) {\n if (event.data && event.data[\"type\"] == \"INJECT_KEY_EXPORT_BUNDLE\") {\n TKHQ.logMessage(\n `⬇️ Received message ${event.data[\"type\"]}: ${event.data[\"value\"]}, ${event.data[\"keyFormat\"]}, ${event.data[\"organizationId\"]}`\n );\n try {\n await onInjectKeyBundle(\n event.data[\"requestId\"],\n event.data[\"organizationId\"],\n event.data[\"value\"], // bundle\n event.data[\"keyFormat\"],\n event.data[\"address\"],\n HpkeDecrypt\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"INJECT_WALLET_EXPORT_BUNDLE\") {\n TKHQ.logMessage(\n `⬇️ Received message ${event.data[\"type\"]}: ${event.data[\"value\"]}, ${event.data[\"organizationId\"]}`\n );\n try {\n await onInjectKeyBundle(\n event.data[\"requestId\"],\n event.data[\"organizationId\"],\n event.data[\"value\"],\n undefined, // keyFormat - default to HEXADECIMAL\n undefined, // address - default to \"default\"\n HpkeDecrypt\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"APPLY_SETTINGS\") {\n try {\n await onApplySettings(event.data[\"value\"], event.data[\"requestId\"]);\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"RESET_EMBEDDED_KEY\") {\n TKHQ.logMessage(`⬇️ Received message ${event.data[\"type\"]}`);\n try {\n TKHQ.onResetEmbeddedKey();\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString());\n }\n }\n if (event.data && event.data[\"type\"] == \"SIGN_TRANSACTION\") {\n TKHQ.logMessage(\n `⬇️ Received message ${event.data[\"type\"]}: ${event.data[\"value\"]}`\n );\n try {\n await onSignTransaction(\n event.data[\"requestId\"],\n event.data[\"value\"],\n event.data[\"address\"] // signing address (case sensitive)\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"SIGN_MESSAGE\") {\n TKHQ.logMessage(\n `⬇️ Received message ${event.data[\"type\"]}: ${event.data[\"value\"]}`\n );\n try {\n await onSignMessage(\n event.data[\"requestId\"],\n event.data[\"value\"],\n event.data[\"address\"] // signing address (case sensitive)\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"CLEAR_EMBEDDED_PRIVATE_KEY\") {\n TKHQ.logMessage(`⬇️ Received message ${event.data[\"type\"]}`);\n try {\n await onClearEmbeddedPrivateKey(\n event.data[\"requestId\"],\n event.data[\"address\"]\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"GET_EMBEDDED_PUBLIC_KEY\") {\n TKHQ.logMessage(`⬇️ Received message ${event.data[\"type\"]}`);\n try {\n await onGetPublicEmbeddedKey(event.data[\"requestId\"]);\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"SET_EMBEDDED_KEY_OVERRIDE\") {\n TKHQ.logMessage(`⬇️ Received message ${event.data[\"type\"]}`);\n try {\n await onSetEmbeddedKeyOverride(\n event.data[\"requestId\"],\n event.data[\"organizationId\"],\n event.data[\"value\"],\n HpkeDecrypt\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"RESET_TO_DEFAULT_EMBEDDED_KEY\") {\n TKHQ.logMessage(`⬇️ Received message ${event.data[\"type\"]}`);\n try {\n onResetToDefaultEmbeddedKey(event.data[\"requestId\"]);\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n };\n}\n\n/**\n * Set up event handlers for both DOM and message events\n * @param {Function} HpkeDecrypt\n */\nexport function initEventHandlers(HpkeDecrypt) {\n const messageEventListener = initMessageEventListener(HpkeDecrypt);\n\n // controllers to remove event listeners\n const messageListenerController = new AbortController();\n const turnkeyInitController = new AbortController();\n\n // Add DOM event listeners for standalone mode\n addDOMEventListeners();\n\n // Add window message listener for iframe mode\n window.addEventListener(\"message\", messageEventListener, {\n capture: false,\n signal: messageListenerController.signal,\n });\n\n // Guard to prevent concurrent channel establishment from multiple senders\n let channelEstablished = false;\n\n // Handle MessageChannel initialization for iframe communication\n window.addEventListener(\n \"message\",\n async function (event) {\n /**\n * @turnkey/iframe-stamper >= v2.1.0 is using a MessageChannel to communicate with the parent frame.\n * The parent frame sends a TURNKEY_INIT_MESSAGE_CHANNEL event with the MessagePort.\n * If we receive this event, we want to remove the message event listener that was added in the DOMContentLoaded event to avoid processing messages twice.\n * We persist the MessagePort so we can use it to communicate with the parent window in subsequent calls to TKHQ.sendMessageUp\n */\n if (\n event.data &&\n event.data[\"type\"] == \"TURNKEY_INIT_MESSAGE_CHANNEL\" &&\n event.ports?.[0]\n ) {\n // Synchronously check-and-set the flag before any await. This prevents\n // a second concurrent invocation from racing through while the first is\n // suspended at an await, which would allow multiple origins to establish\n // a channel before turnkeyInitController.abort() is reached.\n if (channelEstablished) {\n return;\n }\n channelEstablished = true;\n\n // remove the message event listener that was added in the DOMContentLoaded event\n messageListenerController.abort();\n\n const iframeMessagePort = event.ports[0];\n iframeMessagePort.onmessage = messageEventListener;\n\n TKHQ.setParentFrameMessageChannelPort(iframeMessagePort);\n\n await TKHQ.initEmbeddedKey(event.origin);\n var embeddedKeyJwk = await TKHQ.getEmbeddedKey();\n var targetPubBuf = await TKHQ.p256JWKPrivateToPublic(embeddedKeyJwk);\n var targetPubHex = TKHQ.uint8arrayToHexString(targetPubBuf);\n document.getElementById(\"embedded-key\").value = targetPubHex;\n\n TKHQ.sendMessageUp(\"PUBLIC_KEY_READY\", targetPubHex);\n\n // remove the listener for TURNKEY_INIT_MESSAGE_CHANNEL after it's been processed\n turnkeyInitController.abort();\n }\n },\n { signal: turnkeyInitController.signal }\n );\n\n return { messageEventListener };\n}\n/**\n * Expose internal handlers for targeted testing.\n */\nexport {\n onInjectKeyBundle,\n onSignTransaction,\n onSignMessage,\n onClearEmbeddedPrivateKey,\n onSetEmbeddedKeyOverride,\n onResetToDefaultEmbeddedKey,\n};\n","/**\n * Crypto Utilities - Shared\n * Contains HPKE encryption and decryption functions\n */\n\nimport {\n p256JWKPrivateToPublic,\n additionalAssociatedData,\n uint8arrayToHexString,\n} from \"./turnkey-core.js\";\nimport {\n CipherSuite,\n DhkemP256HkdfSha256,\n HkdfSha256,\n Aes256Gcm,\n} from \"@hpke/core\";\n\n// Pre-compute const (for perf)\nconst TURNKEY_HPKE_INFO = new TextEncoder().encode(\"turnkey_hpke\");\n\n/**\n * Decrypt the ciphertext (ArrayBuffer) given an encapsulation key (ArrayBuffer)\n * and the receivers private key (JSON Web Key).\n */\nexport async function HpkeDecrypt({\n ciphertextBuf,\n encappedKeyBuf,\n receiverPrivJwk,\n}) {\n const kemContext = new DhkemP256HkdfSha256();\n var receiverPriv = await kemContext.importKey(\n \"jwk\",\n { ...receiverPrivJwk },\n false\n );\n\n var suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n var recipientCtx = await suite.createRecipientContext({\n recipientKey: receiverPriv,\n enc: encappedKeyBuf,\n info: TURNKEY_HPKE_INFO,\n });\n\n var receiverPubBuf = await p256JWKPrivateToPublic(receiverPrivJwk);\n var aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n var res;\n try {\n res = await recipientCtx.open(ciphertextBuf, aad);\n } catch (e) {\n throw new Error(\n \"unable to decrypt bundle using embedded key. the bundle may be incorrect. failed with error: \" +\n e.toString()\n );\n }\n return res;\n}\n\n/**\n * Encrypt plaintext using HPKE with the receiver's public key.\n * @param {Object} params\n * @param {Uint8Array} params.plaintextBuf - Plaintext to encrypt\n * @param {JsonWebKey} params.receiverPubJwk - Receiver's public key in JWK format\n * @returns {Promise} JSON stringified encrypted bundle with encappedPublic and ciphertext\n */\nexport async function HpkeEncrypt({ plaintextBuf, receiverPubJwk }) {\n const kemContext = new DhkemP256HkdfSha256();\n const receiverPub = await kemContext.importKey(\n \"jwk\",\n { ...receiverPubJwk },\n true\n );\n\n const suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n const senderCtx = await suite.createSenderContext({\n recipientPublicKey: receiverPub,\n info: TURNKEY_HPKE_INFO,\n });\n\n // Need to import the key again as a JWK to export as a raw key, the format needed to\n // create the aad with the newly generated raw encapped key.\n const receiverPubCryptoKey = await crypto.subtle.importKey(\n \"jwk\",\n receiverPubJwk,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n const receiverPubRaw = await crypto.subtle.exportKey(\n \"raw\",\n receiverPubCryptoKey\n );\n const receiverPubBuf = new Uint8Array(receiverPubRaw);\n\n const encappedKeyBuf = new Uint8Array(senderCtx.enc);\n\n const aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n\n var ciphertextBuf;\n try {\n ciphertextBuf = await senderCtx.seal(plaintextBuf, aad);\n } catch (e) {\n throw new Error(\"failed to encrypt import bundle: \" + e.toString());\n }\n\n const ciphertextHex = uint8arrayToHexString(new Uint8Array(ciphertextBuf));\n const encappedKeyBufHex = uint8arrayToHexString(encappedKeyBuf);\n const encryptedBundle = JSON.stringify({\n encappedPublic: encappedKeyBufHex,\n ciphertext: ciphertextHex,\n });\n return encryptedBundle;\n}\n","// This file is the main entrypoint of the webpack-bundled application\n\n// Import relevant modules\nimport { TKHQ } from \"./turnkey-core.js\";\nimport { initEventHandlers } from \"./event-handlers.js\";\nimport { HpkeDecrypt } from \"@shared/crypto-utils.js\";\nimport \"./styles.css\";\n\n// Surface TKHQ for external access\nwindow.TKHQ = TKHQ;\n\n// Init app\ndocument.addEventListener(\"DOMContentLoaded\", async function () {\n await TKHQ.initEmbeddedKey();\n const embeddedKeyJwk = await TKHQ.getEmbeddedKey();\n const targetPubBuf = await TKHQ.p256JWKPrivateToPublic(embeddedKeyJwk);\n const targetPubHex = TKHQ.uint8arrayToHexString(targetPubBuf);\n document.getElementById(\"embedded-key\").value = targetPubHex;\n\n initEventHandlers(HpkeDecrypt);\n\n // If styles are saved in local storage, sanitize and apply them\n const styleSettings = TKHQ.getSettings();\n if (styleSettings) {\n TKHQ.applySettings(styleSettings);\n }\n\n TKHQ.sendMessageUp(\"PUBLIC_KEY_READY\", targetPubHex);\n});\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"bundle.\" + {\"291\":\"c9a8b8d5055f705bd308\",\"825\":\"29203a225e88524b9cba\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","\n__webpack_require__.sriHashes = {\"291\":\"*-*-*-CHUNK-SRI-HASH-r3NPGwA4ft5fHgGXhVIptCiDVf06qPa+sxzG6L+8GwPuhn89e/\",\"825\":\"*-*-*-CHUNK-SRI-HASH-mfog3UJdGPOmSk4QZbKxsxHPFZtt298WnZNc1aQ1MCgc6YirFj\"};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t792: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkexport_and_sign\"] = self[\"webpackChunkexport_and_sign\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [96], () => (__webpack_require__(4560)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","inProgress","dataWebpackPrefix","module","exports","crypto","e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_invoke","enumerable","configurable","writable","_toConsumableArray","Array","isArray","_arrayLikeToArray","_arrayWithoutHoles","from","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","toString","slice","constructor","name","test","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","TURNKEY_EMBEDDED_KEY","TURNKEY_SETTINGS","parentFrameMessageChannelPort","getSubtleCrypto","globalThis","subtle","window","global","isDoublyIframed","undefined","location","ancestorOrigins","parent","top","_loadQuorumKey","_callee","quorumPublic","_context","Error","importKey","namedCurve","_initEmbeddedKey","_callee3","_context3","getEmbeddedKey","generateTargetKey","setEmbeddedKey","_generateTargetKey","_callee4","p256key","_context4","generateKey","exportKey","privateKey","jwtKey","getItemWithExpiry","JSON","parse","targetKey","setItemWithExpiry","stringify","key","ttl","item","expiry","Date","getTime","localStorage","setItem","itemStr","getItem","hasOwnProperty","removeItem","uint8arrayFromHexString","hexString","hexWithoutPrefix","startsWith","Uint8Array","match","map","h","parseInt","uint8arrayToHexString","buffer","x","padStart","join","additionalAssociatedData","senderPubBuf","receiverPubBuf","s","concat","logMessage","content","messageLog","document","getElementById","message","createElement","innerText","appendChild","p256JWKPrivateToPublic","_x6","_p256JWKPrivateToPublic","_callee6","jwkPrivate","jwkPrivateCopy","publicKey","_context6","_objectSpread","key_ops","base58Encode","bytes","result","digits","carry","j","push","k","base58Decode","alphabet","decodedBytes","leadingZeros","indexOf","currentByte","reverse","_encodeKey","_callee9","privateKeyBytes","keyFormat","publicKeyBytes","concatenatedBytes","_t2","_context9","set","console","warn","sharedInitEmbeddedKey","SharedTKHQ","validateStyles","styles","element","validStyles","cssValidationRegex","padding","margin","borderWidth","borderStyle","borderColor","borderRadius","fontSize","fontWeight","fontFamily","color","labelColor","backgroundColor","width","height","maxWidth","maxHeight","lineHeight","boxShadow","textAlign","overflowWrap","wordWrap","resize","entries","forEach","_ref","_ref2","_arrayWithHoles","next","_iterableToArrayLimit","_nonIterableRest","property","styleProperty","trim","styleRegexStr","styleRegex","RegExp","styleValue","loadQuorumKey","_x","_verifyEnclaveSignature","_callee2","enclaveQuorumPublic","publicSignature","signedData","TURNKEY_SIGNERS_ENCLAVES","environment","meta","TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY","encryptionQuorumPublicBuf","quorumKey","publicSignatureBuf","signedDataBuf","_context2","prod","preprod","querySelector","__TURNKEY_SIGNER_ENVIRONMENT__","fromDerSignature","verify","hash","TKHQ","initEmbeddedKey","onResetEmbeddedKey","encodeKey","_x0","_x1","_x10","sendMessageUp","type","requestId","postMessage","setParentFrameMessageChannelPort","port","normalizePadding","byteArray","targetLength","paddingLength","fill","expectedZeroCount","zeroCount","verifyEnclaveSignature","_x2","_x3","getEd25519PublicKey","privateKeyHex","nobleEd25519","sha512Sync","_nobleEd25519$etc","nobleHashes","concatBytes","applySettings","settings","validSettings","settingsObj","keyDivTextarea","style","getSettings","setSettings","parsePrivateKey","error","_slicedToArray","inMemoryKeys","injectedEmbeddedKey","textEncoder","TextEncoder","textDecoder","TextDecoder","verifyAndParseBundleData","_verifyAndParseBundleData","_callee8","bundle","organizationId","bundleObj","_context8","version","data","dataSignature","decode","encappedPublic","ciphertext","decryptBundle","_x4","_x5","_decryptBundle","HpkeDecrypt","encappedKeyBuf","ciphertextBuf","receiverPrivJwk","_t9","onGetPublicEmbeddedKey","_onGetPublicEmbeddedKey","_callee0","embeddedKeyJwk","targetPubBuf","targetPubHex","_context0","loadKeyIntoMemory","_x7","_x8","_x9","_loadKeyIntoMemory","_callee1","address","keyBytes","keyAddress","cachedKeypair","_context1","subarray","Keypair","fromSecretKey","createSolanaKeypair","_defineProperty","format","keypair","onInjectKeyBundle","_x11","_x12","_x13","_x14","_onInjectKeyBundle","_callee10","_context10","onApplySettings","_x15","_x16","_onApplySettings","_callee11","_context11","onSignTransaction","_x17","_x18","_x19","_onSignTransaction","_callee12","serializedTransaction","transactionWrapper","transactionToSign","transactionType","signedTransaction","transactionBytes","transaction","signedTransactionHex","_context12","validateKey","getOrCreateKeypair","VersionedTransaction","deserialize","sign","serialize","signEthereumTransaction","onSignMessage","_x20","_x21","_x22","_onSignMessage","_callee13","serializedMessage","messageWrapper","messageToSign","messageType","messageBytes","signatureHex","signature","account","_context13","encode","secretKey","getOrCreateEthereumAccount","signMessage","onClearEmbeddedPrivateKey","_x23","_x24","_onClearEmbeddedPrivateKey","_callee14","_context14","onSetEmbeddedKeyOverride","_x25","_x26","_x27","_x28","_onSetEmbeddedKeyOverride","_callee15","keyJwk","_context15","rawP256PrivateKeyToJwk","onResetToDefaultEmbeddedKey","_x29","_createSolanaKeypair","_callee16","_context16","fromSeed","_x30","_rawP256PrivateKeyToJwk","_callee17","rawPrivateKeyBytes","pkcs8Prefix","pkcs8","cryptoKey","_context17","clearExpiredKey","now","addressesToRemove","_i","_Object$entries","_Object$entries$_i","_i2","_addressesToRemove","clearAllExpiredKeys","getKeyNotFoundErrorMessage","_x31","_getOrCreateKeypair","_callee18","_context18","_x32","_getOrCreateEthereumAccount","_callee19","_context19","ethereumAccount","privateKeyToAccount","_x33","_x34","_signEthereumTransaction","_callee20","_context20","signTransaction","parseTransaction","initEventHandlers","messageEventListener","_messageEventListener","event","_t","_t3","_t4","_t5","_t6","_t7","_t8","_x40","initMessageEventListener","messageListenerController","AbortController","turnkeyInitController","addEventListener","preventDefault","_x35","_x36","_ref3","_x37","_ref4","_x38","injectWalletBtn","_ref5","_callee5","_context5","_x39","addDOMEventListeners","capture","signal","channelEstablished","_ref6","_callee7","_event$ports","iframeMessagePort","_context7","ports","abort","onmessage","origin","_x41","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","getOwnPropertyDescriptors","defineProperties","_typeof","toPrimitive","String","_toPrimitive","_toPropertyKey","TURNKEY_HPKE_INFO","_HpkeDecrypt","kemContext","receiverPriv","suite","recipientCtx","aad","res","DhkemP256HkdfSha256","CipherSuite","kem","kdf","HkdfSha256","aead","Aes256Gcm","createRecipientContext","recipientKey","enc","info","open","styleSettings","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","id","loaded","__webpack_modules__","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","every","splice","getter","__esModule","obj","mode","this","ns","def","current","getOwnPropertyNames","definition","get","chunkId","all","reduce","promises","miniCssF","g","Function","prop","url","script","needAttach","scripts","getElementsByTagName","getAttribute","charset","nc","setAttribute","src","crossOrigin","integrity","sriHashes","onScriptComplete","prev","onerror","onload","clearTimeout","timeout","doneFns","parentNode","removeChild","setTimeout","target","head","nmd","paths","children","installedChunks","installedChunkData","promise","reject","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file diff --git a/export-and-sign/dist/index.html b/export-and-sign/dist/index.html index 7801519b..43a1dd6d 100644 --- a/export-and-sign/dist/index.html +++ b/export-and-sign/dist/index.html @@ -1 +1 @@ -Turnkey Export

Export Key Material

This public key will be sent along with a private key ID or wallet ID inside of a new EXPORT_PRIVATE_KEY or EXPORT_WALLET activity




Inject Key Export Bundle

The export bundle comes from the parent page and is composed of a public key and an encrypted payload. The payload is encrypted to this document's embedded key (stored in local storage and displayed above). The scheme relies on HPKE (RFC 9180).





Inject Wallet Export Bundle

The export bundle comes from the parent page and is composed of a public key and an encrypted payload. The payload is encrypted to this document's embedded key (stored in local storage and displayed above). The scheme relies on HPKE (RFC 9180).




Sign Transaction

Input a serialized transaction to sign.



Sign Message

Input a serialized message to sign.



Message log

Below we display a log of the messages sent / received. The forms above send messages, and the code communicates results by sending events via the postMessage API.

\ No newline at end of file +Turnkey Export

Export Key Material

This public key will be sent along with a private key ID or wallet ID inside of a new EXPORT_PRIVATE_KEY or EXPORT_WALLET activity




Inject Key Export Bundle

The export bundle comes from the parent page and is composed of a public key and an encrypted payload. The payload is encrypted to this document's embedded key (stored in local storage and displayed above). The scheme relies on HPKE (RFC 9180).





Inject Wallet Export Bundle

The export bundle comes from the parent page and is composed of a public key and an encrypted payload. The payload is encrypted to this document's embedded key (stored in local storage and displayed above). The scheme relies on HPKE (RFC 9180).




Sign Transaction

Input a serialized transaction to sign.



Sign Message

Input a serialized message to sign.



Message log

Below we display a log of the messages sent / received. The forms above send messages, and the code communicates results by sending events via the postMessage API.

\ No newline at end of file diff --git a/export-and-sign/index.test.js b/export-and-sign/index.test.js index 341c5016..ae3ce927 100644 --- a/export-and-sign/index.test.js +++ b/export-and-sign/index.test.js @@ -13,6 +13,11 @@ import { onSetEmbeddedKeyOverride, initEventHandlers, } from "./src/event-handlers.js"; +import { + recordChannelTelemetry, + CHANNEL_MESSAGE_CHANNEL, + CHANNEL_LEGACY_POST_MESSAGE, +} from "./src/telemetry.js"; import { serializeTransaction, recoverTransactionAddress, @@ -129,22 +134,219 @@ describe("TKHQ", () => { describe("Embedded key management", () => { it("gets and sets embedded key in localStorage", async () => { expect(TKHQ.getEmbeddedKey()).toBe(null); + expect(() => TKHQ.setEmbeddedKey({ foo: "bar" })).toThrow( + "embedded key has not been initialized" + ); - // Set a dummy "key" + await TKHQ.initEmbeddedKey("http://localhost"); TKHQ.setEmbeddedKey({ foo: "bar" }); expect(TKHQ.getEmbeddedKey()).toEqual({ foo: "bar" }); }); it("inits embedded key and is idempotent", async () => { expect(TKHQ.getEmbeddedKey()).toBe(null); - await TKHQ.initEmbeddedKey(); + await TKHQ.initEmbeddedKey("http://localhost"); const generatedKey = TKHQ.getEmbeddedKey(); expect(generatedKey).not.toBeNull(); // This should have no effect; generated key should stay the same - await TKHQ.initEmbeddedKey(); + await TKHQ.initEmbeddedKey("http://localhost"); expect(TKHQ.getEmbeddedKey()).toEqual(generatedKey); }); + + it("isolates persisted keys by parent origin", async () => { + const appOrigin = "https://app.turnkey.com"; + const attackerOrigin = "https://malicious.example.com"; + + await TKHQ.initEmbeddedKey(appOrigin); + TKHQ.setEmbeddedKey({ owner: "app" }); + + const appStorageKey = `TURNKEY_EMBEDDED_KEY_V2:${encodeURIComponent( + appOrigin + )}`; + const attackerStorageKey = `TURNKEY_EMBEDDED_KEY_V2:${encodeURIComponent( + attackerOrigin + )}`; + expect(appStorageKey).not.toEqual(attackerStorageKey); + + // Model a fresh iframe under another parent with the same frame-origin + // localStorage contents. It must generate/select a different key slot. + const attackerDom = new JSDOM(html, { url: "http://localhost" }); + for (let i = 0; i < dom.window.localStorage.length; i++) { + const key = dom.window.localStorage.key(i); + attackerDom.window.localStorage.setItem( + key, + dom.window.localStorage.getItem(key) + ); + } + Object.defineProperty(attackerDom.window, "crypto", { + value: crypto.webcrypto, + }); + global.window = attackerDom.window; + global.document = attackerDom.window.document; + global.localStorage = attackerDom.window.localStorage; + + await TKHQ.initEmbeddedKey(attackerOrigin); + expect(TKHQ.getEmbeddedKey()).not.toEqual({ owner: "app" }); + expect(attackerDom.window.localStorage.getItem(appStorageKey)).not.toBe( + null + ); + expect( + attackerDom.window.localStorage.getItem(attackerStorageKey) + ).not.toBe(null); + }); + + it("invalidates the legacy unscoped embedded key", async () => { + TKHQ.setItemWithExpiry( + "TURNKEY_EMBEDDED_KEY", + JSON.stringify({ owner: "legacy" }), + 1000 + ); + + await TKHQ.initEmbeddedKey("https://app.turnkey.com"); + + expect( + dom.window.localStorage.getItem("TURNKEY_EMBEDDED_KEY") + ).toBeNull(); + expect(TKHQ.getEmbeddedKey()).not.toEqual({ owner: "legacy" }); + }); + + it("does not allow a document to rebind to another parent origin", async () => { + await TKHQ.initEmbeddedKey("https://app.turnkey.com"); + + await expect( + TKHQ.initEmbeddedKey("https://malicious.example.com") + ).rejects.toThrow("parent origin is already bound"); + }); + + it("keeps the ephemeral embedded key in memory only", async () => { + await TKHQ.initEphemeralEmbeddedKey(); + const key = TKHQ.getEmbeddedKey(); + expect(key).not.toBeNull(); + expect(key.kty).toBe("EC"); + + // Nothing may be persisted for an ephemeral key + expect(dom.window.localStorage.length).toBe(0); + + // Idempotent: a second init keeps the same key + await TKHQ.initEphemeralEmbeddedKey(); + expect(TKHQ.getEmbeddedKey()).toEqual(key); + }); + + it("generates a different ephemeral key per document", async () => { + await TKHQ.initEphemeralEmbeddedKey(); + const firstKey = TKHQ.getEmbeddedKey(); + + // Model a fresh iframe document under another (attacker) parent. Even + // with identical frame-origin localStorage there is nothing to reuse. + const otherDom = new JSDOM(html, { url: "http://localhost" }); + Object.defineProperty(otherDom.window, "crypto", { + value: crypto.webcrypto, + }); + global.window = otherDom.window; + global.document = otherDom.window.document; + global.localStorage = otherDom.window.localStorage; + + await TKHQ.initEphemeralEmbeddedKey(); + expect(TKHQ.getEmbeddedKey()).not.toEqual(firstKey); + }); + + it("supersedes the ephemeral key when a persistent origin-scoped key is initialized", async () => { + await TKHQ.initEphemeralEmbeddedKey(); + const ephemeralKey = TKHQ.getEmbeddedKey(); + + await TKHQ.initEmbeddedKey("https://app.turnkey.com"); + const persistentKey = TKHQ.getEmbeddedKey(); + expect(persistentKey).not.toBeNull(); + expect(persistentKey).not.toEqual(ephemeralKey); + expect( + dom.window.localStorage.getItem( + `TURNKEY_EMBEDDED_KEY_V2:${encodeURIComponent( + "https://app.turnkey.com" + )}` + ) + ).not.toBeNull(); + + // Once persistent, ephemeral init is a no-op + await TKHQ.initEphemeralEmbeddedKey(); + expect(TKHQ.getEmbeddedKey()).toEqual(persistentKey); + }); + + it("waits for an in-flight persistent initialization instead of reading a missing key", async () => { + // The MessageChannel handshake starts the persistent init... + const persistentInit = TKHQ.initEmbeddedKey("https://app.turnkey.com"); + // ...while the embedded bootstrap runs concurrently. The bootstrap must + // not resolve before the persistent key is actually readable. + await TKHQ.initEphemeralEmbeddedKey(); + expect(TKHQ.getEmbeddedKey()).not.toBeNull(); + await persistentInit; + }); + + it("reads the persistent key when the handshake lands during ephemeral key generation", async () => { + // Bootstrap kicks off ephemeral key generation first; the handshake's + // persistent init interleaves before it settles. + const ephemeralInit = TKHQ.initEphemeralEmbeddedKey(); + const persistentInit = TKHQ.initEmbeddedKey("https://app.turnkey.com"); + await ephemeralInit; + + const key = TKHQ.getEmbeddedKey(); + expect(key).not.toBeNull(); + await persistentInit; + expect(TKHQ.getEmbeddedKey()).toEqual(key); + expect( + dom.window.localStorage.getItem( + `TURNKEY_EMBEDDED_KEY_V2:${encodeURIComponent( + "https://app.turnkey.com" + )}` + ) + ).not.toBeNull(); + }); + + it("rolls back to the previous key when persistent initialization fails", async () => { + await TKHQ.initEphemeralEmbeddedKey(); + const ephemeralKey = TKHQ.getEmbeddedKey(); + + const setItemSpy = jest + .spyOn(Object.getPrototypeOf(dom.window.localStorage), "setItem") + .mockImplementation(() => { + throw new Error("storage blocked"); + }); + await expect( + TKHQ.initEmbeddedKey("https://app.turnkey.com") + ).rejects.toThrow("storage blocked"); + setItemSpy.mockRestore(); + + // The document keeps operating on its ephemeral key... + expect(TKHQ.getEmbeddedKey()).toEqual(ephemeralKey); + // ...and a retried persistent init succeeds + await TKHQ.initEmbeddedKey("https://app.turnkey.com"); + const persistentKey = TKHQ.getEmbeddedKey(); + expect(persistentKey).not.toBeNull(); + expect(persistentKey).not.toEqual(ephemeralKey); + }); + + it("clears the ephemeral key on reset", async () => { + await TKHQ.initEphemeralEmbeddedKey(); + expect(TKHQ.getEmbeddedKey()).not.toBeNull(); + + TKHQ.onResetEmbeddedKey(); + expect(TKHQ.getEmbeddedKey()).toBeNull(); + }); + + it("invalidates the legacy unscoped key when creating an ephemeral key", async () => { + TKHQ.setItemWithExpiry( + "TURNKEY_EMBEDDED_KEY", + JSON.stringify({ owner: "legacy" }), + 1000 + ); + + await TKHQ.initEphemeralEmbeddedKey(); + + expect( + dom.window.localStorage.getItem("TURNKEY_EMBEDDED_KEY") + ).toBeNull(); + expect(TKHQ.getEmbeddedKey()).not.toEqual({ owner: "legacy" }); + }); }); describe("Key generation and cryptography", () => { @@ -611,6 +813,7 @@ describe("Event Handler Expiration Flow", () => { jest.spyOn(TKHQ, "verifyEnclaveSignature").mockResolvedValue(true); // Set a dummy embedded key for testing + await TKHQ.initEmbeddedKey("http://localhost"); TKHQ.setEmbeddedKey({ foo: "bar" }); expect(TKHQ.getEmbeddedKey()).toEqual({ foo: "bar" }); jest.spyOn(TKHQ, "onResetEmbeddedKey").mockImplementation(() => {}); @@ -919,6 +1122,7 @@ describe("EVM Signing", () => { .spyOn(TKHQ, "sendMessageUp") .mockImplementation(() => {}); jest.spyOn(TKHQ, "verifyEnclaveSignature").mockResolvedValue(true); + await TKHQ.initEmbeddedKey("http://localhost"); TKHQ.setEmbeddedKey({ foo: "bar" }); // Mirror the real impl (strip 0x) so both the bundle-data decode and the @@ -1112,6 +1316,7 @@ describe("Embedded Key Override", () => { .mockImplementation(() => {}); jest.spyOn(TKHQ, "verifyEnclaveSignature").mockResolvedValue(true); + await TKHQ.initEmbeddedKey("http://localhost"); TKHQ.setEmbeddedKey({ foo: "bar" }); jest.spyOn(TKHQ, "onResetEmbeddedKey").mockImplementation(() => {}); jest.spyOn(TKHQ, "uint8arrayFromHexString").mockImplementation((hex) => { @@ -1377,9 +1582,15 @@ describe("Channel Establishment Guard", () => { let dom; let TKHQModule; + let parentWindow; beforeEach(async () => { dom = new JSDOM(MINIMAL_INIT_HTML, { url: "http://localhost" }); + parentWindow = {}; + Object.defineProperty(dom.window, "parent", { + configurable: true, + value: parentWindow, + }); global.window = dom.window; global.document = dom.window.document; @@ -1426,13 +1637,17 @@ describe("Channel Establishment Guard", () => { * and the handler only needs ports[0] to be truthy and to have an onmessage * property (TKHQ.setParentFrameMessageChannelPort is mocked anyway). */ - function makeInitEvent(origin = "https://app.turnkey.com") { + function makeInitEvent( + origin = "https://app.turnkey.com", + source = parentWindow + ) { const port = { onmessage: null, postMessage: jest.fn() }; const event = new dom.window.MessageEvent("message", { data: { type: "TURNKEY_INIT_MESSAGE_CHANNEL" }, ports: [port], origin, }); + Object.defineProperty(event, "source", { value: source }); return { event, port }; } @@ -1446,6 +1661,9 @@ describe("Channel Establishment Guard", () => { await new Promise((resolve) => setTimeout(resolve, 0)); expect(TKHQModule.initEmbeddedKey).toHaveBeenCalledTimes(1); + expect(TKHQModule.initEmbeddedKey).toHaveBeenCalledWith( + "https://app.turnkey.com" + ); expect(TKHQModule.setParentFrameMessageChannelPort).toHaveBeenCalledTimes( 1 ); @@ -1455,6 +1673,46 @@ describe("Channel Establishment Guard", () => { ); }); + it("rejects channel initialization from a window other than the direct parent", async () => { + initEventHandlers(jest.fn()); + + const { event } = makeInitEvent("https://malicious.example.com", {}); + dom.window.dispatchEvent(event); + await new Promise((resolve) => setTimeout(resolve, 0)); + + expect(TKHQModule.initEmbeddedKey).not.toHaveBeenCalled(); + expect(TKHQModule.setParentFrameMessageChannelPort).not.toHaveBeenCalled(); + }); + + it("rejects an opaque parent origin", async () => { + initEventHandlers(jest.fn()); + + const { event } = makeInitEvent("null"); + dom.window.dispatchEvent(event); + await new Promise((resolve) => setTimeout(resolve, 0)); + + expect(TKHQModule.initEmbeddedKey).not.toHaveBeenCalled(); + }); + + it("ignores signing messages from windows other than the direct parent", async () => { + initEventHandlers(jest.fn()); + + const event = new dom.window.MessageEvent("message", { + data: { + type: "SIGN_MESSAGE", + requestId: "attacker-request", + value: JSON.stringify({ type: "SOLANA", message: "payload" }), + }, + origin: "https://malicious.example.com", + }); + // Not the parent: e.g. a window.opener or an unrelated frame + Object.defineProperty(event, "source", { value: {} }); + dom.window.dispatchEvent(event); + await new Promise((resolve) => setTimeout(resolve, 0)); + + expect(TKHQModule.sendMessageUp).not.toHaveBeenCalled(); + }); + it("ignores a second TURNKEY_INIT_MESSAGE_CHANNEL dispatched while the first is still pending", async () => { /** * This is the core race-condition test. @@ -1537,3 +1795,402 @@ describe("Channel Establishment Guard", () => { expect(TKHQModule.sendMessageUp).toHaveBeenCalledTimes(1); }); }); + +describe("Standalone mode listener", () => { + let dom; + let TKHQModule; + + beforeEach(async () => { + // No parent override: window.parent === window (standalone) + dom = new JSDOM(MINIMAL_INIT_HTML, { url: "http://localhost" }); + + global.window = dom.window; + global.document = dom.window.document; + global.localStorage = dom.window.localStorage; + global.TextEncoder = TextEncoder; + global.TextDecoder = TextDecoder; + global.crypto = crypto.webcrypto; + global.AbortController = dom.window.AbortController; + + const module = await import("./src/turnkey-core.js"); + TKHQModule = module.TKHQ; + + jest.spyOn(TKHQModule, "sendMessageUp").mockImplementation(() => {}); + jest + .spyOn(TKHQModule, "getEmbeddedKey") + .mockReturnValue({ kty: "EC", crv: "P-256" }); + jest + .spyOn(TKHQModule, "p256JWKPrivateToPublic") + .mockResolvedValue(new Uint8Array(65).fill(0x04)); + jest.spyOn(TKHQModule, "uint8arrayToHexString").mockReturnValue("aabbccdd"); + }); + + afterEach(() => { + jest.restoreAllMocks(); + delete global.window; + delete global.document; + delete global.localStorage; + delete global.crypto; + delete global.AbortController; + }); + + function makeEvent(source) { + const event = new dom.window.MessageEvent("message", { + data: { type: "GET_EMBEDDED_PUBLIC_KEY", requestId: "req-1" }, + origin: "http://localhost", + }); + Object.defineProperty(event, "source", { value: source }); + return event; + } + + it("serves messages posted by this window itself", async () => { + initEventHandlers(jest.fn()); + + dom.window.dispatchEvent(makeEvent(dom.window)); + await new Promise((resolve) => setTimeout(resolve, 0)); + + expect(TKHQModule.sendMessageUp).toHaveBeenCalledWith( + "EMBEDDED_PUBLIC_KEY", + "aabbccdd", + "req-1" + ); + }); + + it("ignores messages from other windows (e.g. a window.opener)", async () => { + initEventHandlers(jest.fn()); + + dom.window.dispatchEvent(makeEvent({})); + await new Promise((resolve) => setTimeout(resolve, 0)); + + expect(TKHQModule.sendMessageUp).not.toHaveBeenCalled(); + }); +}); + +describe("Legacy postMessage path (iframe-stamper < 2.1.0)", () => { + /** + * Legacy parents post requests straight to the iframe window instead of + * establishing a MessageChannel. The frame serves them with a document- + * scoped ephemeral key, binds itself to the first valid parent origin, and + * refuses everything else. A MessageChannel handshake upgrades the document + * to the persistent origin-scoped path. + */ + + let dom; + let TKHQModule; + let parentWindow; + + beforeEach(async () => { + dom = new JSDOM(MINIMAL_INIT_HTML, { url: "http://localhost" }); + parentWindow = {}; + Object.defineProperty(dom.window, "parent", { + configurable: true, + value: parentWindow, + }); + + global.window = dom.window; + global.document = dom.window.document; + global.localStorage = dom.window.localStorage; + global.TextEncoder = TextEncoder; + global.TextDecoder = TextDecoder; + global.crypto = crypto.webcrypto; + global.AbortController = dom.window.AbortController; + + const module = await import("./src/turnkey-core.js"); + TKHQModule = module.TKHQ; + + jest.spyOn(TKHQModule, "sendMessageUp").mockImplementation(() => {}); + jest.spyOn(TKHQModule, "setParentFrameOrigin").mockImplementation(() => {}); + jest + .spyOn(TKHQModule, "setParentFrameMessageChannelPort") + .mockImplementation(() => {}); + jest.spyOn(TKHQModule, "initEmbeddedKey").mockResolvedValue(undefined); + jest + .spyOn(TKHQModule, "getEmbeddedKey") + .mockReturnValue({ kty: "EC", crv: "P-256" }); + jest + .spyOn(TKHQModule, "p256JWKPrivateToPublic") + .mockResolvedValue(new Uint8Array(65).fill(0x04)); + jest.spyOn(TKHQModule, "uint8arrayToHexString").mockReturnValue("aabbccdd"); + }); + + afterEach(() => { + jest.restoreAllMocks(); + delete global.window; + delete global.document; + delete global.localStorage; + delete global.crypto; + delete global.AbortController; + }); + + function makeLegacyEvent( + requestId, + origin = "https://app.turnkey.com", + source = parentWindow + ) { + const event = new dom.window.MessageEvent("message", { + data: { type: "GET_EMBEDDED_PUBLIC_KEY", requestId }, + origin, + }); + Object.defineProperty(event, "source", { value: source }); + return event; + } + + function makeInitEvent( + origin = "https://app.turnkey.com", + source = parentWindow + ) { + const port = { onmessage: null, postMessage: jest.fn() }; + const event = new dom.window.MessageEvent("message", { + data: { type: "TURNKEY_INIT_MESSAGE_CHANNEL" }, + ports: [port], + origin, + }); + Object.defineProperty(event, "source", { value: source }); + return { event, port }; + } + + const flush = () => new Promise((resolve) => setTimeout(resolve, 0)); + + it("serves legacy requests from the parent and binds the first origin", async () => { + initEventHandlers(jest.fn()); + + dom.window.dispatchEvent(makeLegacyEvent("req-1")); + await flush(); + + expect(TKHQModule.sendMessageUp).toHaveBeenCalledWith( + "EMBEDDED_PUBLIC_KEY", + "aabbccdd", + "req-1" + ); + expect(TKHQModule.setParentFrameOrigin).toHaveBeenCalledWith( + "https://app.turnkey.com" + ); + }); + + it("ignores legacy messages from other origins after binding", async () => { + initEventHandlers(jest.fn()); + + dom.window.dispatchEvent(makeLegacyEvent("req-1")); + await flush(); + dom.window.dispatchEvent( + makeLegacyEvent("req-2", "https://malicious.example.com") + ); + await flush(); + + expect(TKHQModule.sendMessageUp).toHaveBeenCalledTimes(1); + expect(TKHQModule.sendMessageUp).toHaveBeenCalledWith( + "EMBEDDED_PUBLIC_KEY", + "aabbccdd", + "req-1" + ); + }); + + it("ignores legacy messages not sent by the parent window", async () => { + initEventHandlers(jest.fn()); + + dom.window.dispatchEvent( + makeLegacyEvent("req-1", "https://app.turnkey.com", {}) + ); + await flush(); + + expect(TKHQModule.sendMessageUp).not.toHaveBeenCalled(); + expect(TKHQModule.setParentFrameOrigin).not.toHaveBeenCalled(); + }); + + it("ignores legacy messages with an opaque origin", async () => { + initEventHandlers(jest.fn()); + + dom.window.dispatchEvent(makeLegacyEvent("req-1", "null")); + await flush(); + + expect(TKHQModule.sendMessageUp).not.toHaveBeenCalled(); + }); + + it("upgrades a legacy-bound document to the MessageChannel path", async () => { + initEventHandlers(jest.fn()); + + dom.window.dispatchEvent(makeLegacyEvent("req-1")); + await flush(); + expect(TKHQModule.sendMessageUp).toHaveBeenCalledTimes(1); + + const { event } = makeInitEvent("https://app.turnkey.com"); + dom.window.dispatchEvent(event); + await flush(); + + // The handshake scopes the persistent key to the same, bound origin + expect(TKHQModule.initEmbeddedKey).toHaveBeenCalledWith( + "https://app.turnkey.com" + ); + expect(TKHQModule.sendMessageUp).toHaveBeenCalledWith( + "PUBLIC_KEY_READY", + "aabbccdd" + ); + expect(TKHQModule.sendMessageUp).toHaveBeenCalledTimes(2); + + // Direct window messages are no longer served after the upgrade + dom.window.dispatchEvent(makeLegacyEvent("req-3")); + await flush(); + expect(TKHQModule.sendMessageUp).toHaveBeenCalledTimes(2); + }); + + it("refuses a MessageChannel handshake from an origin other than the legacy binding", async () => { + initEventHandlers(jest.fn()); + + dom.window.dispatchEvent(makeLegacyEvent("req-1")); + await flush(); + + const { event } = makeInitEvent("https://malicious.example.com"); + dom.window.dispatchEvent(event); + await flush(); + + expect(TKHQModule.initEmbeddedKey).not.toHaveBeenCalled(); + expect(TKHQModule.setParentFrameMessageChannelPort).not.toHaveBeenCalled(); + + // The legacy path keeps serving the bound origin + dom.window.dispatchEvent(makeLegacyEvent("req-2")); + await flush(); + expect(TKHQModule.sendMessageUp).toHaveBeenCalledWith( + "EMBEDDED_PUBLIC_KEY", + "aabbccdd", + "req-2" + ); + }); + + it("recovers when key initialization fails during the handshake", async () => { + initEventHandlers(jest.fn()); + + TKHQModule.initEmbeddedKey.mockRejectedValueOnce( + new Error("storage blocked") + ); + + const { event: failedEvent, port: failedPort } = makeInitEvent(); + dom.window.dispatchEvent(failedEvent); + await flush(); + + // The failure is reported on the offered port and nothing is committed + expect(failedPort.postMessage).toHaveBeenCalledWith({ + type: "ERROR", + value: expect.stringContaining("storage blocked"), + }); + expect(TKHQModule.setParentFrameMessageChannelPort).not.toHaveBeenCalled(); + + // The legacy path keeps serving in the meantime + dom.window.dispatchEvent(makeLegacyEvent("req-1")); + await flush(); + expect(TKHQModule.sendMessageUp).toHaveBeenCalledWith( + "EMBEDDED_PUBLIC_KEY", + "aabbccdd", + "req-1" + ); + + // A retried handshake succeeds + const { event: retryEvent, port: retryPort } = makeInitEvent(); + dom.window.dispatchEvent(retryEvent); + await flush(); + expect(TKHQModule.setParentFrameMessageChannelPort).toHaveBeenCalledWith( + retryPort + ); + expect(TKHQModule.sendMessageUp).toHaveBeenCalledWith( + "PUBLIC_KEY_READY", + "aabbccdd" + ); + }); +}); + +describe("Telemetry", () => { + const originalNavigatorDescriptor = Object.getOwnPropertyDescriptor( + globalThis, + "navigator" + ); + + let dom; + let sendBeacon; + + function setTelemetryMeta(content) { + const meta = dom.window.document.createElement("meta"); + meta.setAttribute("name", "turnkey-telemetry-endpoint"); + meta.setAttribute("content", content); + dom.window.document.head.appendChild(meta); + } + + beforeEach(() => { + dom = new JSDOM(``, { + url: "http://localhost", + }); + global.window = dom.window; + global.document = dom.window.document; + + sendBeacon = jest.fn(() => true); + Object.defineProperty(globalThis, "navigator", { + configurable: true, + value: { sendBeacon }, + }); + }); + + afterEach(() => { + delete global.window; + delete global.document; + if (originalNavigatorDescriptor) { + Object.defineProperty( + globalThis, + "navigator", + originalNavigatorDescriptor + ); + } else { + delete globalThis.navigator; + } + }); + + it("does not send anything when no endpoint is configured", () => { + recordChannelTelemetry( + CHANNEL_LEGACY_POST_MESSAGE, + "SIGN_MESSAGE", + "https://app.turnkey.com" + ); + expect(sendBeacon).not.toHaveBeenCalled(); + }); + + it("treats the deploy-time placeholder as unconfigured", () => { + setTelemetryMeta("__TURNKEY_TELEMETRY_ENDPOINT__"); + recordChannelTelemetry( + CHANNEL_MESSAGE_CHANNEL, + "SIGN_MESSAGE", + "https://app.turnkey.com" + ); + expect(sendBeacon).not.toHaveBeenCalled(); + }); + + it("sends a beacon describing the channel and operation", async () => { + setTelemetryMeta("https://telemetry.turnkey.com/frames"); + + recordChannelTelemetry( + CHANNEL_LEGACY_POST_MESSAGE, + "SIGN_TRANSACTION", + "https://app.turnkey.com" + ); + + expect(sendBeacon).toHaveBeenCalledTimes(1); + const [endpoint, blob] = sendBeacon.mock.calls[0]; + expect(endpoint).toBe("https://telemetry.turnkey.com/frames"); + + const payload = JSON.parse(await blob.text()); + expect(payload).toEqual({ + frame: "export-and-sign", + channel: "legacy_post_message", + eventType: "SIGN_TRANSACTION", + parentOrigin: "https://app.turnkey.com", + timestamp: expect.any(String), + }); + }); + + it("never throws, even when the beacon API fails", () => { + setTelemetryMeta("https://telemetry.turnkey.com/frames"); + sendBeacon.mockImplementation(() => { + throw new Error("beacon rejected"); + }); + + expect(() => + recordChannelTelemetry(CHANNEL_MESSAGE_CHANNEL, "SIGN_MESSAGE") + ).not.toThrow(); + }); +}); diff --git a/export-and-sign/src/event-handlers.js b/export-and-sign/src/event-handlers.js index fb1045c2..735efcdd 100644 --- a/export-and-sign/src/event-handlers.js +++ b/export-and-sign/src/event-handlers.js @@ -1,4 +1,9 @@ import { TKHQ } from "./turnkey-core.js"; +import { + recordChannelTelemetry, + CHANNEL_MESSAGE_CHANNEL, + CHANNEL_LEGACY_POST_MESSAGE, +} from "./telemetry.js"; import { Keypair, VersionedTransaction } from "@solana/web3.js"; import { parseTransaction } from "viem"; import { privateKeyToAccount } from "viem/accounts"; @@ -805,14 +810,73 @@ export function initEventHandlers(HpkeDecrypt) { const messageListenerController = new AbortController(); const turnkeyInitController = new AbortController(); - // Add DOM event listeners for standalone mode - addDOMEventListeners(); + // Origin of a legacy (@turnkey/iframe-stamper < 2.1.0) parent, bound on its + // first valid message. A document belongs to exactly one embedder for its + // lifetime, so every subsequent message must come from the same origin. + let legacyParentOrigin = null; + + if (window.parent === window) { + // Standalone mode: the DOM forms drive the flow by posting messages to + // this same window. Messages from other windows (e.g. a window.opener) + // are not accepted. + addDOMEventListeners(); + window.addEventListener( + "message", + async function (event) { + if (event.source !== window) { + return; + } + await messageEventListener(event); + }, + { + capture: false, + signal: messageListenerController.signal, + } + ); + return { messageEventListener }; + } - // Add window message listener for iframe mode - window.addEventListener("message", messageEventListener, { - capture: false, - signal: messageListenerController.signal, - }); + // Legacy embedded mode: @turnkey/iframe-stamper < 2.1.0 posts requests + // straight to this window instead of establishing a MessageChannel. + // These clients operate on the document-scoped ephemeral key (never + // persisted -- see initEphemeralEmbeddedKey), so a malicious embedder can + // only ever obtain a key that no legitimate bundle is encrypted to + // (INT-697). Modern clients upgrade to the MessageChannel path below. + window.addEventListener( + "message", + async function (event) { + if (!event.data || !event.data["type"]) { + return; + } + // Channel establishment is owned by the handshake listener below. + if (event.data["type"] === "TURNKEY_INIT_MESSAGE_CHANNEL") { + return; + } + // Only the direct parent, with a real (non-opaque) origin, may drive + // the legacy path. + if (event.source !== window.parent) { + return; + } + if (!event.origin || event.origin === "null") { + return; + } + if (legacyParentOrigin === null) { + legacyParentOrigin = event.origin; + // From now on, responses posted to window.parent are only readable + // by the bound origin. + TKHQ.setParentFrameOrigin(event.origin); + } else if (event.origin !== legacyParentOrigin) { + return; + } + recordChannelTelemetry( + CHANNEL_LEGACY_POST_MESSAGE, + event.data["type"], + event.origin + ); + await messageEventListener(event); + }, + { capture: false, signal: messageListenerController.signal } + ); // Guard to prevent concurrent channel establishment from multiple senders let channelEstablished = false; @@ -830,8 +894,20 @@ export function initEventHandlers(HpkeDecrypt) { if ( event.data && event.data["type"] == "TURNKEY_INIT_MESSAGE_CHANNEL" && - event.ports?.[0] + event.source === window.parent && + event.origin && + event.origin !== "null" && + event.ports?.length === 1 ) { + // A legacy-bound document may upgrade to the MessageChannel protocol, + // but never on behalf of a different origin. + if ( + legacyParentOrigin !== null && + legacyParentOrigin !== event.origin + ) { + return; + } + // Synchronously check-and-set the flag before any await. This prevents // a second concurrent invocation from racing through while the first is // suspended at an await, which would allow multiple origins to establish @@ -841,20 +917,43 @@ export function initEventHandlers(HpkeDecrypt) { } channelEstablished = true; - // remove the message event listener that was added in the DOMContentLoaded event - messageListenerController.abort(); - const iframeMessagePort = event.ports[0]; - iframeMessagePort.onmessage = messageEventListener; - TKHQ.setParentFrameMessageChannelPort(iframeMessagePort); + var targetPubHex; + try { + // Supersedes the ephemeral key, if the legacy bootstrap created one. + await TKHQ.initEmbeddedKey(event.origin); + var embeddedKeyJwk = await TKHQ.getEmbeddedKey(); + var targetPubBuf = await TKHQ.p256JWKPrivateToPublic(embeddedKeyJwk); + targetPubHex = TKHQ.uint8arrayToHexString(targetPubBuf); + } catch (e) { + // Key setup failed (e.g. blocked third-party storage). Roll back so + // the parent can retry the handshake, and keep the legacy/standalone + // listener alive so the frame stays functional in the meantime. + channelEstablished = false; + iframeMessagePort.postMessage({ type: "ERROR", value: e.toString() }); + return; + } - await TKHQ.initEmbeddedKey(event.origin); - var embeddedKeyJwk = await TKHQ.getEmbeddedKey(); - var targetPubBuf = await TKHQ.p256JWKPrivateToPublic(embeddedKeyJwk); - var targetPubHex = TKHQ.uint8arrayToHexString(targetPubBuf); + // Commit: the MessagePort carries all requests from here on; stop + // accepting legacy/standalone window messages. + messageListenerController.abort(); + TKHQ.setParentFrameMessageChannelPort(iframeMessagePort); document.getElementById("embedded-key").value = targetPubHex; + iframeMessagePort.onmessage = function (portEvent) { + recordChannelTelemetry( + CHANNEL_MESSAGE_CHANNEL, + portEvent.data && portEvent.data["type"], + event.origin + ); + return messageEventListener(portEvent); + }; + recordChannelTelemetry( + CHANNEL_MESSAGE_CHANNEL, + "TURNKEY_INIT_MESSAGE_CHANNEL", + event.origin + ); TKHQ.sendMessageUp("PUBLIC_KEY_READY", targetPubHex); // remove the listener for TURNKEY_INIT_MESSAGE_CHANNEL after it's been processed diff --git a/export-and-sign/src/index.js b/export-and-sign/src/index.js index 421b88b9..9184f3c3 100644 --- a/export-and-sign/src/index.js +++ b/export-and-sign/src/index.js @@ -11,12 +11,6 @@ window.TKHQ = TKHQ; // Init app document.addEventListener("DOMContentLoaded", async function () { - await TKHQ.initEmbeddedKey(); - const embeddedKeyJwk = await TKHQ.getEmbeddedKey(); - const targetPubBuf = await TKHQ.p256JWKPrivateToPublic(embeddedKeyJwk); - const targetPubHex = TKHQ.uint8arrayToHexString(targetPubBuf); - document.getElementById("embedded-key").value = targetPubHex; - initEventHandlers(HpkeDecrypt); // If styles are saved in local storage, sanitize and apply them @@ -25,5 +19,27 @@ document.addEventListener("DOMContentLoaded", async function () { TKHQ.applySettings(styleSettings); } - TKHQ.sendMessageUp("PUBLIC_KEY_READY", targetPubHex); + if (window.parent === window) { + // Standalone mode has no parent; scope the persisted key to this + // document's own origin. + await TKHQ.initEmbeddedKey(window.location.origin); + } else { + // Embedded mode: create a document-scoped ephemeral key so legacy + // (@turnkey/iframe-stamper < 2.1.0) parents, which passively wait for + // PUBLIC_KEY_READY, can finish init(). Modern parents supersede it with + // a persistent key scoped to their browser-authenticated origin during + // the MessageChannel handshake (see event-handlers.js). + await TKHQ.initEphemeralEmbeddedKey(); + } + + const embeddedKeyJwk = await TKHQ.getEmbeddedKey(); + const targetPubBuf = await TKHQ.p256JWKPrivateToPublic(embeddedKeyJwk); + const targetPubHex = TKHQ.uint8arrayToHexString(targetPubBuf); + document.getElementById("embedded-key").value = targetPubHex; + + if (window.parent !== window) { + // The parent origin is not known yet, but announcing the (non-secret) + // public key broadly is required to bootstrap legacy clients. + TKHQ.sendMessageUp("PUBLIC_KEY_READY", targetPubHex); + } }); diff --git a/export-and-sign/src/index.template.html b/export-and-sign/src/index.template.html index 8a7d556a..32c06b3f 100644 --- a/export-and-sign/src/index.template.html +++ b/export-and-sign/src/index.template.html @@ -9,6 +9,10 @@ name="turnkey-signer-environment" content="__TURNKEY_SIGNER_ENVIRONMENT__" /> + diff --git a/export-and-sign/src/telemetry.js b/export-and-sign/src/telemetry.js new file mode 100644 index 00000000..bef76dda --- /dev/null +++ b/export-and-sign/src/telemetry.js @@ -0,0 +1,62 @@ +/** + * Best-effort telemetry distinguishing modern MessageChannel clients from + * legacy direct-postMessage clients (@turnkey/iframe-stamper < 2.1.0). This + * exists to size and monitor the legacy migration for INT-697. It must never + * interfere with the export/signing flow: failures are swallowed and nothing + * is sent unless the deployment templates an endpoint into the page. + */ + +export const CHANNEL_MESSAGE_CHANNEL = "message_channel"; +export const CHANNEL_LEGACY_POST_MESSAGE = "legacy_post_message"; + +const TELEMETRY_ENDPOINT_META_NAME = "turnkey-telemetry-endpoint"; +const TELEMETRY_ENDPOINT_PLACEHOLDER = "__TURNKEY_TELEMETRY_ENDPOINT__"; + +function getTelemetryEndpoint() { + if (typeof document === "undefined") { + return null; + } + const meta = document.querySelector( + `meta[name="${TELEMETRY_ENDPOINT_META_NAME}"]` + ); + if ( + !meta || + !meta.content || + meta.content === TELEMETRY_ENDPOINT_PLACEHOLDER + ) { + return null; + } + return meta.content; +} + +/** + * Records one operation received over a parent communication channel. + * @param {string} channel CHANNEL_MESSAGE_CHANNEL or CHANNEL_LEGACY_POST_MESSAGE + * @param {string} eventType the message type that was processed + * @param {string} [parentOrigin] origin of the embedding document, if known + */ +export function recordChannelTelemetry(channel, eventType, parentOrigin) { + try { + const endpoint = getTelemetryEndpoint(); + if ( + !endpoint || + typeof navigator === "undefined" || + typeof navigator.sendBeacon !== "function" + ) { + return; + } + const payload = JSON.stringify({ + frame: "export-and-sign", + channel, + eventType: eventType || null, + parentOrigin: parentOrigin || null, + timestamp: new Date().toISOString(), + }); + navigator.sendBeacon( + endpoint, + new Blob([payload], { type: "application/json" }) + ); + } catch { + // Telemetry must never break the signing flow; drop the sample. + } +} diff --git a/export-and-sign/src/turnkey-core.js b/export-and-sign/src/turnkey-core.js index 8c79de79..48f85075 100644 --- a/export-and-sign/src/turnkey-core.js +++ b/export-and-sign/src/turnkey-core.js @@ -8,9 +8,9 @@ const { generateTargetKey, setItemWithExpiry, getItemWithExpiry, - getEmbeddedKey, - setEmbeddedKey, - onResetEmbeddedKey, + getEmbeddedKey: sharedGetEmbeddedKey, + setEmbeddedKey: sharedSetEmbeddedKey, + onResetEmbeddedKey: sharedOnResetEmbeddedKey, p256JWKPrivateToPublic, base58Encode, base58Decode, @@ -20,6 +20,7 @@ const { uint8arrayFromHexString, uint8arrayToHexString, setParentFrameMessageChannelPort, + setParentFrameOrigin, normalizePadding, additionalAssociatedData, getSettings, @@ -30,14 +31,160 @@ const { loadQuorumKey, } = SharedTKHQ; +const LEGACY_EMBEDDED_KEY = "TURNKEY_EMBEDDED_KEY"; +const LEGACY_EMBEDDED_KEY_ORIGIN = "TURNKEY_EMBEDDED_KEY_ORIGIN"; +const ORIGIN_SCOPED_EMBEDDED_KEY_PREFIX = "TURNKEY_EMBEDDED_KEY_V2"; + +// Embedded key state for this document, keyed by window so it is tied to the +// document lifetime. Two shapes: +// { mode: "persistent", origin, storageKey, ready } -- key lives in +// localStorage, scoped to the browser-authenticated parent origin (or +// this document's own origin in standalone mode). `ready` resolves once +// the key has actually been persisted; readers racing the handshake must +// await it before calling getEmbeddedKey. +// { mode: "ephemeral", key } -- key lives in memory only. Used for legacy +// (@turnkey/iframe-stamper < 2.1.0) parents: because the key is unique to +// this document and never persisted, an unrelated embedder can never +// obtain a key that decrypts another application's bundles (INT-697). +const embeddedKeyStates = new WeakMap(); + +function validateParentOrigin(parentOrigin) { + if ( + typeof parentOrigin !== "string" || + parentOrigin.length === 0 || + parentOrigin === "null" + ) { + throw new Error("a non-opaque parent origin is required"); + } + + const parsedOrigin = new URL(parentOrigin).origin; + if (parsedOrigin !== parentOrigin) { + throw new Error(`invalid parent origin: ${parentOrigin}`); + } + + return parsedOrigin; +} + +// Never migrate the old global key: doing so would preserve the cross-origin +// replay vulnerability for bundles encrypted before this change. +function purgeLegacyEmbeddedKey() { + window.localStorage.removeItem(LEGACY_EMBEDDED_KEY); + window.localStorage.removeItem(LEGACY_EMBEDDED_KEY_ORIGIN); +} + +/** + * Creates (if needed) the persistent embedded key scoped to the given parent + * origin and persists it in localStorage. A document can bind to exactly one + * parent origin; an ephemeral key, if any, is superseded. + * @param {string} parentOrigin + */ +async function initEmbeddedKey(parentOrigin) { + if (isDoublyIframed()) { + throw new Error("Doubly iframed"); + } + const validatedOrigin = validateParentOrigin(parentOrigin); + const previousState = embeddedKeyStates.get(window); + if ( + previousState?.mode === "persistent" && + previousState.origin !== validatedOrigin + ) { + throw new Error( + `parent origin is already bound to ${previousState.origin}; refusing ${validatedOrigin}` + ); + } + purgeLegacyEmbeddedKey(); + const storageKey = `${ORIGIN_SCOPED_EMBEDDED_KEY_PREFIX}:${encodeURIComponent( + validatedOrigin + )}`; + const state = { mode: "persistent", origin: validatedOrigin, storageKey }; + // The state is activated synchronously so a concurrent ephemeral init + // cannot clobber it, but the key does not exist in localStorage until + // sharedInitEmbeddedKey resolves; `ready` lets racing readers wait for it. + // If persistence fails (e.g. blocked third-party storage), roll back so the + // document keeps operating on its previous key and a retry is possible. + state.ready = sharedInitEmbeddedKey(storageKey).catch((error) => { + if (embeddedKeyStates.get(window) === state) { + if (previousState) { + embeddedKeyStates.set(window, previousState); + } else { + embeddedKeyStates.delete(window); + } + } + throw error; + }); + embeddedKeyStates.set(window, state); + return await state.ready; +} + /** - * Creates a new public/private key pair and persists it in localStorage + * Creates (if needed) an in-memory embedded key unique to this document, for + * legacy (@turnkey/iframe-stamper < 2.1.0) parents that speak direct + * postMessage. No-ops if a persistent origin-scoped key is already active + * (i.e. the MessageChannel handshake completed first). */ -async function initEmbeddedKey() { +async function initEphemeralEmbeddedKey() { if (isDoublyIframed()) { throw new Error("Doubly iframed"); } - return await sharedInitEmbeddedKey(); + const state = embeddedKeyStates.get(window); + if (state?.mode === "persistent") { + // Wait for the in-flight persistence so callers can read the key. + return await state.ready; + } + if (state?.key) { + return; + } + purgeLegacyEmbeddedKey(); + const generatedKey = await generateTargetKey(); + // Re-check: a MessageChannel handshake may have activated a persistent key + // while key generation was in flight; it must not be clobbered. Wait for it + // so callers can read the key; if it fails (and rolls itself back), the + // ephemeral key takes over below. + const latestState = embeddedKeyStates.get(window); + if (latestState?.mode === "persistent") { + try { + return await latestState.ready; + } catch { + // fall through to the ephemeral key + } + } + if (embeddedKeyStates.get(window)?.mode !== "persistent") { + embeddedKeyStates.set(window, { mode: "ephemeral", key: generatedKey }); + } +} + +function getEmbeddedKey() { + const state = embeddedKeyStates.get(window); + if (!state) { + return null; + } + return state.mode === "persistent" + ? sharedGetEmbeddedKey(state.storageKey) + : state.key; +} + +function setEmbeddedKey(targetKey) { + const state = embeddedKeyStates.get(window); + if (!state) { + throw new Error("embedded key has not been initialized"); + } + if (state.mode === "persistent") { + sharedSetEmbeddedKey(targetKey, state.storageKey); + } else { + state.key = targetKey; + } +} + +function onResetEmbeddedKey() { + const state = embeddedKeyStates.get(window); + if (!state) { + throw new Error("embedded key has not been initialized"); + } + if (state.mode === "persistent") { + sharedOnResetEmbeddedKey(state.storageKey); + } else { + state.key = null; + } } /** @@ -152,6 +299,7 @@ function applySettings(settings) { export const TKHQ = { initEmbeddedKey, + initEphemeralEmbeddedKey, generateTargetKey, setItemWithExpiry, getItemWithExpiry, @@ -167,6 +315,7 @@ export const TKHQ = { uint8arrayFromHexString, uint8arrayToHexString, setParentFrameMessageChannelPort, + setParentFrameOrigin, normalizePadding, fromDerSignature, additionalAssociatedData, diff --git a/export-and-sign/webpack.config.js b/export-and-sign/webpack.config.js index 78f6c5ca..07bea713 100644 --- a/export-and-sign/webpack.config.js +++ b/export-and-sign/webpack.config.js @@ -47,8 +47,12 @@ module.exports = (env, argv) => { meta: { "Content-Security-Policy": { "http-equiv": "Content-Security-Policy", + // connect-src governs sendBeacon; the telemetry collector origin + // is templated in at deploy time (same sed pass as the endpoint + // meta tag). Left untemplated, the placeholder is an invalid CSP + // source expression that browsers ignore, leaving just 'self'. content: - "default-src 'self'; script-src 'self'; style-src 'self'; base-uri 'self'; object-src 'none'; form-action 'none'", + "default-src 'self'; script-src 'self'; style-src 'self'; connect-src 'self' __TURNKEY_TELEMETRY_ENDPOINT__; base-uri 'self'; object-src 'none'; form-action 'none'", }, }, minify: isProduction diff --git a/kustomize/base/resources.yaml b/kustomize/base/resources.yaml index 7dff3ec6..eb10dc42 100644 --- a/kustomize/base/resources.yaml +++ b/kustomize/base/resources.yaml @@ -16,6 +16,10 @@ spec: env: - name: TURNKEY_SIGNER_ENVIRONMENT value: "prod" + # Collector for MessageChannel-vs-legacy channel telemetry + # (INT-697 migration). Empty disables telemetry entirely. + - name: TURNKEY_TELEMETRY_ENDPOINT + value: "" command: - sh - -c @@ -31,10 +35,14 @@ spec: ls -la templated/export-and-sign/ fi - # Template the environment variable in the HTML files (not JS, to preserve SRI) + # Escape sed replacement metacharacters (&, |, \) so URLs with + # query strings survive the substitution below intact + TELEMETRY_ENDPOINT_ESCAPED=$(printf '%s' "${TURNKEY_TELEMETRY_ENDPOINT}" | sed -e 's/[&\\|]/\\&/g'); + + # Template the environment variables in the HTML files (not JS, to preserve SRI) for file in templated/export-and-sign/*.html; do if [ -f "$file" ]; then - if sed "s/__TURNKEY_SIGNER_ENVIRONMENT__/${TURNKEY_SIGNER_ENVIRONMENT}/g" "$file" > "$file.tmp"; then + if sed -e "s/__TURNKEY_SIGNER_ENVIRONMENT__/${TURNKEY_SIGNER_ENVIRONMENT}/g" -e "s|__TURNKEY_TELEMETRY_ENDPOINT__|${TELEMETRY_ENDPOINT_ESCAPED}|g" "$file" > "$file.tmp"; then mv "$file.tmp" "$file" fi fi diff --git a/shared/turnkey-core.js b/shared/turnkey-core.js index 97071c19..fc2c2d87 100644 --- a/shared/turnkey-core.js +++ b/shared/turnkey-core.js @@ -6,14 +6,13 @@ import { bech32 } from "bech32"; */ /** constants for LocalStorage */ -const TURNKEY_EMBEDDED_KEY = "TURNKEY_EMBEDDED_KEY"; const TURNKEY_TARGET_EMBEDDED_KEY = "TURNKEY_TARGET_EMBEDDED_KEY"; const TURNKEY_SETTINGS = "TURNKEY_SETTINGS"; /** 48 hours in milliseconds */ const TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS = 1000 * 60 * 60 * 48; -const TURNKEY_EMBEDDED_KEY_ORIGIN = "TURNKEY_EMBEDDED_KEY_ORIGIN"; let parentFrameMessageChannelPort = null; +let parentFrameTargetOrigin = "*"; var cryptoProviderOverride = null; /* @@ -105,17 +104,31 @@ async function loadTargetKey(targetPublic) { return await subtle.exportKey("jwk", targetKey); } +/** + * Throws unless the caller provided an explicit storage key. Consumers must + * choose a key slot deliberately (e.g. scoped by parent origin); an implicit + * global default is what enabled cross-origin bundle replay (INT-697). + * @param {string} storageKey + */ +function requireStorageKey(storageKey) { + if (typeof storageKey !== "string" || storageKey.length === 0) { + throw new Error("an explicit embedded key storage key is required"); + } +} + /** * Creates a new public/private key pair and persists it in localStorage + * @param {string} storageKey localStorage key used for persistence */ -async function initEmbeddedKey() { +async function initEmbeddedKey(storageKey) { + requireStorageKey(storageKey); if (isDoublyIframed()) { throw new Error("Doubly iframed"); } - const retrievedKey = await getEmbeddedKey(); + const retrievedKey = await getEmbeddedKey(storageKey); if (retrievedKey === null) { const targetKey = await generateTargetKey(); - setEmbeddedKey(targetKey); + setEmbeddedKey(targetKey, storageKey); } // Nothing to do, key is correctly initialized! } @@ -142,19 +155,23 @@ async function generateTargetKey() { /** * Gets the current embedded private key JWK. Returns `null` if not found. + * @param {string} storageKey localStorage key used for persistence */ -function getEmbeddedKey() { - const jwtKey = getItemWithExpiry(TURNKEY_EMBEDDED_KEY); +function getEmbeddedKey(storageKey) { + requireStorageKey(storageKey); + const jwtKey = getItemWithExpiry(storageKey); return jwtKey ? JSON.parse(jwtKey) : null; } /** * Sets the embedded private key JWK with the default expiration time. * @param {JsonWebKey} targetKey + * @param {string} storageKey localStorage key used for persistence */ -function setEmbeddedKey(targetKey) { +function setEmbeddedKey(targetKey, storageKey) { + requireStorageKey(storageKey); setItemWithExpiry( - TURNKEY_EMBEDDED_KEY, + storageKey, JSON.stringify(targetKey), TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS ); @@ -181,10 +198,11 @@ function setTargetEmbeddedKey(targetKey) { /** * Resets the current embedded private key JWK. + * @param {string} storageKey localStorage key used for persistence */ -function onResetEmbeddedKey() { - window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY); - window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY_ORIGIN); +function onResetEmbeddedKey(storageKey) { + requireStorageKey(storageKey); + window.localStorage.removeItem(storageKey); } /** @@ -198,6 +216,19 @@ function setParentFrameMessageChannelPort(port) { parentFrameMessageChannelPort = port; } +/** + * Restricts direct window.parent postMessages to the given origin. Used by + * the legacy (< 2.1.0 iframe-stamper) path once the parent origin is bound, + * so responses are only readable by that origin. + * @param {string} origin + */ +function setParentFrameOrigin(origin) { + if (typeof origin !== "string" || origin.length === 0 || origin === "*") { + throw new Error("a concrete parent frame origin is required"); + } + parentFrameTargetOrigin = origin; +} + /** * Gets the current settings. */ @@ -462,13 +493,7 @@ function sendMessageUp(type, value, requestId) { if (parentFrameMessageChannelPort) { parentFrameMessageChannelPort.postMessage(message); } else if (window.parent !== window) { - window.parent.postMessage( - { - type: type, - value: value, - }, - "*" - ); + window.parent.postMessage(message, parentFrameTargetOrigin); } logMessage(`⬆️ Sent message ${type}: ${value}`); } @@ -912,6 +937,7 @@ export { onResetEmbeddedKey, resetTargetEmbeddedKey, setParentFrameMessageChannelPort, + setParentFrameOrigin, getSettings, setSettings, setItemWithExpiry, From 2e20f618d26ebf46e0eb2f0228f632bfbca292f3 Mon Sep 17 00:00:00 2001 From: fainashalts Date: Thu, 30 Jul 2026 14:43:31 -0700 Subject: [PATCH 2/2] fix: harden cross-origin telemetry and messaging --- .../dist/bundle.0f0675af1311793b60fe.js | 3 + ...undle.0f0675af1311793b60fe.js.LICENSE.txt} | 0 .../dist/bundle.0f0675af1311793b60fe.js.map | 1 + .../dist/bundle.6a4c3b0995683838803c.js | 3 - .../dist/bundle.6a4c3b0995683838803c.js.map | 1 - export-and-sign/dist/index.html | 2 +- export-and-sign/index.test.js | 77 +++++++++++++++---- export-and-sign/src/event-handlers.js | 25 ++---- export-and-sign/src/telemetry.js | 32 ++++++-- export-and-sign/webpack.config.js | 2 +- export-and-sign/webpack.security.test.js | 22 ++++++ .../dist/551.bundle.3bf0db01aff38b17d9e1.js | 3 + ...undle.3bf0db01aff38b17d9e1.js.LICENSE.txt} | 0 .../551.bundle.3bf0db01aff38b17d9e1.js.map | 1 + .../dist/551.bundle.49402ee939a00be74d76.js | 3 - .../551.bundle.49402ee939a00be74d76.js.map | 1 - import/dist/index.html | 2 +- import/dist/standalone.html | 2 +- kustomize/base/resources.yaml | 48 ++++++++++-- shared/turnkey-core.js | 17 +++- shared/turnkey-core.test.js | 20 +++++ 21 files changed, 207 insertions(+), 58 deletions(-) create mode 100644 export-and-sign/dist/bundle.0f0675af1311793b60fe.js rename export-and-sign/dist/{bundle.6a4c3b0995683838803c.js.LICENSE.txt => bundle.0f0675af1311793b60fe.js.LICENSE.txt} (100%) create mode 100644 export-and-sign/dist/bundle.0f0675af1311793b60fe.js.map delete mode 100644 export-and-sign/dist/bundle.6a4c3b0995683838803c.js delete mode 100644 export-and-sign/dist/bundle.6a4c3b0995683838803c.js.map create mode 100644 export-and-sign/webpack.security.test.js create mode 100644 import/dist/551.bundle.3bf0db01aff38b17d9e1.js rename import/dist/{551.bundle.49402ee939a00be74d76.js.LICENSE.txt => 551.bundle.3bf0db01aff38b17d9e1.js.LICENSE.txt} (100%) create mode 100644 import/dist/551.bundle.3bf0db01aff38b17d9e1.js.map delete mode 100644 import/dist/551.bundle.49402ee939a00be74d76.js delete mode 100644 import/dist/551.bundle.49402ee939a00be74d76.js.map diff --git a/export-and-sign/dist/bundle.0f0675af1311793b60fe.js b/export-and-sign/dist/bundle.0f0675af1311793b60fe.js new file mode 100644 index 00000000..a10fa091 --- /dev/null +++ b/export-and-sign/dist/bundle.0f0675af1311793b60fe.js @@ -0,0 +1,3 @@ +/*! For license information please see bundle.0f0675af1311793b60fe.js.LICENSE.txt */ +(()=>{var e,t,r,n,a,o={750:(e,t,r)=>{"use strict";var n=r(7598),a=r(4443),o=r(566);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e){for(var t=1;t3?(a=y===n)&&(u=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=p&&((a=r<2&&pn||n>y)&&(o[4]=r,o[5]=n,d.n=y,c=0))}if(a||r>1)return i;throw l=!0,n}return function(a,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&p(f,y),c=f,u=y;(t=c<2?e:u)||!l;){o||(c?c<3?(c>1&&(d.n=-1),p(c,u)):d.n=u:d.v=u);try{if(s=2,o){if(c||(a="next"),t=o[a]){if(!(t=t.call(o,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);o=e}else if((t=(l=d.n<0)?u:r.call(n,d))!==i)break}catch(t){o=e,c=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,a,o),!0),s}var i={};function c(){}function u(){}function s(){}t=Object.getPrototypeOf;var d=[][n]?t(t([][n]())):(l(t={},n,function(){return this}),t),p=s.prototype=c.prototype=Object.create(d);function y(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,l(e,a,"GeneratorFunction")),e.prototype=Object.create(p),e}return u.prototype=s,l(p,"constructor",s),l(s,"constructor",u),u.displayName="GeneratorFunction",l(s,a,"GeneratorFunction"),l(p),l(p,a,"Generator"),l(p,n,function(){return this}),l(p,"toString",function(){return"[object Generator]"}),(f=function(){return{w:o,m:y}})()}function l(e,t,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}l=function(e,t,r,n){function o(t,r){l(e,t,function(e){return this._invoke(t,r,e)})}t?a?a(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(o("next",0),o("throw",1),o("return",2))},l(e,t,r,n)}function d(e){return function(e){if(Array.isArray(e))return y(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||p(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p(e,t){if(e){if("string"==typeof e)return y(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?y(e,t):void 0}}function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r1:window.parent!==window.top}function S(){return(S=b(f().m(function e(t){var r;return f().w(function(e){for(;;)switch(e.n){case 0:if(r=h()){e.n=1;break}throw new Error("WebCrypto subtle API is unavailable");case 1:return e.n=2,r.importKey("raw",t,{name:"ECDSA",namedCurve:"P-256"},!0,["verify"]);case 2:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function O(e){if("string"!=typeof e||0===e.length)throw new Error("an explicit embedded key storage key is required")}function k(){return(k=b(f().m(function e(t){return f().w(function(e){for(;;)switch(e.n){case 0:if(O(t),!E()){e.n=1;break}throw new Error("Doubly iframed");case 1:return e.n=2,P(t);case 2:if(null!==e.v){e.n=4;break}return e.n=3,_();case 3:T(e.v,t);case 4:return e.a(2)}},e)}))).apply(this,arguments)}function _(){return j.apply(this,arguments)}function j(){return(j=b(f().m(function e(){var t,r;return f().w(function(e){for(;;)switch(e.n){case 0:if(t=h()){e.n=1;break}throw new Error("WebCrypto subtle API is unavailable");case 1:return e.n=2,t.generateKey({name:"ECDH",namedCurve:"P-256"},!0,["deriveBits"]);case 2:return r=e.v,e.n=3,t.exportKey("jwk",r.privateKey);case 3:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function P(e){O(e);var t=x(e);return t?JSON.parse(t):null}function T(e,t){O(t),I(t,JSON.stringify(e),1728e5)}function I(e,t,r){var n={value:t,expiry:(new Date).getTime()+r};window.localStorage.setItem(e,JSON.stringify(n))}function x(e){var t=window.localStorage.getItem(e);if(!t)return null;var r=JSON.parse(t);return Object.prototype.hasOwnProperty.call(r,"expiry")&&Object.prototype.hasOwnProperty.call(r,"value")?(new Date).getTime()>r.expiry?(window.localStorage.removeItem(e),null):r.value:(window.localStorage.removeItem(e),null)}function A(e){if(!e||"string"!=typeof e)throw new Error("cannot create uint8array from invalid hex string");var t=e.startsWith("0x")||e.startsWith("0X")?e.slice(2):e;if(t.length%2!=0||!/^[0-9A-Fa-f]+$/.test(t))throw new Error("cannot create uint8array from invalid hex string");return new Uint8Array(t.match(/../g).map(function(e){return parseInt(e,16)}))}function D(e){return d(e).map(function(e){return e.toString(16).padStart(2,"0")}).join("")}function R(e,t){var r=Array.from(new Uint8Array(e)),n=Array.from(new Uint8Array(t));return new Uint8Array([].concat(r,n))}function N(e){var t=document.getElementById("message-log");if(t){var r=document.createElement("p");r.innerText=e,t.appendChild(r)}}function M(e){return K.apply(this,arguments)}function K(){return(K=b(f().m(function e(t){var r,n,a,o;return f().w(function(e){for(;;)switch(e.n){case 0:if(r=h()){e.n=1;break}throw new Error("WebCrypto subtle API is unavailable");case 1:return delete(n=u({},t)).d,n.key_ops=["verify"],e.n=2,r.importKey("jwk",n,{name:"ECDSA",namedCurve:"P-256"},!0,["verify"]);case 2:return a=e.v,e.n=3,r.exportKey("raw",a);case 3:return o=e.v,e.a(2,new Uint8Array(o))}},e)}))).apply(this,arguments)}function U(e){for(var t="",r=[0],n=0;n0;)r.push(a%58),a=a/58|0}for(var i=0;i0;){var c=r[i];o=(c=void 0===c?o:58*c+o)>>8,r[i]=c%256,i++}}var u=n.concat(r.reverse());return new Uint8Array(u)}function G(){return(G=b(f().m(function e(t,r,n){var a,o;return f().w(function(e){for(;;)switch(e.n){case 0:o=r,e.n="SOLANA"===o?1:"HEXADECIMAL"===o?5:6;break;case 1:if(n){e.n=2;break}throw new Error("public key must be specified for SOLANA key format");case 2:if(32===t.length){e.n=3;break}throw new Error("invalid private key length. Expected 32 bytes. Got ".concat(t.length,"."));case 3:if(32===n.length){e.n=4;break}throw new Error("invalid public key length. Expected 32 bytes. Got ".concat(n.length,"."));case 4:return(a=new Uint8Array(64)).set(t,0),a.set(n,32),e.a(2,U(a));case 5:return e.a(2,"0x"+D(t));case 6:return console.warn("invalid key format: ".concat(r,". Defaulting to HEXADECIMAL.")),e.a(2,"0x"+D(t));case 7:return e.a(2)}},e)}))).apply(this,arguments)}function L(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",a=r.toStringTag||"@@toStringTag";function o(r,n,a,o){var u=n&&n.prototype instanceof c?n:c,s=Object.create(u.prototype);return B(s,"_invoke",function(r,n,a){var o,c,u,s=0,f=a||[],l=!1,d={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,r){return o=t,c=0,u=e,d.n=r,i}};function p(r,n){for(c=r,u=n,t=0;!l&&s&&!a&&t3?(a=y===n)&&(u=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=p&&((a=r<2&&pn||n>y)&&(o[4]=r,o[5]=n,d.n=y,c=0))}if(a||r>1)return i;throw l=!0,n}return function(a,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&p(f,y),c=f,u=y;(t=c<2?e:u)||!l;){o||(c?c<3?(c>1&&(d.n=-1),p(c,u)):d.n=u:d.v=u);try{if(s=2,o){if(c||(a="next"),t=o[a]){if(!(t=t.call(o,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);o=e}else if((t=(l=d.n<0)?u:r.call(n,d))!==i)break}catch(t){o=e,c=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,a,o),!0),s}var i={};function c(){}function u(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(B(t={},n,function(){return this}),t),l=s.prototype=c.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,B(e,a,"GeneratorFunction")),e.prototype=Object.create(l),e}return u.prototype=s,B(l,"constructor",s),B(s,"constructor",u),u.displayName="GeneratorFunction",B(s,a,"GeneratorFunction"),B(l),B(l,a,"Generator"),B(l,n,function(){return this}),B(l,"toString",function(){return"[object Generator]"}),(L=function(){return{w:o,m:d}})()}function B(e,t,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}B=function(e,t,r,n){function o(t,r){B(e,t,function(e){return this._invoke(t,r,e)})}t?a?a(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(o("next",0),o("throw",1),o("return",2))},B(e,t,r,n)}function H(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r0){var n=new Uint8Array(r).fill(0);return new Uint8Array([].concat(d(n),d(e)))}if(r<0){for(var a=-1*r,o=0,i=0;i]*$',color:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",labelColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",backgroundColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",width:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$",height:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$",maxWidth:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$",maxHeight:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$",lineHeight:"^(\\d+(\\.\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$",boxShadow:"^(none|(\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)) ?(inset)?)$",textAlign:"^(left|right|center|justify|initial|inherit)$",overflowWrap:"^(normal|break-word|anywhere)$",wordWrap:"^(normal|break-word)$",resize:"^(none|both|horizontal|vertical|block|inline)$"};return Object.entries(e).forEach(function(e){var t,a,o=(a=2,function(e){if(Array.isArray(e))return e}(t=e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,c=[],u=!0,s=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=o.call(r)).done)&&(c.push(n.value),c.length!==t);u=!0);}catch(e){s=!0,a=e}finally{try{if(!u&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return c}}(t,a)||p(t,a)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),i=o[0],c=o[1],u=i.trim();if(0===u.length)throw new Error("css style property cannot be empty");var s=n[u];if(!s)throw new Error('invalid or unsupported css style property: "'.concat(u,'"'));var f=new RegExp(s),l=c.trim();if(0==l.length)throw new Error('css style for "'.concat(u,'" is empty'));if(!f.test(l))throw new Error('invalid css style value for property "'.concat(u,'"'));r[u]=l}),r},ie=E,ce=function(e){return S.apply(this,arguments)},ue=new WeakMap;function se(e){if("string"!=typeof e||0===e.length||"null"===e)throw new Error("a non-opaque parent origin is required");var t=new URL(e).origin;if(t!==e)throw new Error("invalid parent origin: ".concat(e));return t}function fe(){window.localStorage.removeItem("TURNKEY_EMBEDDED_KEY"),window.localStorage.removeItem("TURNKEY_EMBEDDED_KEY_ORIGIN")}function le(){return(le=q(L().m(function e(t){var r,n,a,o;return L().w(function(e){for(;;)switch(e.n){case 0:if(!ie()){e.n=1;break}throw new Error("Doubly iframed");case 1:if(r=se(t),"persistent"!==(null==(n=ue.get(window))?void 0:n.mode)||n.origin===r){e.n=2;break}throw new Error("parent origin is already bound to ".concat(n.origin,"; refusing ").concat(r));case 2:return fe(),a="".concat("TURNKEY_EMBEDDED_KEY_V2",":").concat(encodeURIComponent(r)),(o={mode:"persistent",origin:r,storageKey:a}).ready=Y(a).catch(function(e){throw ue.get(window)===o&&(n?ue.set(window,n):ue.delete(window)),e}),ue.set(window,o),e.n=3,o.ready;case 3:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function de(){return(de=q(L().m(function e(){var t,r,n,a;return L().w(function(e){for(;;)switch(e.p=e.n){case 0:if(!ie()){e.n=1;break}throw new Error("Doubly iframed");case 1:if("persistent"!==(null==(r=ue.get(window))?void 0:r.mode)){e.n=3;break}return e.n=2,r.ready;case 2:return e.a(2,e.v);case 3:if(null==r||!r.key){e.n=4;break}return e.a(2);case 4:return fe(),e.n=5,z();case 5:if(n=e.v,"persistent"!==(null==(a=ue.get(window))?void 0:a.mode)){e.n=9;break}return e.p=6,e.n=7,a.ready;case 7:return e.a(2,e.v);case 8:e.p=8,e.v;case 9:"persistent"!==(null===(t=ue.get(window))||void 0===t?void 0:t.mode)&&ue.set(window,{mode:"ephemeral",key:n});case 10:return e.a(2)}},e,null,[[6,8]])}))).apply(this,arguments)}function pe(){return(pe=q(L().m(function e(t,r,n){var a,i,c,u,s,f,l,d;return L().w(function(e){for(;;)switch(e.n){case 0:if(a={prod:"04cf288fe433cc4e1aa0ce1632feac4ea26bf2f5a09dcfe5a42c398e06898710330f0572882f4dbdf0f5304b8fc8703acd69adca9a4bbf7f5d00d20a5e364b2569",preprod:"04f3422b8afbe425d6ece77b8d2469954715a2ff273ab7ac89f1ed70e0a9325eaa1698b4351fd1b23734e65c0b6a86b62dd49d70b37c94606aac402cbd84353212"},i=null,"undefined"!=typeof document&&(c=document.querySelector('meta[name="turnkey-signer-environment"]'))&&c.content&&"__TURNKEY_SIGNER_ENVIRONMENT__"!==c.content&&(i=c.content),i||"undefined"==typeof window||(i=window.__TURNKEY_SIGNER_ENVIRONMENT__),void 0!==(u=a[i])){e.n=1;break}throw new Error("Configuration error: TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY is undefined");case 1:if(t===u){e.n=2;break}throw new Error("enclave quorum public keys from client and bundle do not match. Client: ".concat(u,". Bundle: ").concat(t,"."));case 2:return s=new Uint8Array(te(u)),e.n=3,ce(s);case 3:if(f=e.v){e.n=4;break}throw new Error("failed to load quorum key");case 4:return l=(0,o.g8)(r),d=te(n),e.n=5,crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},f,l,d);case 5:return e.a(2,e.v)}},e)}))).apply(this,arguments)}var ye={initEmbeddedKey:function(e){return le.apply(this,arguments)},initEphemeralEmbeddedKey:function(){return de.apply(this,arguments)},generateTargetKey:z,setItemWithExpiry:J,getItemWithExpiry:$,getEmbeddedKey:function(){var e=ue.get(window);return e?"persistent"===e.mode?W(e.storageKey):e.key:null},setEmbeddedKey:function(e){var t=ue.get(window);if(!t)throw new Error("embedded key has not been initialized");"persistent"===t.mode?X(e,t.storageKey):t.key=e},onResetEmbeddedKey:function(){var e,t=ue.get(window);if(!t)throw new Error("embedded key has not been initialized");"persistent"===t.mode?(O(e=t.storageKey),window.localStorage.removeItem(e)):t.key=null},p256JWKPrivateToPublic:V,base58Encode:Q,base58Decode:Z,encodeKey:function(e,t,r){return G.apply(this,arguments)},sendMessageUp:function(e,t,r){var n={type:e,value:t};r&&(n.requestId=r),m?m.postMessage(n):window.parent!==window&&window.parent.postMessage(n,w),N("⬆️ Sent message ".concat(e,": ").concat(t))},logMessage:ee,uint8arrayFromHexString:te,uint8arrayToHexString:re,setParentFrameMessageChannelPort:function(e){m=e},setParentFrameOrigin:function(e){if("string"!=typeof e||0===e.length)throw new Error("a canonical, non-opaque parent frame origin is required");var t;try{t=new URL(e).origin}catch(e){throw new Error("a canonical, non-opaque parent frame origin is required")}if("null"===t||t!==e)throw new Error("a canonical, non-opaque parent frame origin is required");w=t},normalizePadding:ne,fromDerSignature:o.g8,additionalAssociatedData:ae,verifyEnclaveSignature:function(e,t,r){return pe.apply(this,arguments)},getEd25519PublicKey:function(e){return n.jn.sha512Sync=function(){var e;return a.Zf((e=n.jn).concatBytes.apply(e,arguments))},n.lG(e)},applySettings:function(e){var t={};if(!e)return JSON.stringify(t);var r=JSON.parse(e);if(r.styles){var n=document.getElementById("key-div");if(!n)throw new Error("no key-div HTML element found to apply settings to.");var a=oe(r.styles);Object.entries(a).forEach(function(e){var t,r,a=(r=2,function(e){if(Array.isArray(e))return e}(t=e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,c=[],u=!0,s=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=o.call(r)).done)&&(c.push(n.value),c.length!==t);u=!0);}catch(e){s=!0,a=e}finally{try{if(!u&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return c}}(t,r)||function(e,t){if(e){if("string"==typeof e)return H(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?H(e,t):void 0}}(t,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),o=a[0],i=a[1];n.style[o]=i}),t.styles=a}return JSON.stringify(t)},validateStyles:oe,getSettings:function(){var e=window.localStorage.getItem(g);return e?JSON.parse(e):null},setSettings:function(e){window.localStorage.setItem(g,JSON.stringify(e))},parsePrivateKey:function(e){if(Array.isArray(e))return new Uint8Array(e);if("string"==typeof e){if(e.startsWith("0x")&&(e=e.slice(2)),64===e.length&&/^[0-9a-fA-F]+$/.test(e))return A(e);try{return C(e)}catch(e){throw new Error("Invalid private key format. Use hex (64 chars) or base58 format.")}}throw new Error("Private key must be a string (hex/base58) or number array")}},ve="message_channel",be="legacy_post_message",ge=new Set([ve,be]),me=new WeakMap;function we(e,t){try{if(!ge.has(e)||"undefined"==typeof window)return;var r=function(){if("undefined"==typeof document)return null;var e=document.querySelector('meta[name="'.concat("turnkey-telemetry-endpoint",'"]'));return e&&e.content&&"__TURNKEY_TELEMETRY_ENDPOINT__"!==e.content?e.content:null}();if(!r||"undefined"==typeof navigator||"function"!=typeof navigator.sendBeacon)return;var n=me.get(window);if(n||(n=new Set,me.set(window,n)),n.has(e))return;var a=JSON.stringify({frame:"export-and-sign",channel:e,parentOrigin:t||null,timestamp:(new Date).toISOString()});!1!==navigator.sendBeacon(r,new Blob([a],{type:"application/json"}))&&n.add(e)}catch(e){}}var he=r(2542),Ee=r(6092),Se=r(7270);function Oe(e){return Oe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Oe(e)}function ke(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function _e(e){for(var t=1;t3?(a=y===n)&&(u=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=p&&((a=r<2&&pn||n>y)&&(o[4]=r,o[5]=n,d.n=y,c=0))}if(a||r>1)return i;throw l=!0,n}return function(a,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&p(f,y),c=f,u=y;(t=c<2?e:u)||!l;){o||(c?c<3?(c>1&&(d.n=-1),p(c,u)):d.n=u:d.v=u);try{if(s=2,o){if(c||(a="next"),t=o[a]){if(!(t=t.call(o,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);o=e}else if((t=(l=d.n<0)?u:r.call(n,d))!==i)break}catch(t){o=e,c=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,a,o),!0),s}var i={};function c(){}function u(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(Te(t={},n,function(){return this}),t),l=s.prototype=c.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,Te(e,a,"GeneratorFunction")),e.prototype=Object.create(l),e}return u.prototype=s,Te(l,"constructor",s),Te(s,"constructor",u),u.displayName="GeneratorFunction",Te(s,a,"GeneratorFunction"),Te(l),Te(l,a,"Generator"),Te(l,n,function(){return this}),Te(l,"toString",function(){return"[object Generator]"}),(Pe=function(){return{w:o,m:d}})()}function Te(e,t,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}Te=function(e,t,r,n){function o(t,r){Te(e,t,function(e){return this._invoke(t,r,e)})}t?a?a(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(o("next",0),o("throw",1),o("return",2))},Te(e,t,r,n)}function Ie(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,c=[],u=!0,s=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=o.call(r)).done)&&(c.push(n.value),c.length!==t);u=!0);}catch(e){s=!0,a=e}finally{try{if(!u&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return xe(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?xe(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function xe(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r= v2.0.0 to pass "organizationId" for security purposes.');case 8:if(a.organizationId&&a.organizationId===r){e.n=9;break}throw new Error("organization id does not match expected value. Expected: ".concat(r,". Found: ").concat(a.organizationId,"."));case 9:if(a.encappedPublic){e.n=10;break}throw new Error('missing "encappedPublic" in bundle signed data');case 10:if(a.ciphertext){e.n=11;break}throw new Error('missing "ciphertext" in bundle signed data');case 11:return e.a(2,a)}},e)}))).apply(this,arguments)}function Ge(e,t,r){return Le.apply(this,arguments)}function Le(){return Le=De(Pe().m(function e(t,r,n){var a,o,i,c,u;return Pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,Ue(t,r);case 1:if(a=e.v,o=ye.uint8arrayFromHexString(a.encappedPublic),i=ye.uint8arrayFromHexString(a.ciphertext),u=Ne){e.n=3;break}return e.n=2,ye.getEmbeddedKey();case 2:u=e.v;case 3:return c=u,e.n=4,n({ciphertextBuf:i,encappedKeyBuf:o,receiverPrivJwk:c});case 4:return e.a(2,e.v)}},e)})),Le.apply(this,arguments)}function Be(e){return He.apply(this,arguments)}function He(){return(He=De(Pe().m(function e(t){var r,n,a;return Pe().w(function(e){for(;;)switch(e.n){case 0:if(r=ye.getEmbeddedKey()){e.n=1;break}return ye.sendMessageUp("EMBEDDED_PUBLIC_KEY","",t),e.a(2);case 1:return e.n=2,ye.p256JWKPrivateToPublic(r);case 2:n=e.v,a=ye.uint8arrayToHexString(n),ye.sendMessageUp("EMBEDDED_PUBLIC_KEY",a,t);case 3:return e.a(2)}},e)}))).apply(this,arguments)}function Fe(e,t,r,n){return qe.apply(this,arguments)}function qe(){return(qe=De(Pe().m(function e(t,r,n,a){var o,i,c,u,s,f;return Pe().w(function(e){for(;;)switch(e.n){case 0:if(i=new Uint8Array(r),"SOLANA"!==n){e.n=2;break}return c=ye.uint8arrayToHexString(i.subarray(0,32)),u=ye.getEd25519PublicKey(c),e.n=1,ye.encodeKey(i,n,u);case 1:o=e.v,e.n=4;break;case 2:return e.n=3,ye.encodeKey(i,n);case 3:o=e.v;case 4:if(s=t||"default","SOLANA"!==n){e.n=5;break}f=he.AX.fromSecretKey(ye.base58Decode(o)),e.n=7;break;case 5:if("HEXADECIMAL"!==n){e.n=7;break}return e.n=6,at(Array.from(ye.uint8arrayFromHexString(o)));case 6:f=e.v;case 7:Re=_e(_e({},Re),{},je({},s,{organizationId:a,privateKey:o,format:n,expiry:(new Date).getTime()+864e5,keypair:f}));case 8:return e.a(2)}},e)}))).apply(this,arguments)}function Ye(e,t,r,n,a,o){return ze.apply(this,arguments)}function ze(){return ze=De(Pe().m(function e(t,r,n,a,o,i){var c;return Pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,Ge(n,r,i);case 1:return c=e.v,e.n=2,Fe(o,c,a,r);case 2:ye.sendMessageUp("BUNDLE_INJECTED",!0,t);case 3:return e.a(2)}},e)})),ze.apply(this,arguments)}function Je(e,t){return $e.apply(this,arguments)}function $e(){return($e=De(Pe().m(function e(t,r){var n;return Pe().w(function(e){for(;;)switch(e.n){case 0:n=ye.applySettings(t),ye.setSettings(n),ye.sendMessageUp("SETTINGS_APPLIED",!0,r);case 1:return e.a(2)}},e)}))).apply(this,arguments)}function We(e,t,r){return Xe.apply(this,arguments)}function Xe(){return(Xe=De(Pe().m(function e(t,r,n){var a,o,i,c,u,s,f,l,d,p;return Pe().w(function(e){for(;;)switch(e.n){case 0:if(st(o=Re[a=n||"default"],a)){e.n=1;break}return e.a(2);case 1:if(i=JSON.parse(r),c=i.transaction,"SOLANA"!==(u=i.type)){e.n=3;break}return e.n=2,ft(o);case 2:f=e.v,l=ye.uint8arrayFromHexString(c),(d=he.Kt.deserialize(l)).sign([f]),s=d.serialize(),e.n=6;break;case 3:if("ETHEREUM"!==u){e.n=5;break}return e.n=4,yt(o,c);case 4:s=e.v,e.n=6;break;case 5:throw new Error("unsupported transaction type");case 6:p="string"==typeof s?s:ye.uint8arrayToHexString(s),ye.sendMessageUp("TRANSACTION_SIGNED",p,t);case 7:return e.a(2)}},e)}))).apply(this,arguments)}function Ve(e,t,r){return Qe.apply(this,arguments)}function Qe(){return Qe=De(Pe().m(function e(t,r,o){var i,c,u,s,f,l,d,p,y,v,b;return Pe().w(function(e){for(;;)switch(e.n){case 0:if(st(c=Re[i=o||"default"],i)){e.n=1;break}return e.a(2);case 1:if(u=JSON.parse(r),s=u.message,f=u.type,l=Me.encode(s),"SOLANA"!==f){e.n=3;break}return e.n=2,ft(c);case 2:p=e.v,n.jn.sha512Sync=function(){var e;return a.Zf((e=n.jn).concatBytes.apply(e,arguments))},y=p.secretKey.slice(0,32),v=n._S(l,y),d=ye.uint8arrayToHexString(v),e.n=7;break;case 3:if("ETHEREUM"!==f){e.n=6;break}return e.n=4,dt(c);case 4:return b=e.v,e.n=5,b.signMessage({message:s});case 5:d=e.v,e.n=7;break;case 6:return ye.sendMessageUp("ERROR","unsupported message type",t),e.a(2);case 7:ye.sendMessageUp("MESSAGE_SIGNED",d,t);case 8:return e.a(2)}},e)})),Qe.apply(this,arguments)}function Ze(e,t){return et.apply(this,arguments)}function et(){return(et=De(Pe().m(function e(t,r){return Pe().w(function(e){for(;;)switch(e.n){case 0:if(r){e.n=1;break}return Re={},ye.sendMessageUp("EMBEDDED_PRIVATE_KEY_CLEARED",!0,t),e.a(2);case 1:if(Re[r]){e.n=2;break}return ye.sendMessageUp("ERROR",new Error("key not found for address ".concat(r,". Note that address is case sensitive.")).toString(),t),e.a(2);case 2:delete Re[r],ye.sendMessageUp("EMBEDDED_PRIVATE_KEY_CLEARED",!0,t);case 3:return e.a(2)}},e)}))).apply(this,arguments)}function tt(e,t,r,n){return rt.apply(this,arguments)}function rt(){return rt=De(Pe().m(function e(t,r,n,a){var o,i;return Pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,Ge(n,r,a);case 1:return o=e.v,e.n=2,it(new Uint8Array(o));case 2:i=e.v,Ne=i,ye.sendMessageUp("EMBEDDED_KEY_OVERRIDE_SET",!0,t);case 3:return e.a(2)}},e)})),rt.apply(this,arguments)}function nt(e){Ne=null,ye.sendMessageUp("RESET_TO_DEFAULT_EMBEDDED_KEY",!0,e)}function at(e){return ot.apply(this,arguments)}function ot(){return(ot=De(Pe().m(function e(t){var r,n;return Pe().w(function(e){for(;;)switch(e.n){case 0:if(32!==(r=ye.parsePrivateKey(t)).length){e.n=1;break}n=he.AX.fromSeed(r),e.n=3;break;case 1:if(64!==r.length){e.n=2;break}n=he.AX.fromSecretKey(r),e.n=3;break;case 2:throw new Error("Invalid private key length: ".concat(r.length,". Expected 32 or 64 bytes."));case 3:return e.a(2,n)}},e)}))).apply(this,arguments)}function it(e){return ct.apply(this,arguments)}function ct(){return(ct=De(Pe().m(function e(t){var r,n,a;return Pe().w(function(e){for(;;)switch(e.n){case 0:if(32===t.length){e.n=1;break}throw new Error("invalid decryption key length: expected 32 bytes, got ".concat(t.length));case 1:return r=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),(n=new Uint8Array(r.length+32)).set(r),n.set(t,r.length),e.n=2,crypto.subtle.importKey("pkcs8",n,{name:"ECDH",namedCurve:"P-256"},!0,["deriveBits"]);case 2:return a=e.v,e.n=3,crypto.subtle.exportKey("jwk",a);case 3:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function ut(e){Re[e]&&delete Re[e]}function st(e,t){if(!e)throw new Error("key bytes not found. Please re-inject export bundle for address ".concat(t," into iframe. Note that address is case sensitive.")).toString();if((new Date).getTime()>=e.expiry)throw function(){for(var e=(new Date).getTime(),t=[],r=0,n=Object.entries(Re);r=i.expiry&&t.push(o)}for(var c=0,u=t;c3?(a=y===n)&&(u=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=p&&((a=r<2&&pn||n>y)&&(o[4]=r,o[5]=n,d.n=y,c=0))}if(a||r>1)return i;throw l=!0,n}return function(a,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&p(f,y),c=f,u=y;(t=c<2?e:u)||!l;){o||(c?c<3?(c>1&&(d.n=-1),p(c,u)):d.n=u:d.v=u);try{if(s=2,o){if(c||(a="next"),t=o[a]){if(!(t=t.call(o,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);o=e}else if((t=(l=d.n<0)?u:r.call(n,d))!==i)break}catch(t){o=e,c=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,a,o),!0),s}var i={};function c(){}function u(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(ht(t={},n,function(){return this}),t),l=s.prototype=c.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,ht(e,a,"GeneratorFunction")),e.prototype=Object.create(l),e}return u.prototype=s,ht(l,"constructor",s),ht(s,"constructor",u),u.displayName="GeneratorFunction",ht(s,a,"GeneratorFunction"),ht(l),ht(l,a,"Generator"),ht(l,n,function(){return this}),ht(l,"toString",function(){return"[object Generator]"}),(wt=function(){return{w:o,m:d}})()}function ht(e,t,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}ht=function(e,t,r,n){function o(t,r){ht(e,t,function(e){return this._invoke(t,r,e)})}t?a?a(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(o("next",0),o("throw",1),o("return",2))},ht(e,t,r,n)}function Et(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function St(e){for(var t=1;t3?(a=y===n)&&(u=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=p&&((a=r<2&&pn||n>y)&&(o[4]=r,o[5]=n,d.n=y,c=0))}if(a||r>1)return i;throw l=!0,n}return function(a,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&p(f,y),c=f,u=y;(t=c<2?e:u)||!l;){o||(c?c<3?(c>1&&(d.n=-1),p(c,u)):d.n=u:d.v=u);try{if(s=2,o){if(c||(a="next"),t=o[a]){if(!(t=t.call(o,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);o=e}else if((t=(l=d.n<0)?u:r.call(n,d))!==i)break}catch(t){o=e,c=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,a,o),!0),s}var i={};function c(){}function u(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(It(t={},n,function(){return this}),t),l=s.prototype=c.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,It(e,a,"GeneratorFunction")),e.prototype=Object.create(l),e}return u.prototype=s,It(l,"constructor",s),It(s,"constructor",u),u.displayName="GeneratorFunction",It(s,a,"GeneratorFunction"),It(l),It(l,a,"Generator"),It(l,n,function(){return this}),It(l,"toString",function(){return"[object Generator]"}),(Tt=function(){return{w:o,m:d}})()}function It(e,t,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}It=function(e,t,r,n){function o(t,r){It(e,t,function(e){return this._invoke(t,r,e)})}t?a?a(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(o("next",0),o("throw",1),o("return",2))},It(e,t,r,n)}function xt(e,t,r,n,a,o,i){try{var c=e[o](i),u=c.value}catch(e){return void r(e)}c.done?t(u):Promise.resolve(u).then(n,a)}function At(e){return function(){var t=this,r=arguments;return new Promise(function(n,a){var o=e.apply(t,r);function i(e){xt(o,n,a,i,c,"next",e)}function c(e){xt(o,n,a,i,c,"throw",e)}i(void 0)})}}window.TKHQ=ye,document.addEventListener("DOMContentLoaded",At(Tt().m(function e(){var t,r,n,a;return Tt().w(function(e){for(;;)switch(e.n){case 0:if(bt(jt),(t=ye.getSettings())&&ye.applySettings(t),window.parent!==window){e.n=2;break}return e.n=1,ye.initEmbeddedKey(window.location.origin);case 1:e.n=3;break;case 2:return e.n=3,ye.initEphemeralEmbeddedKey();case 3:return e.n=4,ye.getEmbeddedKey();case 4:return r=e.v,e.n=5,ye.p256JWKPrivateToPublic(r);case 5:n=e.v,a=ye.uint8arrayToHexString(n),document.getElementById("embedded-key").value=a,window.parent!==window&&ye.sendMessageUp("PUBLIC_KEY_READY",a);case 6:return e.a(2)}},e)})))},3846:e=>{"use strict";e.exports=crypto},7790:()=>{}},i={};function c(e){var t=i[e];if(void 0!==t)return t.exports;var r=i[e]={id:e,loaded:!1,exports:{}};return o[e].call(r.exports,r,r.exports,c),r.loaded=!0,r.exports}c.m=o,e=[],c.O=(t,r,n,a)=>{if(!r){var o=1/0;for(f=0;f=a)&&Object.keys(c.O).every(e=>c.O[e](r[u]))?r.splice(u--,1):(i=!1,a0&&e[f-1][2]>a;f--)e[f]=e[f-1];e[f]=[r,n,a]},c.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return c.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,c.t=function(e,n){if(1&n&&(e=this(e)),8&n)return e;if("object"==typeof e&&e){if(4&n&&e.__esModule)return e;if(16&n&&"function"==typeof e.then)return e}var a=Object.create(null);c.r(a);var o={};t=t||[null,r({}),r([]),r(r)];for(var i=2&n&&e;("object"==typeof i||"function"==typeof i)&&!~t.indexOf(i);i=r(i))Object.getOwnPropertyNames(i).forEach(t=>o[t]=()=>e[t]);return o.default=()=>e,c.d(a,o),a},c.d=(e,t)=>{for(var r in t)c.o(t,r)&&!c.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},c.f={},c.e=e=>Promise.all(Object.keys(c.f).reduce((t,r)=>(c.f[r](e,t),t),[])),c.u=e=>"bundle."+{291:"c9a8b8d5055f705bd308",825:"29203a225e88524b9cba"}[e]+".js",c.miniCssF=e=>{},c.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),c.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n={},a="export-and-sign:",c.l=(e,t,r,o)=>{if(n[e])n[e].push(t);else{var i,u;if(void 0!==r)for(var s=document.getElementsByTagName("script"),f=0;f{i.onerror=i.onload=null,clearTimeout(p);var a=n[e];if(delete n[e],i.parentNode&&i.parentNode.removeChild(i),a&&a.forEach(e=>e(r)),t)return t(r)},p=setTimeout(d.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=d.bind(null,i.onerror),i.onload=d.bind(null,i.onload),u&&document.head.appendChild(i)}},c.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),c.p="/",c.sriHashes={291:"sha384-NziyQFa0c+tM/folhGewwHGB+kndrJOhSqc+I6I58zjk3ee0ZF/F0HIPyk5cdxYN",825:"sha384-tka20zEdSvhDidwx3jpd3ODdJVt6y+tmsVdN//IcKAo80EdBzm93OpxaFjB9NQxL"},(()=>{var e={792:0};c.f.j=(t,r)=>{var n=c.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var a=new Promise((r,a)=>n=e[t]=[r,a]);r.push(n[2]=a);var o=c.p+c.u(t),i=new Error;c.l(o,r=>{if(c.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var a=r&&("load"===r.type?"missing":r.type),o=r&&r.target&&r.target.src;i.message="Loading chunk "+t+" failed.\n("+a+": "+o+")",i.name="ChunkLoadError",i.type=a,i.request=o,n[1](i)}},"chunk-"+t,t)}},c.O.j=t=>0===e[t];var t=(t,r)=>{var n,a,[o,i,u]=r,s=0;if(o.some(t=>0!==e[t])){for(n in i)c.o(i,n)&&(c.m[n]=i[n]);if(u)var f=u(c)}for(t&&t(r);sc(750));u=c.O(u)})(); +//# sourceMappingURL=bundle.0f0675af1311793b60fe.js.map \ No newline at end of file diff --git a/export-and-sign/dist/bundle.6a4c3b0995683838803c.js.LICENSE.txt b/export-and-sign/dist/bundle.0f0675af1311793b60fe.js.LICENSE.txt similarity index 100% rename from export-and-sign/dist/bundle.6a4c3b0995683838803c.js.LICENSE.txt rename to export-and-sign/dist/bundle.0f0675af1311793b60fe.js.LICENSE.txt diff --git a/export-and-sign/dist/bundle.0f0675af1311793b60fe.js.map b/export-and-sign/dist/bundle.0f0675af1311793b60fe.js.map new file mode 100644 index 00000000..42d2f02f --- /dev/null +++ b/export-and-sign/dist/bundle.0f0675af1311793b60fe.js.map @@ -0,0 +1 @@ +{"version":3,"file":"bundle.0f0675af1311793b60fe.js","mappings":";UAAIA,ECCAC,EADAC,ECAAC,EACAC,E,wvCCAJ,IAAAC,EAAAC,EAAAC,EAAA,mBAAAC,OAAAA,OAAA,GAAAC,EAAAF,EAAAG,UAAA,aAAAC,EAAAJ,EAAAK,aAAA,yBAAAC,EAAAN,EAAAE,EAAAE,EAAAE,GAAA,IAAAC,EAAAL,GAAAA,EAAAM,qBAAAC,EAAAP,EAAAO,EAAAC,EAAAC,OAAAC,OAAAL,EAAAC,WAAA,OAAAK,EAAAH,EAAA,mBAAAV,EAAAE,EAAAE,GAAA,IAAAE,EAAAC,EAAAG,EAAAI,EAAA,EAAAC,EAAAX,GAAA,GAAAY,GAAA,EAAAC,EAAA,CAAAF,EAAA,EAAAb,EAAA,EAAAgB,EAAApB,EAAAqB,EAAAC,EAAAN,EAAAM,EAAAC,KAAAvB,EAAA,GAAAsB,EAAA,SAAArB,EAAAC,GAAA,OAAAM,EAAAP,EAAAQ,EAAA,EAAAG,EAAAZ,EAAAmB,EAAAf,EAAAF,EAAAmB,CAAA,YAAAC,EAAApB,EAAAE,GAAA,IAAAK,EAAAP,EAAAU,EAAAR,EAAAH,EAAA,GAAAiB,GAAAF,IAAAV,GAAAL,EAAAgB,EAAAO,OAAAvB,IAAA,KAAAK,EAAAE,EAAAS,EAAAhB,GAAAqB,EAAAH,EAAAF,EAAAQ,EAAAjB,EAAA,GAAAN,EAAA,GAAAI,EAAAmB,IAAArB,KAAAQ,EAAAJ,GAAAC,EAAAD,EAAA,OAAAC,EAAA,MAAAD,EAAA,GAAAA,EAAA,GAAAR,GAAAQ,EAAA,IAAAc,KAAAhB,EAAAJ,EAAA,GAAAoB,EAAAd,EAAA,KAAAC,EAAA,EAAAU,EAAAC,EAAAhB,EAAAe,EAAAf,EAAAI,EAAA,IAAAc,EAAAG,IAAAnB,EAAAJ,EAAA,GAAAM,EAAA,GAAAJ,GAAAA,EAAAqB,KAAAjB,EAAA,GAAAN,EAAAM,EAAA,GAAAJ,EAAAe,EAAAf,EAAAqB,EAAAhB,EAAA,OAAAH,GAAAJ,EAAA,SAAAmB,EAAA,MAAAH,GAAA,EAAAd,CAAA,iBAAAE,EAAAW,EAAAQ,GAAA,GAAAT,EAAA,QAAAU,UAAA,oCAAAR,GAAA,IAAAD,GAAAK,EAAAL,EAAAQ,GAAAhB,EAAAQ,EAAAL,EAAAa,GAAAxB,EAAAQ,EAAA,EAAAT,EAAAY,KAAAM,GAAA,CAAAV,IAAAC,EAAAA,EAAA,GAAAA,EAAA,IAAAU,EAAAf,GAAA,GAAAkB,EAAAb,EAAAG,IAAAO,EAAAf,EAAAQ,EAAAO,EAAAC,EAAAR,GAAA,OAAAI,EAAA,EAAAR,EAAA,IAAAC,IAAAH,EAAA,QAAAL,EAAAO,EAAAF,GAAA,MAAAL,EAAAA,EAAA0B,KAAAnB,EAAAI,IAAA,MAAAc,UAAA,wCAAAzB,EAAA2B,KAAA,OAAA3B,EAAAW,EAAAX,EAAA4B,MAAApB,EAAA,IAAAA,EAAA,YAAAA,IAAAR,EAAAO,EAAA,SAAAP,EAAA0B,KAAAnB,GAAAC,EAAA,IAAAG,EAAAc,UAAA,oCAAApB,EAAA,YAAAG,EAAA,GAAAD,EAAAR,CAAA,UAAAC,GAAAiB,EAAAC,EAAAf,EAAA,GAAAQ,EAAAV,EAAAyB,KAAAvB,EAAAe,MAAAE,EAAA,YAAApB,GAAAO,EAAAR,EAAAS,EAAA,EAAAG,EAAAX,CAAA,SAAAe,EAAA,UAAAa,MAAA5B,EAAA2B,KAAAV,EAAA,GAAAhB,EAAAI,EAAAE,IAAA,GAAAI,CAAA,KAAAS,EAAA,YAAAV,IAAA,UAAAmB,IAAA,UAAAC,IAAA,CAAA9B,EAAAY,OAAAmB,eAAA,IAAAvB,EAAA,GAAAL,GAAAH,EAAAA,EAAA,GAAAG,QAAAW,EAAAd,EAAA,GAAAG,EAAA,yBAAAH,GAAAW,EAAAmB,EAAArB,UAAAC,EAAAD,UAAAG,OAAAC,OAAAL,GAAA,SAAAO,EAAAhB,GAAA,OAAAa,OAAAoB,eAAApB,OAAAoB,eAAAjC,EAAA+B,IAAA/B,EAAAkC,UAAAH,EAAAhB,EAAAf,EAAAM,EAAA,sBAAAN,EAAAU,UAAAG,OAAAC,OAAAF,GAAAZ,CAAA,QAAA8B,EAAApB,UAAAqB,EAAAhB,EAAAH,EAAA,cAAAmB,GAAAhB,EAAAgB,EAAA,cAAAD,GAAAA,EAAAK,YAAA,oBAAApB,EAAAgB,EAAAzB,EAAA,qBAAAS,EAAAH,GAAAG,EAAAH,EAAAN,EAAA,aAAAS,EAAAH,EAAAR,EAAA,yBAAAW,EAAAH,EAAA,oDAAAwB,EAAA,kBAAAC,EAAA7B,EAAA8B,EAAAtB,EAAA,cAAAD,EAAAf,EAAAE,EAAAE,EAAAH,GAAA,IAAAO,EAAAK,OAAA0B,eAAA,IAAA/B,EAAA,gBAAAR,GAAAQ,EAAA,EAAAO,EAAA,SAAAf,EAAAE,EAAAE,EAAAH,GAAA,SAAAK,EAAAJ,EAAAE,GAAAW,EAAAf,EAAAE,EAAA,SAAAF,GAAA,YAAAwC,QAAAtC,EAAAE,EAAAJ,EAAA,GAAAE,EAAAM,EAAAA,EAAAR,EAAAE,EAAA,CAAA2B,MAAAzB,EAAAqC,YAAAxC,EAAAyC,cAAAzC,EAAA0C,UAAA1C,IAAAD,EAAAE,GAAAE,GAAAE,EAAA,UAAAA,EAAA,WAAAA,EAAA,cAAAS,EAAAf,EAAAE,EAAAE,EAAAH,EAAA,UAAA2C,EAAA1C,GAAA,gBAAAA,GAAA,GAAA2C,MAAAC,QAAA5C,GAAA,OAAA6C,EAAA7C,EAAA,CAAA8C,CAAA9C,IAAA,SAAAA,GAAA,uBAAAC,QAAA,MAAAD,EAAAC,OAAAE,WAAA,MAAAH,EAAA,qBAAA2C,MAAAI,KAAA/C,EAAA,CAAAgD,CAAAhD,IAAAiD,EAAAjD,IAAA,qBAAAwB,UAAA,wIAAA0B,EAAA,UAAAD,EAAAjD,EAAAmB,GAAA,GAAAnB,EAAA,qBAAAA,EAAA,OAAA6C,EAAA7C,EAAAmB,GAAA,IAAApB,EAAA,GAAAoD,SAAA1B,KAAAzB,GAAAoD,MAAA,uBAAArD,GAAAC,EAAAqD,cAAAtD,EAAAC,EAAAqD,YAAAC,MAAA,QAAAvD,GAAA,QAAAA,EAAA4C,MAAAI,KAAA/C,GAAA,cAAAD,GAAA,2CAAAwD,KAAAxD,GAAA8C,EAAA7C,EAAAmB,QAAA,YAAA0B,EAAA7C,EAAAmB,IAAA,MAAAA,GAAAA,EAAAnB,EAAAsB,UAAAH,EAAAnB,EAAAsB,QAAA,QAAAxB,EAAA,EAAAI,EAAAyC,MAAAxB,GAAArB,EAAAqB,EAAArB,IAAAI,EAAAJ,GAAAE,EAAAF,GAAA,OAAAI,CAAA,UAAAsD,EAAAtD,EAAAH,EAAAD,EAAAE,EAAAI,EAAAe,EAAAZ,GAAA,QAAAD,EAAAJ,EAAAiB,GAAAZ,GAAAG,EAAAJ,EAAAqB,KAAA,OAAAzB,GAAA,YAAAJ,EAAAI,EAAA,CAAAI,EAAAoB,KAAA3B,EAAAW,GAAA+C,QAAAC,QAAAhD,GAAAiD,KAAA3D,EAAAI,EAAA,UAAAwD,EAAA1D,GAAA,sBAAAH,EAAA,KAAAD,EAAA+D,UAAA,WAAAJ,QAAA,SAAAzD,EAAAI,GAAA,IAAAe,EAAAjB,EAAA4D,MAAA/D,EAAAD,GAAA,SAAAiE,EAAA7D,GAAAsD,EAAArC,EAAAnB,EAAAI,EAAA2D,EAAAC,EAAA,OAAA9D,EAAA,UAAA8D,EAAA9D,GAAAsD,EAAArC,EAAAnB,EAAAI,EAAA2D,EAAAC,EAAA,QAAA9D,EAAA,CAAA6D,OAAA,M,QAOA,IACME,EAAmB,mBAIrBC,EAAgC,KAChCC,EAA0B,IAM9B,SAASC,IACP,MAIwB,oBAAfC,YACPA,WAAWC,QACXD,WAAWC,OAAOC,OAEXF,WAAWC,OAAOC,OAEL,oBAAXC,QAA0BA,OAAOF,QAAUE,OAAOF,OAAOC,OAC3DC,OAAOF,OAAOC,YAED,IAAXE,EAAAA,GAA0BA,EAAAA,EAAOH,QAAUG,EAAAA,EAAOH,OAAOC,OAC3DE,EAAAA,EAAOH,OAAOC,OAED,oBAAXD,QAA0BA,OAAOC,OACnCD,OAAOC,OAGT,IACT,CAYA,SAASG,IACP,YAAwCC,IAApCH,OAAOI,SAASC,gBAGXL,OAAOI,SAASC,gBAAgBvD,OAAS,EAEzCkD,OAAOM,SAAWN,OAAOO,GAEpC,CAsBA,SAAAC,IAFC,OAEDA,EAAApB,EAAA1B,IAAAE,EAjBA,SAAA6C,EAA6BC,GAAY,IAAAX,EAAA,OAAArC,IAAAC,EAAA,SAAAgD,GAAA,cAAAA,EAAAjF,GAAA,OACP,GAA1BqE,EAASH,IACF,CAAFe,EAAAjF,EAAA,cACH,IAAIkF,MAAM,uCAAsC,cAAAD,EAAAjF,EAAA,EAE3CqE,EAAOc,UAClB,MACAH,EACA,CACE5B,KAAM,QACNgC,WAAY,UAEd,EACA,CAAC,WACF,cAAAH,EAAAhE,EAAA,EAAAgE,EAAAjE,GAAA,EAAA+D,EAAA,KACFnB,MAAA,KAAAD,UAAA,CA8BD,SAAS0B,EAAkBC,GACzB,GAA0B,iBAAfA,GAAiD,IAAtBA,EAAWlE,OAC/C,MAAM,IAAI8D,MAAM,mDAEpB,CAmBA,SAAAK,IAFC,OAEDA,EAAA7B,EAAA1B,IAAAE,EAbA,SAAAsD,EAA+BF,GAAU,OAAAtD,IAAAC,EAAA,SAAAwD,GAAA,cAAAA,EAAAzF,GAAA,OACT,GAA9BqF,EAAkBC,IACdd,IAAmB,CAAFiB,EAAAzF,EAAA,cACb,IAAIkF,MAAM,kBAAiB,cAAAO,EAAAzF,EAAA,EAER0F,EAAeJ,GAAW,OAAnC,GACG,OADHG,EAAAzE,EACO,CAAAyE,EAAAzF,EAAA,eAAAyF,EAAAzF,EAAA,EACC2F,IAAmB,OAC3CC,EADeH,EAAAzE,EACWsE,GAAY,cAAAG,EAAAxE,EAAA,KAAAuE,EAAA,KAGzC5B,MAAA,KAAAD,UAAA,UAKcgC,IAAiB,OAAAE,EAAAjC,MAAC,KAADD,UAAA,CAiBhC,SAAAkC,IAFC,OAEDA,EAAAnC,EAAA1B,IAAAE,EAjBA,SAAA4D,IAAA,IAAAzB,EAAA0B,EAAA,OAAA/D,IAAAC,EAAA,SAAA+D,GAAA,cAAAA,EAAAhG,GAAA,OACkC,GAA1BqE,EAASH,IACF,CAAF8B,EAAAhG,EAAA,cACH,IAAIkF,MAAM,uCAAsC,cAAAc,EAAAhG,EAAA,EAElCqE,EAAO4B,YAC3B,CACE7C,KAAM,OACNgC,WAAY,UAEd,EACA,CAAC,eACF,OAPY,OAAPW,EAAOC,EAAAhF,EAAAgF,EAAAhG,EAAG,EASHqE,EAAO6B,UAAU,MAAOH,EAAQI,YAAW,cAAAH,EAAA/E,EAAA,EAAA+E,EAAAhF,GAAA,EAAA8E,EAAA,KACzDlC,MAAA,KAAAD,UAAA,CAMD,SAAS+B,EAAeJ,GACtBD,EAAkBC,GAClB,IAAMc,EAASC,EAAkBf,GACjC,OAAOc,EAASE,KAAKC,MAAMH,GAAU,IACvC,CAOA,SAASR,EAAeY,EAAWlB,GACjCD,EAAkBC,GAClBmB,EACEnB,EACAgB,KAAKI,UAAUF,GAnKwB,OAsK3C,CAuFA,SAASC,EAAkBE,EAAKlF,EAAOmF,GACrC,IACMC,EAAO,CACXpF,MAAOA,EACPqF,QAHU,IAAIC,MAGFC,UAAYJ,GAE1BtC,OAAO2C,aAAaC,QAAQP,EAAKL,KAAKI,UAAUG,GAClD,CAQA,SAASR,EAAkBM,GACzB,IAAMQ,EAAU7C,OAAO2C,aAAaG,QAAQT,GAC5C,IAAKQ,EACH,OAAO,KAET,IAAMN,EAAOP,KAAKC,MAAMY,GACxB,OACG1G,OAAOH,UAAU+G,eAAe9F,KAAKsF,EAAM,WAC3CpG,OAAOH,UAAU+G,eAAe9F,KAAKsF,EAAM,UAKlC,IAAIE,MACRC,UAAYH,EAAKC,QACvBxC,OAAO2C,aAAaK,WAAWX,GACxB,MAEFE,EAAKpF,OARV6C,OAAO2C,aAAaK,WAAWX,GACxB,KAQX,CAOA,SAASY,EAAwBC,GAC/B,IAAKA,GAAkC,iBAAdA,EACvB,MAAM,IAAItC,MAAM,oDAIlB,IAAMuC,EACJD,EAAUE,WAAW,OAASF,EAAUE,WAAW,MAC/CF,EAAUtE,MAAM,GAChBsE,EAGN,GAAIC,EAAiBrG,OAAS,GAAK,IADpB,iBACmCiC,KAAKoE,GACrD,MAAM,IAAIvC,MAAM,oDAElB,OAAO,IAAIyC,WACTF,EAAiBG,MAAM,OAAOC,IAAI,SAACC,GAAC,OAAKC,SAASD,EAAG,GAAG,GAE5D,CAOA,SAASE,EAAsBC,GAC7B,OAAOzF,EAAIyF,GAAQJ,IAAI,SAACK,GAAC,OAAKA,EAAEjF,SAAS,IAAIkF,SAAS,EAAG,IAAI,GAAEC,KAAK,GACtE,CAqCA,SAASC,EAAyBC,EAAcC,GAC9C,IAAMC,EAAI/F,MAAMI,KAAK,IAAI8E,WAAWW,IAC9BxI,EAAI2C,MAAMI,KAAK,IAAI8E,WAAWY,IACpC,OAAO,IAAIZ,WAAW,GAADc,OAAKD,EAAM1I,GAClC,CA6IA,SAAS4I,EAAWC,GAClB,IAAMC,EAAaC,SAASC,eAAe,eAC3C,GAAIF,EAAY,CACd,IAAMG,EAAUF,SAASG,cAAc,KACvCD,EAAQE,UAAYN,EACpBC,EAAWM,YAAYH,EACzB,CACF,CAEA,SAKeI,EAAsBC,GAAA,OAAAC,EAAAzF,MAAC,KAADD,UAAA,CAsBrC,SAAA0F,IAFC,OAEDA,EAAA3F,EAAA1B,IAAAE,EAtBA,SAAAoH,EAAsCC,GAAU,IAAAlF,EAAAmF,EAAAC,EAAAxB,EAAA,OAAAjG,IAAAC,EAAA,SAAAyH,GAAA,cAAAA,EAAA1J,GAAA,OACd,GAA1BqE,EAASH,IACF,CAAFwF,EAAA1J,EAAA,cACH,IAAIkF,MAAM,uCAAsC,OAMpB,cAH9BsE,EAAcG,EAAA,GAAQJ,IAENrI,EACtBsI,EAAeI,QAAU,CAAC,UAAUF,EAAA1J,EAAA,EAEZqE,EAAOc,UAC7B,MACAqE,EACA,CAAEpG,KAAM,QAASgC,WAAY,UAC7B,EACA,CAAC,WACF,OANc,OAATqE,EAASC,EAAA1I,EAAA0I,EAAA1J,EAAG,EAOGqE,EAAO6B,UAAU,MAAOuD,GAAU,OAA3C,OAANxB,EAAMyB,EAAA1I,EAAA0I,EAAAzI,EAAA,EACL,IAAI0G,WAAWM,IAAO,EAAAqB,EAAA,KAC9B1F,MAAA,KAAAD,UAAA,CAOD,SAASkG,EAAaC,GAKpB,IAHA,IACIC,EAAS,GACTC,EAAS,CAAC,GACL5J,EAAI,EAAGA,EAAI0J,EAAM1I,OAAQhB,IAAK,CAErC,IADA,IAAI6J,EAAQH,EAAM1J,GACT8J,EAAI,EAAGA,EAAIF,EAAO5I,SAAU8I,EACnCD,GAASD,EAAOE,IAAM,EACtBF,EAAOE,GAAKD,EAAQ,GACpBA,EAASA,EAAQ,GAAM,EAGzB,KAAOA,EAAQ,GACbD,EAAOG,KAAKF,EAAQ,IACpBA,EAASA,EAAQ,GAAM,CAE3B,CAEA,IAAK,IAAIG,EAAI,EAAGA,EAAIJ,EAAO5I,OAAQgJ,IACjCL,EAlBe,6DAkBGC,EAAOI,IAAML,EAIjC,IAAK,IAAI3J,EAAI,EAAgB,IAAb0J,EAAM1J,IAAYA,EAAI0J,EAAM1I,OAAS,EAAGhB,IACtD2J,EAAS,IAAMA,EAEjB,OAAOA,CACT,CAQA,SAASM,EAAa7B,GAKpB,IAHA,IAAI8B,EAAW,6DACXC,EAAe,GACfC,EAAe,GACVpK,EAAI,EAAGA,EAAIoI,EAAEpH,OAAQhB,IAAK,CACjC,IAAgC,IAA5BkK,EAASG,QAAQjC,EAAEpI,IACrB,MAAM,IAAI8E,MAAM,yBAADuD,OAA0BD,EAAEpI,GAAE,6BAE/C,IAAI6J,EAAQK,EAASG,QAAQjC,EAAEpI,IAKlB,GAAT6J,GAAc7J,IAAMoK,EAAapJ,QACnCoJ,EAAaL,KAAK,GAIpB,IADA,IAAID,EAAI,EACDA,EAAIK,EAAanJ,QAAU6I,EAAQ,GAAG,CAC3C,IAAIS,EAAcH,EAAaL,GAW/BD,GANES,OADkBjG,IAAhBiG,EACYT,EAEc,GAAdS,EAAmBT,IAIZ,EAEvBM,EAAaL,GAAKQ,EAAc,IAChCR,GACF,CACF,CAEA,IAAIH,EAASS,EAAa/B,OAAO8B,EAAaI,WAC9C,OAAO,IAAIhD,WAAWoC,EACxB,CA0MA,SAAAa,IAHC,OAGDA,EAAAlH,EAAA1B,IAAAE,EAnCA,SAAA2I,EAAyBC,EAAiBC,EAAWC,GAAc,IAAAC,EAAAC,EAAA,OAAAlJ,IAAAC,EAAA,SAAAkJ,GAAA,cAAAA,EAAAnL,GAAA,OAAAkL,EACzDH,EAASI,EAAAnL,EACV,WADUkL,EACF,EAoBR,gBApBQA,EAoBK,oBAnBXF,EAAgB,CAAFG,EAAAnL,EAAA,cACX,IAAIkF,MAAM,sDAAqD,UAExC,KAA3B4F,EAAgB1J,OAAa,CAAA+J,EAAAnL,EAAA,cACzB,IAAIkF,MAAM,sDAADuD,OACyCqC,EAAgB1J,OAAM,MAC7E,UAE2B,KAA1B4J,EAAe5J,OAAa,CAAA+J,EAAAnL,EAAA,cACxB,IAAIkF,MAAM,qDAADuD,OACwCuC,EAAe5J,OAAM,MAC3E,OAKyC,OAFpC6J,EAAoB,IAAItD,WAAW,KACvByD,IAAIN,EAAiB,GACvCG,EAAkBG,IAAIJ,EAAgB,IAAIG,EAAAlK,EAAA,EACnC4I,EAAaoB,IAAkB,cAAAE,EAAAlK,EAAA,EAGjC,KAAO+G,EAAsB8C,IAAgB,OAMlD,OAFFO,QAAQC,KAAK,uBAAD7C,OACasC,EAAS,iCAChCI,EAAAlK,EAAA,EACK,KAAO+G,EAAsB8C,IAAgB,cAAAK,EAAAlK,EAAA,KAAA4J,EAAA,KAEzDjH,MAAA,KAAAD,UAAA,C,aC7zBD,IAAA/D,EAAAC,EAAAC,EAAA,mBAAAC,OAAAA,OAAA,GAAAC,EAAAF,EAAAG,UAAA,aAAAC,EAAAJ,EAAAK,aAAA,yBAAAC,EAAAN,EAAAE,EAAAE,EAAAE,GAAA,IAAAC,EAAAL,GAAAA,EAAAM,qBAAAC,EAAAP,EAAAO,EAAAC,EAAAC,OAAAC,OAAAL,EAAAC,WAAA,OAAAK,EAAAH,EAAA,mBAAAV,EAAAE,EAAAE,GAAA,IAAAE,EAAAC,EAAAG,EAAAI,EAAA,EAAAC,EAAAX,GAAA,GAAAY,GAAA,EAAAC,EAAA,CAAAF,EAAA,EAAAb,EAAA,EAAAgB,EAAApB,EAAAqB,EAAAC,EAAAN,EAAAM,EAAAC,KAAAvB,EAAA,GAAAsB,EAAA,SAAArB,EAAAC,GAAA,OAAAM,EAAAP,EAAAQ,EAAA,EAAAG,EAAAZ,EAAAmB,EAAAf,EAAAF,EAAAmB,CAAA,YAAAC,EAAApB,EAAAE,GAAA,IAAAK,EAAAP,EAAAU,EAAAR,EAAAH,EAAA,GAAAiB,GAAAF,IAAAV,GAAAL,EAAAgB,EAAAO,OAAAvB,IAAA,KAAAK,EAAAE,EAAAS,EAAAhB,GAAAqB,EAAAH,EAAAF,EAAAQ,EAAAjB,EAAA,GAAAN,EAAA,GAAAI,EAAAmB,IAAArB,KAAAQ,EAAAJ,GAAAC,EAAAD,EAAA,OAAAC,EAAA,MAAAD,EAAA,GAAAA,EAAA,GAAAR,GAAAQ,EAAA,IAAAc,KAAAhB,EAAAJ,EAAA,GAAAoB,EAAAd,EAAA,KAAAC,EAAA,EAAAU,EAAAC,EAAAhB,EAAAe,EAAAf,EAAAI,EAAA,IAAAc,EAAAG,IAAAnB,EAAAJ,EAAA,GAAAM,EAAA,GAAAJ,GAAAA,EAAAqB,KAAAjB,EAAA,GAAAN,EAAAM,EAAA,GAAAJ,EAAAe,EAAAf,EAAAqB,EAAAhB,EAAA,OAAAH,GAAAJ,EAAA,SAAAmB,EAAA,MAAAH,GAAA,EAAAd,CAAA,iBAAAE,EAAAW,EAAAQ,GAAA,GAAAT,EAAA,QAAAU,UAAA,oCAAAR,GAAA,IAAAD,GAAAK,EAAAL,EAAAQ,GAAAhB,EAAAQ,EAAAL,EAAAa,GAAAxB,EAAAQ,EAAA,EAAAT,EAAAY,KAAAM,GAAA,CAAAV,IAAAC,EAAAA,EAAA,GAAAA,EAAA,IAAAU,EAAAf,GAAA,GAAAkB,EAAAb,EAAAG,IAAAO,EAAAf,EAAAQ,EAAAO,EAAAC,EAAAR,GAAA,OAAAI,EAAA,EAAAR,EAAA,IAAAC,IAAAH,EAAA,QAAAL,EAAAO,EAAAF,GAAA,MAAAL,EAAAA,EAAA0B,KAAAnB,EAAAI,IAAA,MAAAc,UAAA,wCAAAzB,EAAA2B,KAAA,OAAA3B,EAAAW,EAAAX,EAAA4B,MAAApB,EAAA,IAAAA,EAAA,YAAAA,IAAAR,EAAAO,EAAA,SAAAP,EAAA0B,KAAAnB,GAAAC,EAAA,IAAAG,EAAAc,UAAA,oCAAApB,EAAA,YAAAG,EAAA,GAAAD,EAAAR,CAAA,UAAAC,GAAAiB,EAAAC,EAAAf,EAAA,GAAAQ,EAAAV,EAAAyB,KAAAvB,EAAAe,MAAAE,EAAA,YAAApB,GAAAO,EAAAR,EAAAS,EAAA,EAAAG,EAAAX,CAAA,SAAAe,EAAA,UAAAa,MAAA5B,EAAA2B,KAAAV,EAAA,GAAAhB,EAAAI,EAAAE,IAAA,GAAAI,CAAA,KAAAS,EAAA,YAAAV,IAAA,UAAAmB,IAAA,UAAAC,IAAA,CAAA9B,EAAAY,OAAAmB,eAAA,IAAAvB,EAAA,GAAAL,GAAAH,EAAAA,EAAA,GAAAG,QAAAW,EAAAd,EAAA,GAAAG,EAAA,yBAAAH,GAAAW,EAAAmB,EAAArB,UAAAC,EAAAD,UAAAG,OAAAC,OAAAL,GAAA,SAAAO,EAAAhB,GAAA,OAAAa,OAAAoB,eAAApB,OAAAoB,eAAAjC,EAAA+B,IAAA/B,EAAAkC,UAAAH,EAAAhB,EAAAf,EAAAM,EAAA,sBAAAN,EAAAU,UAAAG,OAAAC,OAAAF,GAAAZ,CAAA,QAAA8B,EAAApB,UAAAqB,EAAAhB,EAAAH,EAAA,cAAAmB,GAAAhB,EAAAgB,EAAA,cAAAD,GAAAA,EAAAK,YAAA,oBAAApB,EAAAgB,EAAAzB,EAAA,qBAAAS,EAAAH,GAAAG,EAAAH,EAAAN,EAAA,aAAAS,EAAAH,EAAAR,EAAA,yBAAAW,EAAAH,EAAA,oDAAAwB,EAAA,kBAAAC,EAAA7B,EAAA8B,EAAAtB,EAAA,cAAAD,EAAAf,EAAAE,EAAAE,EAAAH,GAAA,IAAAO,EAAAK,OAAA0B,eAAA,IAAA/B,EAAA,gBAAAR,GAAAQ,EAAA,EAAAO,EAAA,SAAAf,EAAAE,EAAAE,EAAAH,GAAA,SAAAK,EAAAJ,EAAAE,GAAAW,EAAAf,EAAAE,EAAA,SAAAF,GAAA,YAAAwC,QAAAtC,EAAAE,EAAAJ,EAAA,GAAAE,EAAAM,EAAAA,EAAAR,EAAAE,EAAA,CAAA2B,MAAAzB,EAAAqC,YAAAxC,EAAAyC,cAAAzC,EAAA0C,UAAA1C,IAAAD,EAAAE,GAAAE,GAAAE,EAAA,UAAAA,EAAA,WAAAA,EAAA,cAAAS,EAAAf,EAAAE,EAAAE,EAAAH,EAAA,UAAA8C,EAAA7C,EAAAmB,IAAA,MAAAA,GAAAA,EAAAnB,EAAAsB,UAAAH,EAAAnB,EAAAsB,QAAA,QAAAxB,EAAA,EAAAI,EAAAyC,MAAAxB,GAAArB,EAAAqB,EAAArB,IAAAI,EAAAJ,GAAAE,EAAAF,GAAA,OAAAI,CAAA,UAAAsD,EAAAtD,EAAAH,EAAAD,EAAAE,EAAAI,EAAAe,EAAAZ,GAAA,QAAAD,EAAAJ,EAAAiB,GAAAZ,GAAAG,EAAAJ,EAAAqB,KAAA,OAAAzB,GAAA,YAAAJ,EAAAI,EAAA,CAAAI,EAAAoB,KAAA3B,EAAAW,GAAA+C,QAAAC,QAAAhD,GAAAiD,KAAA3D,EAAAI,EAAA,UAAAwD,EAAA1D,GAAA,sBAAAH,EAAA,KAAAD,EAAA+D,UAAA,WAAAJ,QAAA,SAAAzD,EAAAI,GAAA,IAAAe,EAAAjB,EAAA4D,MAAA/D,EAAAD,GAAA,SAAAiE,EAAA7D,GAAAsD,EAAArC,EAAAnB,EAAAI,EAAA2D,EAAAC,EAAA,OAAA9D,EAAA,UAAA8D,EAAA9D,GAAAsD,EAAArC,EAAAnB,EAAAI,EAAA2D,EAAAC,EAAA,QAAA9D,EAAA,CAAA6D,OAAA,MAIA,IACmB0H,EDgHnB,SAI8BC,GAAA,OAAAjG,EAAA3B,MAAC,KAADD,UAAA,ECnH5BgC,EAwBE8F,EAvBFhF,EAuBEgF,EAtBFpF,EAsBEoF,EArBcC,EAqBdD,EApBcE,EAoBdF,EAlBFtC,EAkBEsC,EAjBF5B,EAiBE4B,EAhBFpB,EAgBEoB,EAbF/C,GAaE+C,EAZFlE,GAYEkE,EAXFzD,GAWEyD,EARFG,GD0TF,SAA0BC,EAAWC,GACnC,IAAMC,EAAgBD,EAAeD,EAAUzK,OAG/C,GAAI2K,EAAgB,EAAG,CACrB,IAAMC,EAAU,IAAIrE,WAAWoE,GAAeE,KAAK,GACnD,OAAO,IAAItE,WAAW,GAADc,OAAAjG,EAAKwJ,GAAOxJ,EAAKqJ,IACxC,CAGA,GAAIE,EAAgB,EAAG,CAGrB,IAFA,IAAMG,GAAqC,EAAjBH,EACtBI,EAAY,EACP/L,EAAI,EAAGA,EAAI8L,GAAqB9L,EAAIyL,EAAUzK,OAAQhB,IACxC,IAAjByL,EAAUzL,IACZ+L,IAIJ,GAAIA,IAAcD,EAChB,MAAM,IAAIhH,MAAM,iEAADuD,OACoDyD,EAAiB,aAAAzD,OAAY0D,EAAS,MAG3G,OAAON,EAAU3I,MAAMgJ,EAAmBA,EAAoBJ,EAChE,CACA,OAAOD,CACT,ECpVExD,GAOEoD,EAHFW,GD00BF,SAAwBC,EAAQC,GAC9B,IAAMC,EAAc,CAAC,EAEfC,EAAqB,CACzBR,QAAS,+BACTS,OAAQ,+BACRC,YAAa,6BACbC,YACE,gEACFC,YACE,iLACFC,aAAc,+BACdC,SAAU,6DACVC,WAAY,wCACZC,WAAY,aACZC,MACE,iLACFC,WACE,iLACFC,gBACE,iLACFC,MAAO,kEACPC,OAAQ,kEACRC,SAAU,kEACVC,UACE,kEACFC,WACE,8EACFC,UACE,8HACFC,UAAW,gDACXC,aAAc,iCACdC,SAAU,wBACVC,OAAQ,kDA4BV,OAzBApN,OAAOqN,QAAQzB,GAAQ0B,QAAQ,SAAAC,GAAuB,IAz4BxDlO,EAAAF,EAy4BwDqO,GAz4BxDrO,EAy4BwD,EAz4BxD,SAAAE,GAAA,GAAA2C,MAAAC,QAAA5C,GAAA,OAAAA,CAAA,CAAAoO,CAAApO,EAy4BwDkO,IAz4BxD,SAAAlO,EAAAuB,GAAA,IAAAxB,EAAA,MAAAC,EAAA,yBAAAC,QAAAD,EAAAC,OAAAE,WAAAH,EAAA,uBAAAD,EAAA,KAAAD,EAAAI,EAAAI,EAAAI,EAAAS,EAAA,GAAAL,GAAA,EAAAV,GAAA,SAAAE,GAAAP,EAAAA,EAAA0B,KAAAzB,IAAAqO,KAAA,IAAA9M,EAAA,IAAAZ,OAAAZ,KAAAA,EAAA,OAAAe,GAAA,cAAAA,GAAAhB,EAAAQ,EAAAmB,KAAA1B,IAAA2B,QAAAP,EAAAkJ,KAAAvK,EAAA6B,OAAAR,EAAAG,SAAAC,GAAAT,GAAA,UAAAd,GAAAI,GAAA,EAAAF,EAAAF,CAAA,iBAAAc,GAAA,MAAAf,EAAA,SAAAW,EAAAX,EAAA,SAAAY,OAAAD,KAAAA,GAAA,kBAAAN,EAAA,MAAAF,CAAA,SAAAiB,CAAA,EAAAmN,CAAAtO,EAAAF,IAAAmD,EAAAjD,EAAAF,IAAA,qBAAA0B,UAAA,6IAAA+M,IAy4BmCC,EAAQL,EAAA,GAAExM,EAAKwM,EAAA,GACxCM,EAAgBD,EAASE,OAC/B,GAA6B,IAAzBD,EAAcnN,OAChB,MAAM,IAAI8D,MAAM,sCAElB,IAAMuJ,EAAgBjC,EAAmB+B,GACzC,IAAKE,EACH,MAAM,IAAIvJ,MAAM,+CAADuD,OACkC8F,EAAa,MAGhE,IAAMG,EAAa,IAAIC,OAAOF,GACxBG,EAAanN,EAAM+M,OACzB,GAAyB,GAArBI,EAAWxN,OACb,MAAM,IAAI8D,MAAM,kBAADuD,OAAmB8F,EAAa,eAGjD,IADqBG,EAAWrL,KAAKuL,GAEnC,MAAM,IAAI1J,MAAM,yCAADuD,OAC4B8F,EAAa,MAG1DhC,EAAYgC,GAAiBK,CAC/B,GAEOrC,CACT,ECv4BE/H,GAEEiH,EADFoD,GDkCF,SAG4BC,GAAA,OAAAhK,EAAAlB,MAAC,KAADD,UAAA,ECnBtBoL,GAAoB,IAAIC,QAE9B,SAASC,GAAqBC,GAC5B,GAC0B,iBAAjBA,GACiB,IAAxBA,EAAa9N,QACI,SAAjB8N,EAEA,MAAM,IAAIhK,MAAM,0CAGlB,IAAMiK,EAAe,IAAIC,IAAIF,GAAcG,OAC3C,GAAIF,IAAiBD,EACnB,MAAM,IAAIhK,MAAM,0BAADuD,OAA2ByG,IAG5C,OAAOC,CACT,CAIA,SAASG,KACPhL,OAAO2C,aAAaK,WArCM,wBAsC1BhD,OAAO2C,aAAaK,WArCa,8BAsCnC,CA8CA,SAAA/B,KAFC,OAEDA,GAAA7B,EAAA1B,IAAAE,EAtCA,SAAA6C,EAA+BmK,GAAY,IAAAK,EAAAC,EAAAlK,EAAAmK,EAAA,OAAAzN,IAAAC,EAAA,SAAAgD,GAAA,cAAAA,EAAAjF,GAAA,WACrCwE,KAAmB,CAAFS,EAAAjF,EAAA,cACb,IAAIkF,MAAM,kBAAiB,OAGgB,GAD7CqK,EAAkBN,GAAqBC,GAGnB,gBAAxBM,OAFIA,EAAgBT,GAAkBW,IAAIpL,cAE7B,EAAbkL,EAAeG,OACfH,EAAcH,SAAWE,EAAe,CAAAtK,EAAAjF,EAAA,cAElC,IAAIkF,MAAM,qCAADuD,OACwB+G,EAAcH,OAAM,eAAA5G,OAAc8G,IACxE,OAsBkC,OApBrCD,KACMhK,EAAa,GAAHmD,OA5DwB,0BA4De,KAAAA,OAAImH,mBACzDL,KAEIE,EAAQ,CAAEE,KAAM,aAAcN,OAAQE,EAAiBjK,WAAAA,IAMvDuK,MAAQtE,EAAsBjG,GAAW,MAAO,SAACwK,GAQrD,MAPIf,GAAkBW,IAAIpL,UAAYmL,IAChCD,EACFT,GAAkB3D,IAAI9G,OAAQkL,GAE9BT,GAAiB,OAAQzK,SAGvBwL,CACR,GACAf,GAAkB3D,IAAI9G,OAAQmL,GAAOxK,EAAAjF,EAAA,EACxByP,EAAMI,MAAK,cAAA5K,EAAAhE,EAAA,EAAAgE,EAAAjE,GAAA,EAAA+D,EAAA,KACzBnB,MAAA,KAAAD,UAAA,CAQsC,SAAAoM,KA6BtC,OA7BsCA,GAAArM,EAAA1B,IAAAE,EAAvC,SAAA8N,IAAA,IAAAC,EAAAR,EAAAS,EAAAC,EAAA,OAAAnO,IAAAC,EAAA,SAAAmO,GAAA,cAAAA,EAAAvP,EAAAuP,EAAApQ,GAAA,WACMwE,KAAmB,CAAF4L,EAAApQ,EAAA,cACb,IAAIkF,MAAM,kBAAiB,OAEQ,GACvB,gBAAhBuK,OADEA,EAAQV,GAAkBW,IAAIpL,cAC3B,EAALmL,EAAOE,MAAqB,CAAAS,EAAApQ,EAAA,eAAAoQ,EAAApQ,EAAA,EAEjByP,EAAMI,MAAK,cAAAO,EAAAnP,EAAA,EAAAmP,EAAApP,GAAA,UAEtByO,UAAAA,EAAO9I,IAAG,CAAAyJ,EAAApQ,EAAA,eAAAoQ,EAAAnP,EAAA,UAGW,OAAzBqO,KAAyBc,EAAApQ,EAAA,EACE2F,IAAmB,OAKG,GAL3CuK,EAAYE,EAAApP,EAMQ,gBAAtBmP,OADEA,EAAcpB,GAAkBW,IAAIpL,cAC3B,EAAX6L,EAAaR,MAAqB,CAAAS,EAAApQ,EAAA,eAAAoQ,EAAAvP,EAAA,EAAAuP,EAAApQ,EAAA,EAErBmQ,EAAYN,MAAK,cAAAO,EAAAnP,EAAA,EAAAmP,EAAApP,GAAA,OAAAoP,EAAAvP,EAAA,EAAAuP,EAAApP,EAAA,OAKU,gBAAX,QAA7BiP,EAAAlB,GAAkBW,IAAIpL,eAAO,IAAA2L,OAAA,EAA7BA,EAA+BN,OACjCZ,GAAkB3D,IAAI9G,OAAQ,CAAEqL,KAAM,YAAahJ,IAAKuJ,IACzD,eAAAE,EAAAnP,EAAA,KAAA+O,EAAA,kBACFpM,MAAA,KAAAD,UAAA,CAyGD,SAAA0M,KAFC,OAEDA,GAAA3M,EAAA1B,IAAAE,EA/DA,SAAAsD,EACE8K,EACAC,EACAC,GAAU,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAhP,IAAAC,EAAA,SAAAwD,GAAA,cAAAA,EAAAzF,GAAA,OA2B6B,GAxBjCyQ,EAA2B,CAC/BQ,KAAM,qIACNC,QACE,sIAIAR,EAAc,KACM,oBAAb7H,WACH8H,EAAO9H,SAASsI,cACpB,6CAIAR,EAAKhI,SACY,mCAAjBgI,EAAKhI,UAEL+H,EAAcC,EAAKhI,SAGlB+H,GAAiC,oBAAXpM,SACzBoM,EAAcpM,OAAO8M,qCAK0B3M,KAH3CmM,EACJH,EAAyBC,IAE+B,CAAAjL,EAAAzF,EAAA,cAClD,IAAIkF,MAAM,8EAEf,UAGCoL,IAAwBM,EAAwC,CAAAnL,EAAAzF,EAAA,cAC5D,IAAIkF,MAAM,2EAADuD,OAC8DmI,EAAwC,cAAAnI,OAAa6H,EAAmB,MACpJ,OAKF,OAFKO,EAA4B,IAAIlJ,WACpCJ,GAAwBqJ,IACzBnL,EAAAzF,EAAA,EACuB6O,GAAcgC,GAA0B,OAAjD,GAATC,EAASrL,EAAAzE,EACC,CAAFyE,EAAAzF,EAAA,cACN,IAAIkF,MAAM,6BAA4B,OAKW,OADnD6L,GAAqBM,EAAAA,EAAAA,IAAiBd,GACtCS,EAAgBzJ,GAAwBiJ,GAAW/K,EAAAzF,EAAA,EAC5CoE,OAAOC,OAAOiN,OACzB,CAAElO,KAAM,QAASmO,KAAM,WACvBT,EACAC,EACAC,GACD,cAAAvL,EAAAxE,EAAA,EAAAwE,EAAAzE,GAAA,EAAAwE,EAAA,KACF5B,MAAA,KAAAD,UAAA,CA2CM,IAAM6N,GAAO,CAClBC,gBAlOF,SAM8B3C,GAAA,OAAAvJ,GAAA3B,MAAC,KAADD,UAAA,EA6N5B+N,yBAzLD,WAQsC,OAAA3B,GAAAnM,MAAC,KAADD,UAAA,EAkLrCgC,kBAAAA,EACAc,kBAAAA,EACAJ,kBAAAA,EACAX,eAtJF,WACE,IAAM+J,EAAQV,GAAkBW,IAAIpL,QACpC,OAAKmL,EAGiB,eAAfA,EAAME,KACTjE,EAAqB+D,EAAMnK,YAC3BmK,EAAM9I,IAJD,IAKX,EA+IEf,eA7IF,SAAwBY,GACtB,IAAMiJ,EAAQV,GAAkBW,IAAIpL,QACpC,IAAKmL,EACH,MAAM,IAAIvK,MAAM,yCAEC,eAAfuK,EAAME,KACRhE,EAAqBnF,EAAWiJ,EAAMnK,YAEtCmK,EAAM9I,IAAMH,CAEhB,EAoIEmL,mBAlIF,WACE,IDwB0BrM,ECxBpBmK,EAAQV,GAAkBW,IAAIpL,QACpC,IAAKmL,EACH,MAAM,IAAIvK,MAAM,yCAEC,eAAfuK,EAAME,MDqBVtK,EAD0BC,ECnBCmK,EAAMnK,YDqBjChB,OAAO2C,aAAaK,WAAWhC,ICnB7BmK,EAAM9I,IAAM,IAEhB,EAyHEwC,uBAAAA,EACAU,aAAAA,EACAQ,aAAAA,EACAuH,UD8dD,SASuBC,EAAAC,EAAAC,GAAA,OAAAnH,EAAAhH,MAAC,KAADD,UAAA,ECtetBqO,cDoLF,SAAuBC,EAAMxQ,EAAOyQ,GAClC,IAAMnJ,EAAU,CACdkJ,KAAMA,EACNxQ,MAAOA,GAILyQ,IACFnJ,EAAQmJ,UAAYA,GAGlBlO,EACFA,EAA8BmO,YAAYpJ,GACjCzE,OAAOM,SAAWN,QAC3BA,OAAOM,OAAOuN,YAAYpJ,EAAS9E,GAErCyE,EAAW,mBAADD,OAAoBwJ,EAAI,MAAAxJ,OAAKhH,GACzC,ECpMEiH,WAAAA,GACAnB,wBAAAA,GACAS,sBAAAA,GACAoK,iCDtGF,SAA0CC,GACxCrO,EAAgCqO,CAClC,ECqGEC,qBD7FF,SAA8BjD,GAC5B,GAAsB,iBAAXA,GAAyC,IAAlBA,EAAOjO,OACvC,MAAM,IAAI8D,MAAM,2DAGlB,IAAIiK,EACJ,IACEA,EAAe,IAAIC,IAAIC,GAAQA,MACjC,CAAE,MAAAkD,GACA,MAAM,IAAIrN,MAAM,0DAClB,CAEA,GAAqB,SAAjBiK,GAA2BA,IAAiBE,EAC9C,MAAM,IAAInK,MAAM,2DAElBjB,EAA0BkL,CAC5B,EC8EEvD,iBAAAA,GACAyF,iBAAAA,EAAAA,GACAhJ,yBAAAA,GACAmK,uBApIF,SAMqCC,EAAAjH,EAAAkH,GAAA,OAAArC,GAAAzM,MAAC,KAADD,UAAA,EA+HnCgP,oBA5DF,SAA6BC,GAG3B,OAFAC,EAAAA,GAAiBC,WAAa,eAAAC,EAAA,OAC5BC,EAAAA,IAAmBD,EAAAF,EAAAA,IAAiBI,YAAWrP,MAAAmP,EAAApP,WAAO,EACjDkP,EAAAA,GAA0BD,EACnC,EAyDEM,cAjDF,SAAuBC,GACrB,IAAMC,EAAgB,CAAC,EACvB,IAAKD,EACH,OAAO7M,KAAKI,UAAU0M,GAExB,IAAMC,EAAc/M,KAAKC,MAAM4M,GAC/B,GAAIE,EAAYhH,OAAQ,CAEtB,IAAMiH,EAAiBzK,SAASC,eAAe,WAC/C,IAAKwK,EACH,MAAM,IAAIpO,MAAM,uDAIlB,IAAMqH,EAAcH,GAAeiH,EAAYhH,QAC/C5L,OAAOqN,QAAQvB,GAAawB,QAAQ,SAAAC,GAAkB,IAhS1DlO,EAAAF,EAgS0DqO,GAhS1DrO,EAgS0D,EAhS1D,SAAAE,GAAA,GAAA2C,MAAAC,QAAA5C,GAAA,OAAAA,CAAA,CAAAoO,CAAApO,EAgS0DkO,IAhS1D,SAAAlO,EAAAuB,GAAA,IAAAxB,EAAA,MAAAC,EAAA,yBAAAC,QAAAD,EAAAC,OAAAE,WAAAH,EAAA,uBAAAD,EAAA,KAAAD,EAAAI,EAAAI,EAAAI,EAAAS,EAAA,GAAAL,GAAA,EAAAV,GAAA,SAAAE,GAAAP,EAAAA,EAAA0B,KAAAzB,IAAAqO,KAAA,IAAA9M,EAAA,IAAAZ,OAAAZ,KAAAA,EAAA,OAAAe,GAAA,cAAAA,GAAAhB,EAAAQ,EAAAmB,KAAA1B,IAAA2B,QAAAP,EAAAkJ,KAAAvK,EAAA6B,OAAAR,EAAAG,SAAAC,GAAAT,GAAA,UAAAd,GAAAI,GAAA,EAAAF,EAAAF,CAAA,iBAAAc,GAAA,MAAAf,EAAA,SAAAW,EAAAX,EAAA,SAAAY,OAAAD,KAAAA,GAAA,kBAAAN,EAAA,MAAAF,CAAA,SAAAiB,CAAA,EAAAmN,CAAAtO,EAAAF,IAAA,SAAAE,EAAAmB,GAAA,GAAAnB,EAAA,qBAAAA,EAAA,OAAA6C,EAAA7C,EAAAmB,GAAA,IAAApB,EAAA,GAAAoD,SAAA1B,KAAAzB,GAAAoD,MAAA,uBAAArD,GAAAC,EAAAqD,cAAAtD,EAAAC,EAAAqD,YAAAC,MAAA,QAAAvD,GAAA,QAAAA,EAAA4C,MAAAI,KAAA/C,GAAA,cAAAD,GAAA,2CAAAwD,KAAAxD,GAAA8C,EAAA7C,EAAAmB,QAAA,GAAA8B,CAAAjD,EAAAF,IAAA,qBAAA0B,UAAA,6IAAA+M,IAgS0C1H,EAAGsH,EAAA,GAAExM,EAAKwM,EAAA,GAC9CqF,EAAeC,MAAM5M,GAAOlF,CAC9B,GAEA2R,EAAsB,OAAI7G,CAC5B,CAEA,OAAOjG,KAAKI,UAAU0M,EACxB,EA2BEhH,eAAAA,GACAoH,YDhFF,WACE,IAAML,EAAW7O,OAAO2C,aAAaG,QAAQrD,GAC7C,OAAOoP,EAAW7M,KAAKC,MAAM4M,GAAY,IAC3C,EC8EEM,YDxEF,SAAqBN,GACnB7O,OAAO2C,aAAaC,QAAQnD,EAAkBuC,KAAKI,UAAUyM,GAC/D,ECuEEO,gBD2fF,SAAyBvN,GACvB,GAAI1D,MAAMC,QAAQyD,GAChB,OAAO,IAAIwB,WAAWxB,GAGxB,GAA0B,iBAAfA,EAAyB,CAOlC,GALIA,EAAWuB,WAAW,QACxBvB,EAAaA,EAAWjD,MAAM,IAIN,KAAtBiD,EAAW/E,QAAiB,iBAAiBiC,KAAK8C,GACpD,OAAOoB,EAAwBpB,GAIjC,IACE,OAAOkE,EAAalE,EACtB,CAAE,MAAO2J,GACP,MAAM,IAAI5K,MACR,mEAEJ,CACF,CAEA,MAAM,IAAIA,MAAM,4DAClB,GEr1BayO,GAA0B,kBAC1BC,GAA8B,sBAIrCC,GAAiB,IAAIC,IAAI,CAC7BH,GACAC,KAEIG,GAA2B,IAAI/E,QA0B9B,SAASgF,GAAuBC,EAAS/E,GAC9C,IACE,IAAK2E,GAAeK,IAAID,IAA8B,oBAAX3P,OACzC,OAGF,IAAM6P,EA9BV,WACE,GAAwB,oBAAbtL,SACT,OAAO,KAET,IAAM8H,EAAO9H,SAASsI,cAAc,cAAD1I,OAZA,6BAaS,OAE5C,OACGkI,GACAA,EAAKhI,SAhB6B,mCAiBnCgI,EAAKhI,QAIAgI,EAAKhI,QAFH,IAGX,CAeqByL,GACjB,IACGD,GACoB,oBAAdE,WACyB,mBAAzBA,UAAUC,WAEjB,OAGF,IAAIC,EAAmBR,GAAyBrE,IAAIpL,QAKpD,GAJKiQ,IACHA,EAAmB,IAAIT,IACvBC,GAAyB3I,IAAI9G,OAAQiQ,IAEnCA,EAAiBL,IAAID,GACvB,OAGF,IAAMO,EAAUlO,KAAKI,UAAU,CAC7B+N,MAAO,kBACPR,QAAAA,EACA/E,aAAcA,GAAgB,KAC9BwF,WAAW,IAAI3N,MAAO4N,iBAMP,IAJAN,UAAUC,WACzBH,EACA,IAAIS,KAAK,CAACJ,GAAU,CAAEvC,KAAM,uBAG5BsC,EAAiBM,IAAIZ,EAEzB,CAAE,MAAA1B,GACA,CAEJ,C,2uCClFA,IAAA3S,EAAAC,EAAAC,EAAA,mBAAAC,OAAAA,OAAA,GAAAC,EAAAF,EAAAG,UAAA,aAAAC,EAAAJ,EAAAK,aAAA,yBAAAC,EAAAN,EAAAE,EAAAE,EAAAE,GAAA,IAAAC,EAAAL,GAAAA,EAAAM,qBAAAC,EAAAP,EAAAO,EAAAC,EAAAC,OAAAC,OAAAL,EAAAC,WAAA,OAAAK,GAAAH,EAAA,mBAAAV,EAAAE,EAAAE,GAAA,IAAAE,EAAAC,EAAAG,EAAAI,EAAA,EAAAC,EAAAX,GAAA,GAAAY,GAAA,EAAAC,EAAA,CAAAF,EAAA,EAAAb,EAAA,EAAAgB,EAAApB,EAAAqB,EAAAC,EAAAN,EAAAM,EAAAC,KAAAvB,EAAA,GAAAsB,EAAA,SAAArB,EAAAC,GAAA,OAAAM,EAAAP,EAAAQ,EAAA,EAAAG,EAAAZ,EAAAmB,EAAAf,EAAAF,EAAAmB,CAAA,YAAAC,EAAApB,EAAAE,GAAA,IAAAK,EAAAP,EAAAU,EAAAR,EAAAH,EAAA,GAAAiB,GAAAF,IAAAV,GAAAL,EAAAgB,EAAAO,OAAAvB,IAAA,KAAAK,EAAAE,EAAAS,EAAAhB,GAAAqB,EAAAH,EAAAF,EAAAQ,EAAAjB,EAAA,GAAAN,EAAA,GAAAI,EAAAmB,IAAArB,KAAAQ,EAAAJ,GAAAC,EAAAD,EAAA,OAAAC,EAAA,MAAAD,EAAA,GAAAA,EAAA,GAAAR,GAAAQ,EAAA,IAAAc,KAAAhB,EAAAJ,EAAA,GAAAoB,EAAAd,EAAA,KAAAC,EAAA,EAAAU,EAAAC,EAAAhB,EAAAe,EAAAf,EAAAI,EAAA,IAAAc,EAAAG,IAAAnB,EAAAJ,EAAA,GAAAM,EAAA,GAAAJ,GAAAA,EAAAqB,KAAAjB,EAAA,GAAAN,EAAAM,EAAA,GAAAJ,EAAAe,EAAAf,EAAAqB,EAAAhB,EAAA,OAAAH,GAAAJ,EAAA,SAAAmB,EAAA,MAAAH,GAAA,EAAAd,CAAA,iBAAAE,EAAAW,EAAAQ,GAAA,GAAAT,EAAA,QAAAU,UAAA,oCAAAR,GAAA,IAAAD,GAAAK,EAAAL,EAAAQ,GAAAhB,EAAAQ,EAAAL,EAAAa,GAAAxB,EAAAQ,EAAA,EAAAT,EAAAY,KAAAM,GAAA,CAAAV,IAAAC,EAAAA,EAAA,GAAAA,EAAA,IAAAU,EAAAf,GAAA,GAAAkB,EAAAb,EAAAG,IAAAO,EAAAf,EAAAQ,EAAAO,EAAAC,EAAAR,GAAA,OAAAI,EAAA,EAAAR,EAAA,IAAAC,IAAAH,EAAA,QAAAL,EAAAO,EAAAF,GAAA,MAAAL,EAAAA,EAAA0B,KAAAnB,EAAAI,IAAA,MAAAc,UAAA,wCAAAzB,EAAA2B,KAAA,OAAA3B,EAAAW,EAAAX,EAAA4B,MAAApB,EAAA,IAAAA,EAAA,YAAAA,IAAAR,EAAAO,EAAA,SAAAP,EAAA0B,KAAAnB,GAAAC,EAAA,IAAAG,EAAAc,UAAA,oCAAApB,EAAA,YAAAG,EAAA,GAAAD,EAAAR,CAAA,UAAAC,GAAAiB,EAAAC,EAAAf,EAAA,GAAAQ,EAAAV,EAAAyB,KAAAvB,EAAAe,MAAAE,EAAA,YAAApB,GAAAO,EAAAR,EAAAS,EAAA,EAAAG,EAAAX,CAAA,SAAAe,EAAA,UAAAa,MAAA5B,EAAA2B,KAAAV,EAAA,GAAAhB,EAAAI,EAAAE,IAAA,GAAAI,CAAA,KAAAS,EAAA,YAAAV,IAAA,UAAAmB,IAAA,UAAAC,IAAA,CAAA9B,EAAAY,OAAAmB,eAAA,IAAAvB,EAAA,GAAAL,GAAAH,EAAAA,EAAA,GAAAG,QAAAW,GAAAd,EAAA,GAAAG,EAAA,yBAAAH,GAAAW,EAAAmB,EAAArB,UAAAC,EAAAD,UAAAG,OAAAC,OAAAL,GAAA,SAAAO,EAAAhB,GAAA,OAAAa,OAAAoB,eAAApB,OAAAoB,eAAAjC,EAAA+B,IAAA/B,EAAAkC,UAAAH,EAAAhB,GAAAf,EAAAM,EAAA,sBAAAN,EAAAU,UAAAG,OAAAC,OAAAF,GAAAZ,CAAA,QAAA8B,EAAApB,UAAAqB,EAAAhB,GAAAH,EAAA,cAAAmB,GAAAhB,GAAAgB,EAAA,cAAAD,GAAAA,EAAAK,YAAA,oBAAApB,GAAAgB,EAAAzB,EAAA,qBAAAS,GAAAH,GAAAG,GAAAH,EAAAN,EAAA,aAAAS,GAAAH,EAAAR,EAAA,yBAAAW,GAAAH,EAAA,oDAAAwB,GAAA,kBAAAC,EAAA7B,EAAA8B,EAAAtB,EAAA,cAAAD,GAAAf,EAAAE,EAAAE,EAAAH,GAAA,IAAAO,EAAAK,OAAA0B,eAAA,IAAA/B,EAAA,gBAAAR,GAAAQ,EAAA,EAAAO,GAAA,SAAAf,EAAAE,EAAAE,EAAAH,GAAA,SAAAK,EAAAJ,EAAAE,GAAAW,GAAAf,EAAAE,EAAA,SAAAF,GAAA,YAAAwC,QAAAtC,EAAAE,EAAAJ,EAAA,GAAAE,EAAAM,EAAAA,EAAAR,EAAAE,EAAA,CAAA2B,MAAAzB,EAAAqC,YAAAxC,EAAAyC,cAAAzC,EAAA0C,UAAA1C,IAAAD,EAAAE,GAAAE,GAAAE,EAAA,UAAAA,EAAA,WAAAA,EAAA,cAAAS,GAAAf,EAAAE,EAAAE,EAAAH,EAAA,UAAAiV,GAAAhV,EAAAF,GAAA,gBAAAE,GAAA,GAAA2C,MAAAC,QAAA5C,GAAA,OAAAA,CAAA,CAAAoO,CAAApO,IAAA,SAAAA,EAAAuB,GAAA,IAAAxB,EAAA,MAAAC,EAAA,yBAAAC,QAAAD,EAAAC,OAAAE,WAAAH,EAAA,uBAAAD,EAAA,KAAAD,EAAAI,EAAAI,EAAAI,EAAAS,EAAA,GAAAL,GAAA,EAAAV,GAAA,SAAAE,GAAAP,EAAAA,EAAA0B,KAAAzB,IAAAqO,KAAA,IAAA9M,EAAA,IAAAZ,OAAAZ,KAAAA,EAAA,OAAAe,GAAA,cAAAA,GAAAhB,EAAAQ,EAAAmB,KAAA1B,IAAA2B,QAAAP,EAAAkJ,KAAAvK,EAAA6B,OAAAR,EAAAG,SAAAC,GAAAT,GAAA,UAAAd,GAAAI,GAAA,EAAAF,EAAAF,CAAA,iBAAAc,GAAA,MAAAf,EAAA,SAAAW,EAAAX,EAAA,SAAAY,OAAAD,KAAAA,GAAA,kBAAAN,EAAA,MAAAF,CAAA,SAAAiB,CAAA,EAAAmN,CAAAtO,EAAAF,IAAA,SAAAE,EAAAmB,GAAA,GAAAnB,EAAA,qBAAAA,EAAA,OAAA6C,GAAA7C,EAAAmB,GAAA,IAAApB,EAAA,GAAAoD,SAAA1B,KAAAzB,GAAAoD,MAAA,uBAAArD,GAAAC,EAAAqD,cAAAtD,EAAAC,EAAAqD,YAAAC,MAAA,QAAAvD,GAAA,QAAAA,EAAA4C,MAAAI,KAAA/C,GAAA,cAAAD,GAAA,2CAAAwD,KAAAxD,GAAA8C,GAAA7C,EAAAmB,QAAA,GAAA8B,CAAAjD,EAAAF,IAAA,qBAAA0B,UAAA,6IAAA+M,EAAA,UAAA1L,GAAA7C,EAAAmB,IAAA,MAAAA,GAAAA,EAAAnB,EAAAsB,UAAAH,EAAAnB,EAAAsB,QAAA,QAAAxB,EAAA,EAAAI,EAAAyC,MAAAxB,GAAArB,EAAAqB,EAAArB,IAAAI,EAAAJ,GAAAE,EAAAF,GAAA,OAAAI,CAAA,UAAAsD,GAAAtD,EAAAH,EAAAD,EAAAE,EAAAI,EAAAe,EAAAZ,GAAA,QAAAD,EAAAJ,EAAAiB,GAAAZ,GAAAG,EAAAJ,EAAAqB,KAAA,OAAAzB,GAAA,YAAAJ,EAAAI,EAAA,CAAAI,EAAAoB,KAAA3B,EAAAW,GAAA+C,QAAAC,QAAAhD,GAAAiD,KAAA3D,EAAAI,EAAA,UAAAwD,GAAA1D,GAAA,sBAAAH,EAAA,KAAAD,EAAA+D,UAAA,WAAAJ,QAAA,SAAAzD,EAAAI,GAAA,IAAAe,EAAAjB,EAAA4D,MAAA/D,EAAAD,GAAA,SAAAiE,EAAA7D,GAAAsD,GAAArC,EAAAnB,EAAAI,EAAA2D,EAAAC,EAAA,OAAA9D,EAAA,UAAA8D,EAAA9D,GAAAsD,GAAArC,EAAAnB,EAAAI,EAAA2D,EAAAC,EAAA,QAAA9D,EAAA,CAAA6D,OAAA,MAYA,IAAIkR,GAAe,CAAC,EAIhBC,GAAsB,KAKpBC,GAAc,IAAIC,YAClBC,GAAc,IAAIC,YAExB,SAMeC,GAAwBvG,EAAA2D,GAAA,OAAA6C,GAAA1R,MAAC,KAADD,UAAA,CAyDvC,SAAA2R,KAFC,OAEDA,GAAA5R,GAAA1B,KAAAE,EAzDA,SAAAqT,EAAwCC,EAAQC,GAAc,IAAAC,EAAAlF,EAAA,OAAAxO,KAAAC,EAAA,SAAA0T,GAAA,cAAAA,EAAA3V,GAAA,OACxB,GAEV,YAFpB0V,EAAYpP,KAAKC,MAAMiP,IAEfI,QAAoB,CAAAD,EAAA3V,EAAA,cAC1B,IAAIkF,MAAM,wBAADuD,OAAyBiN,EAAUE,UAAU,UAEzDF,EAAUG,KAAM,CAAFF,EAAA3V,EAAA,cACX,IAAIkF,MAAM,4BAA2B,UAExCwQ,EAAUI,cAAe,CAAFH,EAAA3V,EAAA,cACpB,IAAIkF,MAAM,qCAAoC,UAEjDwQ,EAAUpF,oBAAqB,CAAFqF,EAAA3V,EAAA,cAC1B,IAAIkF,MAAM,2CAA0C,UAGvDsM,GAAKgB,uBAAwB,CAAFmD,EAAA3V,EAAA,cACxB,IAAIkF,MAAM,iDAAgD,cAAAyQ,EAAA3V,EAAA,EAE3CwR,GAAKgB,uBAC1BkD,EAAUpF,oBACVoF,EAAUI,cACVJ,EAAUG,MACX,OAJa,GAAAF,EAAA3U,EAKC,CAAF2U,EAAA3V,EAAA,cACL,IAAIkF,MAAM,sDAADuD,OACyCiN,EAAUI,cAAa,2BAAArN,OAA0BiN,EAAUpF,sBAClH,OAKF,GAFKE,EAAalK,KAAKC,MACtB4O,GAAYY,OAAOvE,GAAKjK,wBAAwBmO,EAAUG,QAGvDJ,EAAgB,CAAFE,EAAA3V,EAAA,cACX,IAAIkF,MAAM,8IAEf,UAEAsL,EAAWiF,gBACZjF,EAAWiF,iBAAmBA,EAAc,CAAAE,EAAA3V,EAAA,cAEtC,IAAIkF,MAAM,4DAADuD,OAC+CgN,EAAc,aAAAhN,OAAY+H,EAAWiF,eAAc,MAChH,UAGEjF,EAAWwF,eAAgB,CAAFL,EAAA3V,EAAA,eACtB,IAAIkF,MAAM,kDAAiD,WAE9DsL,EAAWyF,WAAY,CAAFN,EAAA3V,EAAA,eAClB,IAAIkF,MAAM,8CAA6C,eAAAyQ,EAAA1U,EAAA,EAGxDuP,GAAU,EAAA+E,EAAA,KAClB3R,MAAA,KAAAD,UAAA,UAUcuS,GAAa1K,EAAAkH,EAAAyD,GAAA,OAAAC,GAAAxS,MAAC,KAADD,UAAA,CAiB5B,SAAAyS,KAFC,OAEDA,GAAA1S,GAAA1B,KAAAE,EAjBA,SAAAmU,EAA6Bb,EAAQC,EAAgBa,GAAW,IAAA9F,EAAA+F,EAAAC,EAAAC,EAAAC,EAAA,OAAA1U,KAAAC,EAAA,SAAA0U,GAAA,cAAAA,EAAA3W,GAAA,cAAA2W,EAAA3W,EAAA,EACrCqV,GAAyBG,EAAQC,GAAe,OAQ9B,GARrCjF,EAAUmG,EAAA3V,EAEVuV,EAAiB/E,GAAKjK,wBAC1BiJ,EAAWwF,gBAEPQ,EAAgBhF,GAAKjK,wBAAwBiJ,EAAWyF,YAE9DS,EACwB1B,GAAmB,CAAA2B,EAAA3W,EAAA,eAAA2W,EAAA3W,EAAA,EAAWwR,GAAK9L,iBAAgB,OAAAgR,EAAAC,EAAA3V,EAAA,OAAtD,OAAfyV,EAAeC,EAAAC,EAAA3W,EAAG,EACXsW,EAAY,CACvBE,cAAAA,EACAD,eAAAA,EACAE,gBAAAA,IACA,cAAAE,EAAA1V,EAAA,EAAA0V,EAAA3V,GAAA,EAAAqV,EAAA,IACHD,GAAAxS,MAAA,KAAAD,UAAA,UAMciT,GAAsBC,GAAA,OAAAC,GAAAlT,MAAC,KAADD,UAAA,CAgBrC,SAAAmT,KAFC,OAEDA,GAAApT,GAAA1B,KAAAE,EAhBA,SAAA6U,EAAsC7E,GAAS,IAAA8E,EAAAC,EAAAC,EAAA,OAAAlV,KAAAC,EAAA,SAAAkV,GAAA,cAAAA,EAAAnX,GAAA,OACD,GAAtCgX,EAAiBxF,GAAK9L,iBAEP,CAAFyR,EAAAnX,EAAA,QACyC,OAA1DwR,GAAKQ,cAAc,sBAAuB,GAAIE,GAAYiF,EAAAlW,EAAA,iBAAAkW,EAAAnX,EAAA,EAKjCwR,GAAKrI,uBAAuB6N,GAAe,OAAhEC,EAAYE,EAAAnW,EACZkW,EAAe1F,GAAKxJ,sBAAsBiP,GAGhDzF,GAAKQ,cAAc,sBAAuBkF,EAAchF,GAAW,cAAAiF,EAAAlW,EAAA,KAAA8V,EAAA,KACpEnT,MAAA,KAAAD,UAAA,UAScyT,GAAiBhO,EAAAiO,EAAAC,EAAAC,GAAA,OAAAC,GAAA5T,MAAC,KAADD,UAAA,CAsChC,SAAA6T,KAFC,OAEDA,GAAA9T,GAAA1B,KAAAE,EAtCA,SAAAuV,EAAiCC,EAASC,EAAU5M,EAAW0K,GAAc,IAAA9O,EAAAmE,EAAA8H,EAAA5H,EAAA4M,EAAAC,EAAA,OAAA7V,KAAAC,EAAA,SAAA6V,GAAA,cAAAA,EAAA9X,GAAA,OAE3B,GAA1C8K,EAAkB,IAAInD,WAAWgQ,GAErB,WAAd5M,EAAsB,CAAA+M,EAAA9X,EAAA,QAIsC,OAHxD4S,EAAgBpB,GAAKxJ,sBACzB8C,EAAgBiN,SAAS,EAAG,KAExB/M,EAAiBwG,GAAKmB,oBAAoBC,GAAckF,EAAA9X,EAAA,EAClDwR,GAAKI,UAAU9G,EAAiBC,EAAWC,GAAe,OAAtErE,EAAGmR,EAAA9W,EAAA8W,EAAA9X,EAAG,EAAH,oBAAA8X,EAAA9X,EAAG,EAEMwR,GAAKI,UAAU9G,EAAiBC,GAAU,OAAtDpE,EAAGmR,EAAA9W,EAAA,OAKL,GAFM4W,EAAaF,GAAW,UAIZ,WAAd3M,EAAsB,CAAA+M,EAAA9X,EAAA,QACxB6X,EAAgBG,GAAAA,GAAQC,cAAczG,GAAKnH,aAAa1D,IAAMmR,EAAA9X,EAAA,kBACvC,gBAAd+K,EAA2B,CAAA+M,EAAA9X,EAAA,eAAA8X,EAAA9X,EAAA,EACdkY,GACpBzV,MAAMI,KAAK2O,GAAKjK,wBAAwBZ,KACzC,OAFDkR,EAAaC,EAAA9W,EAAA,OAKf+T,GAAYpL,GAAAA,GAAA,GACPoL,IAAY,GAAAoD,GAAA,GACdP,EAAa,CACZnC,eAAAA,EACAtP,WAAYQ,EACZyR,OAAQrN,EACRjE,QAAQ,IAAIC,MAAOC,UAzJe,MA0JlCqR,QAASR,KAEX,cAAAC,EAAA7W,EAAA,KAAAwW,EAAA,KACH7T,MAAA,KAAAD,UAAA,UAWc2U,GAAiBzG,EAAAC,EAAAC,EAAAwG,EAAAC,EAAAC,GAAA,OAAAC,GAAA9U,MAAC,KAADD,UAAA,CAkBhC,SAAA+U,KAFC,OAEDA,GAAAhV,GAAA1B,KAAAE,EAlBA,SAAAyW,EACEzG,EACAuD,EACAD,EACAzK,EACA2M,EACApB,GAAW,IAAAqB,EAAA,OAAA3V,KAAAC,EAAA,SAAA2W,GAAA,cAAAA,EAAA5Y,GAAA,cAAA4Y,EAAA5Y,EAAA,EAGYkW,GAAcV,EAAQC,EAAgBa,GAAY,OAA3D,OAARqB,EAAQiB,EAAA5X,EAAA4X,EAAA5Y,EAAG,EAGXoX,GAAkBM,EAASC,EAAU5M,EAAW0K,GAAe,OAGrEjE,GAAKQ,cAAc,mBAAmB,EAAME,GAAW,cAAA0G,EAAA3X,EAAA,KAAA0X,EAAA,IACxDD,GAAA9U,MAAA,KAAAD,UAAA,UAUckV,GAAeC,EAAAC,GAAA,OAAAC,GAAApV,MAAC,KAADD,UAAA,CAW9B,SAAAqV,KAFC,OAEDA,GAAAtV,GAAA1B,KAAAE,EAXA,SAAA+W,EAA+B9F,EAAUjB,GAAS,IAAAkB,EAAA,OAAApR,KAAAC,EAAA,SAAAiX,GAAA,cAAAA,EAAAlZ,GAAA,OAE1CoT,EAAgB5B,GAAK0B,cAAcC,GAGzC3B,GAAKiC,YAAYL,GAGjB5B,GAAKQ,cAAc,oBAAoB,EAAME,GAAW,cAAAgH,EAAAjY,EAAA,KAAAgY,EAAA,KACzDrV,MAAA,KAAAD,UAAA,UAQcwV,GAAiBC,EAAAC,EAAAC,GAAA,OAAAC,GAAA3V,MAAC,KAADD,UAAA,CA4ChC,SAAA4V,KAFC,OAEDA,GAAA7V,GAAA1B,KAAAE,EA5CA,SAAAsX,EAAiCtH,EAAWuH,EAAuB/B,GAAO,IAAAE,EAAAjR,EAAA+S,EAAAC,EAAAC,EAAAC,EAAAxB,EAAAyB,EAAAC,EAAAC,EAAA,OAAAhY,KAAAC,EAAA,SAAAgY,GAAA,cAAAA,EAAAja,GAAA,OAKxE,GACKka,GAHCvT,EAAMoO,GADN6C,EAAaF,GAAW,WAIRE,GAAwB,CAAFqC,EAAAja,EAAA,eAAAia,EAAAhZ,EAAA,UAMG,GAFzCyY,EAAqBpT,KAAKC,MAAMkT,GAChCE,EAAoBD,EAAmBK,YAKrB,YAJlBH,EAAkBF,EAAmBzH,MAIX,CAAAgI,EAAAja,EAAA,eAAAia,EAAAja,EAAA,EAERma,GAAmBxT,GAAI,OAAvC0R,EAAO4B,EAAAjZ,EAGP8Y,EAAmBtI,GAAKjK,wBAAwBoS,IAChDI,EAAcK,GAAAA,GAAqBC,YAAYP,IACzCQ,KAAK,CAACjC,IAElBwB,EAAoBE,EAAYQ,YAAYN,EAAAja,EAAA,kBACf,aAApB4Z,EAA8B,CAAAK,EAAAja,EAAA,eAAAia,EAAAja,EAAA,EAGbwa,GAAwB7T,EAAKgT,GAAkB,OAAzEE,EAAiBI,EAAAjZ,EAAAiZ,EAAAja,EAAG,EAAH,mBAEX,IAAIkF,MAAM,gCAA+B,OAK3C8U,EACyB,iBAAtBH,EACHA,EACArI,GAAKxJ,sBAAsB6R,GAEjCrI,GAAKQ,cAAc,qBAAsBgI,EAAsB9H,GAAW,cAAA+H,EAAAhZ,EAAA,KAAAuY,EAAA,KAC3E5V,MAAA,KAAAD,UAAA,UAQc8W,GAAaC,EAAAC,EAAAC,GAAA,OAAAC,GAAAjX,MAAC,KAADD,UAAA,CAkD5B,SAAAkX,KAFC,OAEDA,GAAAnX,GAAA1B,KAAAE,EAlDA,SAAA4Y,EAA6B5I,EAAW6I,EAAmBrD,GAAO,IAAAE,EAAAjR,EAAAqU,EAAAC,EAAAC,EAAAC,EAAAC,EAAA/C,EAAAlS,EAAAkV,EAAAC,EAAA,OAAAtZ,KAAAC,EAAA,SAAAsZ,GAAA,cAAAA,EAAAvb,GAAA,OAKhE,GACKka,GAHCvT,EAAMoO,GADN6C,EAAaF,GAAW,WAIRE,GAAwB,CAAF2D,EAAAvb,EAAA,eAAAub,EAAAta,EAAA,UAOU,GAHhD+Z,EAAiB1U,KAAKC,MAAMwU,GAC5BE,EAAgBD,EAAejS,QAC/BmS,EAAcF,EAAe/I,KAC7BkJ,EAAelG,GAAYuG,OAAOP,GAIpB,WAAhBC,EAAwB,CAAAK,EAAAvb,EAAA,eAAAub,EAAAvb,EAAA,EAEJma,GAAmBxT,GAAI,OAAvC0R,EAAOkD,EAAAva,EAGb6R,EAAAA,GAAiBC,WAAa,eAAAC,EAAA,OAC5BC,EAAAA,IAAmBD,EAAAF,EAAAA,IAAiBI,YAAWrP,MAAAmP,EAAApP,WAAO,EAIlDwC,EAAakS,EAAQoD,UAAUvY,MAAM,EAAG,IAExCmY,EAAYxI,EAAAA,GAAkBsI,EAAchV,GAKlDiV,EAAe5J,GAAKxJ,sBAAsBqT,GAAWE,EAAAvb,EAAA,kBAC5B,aAAhBkb,EAA0B,CAAAK,EAAAvb,EAAA,eAAAub,EAAAvb,EAAA,EACb0b,GAA2B/U,GAAI,OAAxC,OAAP2U,EAAOC,EAAAva,EAAAua,EAAAvb,EAAG,EAIKsb,EAAQK,YAAY,CAAE5S,QAASkS,IAAgB,OAApEG,EAAYG,EAAAva,EAAAua,EAAAvb,EAAG,EAAH,aAEuD,OAAnEwR,GAAKQ,cAAc,QAAS,2BAA4BE,GAAWqJ,EAAAta,EAAA,UAKrEuQ,GAAKQ,cAAc,iBAAkBoJ,EAAclJ,GAAW,cAAAqJ,EAAAta,EAAA,KAAA6Z,EAAA,IAC/DD,GAAAjX,MAAA,KAAAD,UAAA,UAOciY,GAAyBC,EAAAC,GAAA,OAAAC,GAAAnY,MAAC,KAADD,UAAA,CA4BxC,SAAAoY,KAFC,OAEDA,GAAArY,GAAA1B,KAAAE,EA5BA,SAAA8Z,EAAyC9J,EAAWwF,GAAO,OAAA1V,KAAAC,EAAA,SAAAga,GAAA,cAAAA,EAAAjc,GAAA,UAEpD0X,EAAS,CAAFuE,EAAAjc,EAAA,QAE0D,OADpE+U,GAAe,CAAC,EAChBvD,GAAKQ,cAAc,gCAAgC,EAAME,GAAW+J,EAAAhb,EAAA,aAMjE8T,GAAa2C,GAAU,CAAFuE,EAAAjc,EAAA,QAOtB,OANFwR,GAAKQ,cACH,QACA,IAAI9M,MAAM,6BAADuD,OACsBiP,EAAO,2CACpCzU,WACFiP,GACA+J,EAAAhb,EAAA,iBAMG8T,GAAa2C,GAEpBlG,GAAKQ,cAAc,gCAAgC,EAAME,GAAW,cAAA+J,EAAAhb,EAAA,KAAA+a,EAAA,KACrEpY,MAAA,KAAAD,UAAA,UAWcuY,GAAwBC,EAAAC,EAAAC,EAAAC,GAAA,OAAAC,GAAA3Y,MAAC,KAADD,UAAA,CAmBvC,SAAA4Y,KAFC,OAEDA,GAAA7Y,GAAA1B,KAAAE,EAnBA,SAAAsa,EACEtK,EACAuD,EACAD,EACAc,GAAW,IAAAqB,EAAA8E,EAAA,OAAAza,KAAAC,EAAA,SAAAya,GAAA,cAAAA,EAAA1c,GAAA,cAAA0c,EAAA1c,EAAA,EAIYkW,GAAcV,EAAQC,EAAgBa,GAAY,OAA3D,OAARqB,EAAQ+E,EAAA1b,EAAA0b,EAAA1c,EAAG,EAGI2c,GAAuB,IAAIhV,WAAWgQ,IAAU,OAA/D8E,EAAMC,EAAA1b,EAGZgU,GAAsByH,EAEtBjL,GAAKQ,cAAc,6BAA6B,EAAME,GAAW,cAAAwK,EAAAzb,EAAA,KAAAub,EAAA,IAClED,GAAA3Y,MAAA,KAAAD,UAAA,CAOD,SAASiZ,GAA4B1K,GACnC8C,GAAsB,KACtBxD,GAAKQ,cAAc,iCAAiC,EAAME,EAC5D,CAEA,SACegG,GAAmB2E,GAAA,OAAAC,GAAAlZ,MAAC,KAADD,UAAA,CAmBlC,SAAAmZ,KAFC,OAEDA,GAAApZ,GAAA1B,KAAAE,EAnBA,SAAA6a,EAAmC5W,GAAU,IAAA2E,EAAAuN,EAAA,OAAArW,KAAAC,EAAA,SAAA+a,GAAA,cAAAA,EAAAhd,GAAA,OACa,GAGzB,MAHzB8K,EAAkB0G,GAAKkC,gBAAgBvN,IAGzB/E,OAAa,CAAA4b,EAAAhd,EAAA,QAE/BqY,EAAUL,GAAAA,GAAQiF,SAASnS,GAAiBkS,EAAAhd,EAAA,kBACR,KAA3B8K,EAAgB1J,OAAa,CAAA4b,EAAAhd,EAAA,QAEtCqY,EAAUL,GAAAA,GAAQC,cAAcnN,GAAiBkS,EAAAhd,EAAA,qBAE3C,IAAIkF,MAAM,+BAADuD,OACkBqC,EAAgB1J,OAAM,+BACtD,cAAA4b,EAAA/b,EAAA,EAGIoX,GAAO,EAAA0E,EAAA,KACfnZ,MAAA,KAAAD,UAAA,UAScgZ,GAAsBO,GAAA,OAAAC,GAAAvZ,MAAC,KAADD,UAAA,CAmDrC,SAAAwZ,KAFC,OAEDA,GAAAzZ,GAAA1B,KAAAE,EAnDA,SAAAkb,EAAsCC,GAAkB,IAAAC,EAAAC,EAAAC,EAAA,OAAAxb,KAAAC,EAAA,SAAAwb,GAAA,cAAAA,EAAAzd,GAAA,UACpB,KAA9Bqd,EAAmBjc,OAAa,CAAAqc,EAAAzd,EAAA,cAC5B,IAAIkF,MAAM,yDAADuD,OAC4C4U,EAAmBjc,SAC7E,OAkC+C,OAR5Ckc,EAAc,IAAI3V,WAAW,CACjC,GAAM,GAAM,EAAM,EAAM,EAAM,GAAM,GAAM,EAAM,EAAM,GAAM,IAAM,GAClE,IAAM,GAAM,EAAM,EAAM,EAAM,EAAM,GAAM,IAAM,GAAM,IAAM,GAAM,EAClE,EAAM,EAAM,EAAM,GAAM,GAAM,GAAM,EAAM,EAAM,EAAM,EAAM,MAGxD4V,EAAQ,IAAI5V,WAAW2V,EAAYlc,OAAS,KAC5CgK,IAAIkS,GACVC,EAAMnS,IAAIiS,EAAoBC,EAAYlc,QAAQqc,EAAAzd,EAAA,EAE1BoE,OAAOC,OAAOc,UACpC,QACAoY,EACA,CAAEna,KAAM,OAAQgC,WAAY,UAC5B,EACA,CAAC,eACF,OANc,OAAToY,EAASC,EAAAzc,EAAAyc,EAAAzd,EAAG,EAQLoE,OAAOC,OAAO6B,UAAU,MAAOsX,GAAU,cAAAC,EAAAxc,EAAA,EAAAwc,EAAAzc,GAAA,EAAAoc,EAAA,KACvDxZ,MAAA,KAAAD,UAAA,CAgBD,SAAS+Z,GAAgB9F,GACnB7C,GAAa6C,WACR7C,GAAa6C,EAExB,CA6BA,SAASsC,GAAYvT,EAAKiR,GACxB,IAAKjR,EACH,MAAM,IAAIzB,MAAM,mEAADuD,OACsDmP,EAAU,uDAC7E3U,WAIJ,IADY,IAAI8D,MAAOC,WACZL,EAAIG,OAGb,MAlCJ,WAIE,IAHA,IAAM6W,GAAM,IAAI5W,MAAOC,UACjB4W,EAAoB,GAE1BC,EAAA,EAAAC,EAA6Brd,OAAOqN,QAAQiH,IAAa8I,EAAAC,EAAA1c,OAAAyc,IAAE,CAAtD,IAAAE,EAAAjJ,GAAAgJ,EAAAD,GAAA,GAAOnG,EAAOqG,EAAA,GAAEpX,EAAGoX,EAAA,GAClBpX,EAAIG,QAAU6W,GAAOhX,EAAIG,QAC3B8W,EAAkBzT,KAAKuN,EAE3B,CAEA,IAAK,IAALsG,EAAA,EAAAC,EAAsBL,EAAiBI,EAAAC,EAAA7c,OAAA4c,IACrCN,GADgBO,EAAAD,GAGpB,CAoBIE,GACM,IAAIhZ,MArDP,SAAoC0S,GACzC,MAAO,sEAAPnP,OAA6EmP,EAAU,qDACzF,CAmDoBuG,CAA2BvG,IAAa3U,WAG1D,OAAO,CACT,CAEA,SAMekX,GAAkBiE,GAAA,OAAAC,GAAAza,MAAC,KAADD,UAAA,CAcjC,SAAA0a,KAFC,OAEDA,GAAA3a,GAAA1B,KAAAE,EAdA,SAAAoc,EAAkC3X,GAAG,OAAA3E,KAAAC,EAAA,SAAAsc,GAAA,cAAAA,EAAAve,GAAA,WAC/B2G,EAAI0R,QAAS,CAAFkG,EAAAve,EAAA,eAAAue,EAAAtd,EAAA,EACN0F,EAAI0R,SAAO,UAGD,WAAf1R,EAAIyR,OAAmB,CAAAmG,EAAAve,EAAA,eAAAue,EAAAtd,EAAA,EAClB+W,GAAAA,GAAQC,cAAczG,GAAKnH,aAAa1D,EAAIR,cAAY,cAAAoY,EAAAve,EAAA,EAElDkY,GACXzV,MAAMI,KAAK2O,GAAKjK,wBAAwBZ,EAAIR,cAC7C,cAAAoY,EAAAtd,EAAA,EAAAsd,EAAAvd,GAAA,cAAAud,EAAAtd,EAAA,KAAAqd,EAAA,KAEJ1a,MAAA,KAAAD,UAAA,UAQc+X,GAA0B8C,GAAA,OAAAC,GAAA7a,MAAC,KAADD,UAAA,CAiBzC,SAAA8a,KAFC,OAEDA,GAAA/a,GAAA1B,KAAAE,EAjBA,SAAAwc,EAA0C/X,GAAG,OAAA3E,KAAAC,EAAA,SAAA0c,GAAA,cAAAA,EAAA3e,GAAA,WACvC2G,EAAIiY,gBAAiB,CAAFD,EAAA3e,EAAA,eAAA2e,EAAA1d,EAAA,EACd0F,EAAIiY,iBAAe,UAKT,gBAAfjY,EAAIyR,OAAwB,CAAAuG,EAAA3e,EAAA,cACxB,IAAIkF,MAAM,iDAADuD,OACoC9B,EAAIyR,OAAM,8BAC5D,OAGuD,OAA1DzR,EAAIiY,iBAAkBC,EAAAA,GAAAA,GAAoBlY,EAAIR,YAAYwY,EAAA1d,EAAA,EACnD0F,EAAIiY,iBAAe,EAAAF,EAAA,KAC3B9a,MAAA,KAAAD,UAAA,UAiBc6W,GAAuBsE,EAAAC,GAAA,OAAAC,GAAApb,MAAC,KAADD,UAAA,CAKtC,SAAAqb,KAFC,OAEDA,GAAAtb,GAAA1B,KAAAE,EALA,SAAA+c,EAAuCtY,EAAKgT,GAAiB,IAAA2B,EAAA,OAAAtZ,KAAAC,EAAA,SAAAid,GAAA,cAAAA,EAAAlf,GAAA,cAAAkf,EAAAlf,EAAA,EACrC0b,GAA2B/U,GAAI,OAAxC,OAAP2U,EAAO4D,EAAAle,EAAAke,EAAAlf,EAAG,EACHsb,EAAQ6D,iBAAgBC,EAAAA,GAAAA,IAAiBzF,IAAmB,cAAAuF,EAAAje,EAAA,EAAAie,EAAAle,GAAA,EAAAie,EAAA,KAC1Erb,MAAA,KAAAD,UAAA,CAyMM,SAAS0b,GAAkB/I,GAChC,IAAMgJ,EA/HR,SAAkChJ,GAChC,sBAAAiJ,EAAA7b,GAAA1B,KAAAE,EAAO,SAAAoH,EAAoCkW,GAAK,IAAAC,EAAAvU,EAAAwU,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAA/d,KAAAC,EAAA,SAAAyH,GAAA,cAAAA,EAAA7I,EAAA6I,EAAA1J,GAAA,WAC1Cwf,EAAM3J,MAA8B,4BAAtB2J,EAAM3J,KAAW,KAA+B,CAAAnM,EAAA1J,EAAA,QAG9D,OAFFwR,GAAK9I,WAAW,uBAADD,OACU+W,EAAM3J,KAAW,KAAC,MAAApN,OAAK+W,EAAM3J,KAAY,MAAC,MAAApN,OAAK+W,EAAM3J,KAAgB,UAAC,MAAApN,OAAK+W,EAAM3J,KAAqB,iBAC7HnM,EAAA7I,EAAA,EAAA6I,EAAA1J,EAAA,EAEMsY,GACJkH,EAAM3J,KAAgB,UACtB2J,EAAM3J,KAAqB,eAC3B2J,EAAM3J,KAAY,MAClB2J,EAAM3J,KAAgB,UACtB2J,EAAM3J,KAAc,QACpBS,GACD,OAAA5M,EAAA1J,EAAA,eAAA0J,EAAA7I,EAAA,EAAA4e,EAAA/V,EAAA1I,EAEDwQ,GAAKQ,cAAc,QAASyN,EAAExc,WAAYuc,EAAM3J,KAAgB,WAAG,WAGnE2J,EAAM3J,MAA8B,+BAAtB2J,EAAM3J,KAAW,KAAkC,CAAAnM,EAAA1J,EAAA,QAGjE,OAFFwR,GAAK9I,WAAW,uBAADD,OACU+W,EAAM3J,KAAW,KAAC,MAAApN,OAAK+W,EAAM3J,KAAY,MAAC,MAAApN,OAAK+W,EAAM3J,KAAqB,iBACjGnM,EAAA7I,EAAA,EAAA6I,EAAA1J,EAAA,EAEMsY,GACJkH,EAAM3J,KAAgB,UACtB2J,EAAM3J,KAAqB,eAC3B2J,EAAM3J,KAAY,WAClBpR,OACAA,EACA6R,GACD,OAAA5M,EAAA1J,EAAA,eAAA0J,EAAA7I,EAAA,EAAAqK,EAAAxB,EAAA1I,EAEDwQ,GAAKQ,cAAc,QAAS9G,EAAEjI,WAAYuc,EAAM3J,KAAgB,WAAG,WAGnE2J,EAAM3J,MAA8B,kBAAtB2J,EAAM3J,KAAW,KAAqB,CAAAnM,EAAA1J,EAAA,gBAAA0J,EAAA7I,EAAA,EAAA6I,EAAA1J,EAAA,GAE9C6Y,GAAgB2G,EAAM3J,KAAY,MAAG2J,EAAM3J,KAAgB,WAAE,QAAAnM,EAAA1J,EAAA,iBAAA0J,EAAA7I,EAAA,GAAA6e,EAAAhW,EAAA1I,EAEnEwQ,GAAKQ,cAAc,QAAS0N,EAAEzc,WAAYuc,EAAM3J,KAAgB,WAAG,QAGvE,GAAI2J,EAAM3J,MAA8B,sBAAtB2J,EAAM3J,KAAW,KAA2B,CAC5DrE,GAAK9I,WAAW,uBAADD,OAAwB+W,EAAM3J,KAAW,OACxD,IACErE,GAAKG,oBACP,CAAE,MAAO/R,GACP4R,GAAKQ,cAAc,QAASpS,EAAEqD,WAChC,CACF,CAAC,IACGuc,EAAM3J,MAA8B,oBAAtB2J,EAAM3J,KAAW,KAAuB,CAAAnM,EAAA1J,EAAA,SAGtD,OAFFwR,GAAK9I,WAAW,uBAADD,OACU+W,EAAM3J,KAAW,KAAC,MAAApN,OAAK+W,EAAM3J,KAAY,QAChEnM,EAAA7I,EAAA,GAAA6I,EAAA1J,EAAA,GAEMmZ,GACJqG,EAAM3J,KAAgB,UACtB2J,EAAM3J,KAAY,MAClB2J,EAAM3J,KAAc,SACrB,QAAAnM,EAAA1J,EAAA,iBAAA0J,EAAA7I,EAAA,GAAA8e,EAAAjW,EAAA1I,EAEDwQ,GAAKQ,cAAc,QAAS2N,EAAE1c,WAAYuc,EAAM3J,KAAgB,WAAG,YAGnE2J,EAAM3J,MAA8B,gBAAtB2J,EAAM3J,KAAW,KAAmB,CAAAnM,EAAA1J,EAAA,SAGlD,OAFFwR,GAAK9I,WAAW,uBAADD,OACU+W,EAAM3J,KAAW,KAAC,MAAApN,OAAK+W,EAAM3J,KAAY,QAChEnM,EAAA7I,EAAA,GAAA6I,EAAA1J,EAAA,GAEMya,GACJ+E,EAAM3J,KAAgB,UACtB2J,EAAM3J,KAAY,MAClB2J,EAAM3J,KAAc,SACrB,QAAAnM,EAAA1J,EAAA,iBAAA0J,EAAA7I,EAAA,GAAA+e,EAAAlW,EAAA1I,EAEDwQ,GAAKQ,cAAc,QAAS4N,EAAE3c,WAAYuc,EAAM3J,KAAgB,WAAG,YAGnE2J,EAAM3J,MAA8B,8BAAtB2J,EAAM3J,KAAW,KAAiC,CAAAnM,EAAA1J,EAAA,SACL,OAA7DwR,GAAK9I,WAAW,uBAADD,OAAwB+W,EAAM3J,KAAW,OAAKnM,EAAA7I,EAAA,GAAA6I,EAAA1J,EAAA,GAErD4b,GACJ4D,EAAM3J,KAAgB,UACtB2J,EAAM3J,KAAc,SACrB,QAAAnM,EAAA1J,EAAA,iBAAA0J,EAAA7I,EAAA,GAAAgf,EAAAnW,EAAA1I,EAEDwQ,GAAKQ,cAAc,QAAS6N,EAAE5c,WAAYuc,EAAM3J,KAAgB,WAAG,YAGnE2J,EAAM3J,MAA8B,2BAAtB2J,EAAM3J,KAAW,KAA8B,CAAAnM,EAAA1J,EAAA,SACF,OAA7DwR,GAAK9I,WAAW,uBAADD,OAAwB+W,EAAM3J,KAAW,OAAKnM,EAAA7I,EAAA,GAAA6I,EAAA1J,EAAA,GAErD4W,GAAuB4I,EAAM3J,KAAgB,WAAE,QAAAnM,EAAA1J,EAAA,iBAAA0J,EAAA7I,EAAA,GAAAif,EAAApW,EAAA1I,EAErDwQ,GAAKQ,cAAc,QAAS8N,EAAE7c,WAAYuc,EAAM3J,KAAgB,WAAG,YAGnE2J,EAAM3J,MAA8B,6BAAtB2J,EAAM3J,KAAW,KAAgC,CAAAnM,EAAA1J,EAAA,SACJ,OAA7DwR,GAAK9I,WAAW,uBAADD,OAAwB+W,EAAM3J,KAAW,OAAKnM,EAAA7I,EAAA,GAAA6I,EAAA1J,EAAA,GAErDkc,GACJsD,EAAM3J,KAAgB,UACtB2J,EAAM3J,KAAqB,eAC3B2J,EAAM3J,KAAY,MAClBS,GACD,QAAA5M,EAAA1J,EAAA,iBAAA0J,EAAA7I,EAAA,GAAAkf,EAAArW,EAAA1I,EAEDwQ,GAAKQ,cAAc,QAAS+N,EAAE9c,WAAYuc,EAAM3J,KAAgB,WAAG,QAGvE,GAAI2J,EAAM3J,MAA8B,iCAAtB2J,EAAM3J,KAAW,KAAsC,CACvErE,GAAK9I,WAAW,uBAADD,OAAwB+W,EAAM3J,KAAW,OACxD,IACE+G,GAA4B4C,EAAM3J,KAAgB,UACpD,CAAE,MAAOjW,GACP4R,GAAKQ,cAAc,QAASpS,EAAEqD,WAAYuc,EAAM3J,KAAgB,UAClE,CACF,CAAC,eAAAnM,EAAAzI,EAAA,KAAAqI,EAAA,sEArHuC,OAsHzC,SAtHyC0W,GAAA,OAAAT,EAAA3b,MAAC,KAADD,UAAA,EAA1C,EAuHF,CAO+Bsc,CAAyB3J,GAGhD4J,EAA4B,IAAIC,gBAChCC,EAAwB,IAAID,gBAK9BE,EAAqB,KACrBC,GAA0B,EAE9B,GAAIhc,OAAOM,SAAWN,OAkBpB,OAjOJ,WAEEuE,SAASC,eAAe,cAAcyX,iBACpC,QAAO,eAAAvS,EAAAtK,GAAA1B,KAAAE,EACP,SAAA6C,EAAOnF,GAAC,OAAAoC,KAAAC,EAAA,SAAAgD,GAAA,cAAAA,EAAAjF,GAAA,OACNJ,EAAE4gB,iBACFlc,OAAO6N,YAAY,CACjBF,KAAM,2BACNxQ,MAAOoH,SAASC,eAAe,qBAAqBrH,MACpDsJ,UAAWlC,SAASC,eAAe,qBAAqBrH,MACxDgU,eAAgB5M,SAASC,eAAe,uBAAuBrH,QAC9D,cAAAwD,EAAAhE,EAAA,KAAA8D,EAAA,IACJ,gBAAA0b,GAAA,OAAAzS,EAAApK,MAAA,KAAAD,UAAA,EATM,IAUP,GAEFkF,SAASC,eAAe,oBAAoByX,iBAC1C,QAAO,eAAAtS,EAAAvK,GAAA1B,KAAAE,EACP,SAAA8N,EAAOpQ,GAAC,OAAAoC,KAAAC,EAAA,SAAAmO,GAAA,cAAAA,EAAApQ,GAAA,OACNJ,EAAE4gB,iBACFlc,OAAO6N,YAAY,CACjBF,KAAM,mBACNxQ,MAAOoH,SAASC,eAAe,uBAAuBrH,QACrD,cAAA2O,EAAAnP,EAAA,KAAA+O,EAAA,IACJ,gBAAA0Q,GAAA,OAAAzS,EAAArK,MAAA,KAAAD,UAAA,EAPM,IAQP,GAEFkF,SAASC,eAAe,gBAAgByX,iBACtC,QAAO,eAAAI,EAAAjd,GAAA1B,KAAAE,EACP,SAAAsD,EAAO5F,GAAC,OAAAoC,KAAAC,EAAA,SAAAwD,GAAA,cAAAA,EAAAzF,GAAA,OACNJ,EAAE4gB,iBACFlc,OAAO6N,YAAY,CACjBF,KAAM,eACNxQ,MAAOoH,SAASC,eAAe,mBAAmBrH,QACjD,cAAAgE,EAAAxE,EAAA,KAAAuE,EAAA,IACJ,gBAAAob,GAAA,OAAAD,EAAA/c,MAAA,KAAAD,UAAA,EAPM,IAQP,GAEFkF,SAASC,eAAe,SAASyX,iBAC/B,QAAO,eAAAM,EAAAnd,GAAA1B,KAAAE,EACP,SAAA4D,EAAOlG,GAAC,OAAAoC,KAAAC,EAAA,SAAA+D,GAAA,cAAAA,EAAAhG,GAAA,OACNJ,EAAE4gB,iBACFlc,OAAO6N,YAAY,CAAEF,KAAM,uBAAwB,cAAAjM,EAAA/E,EAAA,KAAA6E,EAAA,IACpD,gBAAAgb,GAAA,OAAAD,EAAAjd,MAAA,KAAAD,UAAA,EAJM,IAKP,GAIF,IAAMod,EAAkBlY,SAASC,eAAe,iBAC5CiY,GACFA,EAAgBR,iBACd,QAAO,eAAAS,EAAAtd,GAAA1B,KAAAE,EACP,SAAA+e,EAAOrhB,GAAC,OAAAoC,KAAAC,EAAA,SAAAif,GAAA,cAAAA,EAAAlhB,GAAA,OACNJ,EAAE4gB,iBACFlc,OAAO6N,YAAY,CACjBF,KAAM,8BACNxQ,MAAOoH,SAASC,eAAe,wBAAwBrH,MACvDgU,eAAgB5M,SAASC,eAAe,0BACrCrH,QACF,cAAAyf,EAAAjgB,EAAA,KAAAggB,EAAA,IACJ,gBAAAE,GAAA,OAAAH,EAAApd,MAAA,KAAAD,UAAA,EATM,IAUP,EAGN,CAoJIyd,GACA9c,OAAOic,iBACL,UAAS,eAAAc,EAAA3d,GAAA1B,KAAAE,EACT,SAAAof,EAAgB9B,GAAK,OAAAxd,KAAAC,EAAA,SAAAsf,GAAA,cAAAA,EAAAvhB,GAAA,UACfwf,EAAMgC,SAAWld,OAAM,CAAAid,EAAAvhB,EAAA,eAAAuhB,EAAAtgB,EAAA,iBAAAsgB,EAAAvhB,EAAA,EAGrBsf,EAAqBE,GAAM,cAAA+B,EAAAtgB,EAAA,KAAAqgB,EAAA,IAClC,gBAAAG,GAAA,OAAAJ,EAAAzd,MAAA,KAAAD,UAAA,EANQ,GAOT,CACE+d,SAAS,EACTC,OAAQzB,EAA0ByB,SAG/B,CAAErC,qBAAAA,GASXhb,OAAOic,iBACL,UAAS,eAAAqB,EAAAle,GAAA1B,KAAAE,EACT,SAAA2f,EAAgBrC,GAAK,OAAAxd,KAAAC,EAAA,SAAA6f,GAAA,cAAAA,EAAA9hB,GAAA,UACdwf,EAAM3J,MAAS2J,EAAM3J,KAAW,KAAC,CAAAiM,EAAA9hB,EAAA,eAAA8hB,EAAA7gB,EAAA,aAIX,iCAAvBue,EAAM3J,KAAW,KAAoC,CAAAiM,EAAA9hB,EAAA,eAAA8hB,EAAA7gB,EAAA,aAKrDue,EAAMgC,SAAWld,OAAOM,OAAM,CAAAkd,EAAA9hB,EAAA,eAAA8hB,EAAA7gB,EAAA,aAG7Bue,EAAMnQ,QAA2B,SAAjBmQ,EAAMnQ,OAAiB,CAAAyS,EAAA9hB,EAAA,eAAA8hB,EAAA7gB,EAAA,aAGjB,OAAvBof,EAA2B,CAAAyB,EAAA9hB,EAAA,QAC7BqgB,EAAqBb,EAAMnQ,OAG3BmC,GAAKc,qBAAqBkN,EAAMnQ,QAAQyS,EAAA9hB,EAAA,kBAC/Bwf,EAAMnQ,SAAWgR,EAAkB,CAAAyB,EAAA9hB,EAAA,eAAA8hB,EAAA7gB,EAAA,UAM7C,OAHIqf,IACHtM,GAAuBJ,GAA6B4L,EAAMnQ,QAC1DiR,GAA0B,GAC3BwB,EAAA9hB,EAAA,EACKsf,EAAqBE,GAAM,cAAAsC,EAAA7gB,EAAA,KAAA4gB,EAAA,IAClC,gBAAAE,GAAA,OAAAH,EAAAhe,MAAA,KAAAD,UAAA,EA9BQ,GA+BT,CAAE+d,SAAS,EAAOC,OAAQzB,EAA0ByB,SAItD,IAAIK,GAAqB,EAyEzB,OAtEA1d,OAAOic,iBACL,UAAS,eAAA0B,EAAAve,GAAA1B,KAAAE,EACT,SAAA2I,EAAgB2U,GAAK,IAAA0C,EAAAC,EAAAjL,EAAAF,EAAAC,EAAAmL,EAAA,OAAApgB,KAAAC,EAAA,SAAAkJ,GAAA,cAAAA,EAAAtK,EAAAsK,EAAAnL,GAAA,WAQjBwf,EAAM3J,MACgB,gCAAtB2J,EAAM3J,KAAW,MACjB2J,EAAMgC,SAAWld,OAAOM,SACxB4a,EAAMnQ,QACW,SAAjBmQ,EAAMnQ,QACkB,KAAb,QAAX6S,EAAA1C,EAAM6C,aAAK,IAAAH,OAAA,EAAXA,EAAa9gB,QAAY,CAAA+J,EAAAnL,EAAA,WAKA,OAAvBqgB,GACAA,IAAuBb,EAAMnQ,OAAM,CAAAlE,EAAAnL,EAAA,eAAAmL,EAAAlK,EAAA,cASjC+gB,EAAoB,CAAF7W,EAAAnL,EAAA,eAAAmL,EAAAlK,EAAA,UAKkB,OAFxC+gB,GAAqB,EAEfG,EAAoB3C,EAAM6C,MAAM,GAAElX,EAAAtK,EAAA,EAAAsK,EAAAnL,EAAA,EAKhCwR,GAAKC,gBAAgB+N,EAAMnQ,QAAO,cAAAlE,EAAAnL,EAAA,EACbwR,GAAK9L,iBAAgB,OAA9B,OAAdsR,EAAc7L,EAAAnK,EAAAmK,EAAAnL,EAAG,EACIwR,GAAKrI,uBAAuB6N,GAAe,OAAhEC,EAAY9L,EAAAnK,EAChBkW,EAAe1F,GAAKxJ,sBAAsBiP,GAAc9L,EAAAnL,EAAA,eAMc,OANdmL,EAAAtK,EAAA,EAAAuhB,EAAAjX,EAAAnK,EAKxDghB,GAAqB,EACrBG,EAAkBhQ,YAAY,CAAEF,KAAM,QAASxQ,MAAO2gB,EAAEnf,aAAckI,EAAAlK,EAAA,UAMxEif,EAA0BoC,QAC1B9Q,GAAKY,iCAAiC+P,GACtCtZ,SAASC,eAAe,gBAAgBrH,MAAQyV,EAEhDiL,EAAkBI,UAAYjD,EAC9BtL,GAAuBL,GAAyB6L,EAAMnQ,QACtDmC,GAAKQ,cAAc,mBAAoBkF,GAGvCkJ,EAAsBkC,QAAQ,cAAAnX,EAAAlK,EAAA,KAAA4J,EAAA,iBAEjC,gBAAA2X,GAAA,OAAAP,EAAAre,MAAA,KAAAD,UAAA,EAjEQ,GAkET,CAAEge,OAAQvB,EAAsBuB,SAG3B,CAAErC,qBAAAA,EACX,C,sQC17BA,IAAA1f,EAAAC,EAAAC,EAAA,mBAAAC,OAAAA,OAAA,GAAAC,EAAAF,EAAAG,UAAA,aAAAC,EAAAJ,EAAAK,aAAA,yBAAAC,EAAAN,EAAAE,EAAAE,EAAAE,GAAA,IAAAC,EAAAL,GAAAA,EAAAM,qBAAAC,EAAAP,EAAAO,EAAAC,EAAAC,OAAAC,OAAAL,EAAAC,WAAA,OAAAK,GAAAH,EAAA,mBAAAV,EAAAE,EAAAE,GAAA,IAAAE,EAAAC,EAAAG,EAAAI,EAAA,EAAAC,EAAAX,GAAA,GAAAY,GAAA,EAAAC,EAAA,CAAAF,EAAA,EAAAb,EAAA,EAAAgB,EAAApB,EAAAqB,EAAAC,EAAAN,EAAAM,EAAAC,KAAAvB,EAAA,GAAAsB,EAAA,SAAArB,EAAAC,GAAA,OAAAM,EAAAP,EAAAQ,EAAA,EAAAG,EAAAZ,EAAAmB,EAAAf,EAAAF,EAAAmB,CAAA,YAAAC,EAAApB,EAAAE,GAAA,IAAAK,EAAAP,EAAAU,EAAAR,EAAAH,EAAA,GAAAiB,GAAAF,IAAAV,GAAAL,EAAAgB,EAAAO,OAAAvB,IAAA,KAAAK,EAAAE,EAAAS,EAAAhB,GAAAqB,EAAAH,EAAAF,EAAAQ,EAAAjB,EAAA,GAAAN,EAAA,GAAAI,EAAAmB,IAAArB,KAAAQ,EAAAJ,GAAAC,EAAAD,EAAA,OAAAC,EAAA,MAAAD,EAAA,GAAAA,EAAA,GAAAR,GAAAQ,EAAA,IAAAc,KAAAhB,EAAAJ,EAAA,GAAAoB,EAAAd,EAAA,KAAAC,EAAA,EAAAU,EAAAC,EAAAhB,EAAAe,EAAAf,EAAAI,EAAA,IAAAc,EAAAG,IAAAnB,EAAAJ,EAAA,GAAAM,EAAA,GAAAJ,GAAAA,EAAAqB,KAAAjB,EAAA,GAAAN,EAAAM,EAAA,GAAAJ,EAAAe,EAAAf,EAAAqB,EAAAhB,EAAA,OAAAH,GAAAJ,EAAA,SAAAmB,EAAA,MAAAH,GAAA,EAAAd,CAAA,iBAAAE,EAAAW,EAAAQ,GAAA,GAAAT,EAAA,QAAAU,UAAA,oCAAAR,GAAA,IAAAD,GAAAK,EAAAL,EAAAQ,GAAAhB,EAAAQ,EAAAL,EAAAa,GAAAxB,EAAAQ,EAAA,EAAAT,EAAAY,KAAAM,GAAA,CAAAV,IAAAC,EAAAA,EAAA,GAAAA,EAAA,IAAAU,EAAAf,GAAA,GAAAkB,EAAAb,EAAAG,IAAAO,EAAAf,EAAAQ,EAAAO,EAAAC,EAAAR,GAAA,OAAAI,EAAA,EAAAR,EAAA,IAAAC,IAAAH,EAAA,QAAAL,EAAAO,EAAAF,GAAA,MAAAL,EAAAA,EAAA0B,KAAAnB,EAAAI,IAAA,MAAAc,UAAA,wCAAAzB,EAAA2B,KAAA,OAAA3B,EAAAW,EAAAX,EAAA4B,MAAApB,EAAA,IAAAA,EAAA,YAAAA,IAAAR,EAAAO,EAAA,SAAAP,EAAA0B,KAAAnB,GAAAC,EAAA,IAAAG,EAAAc,UAAA,oCAAApB,EAAA,YAAAG,EAAA,GAAAD,EAAAR,CAAA,UAAAC,GAAAiB,EAAAC,EAAAf,EAAA,GAAAQ,EAAAV,EAAAyB,KAAAvB,EAAAe,MAAAE,EAAA,YAAApB,GAAAO,EAAAR,EAAAS,EAAA,EAAAG,EAAAX,CAAA,SAAAe,EAAA,UAAAa,MAAA5B,EAAA2B,KAAAV,EAAA,GAAAhB,EAAAI,EAAAE,IAAA,GAAAI,CAAA,KAAAS,EAAA,YAAAV,IAAA,UAAAmB,IAAA,UAAAC,IAAA,CAAA9B,EAAAY,OAAAmB,eAAA,IAAAvB,EAAA,GAAAL,GAAAH,EAAAA,EAAA,GAAAG,QAAAW,GAAAd,EAAA,GAAAG,EAAA,yBAAAH,GAAAW,EAAAmB,EAAArB,UAAAC,EAAAD,UAAAG,OAAAC,OAAAL,GAAA,SAAAO,EAAAhB,GAAA,OAAAa,OAAAoB,eAAApB,OAAAoB,eAAAjC,EAAA+B,IAAA/B,EAAAkC,UAAAH,EAAAhB,GAAAf,EAAAM,EAAA,sBAAAN,EAAAU,UAAAG,OAAAC,OAAAF,GAAAZ,CAAA,QAAA8B,EAAApB,UAAAqB,EAAAhB,GAAAH,EAAA,cAAAmB,GAAAhB,GAAAgB,EAAA,cAAAD,GAAAA,EAAAK,YAAA,oBAAApB,GAAAgB,EAAAzB,EAAA,qBAAAS,GAAAH,GAAAG,GAAAH,EAAAN,EAAA,aAAAS,GAAAH,EAAAR,EAAA,yBAAAW,GAAAH,EAAA,oDAAAwB,GAAA,kBAAAC,EAAA7B,EAAA8B,EAAAtB,EAAA,cAAAD,GAAAf,EAAAE,EAAAE,EAAAH,GAAA,IAAAO,EAAAK,OAAA0B,eAAA,IAAA/B,EAAA,gBAAAR,GAAAQ,EAAA,EAAAO,GAAA,SAAAf,EAAAE,EAAAE,EAAAH,GAAA,SAAAK,EAAAJ,EAAAE,GAAAW,GAAAf,EAAAE,EAAA,SAAAF,GAAA,YAAAwC,QAAAtC,EAAAE,EAAAJ,EAAA,GAAAE,EAAAM,EAAAA,EAAAR,EAAAE,EAAA,CAAA2B,MAAAzB,EAAAqC,YAAAxC,EAAAyC,cAAAzC,EAAA0C,UAAA1C,IAAAD,EAAAE,GAAAE,GAAAE,EAAA,UAAAA,EAAA,WAAAA,EAAA,cAAAS,GAAAf,EAAAE,EAAAE,EAAAH,EAAA,UAAA4iB,GAAA7iB,EAAAE,GAAA,IAAAD,EAAAY,OAAAiiB,KAAA9iB,GAAA,GAAAa,OAAAkiB,sBAAA,KAAAziB,EAAAO,OAAAkiB,sBAAA/iB,GAAAE,IAAAI,EAAAA,EAAA0iB,OAAA,SAAA9iB,GAAA,OAAAW,OAAAoiB,yBAAAjjB,EAAAE,GAAAuC,UAAA,IAAAxC,EAAAsK,KAAAvG,MAAA/D,EAAAK,EAAA,QAAAL,CAAA,UAAA8J,GAAA/J,GAAA,QAAAE,EAAA,EAAAA,EAAA6D,UAAAvC,OAAAtB,IAAA,KAAAD,EAAA,MAAA8D,UAAA7D,GAAA6D,UAAA7D,GAAA,GAAAA,EAAA,EAAA2iB,GAAAhiB,OAAAZ,IAAA,GAAAkO,QAAA,SAAAjO,GAAAqY,GAAAvY,EAAAE,EAAAD,EAAAC,GAAA,GAAAW,OAAAqiB,0BAAAriB,OAAAsiB,iBAAAnjB,EAAAa,OAAAqiB,0BAAAjjB,IAAA4iB,GAAAhiB,OAAAZ,IAAAkO,QAAA,SAAAjO,GAAAW,OAAA0B,eAAAvC,EAAAE,EAAAW,OAAAoiB,yBAAAhjB,EAAAC,GAAA,UAAAF,CAAA,UAAAuY,GAAAvY,EAAAE,EAAAD,GAAA,OAAAC,EAAA,SAAAD,GAAA,IAAAO,EAAA,SAAAP,GAAA,aAAAmjB,GAAAnjB,KAAAA,EAAA,OAAAA,EAAA,IAAAD,EAAAC,EAAAE,OAAAkjB,aAAA,YAAArjB,EAAA,KAAAQ,EAAAR,EAAA2B,KAAA1B,EAAAC,UAAA,aAAAkjB,GAAA5iB,GAAA,OAAAA,EAAA,UAAAkB,UAAA,uDAAA4hB,OAAArjB,EAAA,CAAAsjB,CAAAtjB,GAAA,gBAAAmjB,GAAA5iB,GAAAA,EAAAA,EAAA,GAAAgjB,CAAAtjB,MAAAF,EAAAa,OAAA0B,eAAAvC,EAAAE,EAAA,CAAA2B,MAAA5B,EAAAwC,YAAA,EAAAC,cAAA,EAAAC,UAAA,IAAA3C,EAAAE,GAAAD,EAAAD,CAAA,UAAA0D,GAAAtD,EAAAH,EAAAD,EAAAE,EAAAI,EAAAe,EAAAZ,GAAA,QAAAD,EAAAJ,EAAAiB,GAAAZ,GAAAG,EAAAJ,EAAAqB,KAAA,OAAAzB,GAAA,YAAAJ,EAAAI,EAAA,CAAAI,EAAAoB,KAAA3B,EAAAW,GAAA+C,QAAAC,QAAAhD,GAAAiD,KAAA3D,EAAAI,EAAA,CAiBA,IAAMmjB,IAAoB,IAAInO,aAAcsG,OAAO,gBAM5C,SAAelF,GAAWxH,GAAA,OAAAwU,GAAA1f,MAAC,KAADD,UAAA,CAsCjC,SAAA2f,KAFC,OA3DDtjB,EA6DAgC,KAAAE,EAtCO,SAAA6C,EAAAiJ,GAAA,IAAAwI,EAAAD,EAAAE,EAAA8M,EAAAC,EAAAC,EAAAC,EAAAnb,EAAAob,EAAAC,EAAAnE,EAAA,OAAAzd,KAAAC,EAAA,SAAAgD,GAAA,cAAAA,EAAApE,EAAAoE,EAAAjF,GAAA,OAKuC,OAJ5CwW,EAAaxI,EAAbwI,cACAD,EAAcvI,EAAduI,eACAE,EAAezI,EAAfyI,gBAEM8M,EAAa,IAAIM,GAAAA,GAAqB5e,EAAAjF,EAAA,EACnBujB,EAAWpe,UAClC,MAAKwE,GAAA,GACA8M,IACL,GACD,OAMC,OAVE+M,EAAYve,EAAAjE,EAMZyiB,EAAQ,IAAIK,GAAAA,GAAY,CAC1BC,IAAKR,EACLS,IAAK,IAAIC,GAAAA,GACTC,KAAM,IAAIC,GAAAA,KACVlf,EAAAjF,EAAA,EAEuByjB,EAAMW,uBAAuB,CACpDC,aAAcb,EACdc,IAAK/N,EACLgO,KAAMlB,KACN,OAJc,OAAZK,EAAYze,EAAAjE,EAAAiE,EAAAjF,EAAG,EAMQmJ,EAAuBsN,GAAgB,OACA,OAD9DlO,EAActD,EAAAjE,EACd2iB,EAAMtb,EAAyBkO,EAAgBhO,GAAetD,EAAApE,EAAA,EAAAoE,EAAAjF,EAAA,EAGpD0jB,EAAac,KAAKhO,EAAemN,GAAI,OAAjDC,EAAG3e,EAAAjE,EAAAiE,EAAAjF,EAAG,EAAH,mBAAAiF,EAAApE,EAAG,EAAH4e,EAAAxa,EAAAjE,EAEG,IAAIkE,MACR,gGACEua,EAAExc,YACL,cAAAgC,EAAAhE,EAAA,EAEI2iB,GAAG,EAAA7e,EAAA,gBAGZue,GA7DA,eAAAzjB,EAAA,KAAAD,EAAA+D,UAAA,WAAAJ,QAAA,SAAAzD,EAAAI,GAAA,IAAAe,EAAAjB,EAAA4D,MAAA/D,EAAAD,GAAA,SAAAiE,EAAA7D,GAAAsD,GAAArC,EAAAnB,EAAAI,EAAA2D,EAAAC,EAAA,OAAA9D,EAAA,UAAA8D,EAAA9D,GAAAsD,GAAArC,EAAAnB,EAAAI,EAAA2D,EAAAC,EAAA,QAAA9D,EAAA,CAAA6D,OAAA,OA2DCD,MAAA,KAAAD,WA3DD,IAAA3D,CA2DC,C,cC3DD,IAAAJ,EAAAC,EAAAC,EAAA,mBAAAC,OAAAA,OAAA,GAAAC,EAAAF,EAAAG,UAAA,aAAAC,EAAAJ,EAAAK,aAAA,yBAAAC,EAAAN,EAAAE,EAAAE,EAAAE,GAAA,IAAAC,EAAAL,GAAAA,EAAAM,qBAAAC,EAAAP,EAAAO,EAAAC,EAAAC,OAAAC,OAAAL,EAAAC,WAAA,OAAAK,GAAAH,EAAA,mBAAAV,EAAAE,EAAAE,GAAA,IAAAE,EAAAC,EAAAG,EAAAI,EAAA,EAAAC,EAAAX,GAAA,GAAAY,GAAA,EAAAC,EAAA,CAAAF,EAAA,EAAAb,EAAA,EAAAgB,EAAApB,EAAAqB,EAAAC,EAAAN,EAAAM,EAAAC,KAAAvB,EAAA,GAAAsB,EAAA,SAAArB,EAAAC,GAAA,OAAAM,EAAAP,EAAAQ,EAAA,EAAAG,EAAAZ,EAAAmB,EAAAf,EAAAF,EAAAmB,CAAA,YAAAC,EAAApB,EAAAE,GAAA,IAAAK,EAAAP,EAAAU,EAAAR,EAAAH,EAAA,GAAAiB,GAAAF,IAAAV,GAAAL,EAAAgB,EAAAO,OAAAvB,IAAA,KAAAK,EAAAE,EAAAS,EAAAhB,GAAAqB,EAAAH,EAAAF,EAAAQ,EAAAjB,EAAA,GAAAN,EAAA,GAAAI,EAAAmB,IAAArB,KAAAQ,EAAAJ,GAAAC,EAAAD,EAAA,OAAAC,EAAA,MAAAD,EAAA,GAAAA,EAAA,GAAAR,GAAAQ,EAAA,IAAAc,KAAAhB,EAAAJ,EAAA,GAAAoB,EAAAd,EAAA,KAAAC,EAAA,EAAAU,EAAAC,EAAAhB,EAAAe,EAAAf,EAAAI,EAAA,IAAAc,EAAAG,IAAAnB,EAAAJ,EAAA,GAAAM,EAAA,GAAAJ,GAAAA,EAAAqB,KAAAjB,EAAA,GAAAN,EAAAM,EAAA,GAAAJ,EAAAe,EAAAf,EAAAqB,EAAAhB,EAAA,OAAAH,GAAAJ,EAAA,SAAAmB,EAAA,MAAAH,GAAA,EAAAd,CAAA,iBAAAE,EAAAW,EAAAQ,GAAA,GAAAT,EAAA,QAAAU,UAAA,oCAAAR,GAAA,IAAAD,GAAAK,EAAAL,EAAAQ,GAAAhB,EAAAQ,EAAAL,EAAAa,GAAAxB,EAAAQ,EAAA,EAAAT,EAAAY,KAAAM,GAAA,CAAAV,IAAAC,EAAAA,EAAA,GAAAA,EAAA,IAAAU,EAAAf,GAAA,GAAAkB,EAAAb,EAAAG,IAAAO,EAAAf,EAAAQ,EAAAO,EAAAC,EAAAR,GAAA,OAAAI,EAAA,EAAAR,EAAA,IAAAC,IAAAH,EAAA,QAAAL,EAAAO,EAAAF,GAAA,MAAAL,EAAAA,EAAA0B,KAAAnB,EAAAI,IAAA,MAAAc,UAAA,wCAAAzB,EAAA2B,KAAA,OAAA3B,EAAAW,EAAAX,EAAA4B,MAAApB,EAAA,IAAAA,EAAA,YAAAA,IAAAR,EAAAO,EAAA,SAAAP,EAAA0B,KAAAnB,GAAAC,EAAA,IAAAG,EAAAc,UAAA,oCAAApB,EAAA,YAAAG,EAAA,GAAAD,EAAAR,CAAA,UAAAC,GAAAiB,EAAAC,EAAAf,EAAA,GAAAQ,EAAAV,EAAAyB,KAAAvB,EAAAe,MAAAE,EAAA,YAAApB,GAAAO,EAAAR,EAAAS,EAAA,EAAAG,EAAAX,CAAA,SAAAe,EAAA,UAAAa,MAAA5B,EAAA2B,KAAAV,EAAA,GAAAhB,EAAAI,EAAAE,IAAA,GAAAI,CAAA,KAAAS,EAAA,YAAAV,IAAA,UAAAmB,IAAA,UAAAC,IAAA,CAAA9B,EAAAY,OAAAmB,eAAA,IAAAvB,EAAA,GAAAL,GAAAH,EAAAA,EAAA,GAAAG,QAAAW,GAAAd,EAAA,GAAAG,EAAA,yBAAAH,GAAAW,EAAAmB,EAAArB,UAAAC,EAAAD,UAAAG,OAAAC,OAAAL,GAAA,SAAAO,EAAAhB,GAAA,OAAAa,OAAAoB,eAAApB,OAAAoB,eAAAjC,EAAA+B,IAAA/B,EAAAkC,UAAAH,EAAAhB,GAAAf,EAAAM,EAAA,sBAAAN,EAAAU,UAAAG,OAAAC,OAAAF,GAAAZ,CAAA,QAAA8B,EAAApB,UAAAqB,EAAAhB,GAAAH,EAAA,cAAAmB,GAAAhB,GAAAgB,EAAA,cAAAD,GAAAA,EAAAK,YAAA,oBAAApB,GAAAgB,EAAAzB,EAAA,qBAAAS,GAAAH,GAAAG,GAAAH,EAAAN,EAAA,aAAAS,GAAAH,EAAAR,EAAA,yBAAAW,GAAAH,EAAA,oDAAAwB,GAAA,kBAAAC,EAAA7B,EAAA8B,EAAAtB,EAAA,cAAAD,GAAAf,EAAAE,EAAAE,EAAAH,GAAA,IAAAO,EAAAK,OAAA0B,eAAA,IAAA/B,EAAA,gBAAAR,GAAAQ,EAAA,EAAAO,GAAA,SAAAf,EAAAE,EAAAE,EAAAH,GAAA,SAAAK,EAAAJ,EAAAE,GAAAW,GAAAf,EAAAE,EAAA,SAAAF,GAAA,YAAAwC,QAAAtC,EAAAE,EAAAJ,EAAA,GAAAE,EAAAM,EAAAA,EAAAR,EAAAE,EAAA,CAAA2B,MAAAzB,EAAAqC,YAAAxC,EAAAyC,cAAAzC,EAAA0C,UAAA1C,IAAAD,EAAAE,GAAAE,GAAAE,EAAA,UAAAA,EAAA,WAAAA,EAAA,cAAAS,GAAAf,EAAAE,EAAAE,EAAAH,EAAA,UAAAyD,GAAAtD,EAAAH,EAAAD,EAAAE,EAAAI,EAAAe,EAAAZ,GAAA,QAAAD,EAAAJ,EAAAiB,GAAAZ,GAAAG,EAAAJ,EAAAqB,KAAA,OAAAzB,GAAA,YAAAJ,EAAAI,EAAA,CAAAI,EAAAoB,KAAA3B,EAAAW,GAAA+C,QAAAC,QAAAhD,GAAAiD,KAAA3D,EAAAI,EAAA,UAAAwD,GAAA1D,GAAA,sBAAAH,EAAA,KAAAD,EAAA+D,UAAA,WAAAJ,QAAA,SAAAzD,EAAAI,GAAA,IAAAe,EAAAjB,EAAA4D,MAAA/D,EAAAD,GAAA,SAAAiE,EAAA7D,GAAAsD,GAAArC,EAAAnB,EAAAI,EAAA2D,EAAAC,EAAA,OAAA9D,EAAA,UAAA8D,EAAA9D,GAAAsD,GAAArC,EAAAnB,EAAAI,EAAA2D,EAAAC,EAAA,QAAA9D,EAAA,CAAA6D,OAAA,MAQAS,OAAOkN,KAAOA,GAGd3I,SAAS0X,iBAAiB,mBAAkB7c,GAAA1B,KAAAE,EAAE,SAAA6C,IAAA,IAAA0f,EAAAzN,EAAAC,EAAAC,EAAA,OAAAlV,KAAAC,EAAA,SAAAgD,GAAA,cAAAA,EAAAjF,GAAA,OAO3C,GANDqf,GAAkB/I,KAGZmO,EAAgBjT,GAAKgC,gBAEzBhC,GAAK0B,cAAcuR,GAGjBngB,OAAOM,SAAWN,OAAM,CAAAW,EAAAjF,EAAA,eAAAiF,EAAAjF,EAAA,EAGpBwR,GAAKC,gBAAgBnN,OAAOI,SAAS2K,QAAO,OAAApK,EAAAjF,EAAA,sBAAAiF,EAAAjF,EAAA,EAO5CwR,GAAKE,2BAA0B,cAAAzM,EAAAjF,EAAA,EAGVwR,GAAK9L,iBAAgB,OAA9B,OAAdsR,EAAc/R,EAAAjE,EAAAiE,EAAAjF,EAAG,EACIwR,GAAKrI,uBAAuB6N,GAAe,OAAhEC,EAAYhS,EAAAjE,EACZkW,EAAe1F,GAAKxJ,sBAAsBiP,GAChDpO,SAASC,eAAe,gBAAgBrH,MAAQyV,EAE5C5S,OAAOM,SAAWN,QAGpBkN,GAAKQ,cAAc,mBAAoBkF,GACxC,cAAAjS,EAAAhE,EAAA,KAAA8D,EAAA,I,wBC3CH2f,EAAOC,QAAUvgB,M,eCCbwgB,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBrgB,IAAjBsgB,EACH,OAAOA,EAAaJ,QAGrB,IAAID,EAASE,EAAyBE,GAAY,CACjDE,GAAIF,EACJG,QAAQ,EACRN,QAAS,CAAC,GAUX,OANAO,EAAoBJ,GAAUvjB,KAAKmjB,EAAOC,QAASD,EAAQA,EAAOC,QAASE,GAG3EH,EAAOO,QAAS,EAGTP,EAAOC,OACf,CAGAE,EAAoB3iB,EAAIgjB,EV5BpB3lB,EAAW,GACfslB,EAAoBM,EAAI,CAACpb,EAAQqb,EAAUC,EAAIC,KAC9C,IAAGF,EAAH,CAMA,IAAIG,EAAeC,IACnB,IAASplB,EAAI,EAAGA,EAAIb,EAAS6B,OAAQhB,IAAK,CAGzC,IAFA,IAAKglB,EAAUC,EAAIC,GAAY/lB,EAASa,GACpCqlB,GAAY,EACPvb,EAAI,EAAGA,EAAIkb,EAAShkB,OAAQ8I,MACpB,EAAXob,GAAsBC,GAAgBD,IAAa7kB,OAAOiiB,KAAKmC,EAAoBM,GAAGO,MAAO/e,GAASke,EAAoBM,EAAExe,GAAKye,EAASlb,KAC9Ikb,EAASO,OAAOzb,IAAK,IAErBub,GAAY,EACTH,EAAWC,IAAcA,EAAeD,IAG7C,GAAGG,EAAW,CACblmB,EAASomB,OAAOvlB,IAAK,GACrB,IAAIN,EAAIulB,SACE5gB,IAAN3E,IAAiBiK,EAASjK,EAC/B,CACD,CACA,OAAOiK,CAnBP,CAJCub,EAAWA,GAAY,EACvB,IAAI,IAAIllB,EAAIb,EAAS6B,OAAQhB,EAAI,GAAKb,EAASa,EAAI,GAAG,GAAKklB,EAAUllB,IAAKb,EAASa,GAAKb,EAASa,EAAI,GACrGb,EAASa,GAAK,CAACglB,EAAUC,EAAIC,IWJ/BT,EAAoB7kB,EAAK0kB,IACxB,IAAIkB,EAASlB,GAAUA,EAAOmB,WAC7B,IAAOnB,EAAiB,QACxB,IAAM,EAEP,OADAG,EAAoB3jB,EAAE0kB,EAAQ,CAAE3kB,EAAG2kB,IAC5BA,GVNJnmB,EAAWgB,OAAOmB,eAAkBkkB,GAASrlB,OAAOmB,eAAekkB,GAASA,GAASA,EAAa,UAQtGjB,EAAoBhlB,EAAI,SAAS4B,EAAOkO,GAEvC,GADU,EAAPA,IAAUlO,EAAQskB,KAAKtkB,IAChB,EAAPkO,EAAU,OAAOlO,EACpB,GAAoB,iBAAVA,GAAsBA,EAAO,CACtC,GAAW,EAAPkO,GAAalO,EAAMokB,WAAY,OAAOpkB,EAC1C,GAAW,GAAPkO,GAAoC,mBAAflO,EAAMgC,KAAqB,OAAOhC,CAC5D,CACA,IAAIukB,EAAKvlB,OAAOC,OAAO,MACvBmkB,EAAoB/kB,EAAEkmB,GACtB,IAAIC,EAAM,CAAC,EACXzmB,EAAiBA,GAAkB,CAAC,KAAMC,EAAS,CAAC,GAAIA,EAAS,IAAKA,EAASA,IAC/E,IAAI,IAAIymB,EAAiB,EAAPvW,GAAYlO,GAA0B,iBAAXykB,GAAyC,mBAAXA,MAA4B1mB,EAAeiL,QAAQyb,GAAUA,EAAUzmB,EAASymB,GAC1JzlB,OAAO0lB,oBAAoBD,GAASnY,QAASpH,GAASsf,EAAItf,GAAO,IAAOlF,EAAMkF,IAI/E,OAFAsf,EAAa,QAAI,IAAM,EACvBpB,EAAoB3jB,EAAE8kB,EAAIC,GACnBD,CACR,EWxBAnB,EAAoB3jB,EAAI,CAACyjB,EAASyB,KACjC,IAAI,IAAIzf,KAAOyf,EACXvB,EAAoB3kB,EAAEkmB,EAAYzf,KAASke,EAAoB3kB,EAAEykB,EAAShe,IAC5ElG,OAAO0B,eAAewiB,EAAShe,EAAK,CAAEtE,YAAY,EAAMqN,IAAK0W,EAAWzf,MCJ3Eke,EAAoBjkB,EAAI,CAAC,EAGzBikB,EAAoBjlB,EAAKymB,GACjB9iB,QAAQ+iB,IAAI7lB,OAAOiiB,KAAKmC,EAAoBjkB,GAAG2lB,OAAO,CAACC,EAAU7f,KACvEke,EAAoBjkB,EAAE+F,GAAK0f,EAASG,GAC7BA,GACL,KCNJ3B,EAAoBrkB,EAAK6lB,GAEjB,UAAY,CAAC,IAAM,uBAAuB,IAAM,wBAAwBA,GAAW,MCF3FxB,EAAoB4B,SAAYJ,MCDhCxB,EAAoB6B,EAAI,WACvB,GAA0B,iBAAfviB,WAAyB,OAAOA,WAC3C,IACC,OAAO4hB,MAAQ,IAAIY,SAAS,cAAb,EAChB,CAAE,MAAO/mB,GACR,GAAsB,iBAAX0E,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBugB,EAAoB3kB,EAAI,CAAC4lB,EAAKc,IAAUnmB,OAAOH,UAAU+G,eAAe9F,KAAKukB,EAAKc,GfA9ElnB,EAAa,CAAC,EACdC,EAAoB,mBAExBklB,EAAoBxjB,EAAI,CAACwlB,EAAKrlB,EAAMmF,EAAK0f,KACxC,GAAG3mB,EAAWmnB,GAAQnnB,EAAWmnB,GAAK1c,KAAK3I,OAA3C,CACA,IAAIslB,EAAQC,EACZ,QAAWtiB,IAARkC,EAEF,IADA,IAAIqgB,EAAUne,SAASoe,qBAAqB,UACpC7mB,EAAI,EAAGA,EAAI4mB,EAAQ5lB,OAAQhB,IAAK,CACvC,IAAIoI,EAAIwe,EAAQ5mB,GAChB,GAAGoI,EAAE0e,aAAa,QAAUL,GAAOre,EAAE0e,aAAa,iBAAmBvnB,EAAoBgH,EAAK,CAAEmgB,EAASte,EAAG,KAAO,CACpH,CAEGse,IACHC,GAAa,GACbD,EAASje,SAASG,cAAc,WAEzBme,QAAU,QACbtC,EAAoBuC,IACvBN,EAAOO,aAAa,QAASxC,EAAoBuC,IAElDN,EAAOO,aAAa,eAAgB1nB,EAAoBgH,GAExDmgB,EAAOQ,IAAMT,EAC4C,IAArDC,EAAOQ,IAAI7c,QAAQnG,OAAOI,SAAS2K,OAAS,OAC/CyX,EAAOS,YAAc,aAEtBT,EAAOU,UAAY3C,EAAoB4C,UAAUpB,GACjDS,EAAOS,YAAc,aAEtB7nB,EAAWmnB,GAAO,CAACrlB,GACnB,IAAIkmB,EAAmB,CAACC,EAAMnI,KAE7BsH,EAAOc,QAAUd,EAAOe,OAAS,KACjCC,aAAaC,GACb,IAAIC,EAAUtoB,EAAWmnB,GAIzB,UAHOnnB,EAAWmnB,GAClBC,EAAOmB,YAAcnB,EAAOmB,WAAWC,YAAYpB,GACnDkB,GAAWA,EAAQja,QAASsX,GAAQA,EAAG7F,IACpCmI,EAAM,OAAOA,EAAKnI,IAElBuI,EAAUI,WAAWT,EAAiBvmB,KAAK,UAAMsD,EAAW,CAAEwN,KAAM,UAAWmW,OAAQtB,IAAW,MACtGA,EAAOc,QAAUF,EAAiBvmB,KAAK,KAAM2lB,EAAOc,SACpDd,EAAOe,OAASH,EAAiBvmB,KAAK,KAAM2lB,EAAOe,QACnDd,GAAcle,SAASwf,KAAKnf,YAAY4d,EAxCkB,GgBH3DjC,EAAoB/kB,EAAK6kB,IACH,oBAAX5kB,QAA0BA,OAAOI,aAC1CM,OAAO0B,eAAewiB,EAAS5kB,OAAOI,YAAa,CAAEsB,MAAO,WAE7DhB,OAAO0B,eAAewiB,EAAS,aAAc,CAAEljB,OAAO,KCLvDojB,EAAoByD,IAAO5D,IAC1BA,EAAO6D,MAAQ,GACV7D,EAAO8D,WAAU9D,EAAO8D,SAAW,IACjC9D,GCHRG,EAAoBhkB,EAAI,ICCxBgkB,EAAoB4C,UAAY,CAAC,IAAM,0EAA0E,IAAM,2E,MCIvH,IAAIgB,EAAkB,CACrB,IAAK,GAGN5D,EAAoBjkB,EAAEsJ,EAAI,CAACmc,EAASG,KAElC,IAAIkC,EAAqB7D,EAAoB3kB,EAAEuoB,EAAiBpC,GAAWoC,EAAgBpC,QAAW5hB,EACtG,GAA0B,IAAvBikB,EAGF,GAAGA,EACFlC,EAASrc,KAAKue,EAAmB,QAC3B,CAGL,IAAIC,EAAU,IAAIplB,QAAQ,CAACC,EAASolB,IAAYF,EAAqBD,EAAgBpC,GAAW,CAAC7iB,EAASolB,IAC1GpC,EAASrc,KAAKue,EAAmB,GAAKC,GAGtC,IAAI9B,EAAMhC,EAAoBhkB,EAAIgkB,EAAoBrkB,EAAE6lB,GAEpDvW,EAAQ,IAAI5K,MAgBhB2f,EAAoBxjB,EAAEwlB,EAfFrH,IACnB,GAAGqF,EAAoB3kB,EAAEuoB,EAAiBpC,KAEf,KAD1BqC,EAAqBD,EAAgBpC,MACRoC,EAAgBpC,QAAW5hB,GACrDikB,GAAoB,CACtB,IAAIG,EAAYrJ,IAAyB,SAAfA,EAAMvN,KAAkB,UAAYuN,EAAMvN,MAChE6W,EAAUtJ,GAASA,EAAM4I,QAAU5I,EAAM4I,OAAOd,IACpDxX,EAAM/G,QAAU,iBAAmBsd,EAAU,cAAgBwC,EAAY,KAAOC,EAAU,IAC1FhZ,EAAM1M,KAAO,iBACb0M,EAAMmC,KAAO4W,EACb/Y,EAAMiZ,QAAUD,EAChBJ,EAAmB,GAAG5Y,EACvB,GAGuC,SAAWuW,EAASA,EAE/D,GAYHxB,EAAoBM,EAAEjb,EAAKmc,GAA0C,IAA7BoC,EAAgBpC,GAGxD,IAAI2C,EAAuB,CAACC,EAA4BpT,KACvD,IAGIiP,EAAUuB,GAHTjB,EAAU8D,EAAaC,GAAWtT,EAGhBzV,EAAI,EAC3B,GAAGglB,EAASgE,KAAMpE,GAAgC,IAAxByD,EAAgBzD,IAAa,CACtD,IAAIF,KAAYoE,EACZrE,EAAoB3kB,EAAEgpB,EAAapE,KACrCD,EAAoB3iB,EAAE4iB,GAAYoE,EAAYpE,IAGhD,GAAGqE,EAAS,IAAIpf,EAASof,EAAQtE,EAClC,CAEA,IADGoE,GAA4BA,EAA2BpT,GACrDzV,EAAIglB,EAAShkB,OAAQhB,IACzBimB,EAAUjB,EAAShlB,GAChBykB,EAAoB3kB,EAAEuoB,EAAiBpC,IAAYoC,EAAgBpC,IACrEoC,EAAgBpC,GAAS,KAE1BoC,EAAgBpC,GAAW,EAE5B,OAAOxB,EAAoBM,EAAEpb,IAG1Bsf,EAAqBC,KAAkC,4BAAIA,KAAkC,6BAAK,GACtGD,EAAmBtb,QAAQib,EAAqB7nB,KAAK,KAAM,IAC3DkoB,EAAmBlf,KAAO6e,EAAqB7nB,KAAK,KAAMkoB,EAAmBlf,KAAKhJ,KAAKkoB,G,KClFvF,IAAIE,EAAsB1E,EAAoBM,OAAE1gB,EAAW,CAAC,IAAK,IAAOogB,EAAoB,MAC5F0E,EAAsB1E,EAAoBM,EAAEoE,E","sources":["webpack://export-and-sign/webpack/runtime/chunk loaded","webpack://export-and-sign/webpack/runtime/create fake namespace object","webpack://export-and-sign/webpack/runtime/load script","webpack://export-and-sign/../shared/turnkey-core.js","webpack://export-and-sign/./src/turnkey-core.js","webpack://export-and-sign/./src/telemetry.js","webpack://export-and-sign/./src/event-handlers.js","webpack://export-and-sign/../shared/crypto-utils.js","webpack://export-and-sign/./src/index.js","webpack://export-and-sign/external var \"crypto\"","webpack://export-and-sign/webpack/bootstrap","webpack://export-and-sign/webpack/runtime/compat get default export","webpack://export-and-sign/webpack/runtime/define property getters","webpack://export-and-sign/webpack/runtime/ensure chunk","webpack://export-and-sign/webpack/runtime/get javascript chunk filename","webpack://export-and-sign/webpack/runtime/get mini-css chunk filename","webpack://export-and-sign/webpack/runtime/global","webpack://export-and-sign/webpack/runtime/hasOwnProperty shorthand","webpack://export-and-sign/webpack/runtime/make namespace object","webpack://export-and-sign/webpack/runtime/node module decorator","webpack://export-and-sign/webpack/runtime/publicPath","webpack://export-and-sign/webpack/runtime/compat","webpack://export-and-sign/webpack/runtime/jsonp chunk loading","webpack://export-and-sign/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"export-and-sign:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t\tif (script.src.indexOf(window.location.origin + '/') !== 0) {\n\t\t\tscript.crossOrigin = \"anonymous\";\n\t\t}\n\t\tscript.integrity = __webpack_require__.sriHashes[chunkId];\n\t\tscript.crossOrigin = \"anonymous\";\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import { bech32 } from \"bech32\";\n\n/**\n * Turnkey Core Module - Shared\n * Contains all the core cryptographic and utility functions shared across frames\n */\n\n/** constants for LocalStorage */\nconst TURNKEY_TARGET_EMBEDDED_KEY = \"TURNKEY_TARGET_EMBEDDED_KEY\";\nconst TURNKEY_SETTINGS = \"TURNKEY_SETTINGS\";\n/** 48 hours in milliseconds */\nconst TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS = 1000 * 60 * 60 * 48;\n\nlet parentFrameMessageChannelPort = null;\nlet parentFrameTargetOrigin = \"*\";\nvar cryptoProviderOverride = null;\n\n/*\n * Returns a reference to the WebCrypto subtle interface regardless of the host environment.\n */\nfunction getSubtleCrypto() {\n if (cryptoProviderOverride && cryptoProviderOverride.subtle) {\n return cryptoProviderOverride.subtle;\n }\n if (\n typeof globalThis !== \"undefined\" &&\n globalThis.crypto &&\n globalThis.crypto.subtle\n ) {\n return globalThis.crypto.subtle;\n }\n if (typeof window !== \"undefined\" && window.crypto && window.crypto.subtle) {\n return window.crypto.subtle;\n }\n if (typeof global !== \"undefined\" && global.crypto && global.crypto.subtle) {\n return global.crypto.subtle;\n }\n if (typeof crypto !== \"undefined\" && crypto.subtle) {\n return crypto.subtle;\n }\n\n return null;\n}\n\n/*\n * Allows tests to explicitly set the crypto provider (e.g. crypto.webcrypto) when the runtime\n * environment does not expose one on the global/window objects.\n */\nfunction setCryptoProvider(cryptoProvider) {\n cryptoProviderOverride = cryptoProvider || null;\n}\n\n/* Security functions */\n\nfunction isDoublyIframed() {\n if (window.location.ancestorOrigins !== undefined) {\n // Does not exist in IE and firefox.\n // See https://developer.mozilla.org/en-US/docs/Web/API/Location/ancestorOrigins for how this works\n return window.location.ancestorOrigins.length > 1;\n } else {\n return window.parent !== window.top;\n }\n}\n\n/*\n * Loads the quorum public key as a CryptoKey.\n */\nasync function loadQuorumKey(quorumPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.importKey(\n \"raw\",\n quorumPublic,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n [\"verify\"]\n );\n}\n\n/*\n * Load a key to encrypt to as a CryptoKey and return it as a JSON Web Key.\n */\nasync function loadTargetKey(targetPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const targetKey = await subtle.importKey(\n \"raw\",\n targetPublic,\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n\n return await subtle.exportKey(\"jwk\", targetKey);\n}\n\n/**\n * Throws unless the caller provided an explicit storage key. Consumers must\n * choose a key slot deliberately (e.g. scoped by parent origin); an implicit\n * global default is what enabled cross-origin bundle replay (INT-697).\n * @param {string} storageKey\n */\nfunction requireStorageKey(storageKey) {\n if (typeof storageKey !== \"string\" || storageKey.length === 0) {\n throw new Error(\"an explicit embedded key storage key is required\");\n }\n}\n\n/**\n * Creates a new public/private key pair and persists it in localStorage\n * @param {string} storageKey localStorage key used for persistence\n */\nasync function initEmbeddedKey(storageKey) {\n requireStorageKey(storageKey);\n if (isDoublyIframed()) {\n throw new Error(\"Doubly iframed\");\n }\n const retrievedKey = await getEmbeddedKey(storageKey);\n if (retrievedKey === null) {\n const targetKey = await generateTargetKey();\n setEmbeddedKey(targetKey, storageKey);\n }\n // Nothing to do, key is correctly initialized!\n}\n\n/*\n * Generate a key to encrypt to and export it as a JSON Web Key.\n */\nasync function generateTargetKey() {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const p256key = await subtle.generateKey(\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n [\"deriveBits\"]\n );\n\n return await subtle.exportKey(\"jwk\", p256key.privateKey);\n}\n\n/**\n * Gets the current embedded private key JWK. Returns `null` if not found.\n * @param {string} storageKey localStorage key used for persistence\n */\nfunction getEmbeddedKey(storageKey) {\n requireStorageKey(storageKey);\n const jwtKey = getItemWithExpiry(storageKey);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the embedded private key JWK with the default expiration time.\n * @param {JsonWebKey} targetKey\n * @param {string} storageKey localStorage key used for persistence\n */\nfunction setEmbeddedKey(targetKey, storageKey) {\n requireStorageKey(storageKey);\n setItemWithExpiry(\n storageKey,\n JSON.stringify(targetKey),\n TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS\n );\n}\n\n/**\n * Gets the current target embedded private key JWK. Returns `null` if not found.\n */\nfunction getTargetEmbeddedKey() {\n const jwtKey = window.localStorage.getItem(TURNKEY_TARGET_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the target embedded public key JWK.\n * @param {JsonWebKey} targetKey\n */\nfunction setTargetEmbeddedKey(targetKey) {\n window.localStorage.setItem(\n TURNKEY_TARGET_EMBEDDED_KEY,\n JSON.stringify(targetKey)\n );\n}\n\n/**\n * Resets the current embedded private key JWK.\n * @param {string} storageKey localStorage key used for persistence\n */\nfunction onResetEmbeddedKey(storageKey) {\n requireStorageKey(storageKey);\n window.localStorage.removeItem(storageKey);\n}\n\n/**\n * Resets the current target embedded private key JWK.\n */\nfunction resetTargetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_TARGET_EMBEDDED_KEY);\n}\n\nfunction setParentFrameMessageChannelPort(port) {\n parentFrameMessageChannelPort = port;\n}\n\n/**\n * Restricts direct window.parent postMessages to the given origin. Used by\n * the legacy (< 2.1.0 iframe-stamper) path once the parent origin is bound,\n * so responses are only readable by that origin.\n * @param {string} origin\n */\nfunction setParentFrameOrigin(origin) {\n if (typeof origin !== \"string\" || origin.length === 0) {\n throw new Error(\"a canonical, non-opaque parent frame origin is required\");\n }\n\n let parsedOrigin;\n try {\n parsedOrigin = new URL(origin).origin;\n } catch {\n throw new Error(\"a canonical, non-opaque parent frame origin is required\");\n }\n\n if (parsedOrigin === \"null\" || parsedOrigin !== origin) {\n throw new Error(\"a canonical, non-opaque parent frame origin is required\");\n }\n parentFrameTargetOrigin = parsedOrigin;\n}\n\n/**\n * Gets the current settings.\n */\nfunction getSettings() {\n const settings = window.localStorage.getItem(TURNKEY_SETTINGS);\n return settings ? JSON.parse(settings) : null;\n}\n\n/**\n * Sets the settings object.\n * @param {Object} settings\n */\nfunction setSettings(settings) {\n window.localStorage.setItem(TURNKEY_SETTINGS, JSON.stringify(settings));\n}\n\n/**\n * Set an item in localStorage with an expiration time\n * @param {string} key\n * @param {string} value\n * @param {number} ttl expiration time in milliseconds\n */\nfunction setItemWithExpiry(key, value, ttl) {\n const now = new Date();\n const item = {\n value: value,\n expiry: now.getTime() + ttl,\n };\n window.localStorage.setItem(key, JSON.stringify(item));\n}\n\n/**\n * Get an item from localStorage. Returns `null` and\n * removes the item from localStorage if expired or\n * expiry time is missing.\n * @param {string} key\n */\nfunction getItemWithExpiry(key) {\n const itemStr = window.localStorage.getItem(key);\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n if (\n !Object.prototype.hasOwnProperty.call(item, \"expiry\") ||\n !Object.prototype.hasOwnProperty.call(item, \"value\")\n ) {\n window.localStorage.removeItem(key);\n return null;\n }\n const now = new Date();\n if (now.getTime() > item.expiry) {\n window.localStorage.removeItem(key);\n return null;\n }\n return item.value;\n}\n\n/**\n * Takes a hex string (e.g. \"e4567ab\" or \"0xe4567ab\") and returns an array buffer (Uint8Array)\n * @param {string} hexString - Hex string with or without \"0x\" prefix\n * @returns {Uint8Array}\n */\nfunction uint8arrayFromHexString(hexString) {\n if (!hexString || typeof hexString !== \"string\") {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n\n // Remove 0x prefix if present\n const hexWithoutPrefix =\n hexString.startsWith(\"0x\") || hexString.startsWith(\"0X\")\n ? hexString.slice(2)\n : hexString;\n\n var hexRegex = /^[0-9A-Fa-f]+$/;\n if (hexWithoutPrefix.length % 2 != 0 || !hexRegex.test(hexWithoutPrefix)) {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n return new Uint8Array(\n hexWithoutPrefix.match(/../g).map((h) => parseInt(h, 16))\n );\n}\n\n/**\n * Takes a Uint8Array and returns a hex string\n * @param {Uint8Array} buffer\n * @return {string}\n */\nfunction uint8arrayToHexString(buffer) {\n return [...buffer].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n/**\n * Function to normalize padding of byte array with 0's to a target length\n */\nfunction normalizePadding(byteArray, targetLength) {\n const paddingLength = targetLength - byteArray.length;\n\n // Add leading 0's to array\n if (paddingLength > 0) {\n const padding = new Uint8Array(paddingLength).fill(0);\n return new Uint8Array([...padding, ...byteArray]);\n }\n\n // Remove leading 0's from array\n if (paddingLength < 0) {\n const expectedZeroCount = paddingLength * -1;\n let zeroCount = 0;\n for (let i = 0; i < expectedZeroCount && i < byteArray.length; i++) {\n if (byteArray[i] === 0) {\n zeroCount++;\n }\n }\n // Check if the number of zeros found equals the number of zeroes expected\n if (zeroCount !== expectedZeroCount) {\n throw new Error(\n `invalid number of starting zeroes. Expected number of zeroes: ${expectedZeroCount}. Found: ${zeroCount}.`\n );\n }\n return byteArray.slice(expectedZeroCount, expectedZeroCount + targetLength);\n }\n return byteArray;\n}\n\n/**\n * Additional Associated Data (AAD) in the format dictated by the enclave_encrypt crate.\n */\nfunction additionalAssociatedData(senderPubBuf, receiverPubBuf) {\n const s = Array.from(new Uint8Array(senderPubBuf));\n const r = Array.from(new Uint8Array(receiverPubBuf));\n return new Uint8Array([...s, ...r]);\n}\n\n/**\n * Converts an ASN.1 DER-encoded ECDSA signature to the raw format that WebCrypto uses.\n */\nfunction fromDerSignature(derSignature) {\n const derSignatureBuf = uint8arrayFromHexString(derSignature);\n\n // Check and skip the sequence tag (0x30)\n let index = 2;\n\n // Parse 'r' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for r\"\n );\n }\n index++; // Move past the INTEGER tag\n const rLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const r = derSignatureBuf.slice(index, index + rLength);\n index += rLength; // Move to the start of s\n\n // Parse 's' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for s\"\n );\n }\n index++; // Move past the INTEGER tag\n const sLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const s = derSignatureBuf.slice(index, index + sLength);\n\n // Normalize 'r' and 's' to 32 bytes each\n const rPadded = normalizePadding(r, 32);\n const sPadded = normalizePadding(s, 32);\n\n // Concatenate and return the raw signature\n return new Uint8Array([...rPadded, ...sPadded]);\n}\n\n/**\n * Function to verify enclave signature on import bundle received from the server.\n * @param {string} enclaveQuorumPublic uncompressed public key for the quorum key which produced the signature\n * @param {string} publicSignature signature bytes encoded as a hexadecimal string\n * @param {string} signedData signed bytes encoded as a hexadecimal string. This could be public key bytes directly, or JSON-encoded bytes\n */\nasync function verifyEnclaveSignature(\n enclaveQuorumPublic,\n publicSignature,\n signedData\n) {\n /** Turnkey Signer enclave's public keys */\n const TURNKEY_SIGNERS_ENCLAVES = {\n prod: \"04cf288fe433cc4e1aa0ce1632feac4ea26bf2f5a09dcfe5a42c398e06898710330f0572882f4dbdf0f5304b8fc8703acd69adca9a4bbf7f5d00d20a5e364b2569\",\n preprod:\n \"04f3422b8afbe425d6ece77b8d2469954715a2ff273ab7ac89f1ed70e0a9325eaa1698b4351fd1b23734e65c0b6a86b62dd49d70b37c94606aac402cbd84353212\",\n dev: \"048cf9ed5f579298cc1571823a3222b82d80c529c551f6070fbe712ae1a9e8d1a23b7006e306d27190358dfcd9c44624918a00f23c920a33cb14f5b026eafc865d\",\n };\n\n // Use window.__TURNKEY_SIGNER_ENVIRONMENT__ if available (for testing), otherwise use the webpack replacement\n const environment =\n (typeof window !== \"undefined\" && window.__TURNKEY_SIGNER_ENVIRONMENT__) ||\n \"__TURNKEY_SIGNER_ENVIRONMENT__\";\n const TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY =\n TURNKEY_SIGNERS_ENCLAVES[environment];\n\n if (TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY === undefined) {\n throw new Error(\n `Configuration error: TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY is undefined`\n );\n }\n\n // todo(olivia): throw error if enclave quorum public is null once server changes are deployed\n if (enclaveQuorumPublic) {\n if (enclaveQuorumPublic !== TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY) {\n throw new Error(\n `enclave quorum public keys from client and bundle do not match. Client: ${TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY}. Bundle: ${enclaveQuorumPublic}.`\n );\n }\n }\n\n const encryptionQuorumPublicBuf = new Uint8Array(\n uint8arrayFromHexString(TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY)\n );\n const quorumKey = await loadQuorumKey(encryptionQuorumPublicBuf);\n if (!quorumKey) {\n throw new Error(\"failed to load quorum key\");\n }\n\n // The ECDSA signature is ASN.1 DER encoded but WebCrypto uses raw format\n const publicSignatureBuf = fromDerSignature(publicSignature);\n const signedDataBuf = uint8arrayFromHexString(signedData);\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.verify(\n { name: \"ECDSA\", hash: \"SHA-256\" },\n quorumKey,\n publicSignatureBuf,\n signedDataBuf\n );\n}\n\n/**\n * Function to send a message.\n *\n * If this page is embedded as an iframe we'll send a postMessage\n * in one of two ways depending on the version of @turnkey/iframe-stamper:\n * 1. newer versions (>=v2.1.0) pass a MessageChannel MessagePort from the parent frame for postMessages.\n * 2. older versions ( 0) {\n digits.push(carry % 58);\n carry = (carry / 58) | 0;\n }\n }\n // Convert digits to a base58 string\n for (let k = 0; k < digits.length; k++) {\n result = alphabet[digits[k]] + result;\n }\n\n // Add '1' for each leading 0 byte\n for (let i = 0; bytes[i] === 0 && i < bytes.length - 1; i++) {\n result = \"1\" + result;\n }\n return result;\n}\n\n/**\n * Decodes a base58-encoded string into a buffer\n * This function throws an error when the string contains invalid characters.\n * @param {string} s The base58-encoded string.\n * @return {Uint8Array} The decoded buffer.\n */\nfunction base58Decode(s) {\n // See https://en.bitcoin.it/wiki/Base58Check_encoding\n var alphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\n var decodedBytes = [];\n var leadingZeros = [];\n for (var i = 0; i < s.length; i++) {\n if (alphabet.indexOf(s[i]) === -1) {\n throw new Error(`cannot base58-decode: ${s[i]} isn't a valid character`);\n }\n var carry = alphabet.indexOf(s[i]);\n\n // If the current base58 digit is 0, append a 0 byte.\n // \"i == leadingZeros.length\" can only be true if we have not seen non-zero bytes so far.\n // If we had seen a non-zero byte, carry wouldn't be 0, and i would be strictly more than `leadingZeros.length`\n if (carry == 0 && i === leadingZeros.length) {\n leadingZeros.push(0);\n }\n\n var j = 0;\n while (j < decodedBytes.length || carry > 0) {\n var currentByte = decodedBytes[j];\n\n // shift the current byte 58 units and add the carry amount\n // (or just add the carry amount if this is a new byte -- undefined case)\n if (currentByte === undefined) {\n currentByte = carry;\n } else {\n currentByte = currentByte * 58 + carry;\n }\n\n // find the new carry amount (1-byte shift of current byte value)\n carry = currentByte >> 8;\n // reset the current byte to the remainder (the carry amount will pass on the overflow)\n decodedBytes[j] = currentByte % 256;\n j++;\n }\n }\n\n var result = leadingZeros.concat(decodedBytes.reverse());\n return new Uint8Array(result);\n}\n\n/**\n * Decodes a base58check-encoded string and verifies the checksum.\n * Base58Check encoding includes a 4-byte checksum at the end to detect errors.\n * The checksum is the first 4 bytes of SHA256(SHA256(payload)).\n * This function throws an error if the checksum is invalid.\n * @param {string} s The base58check-encoded string.\n * @return {Promise} The decoded payload (without checksum).\n */\nasync function base58CheckDecode(s) {\n const decoded = base58Decode(s);\n\n if (decoded.length < 5) {\n throw new Error(\n `invalid base58check length: expected at least 5 bytes, got ${decoded.length}`\n );\n }\n\n const payload = decoded.subarray(0, decoded.length - 4);\n const checksum = decoded.subarray(decoded.length - 4);\n\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n\n // Compute double SHA256 hash\n const hash1Buf = await subtle.digest(\"SHA-256\", payload);\n const hash1 = new Uint8Array(hash1Buf);\n const hash2Buf = await subtle.digest(\"SHA-256\", hash1);\n const hash2 = new Uint8Array(hash2Buf);\n const computedChecksum = hash2.subarray(0, 4);\n\n // Verify checksum\n const mismatch =\n (checksum[0] ^ computedChecksum[0]) |\n (checksum[1] ^ computedChecksum[1]) |\n (checksum[2] ^ computedChecksum[2]) |\n (checksum[3] ^ computedChecksum[3]);\n if (mismatch !== 0) {\n throw new Error(\"invalid base58check checksum\");\n }\n\n return payload;\n}\n\n/**\n * Returns private key bytes from a private key, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {string} privateKey\n * @param {string} keyFormat Can be \"HEXADECIMAL\", \"SUI_BECH32\", \"BITCOIN_MAINNET_WIF\", \"BITCOIN_TESTNET_WIF\" or \"SOLANA\"\n * @return {Promise}\n */\nasync function decodeKey(privateKey, keyFormat) {\n switch (keyFormat) {\n case \"SOLANA\": {\n const decodedKeyBytes = base58Decode(privateKey);\n if (decodedKeyBytes.length !== 64) {\n throw new Error(\n `invalid key length. Expected 64 bytes. Got ${decodedKeyBytes.length}.`\n );\n }\n return decodedKeyBytes.subarray(0, 32);\n }\n case \"HEXADECIMAL\":\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n case \"BITCOIN_MAINNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0x80 = mainnet\n if (version !== 0x80) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0x80 (mainnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"BITCOIN_TESTNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0xEF = testnet\n if (version !== 0xef) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0xEF (testnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"SUI_BECH32\": {\n const { prefix, words } = bech32.decode(privateKey);\n\n if (prefix !== \"suiprivkey\") {\n throw new Error(\n `invalid SUI private key human-readable part (HRP): expected \"suiprivkey\"`\n );\n }\n\n const bytes = bech32.fromWords(words);\n if (bytes.length !== 33) {\n throw new Error(\n `invalid SUI private key length: expected 33 bytes, got ${bytes.length}`\n );\n }\n\n const schemeFlag = bytes[0];\n const privkey = bytes.slice(1);\n\n // schemeFlag = 0 is Ed25519; We currently only support Ed25519 keys for SUI.\n if (schemeFlag !== 0) {\n throw new Error(\n `invalid SUI private key scheme flag: expected 0 (Ed25519). Turnkey only supports Ed25519 keys for SUI.`\n );\n }\n\n return new Uint8Array(privkey);\n }\n default:\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n }\n}\n\n/**\n * Returns a private key from private key bytes, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {Uint8Array} privateKeyBytes\n * @param {string} keyFormat Can be \"HEXADECIMAL\" or \"SOLANA\"\n */\nasync function encodeKey(privateKeyBytes, keyFormat, publicKeyBytes) {\n switch (keyFormat) {\n case \"SOLANA\":\n if (!publicKeyBytes) {\n throw new Error(\"public key must be specified for SOLANA key format\");\n }\n if (privateKeyBytes.length !== 32) {\n throw new Error(\n `invalid private key length. Expected 32 bytes. Got ${privateKeyBytes.length}.`\n );\n }\n if (publicKeyBytes.length !== 32) {\n throw new Error(\n `invalid public key length. Expected 32 bytes. Got ${publicKeyBytes.length}.`\n );\n }\n {\n const concatenatedBytes = new Uint8Array(64);\n concatenatedBytes.set(privateKeyBytes, 0);\n concatenatedBytes.set(publicKeyBytes, 32);\n return base58Encode(concatenatedBytes);\n }\n case \"HEXADECIMAL\":\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n default:\n // keeping console.warn for debugging purposes.\n // eslint-disable-next-line no-console\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n }\n}\n\n// Helper to parse a private key into a Solana base58 private key.\n// To be used if a wallet account is exported without the `SOLANA` address format.\nfunction parsePrivateKey(privateKey) {\n if (Array.isArray(privateKey)) {\n return new Uint8Array(privateKey);\n }\n\n if (typeof privateKey === \"string\") {\n // Remove 0x prefix if present\n if (privateKey.startsWith(\"0x\")) {\n privateKey = privateKey.slice(2);\n }\n\n // Check if it's hex-formatted correctly (i.e. 64 hex chars)\n if (privateKey.length === 64 && /^[0-9a-fA-F]+$/.test(privateKey)) {\n return uint8arrayFromHexString(privateKey);\n }\n\n // Otherwise assume it's base58 format (for Solana)\n try {\n return base58Decode(privateKey);\n } catch (error) {\n throw new Error(\n \"Invalid private key format. Use hex (64 chars) or base58 format.\"\n );\n }\n }\n\n throw new Error(\"Private key must be a string (hex/base58) or number array\");\n}\n\n/**\n * Function to validate and sanitize the styles object using the accepted map of style keys and values (as regular expressions).\n * Any invalid style throws an error. Returns an object of valid styles.\n * @param {Object} styles\n * @param {HTMLElement} element - Optional element parameter (for import frame)\n * @return {Object}\n */\nfunction validateStyles(styles, element) {\n const validStyles = {};\n\n const cssValidationRegex = {\n padding: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n margin: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n borderWidth: \"^(\\\\d+(px|em|rem) ?){1,4}$\",\n borderStyle:\n \"^(none|solid|dashed|dotted|double|groove|ridge|inset|outset)$\",\n borderColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n borderRadius: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n fontSize: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax))$\",\n fontWeight: \"^(normal|bold|bolder|lighter|\\\\d{3})$\",\n fontFamily: '^[^\";<>]*$', // checks for the absence of some characters that could lead to CSS/HTML injection\n color:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n labelColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n backgroundColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n width: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n height: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n maxWidth: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n maxHeight:\n \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n lineHeight:\n \"^(\\\\d+(\\\\.\\\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$\",\n boxShadow:\n \"^(none|(\\\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)) ?(inset)?)$\",\n textAlign: \"^(left|right|center|justify|initial|inherit)$\",\n overflowWrap: \"^(normal|break-word|anywhere)$\",\n wordWrap: \"^(normal|break-word)$\",\n resize: \"^(none|both|horizontal|vertical|block|inline)$\",\n };\n\n Object.entries(styles).forEach(([property, value]) => {\n const styleProperty = property.trim();\n if (styleProperty.length === 0) {\n throw new Error(\"css style property cannot be empty\");\n }\n const styleRegexStr = cssValidationRegex[styleProperty];\n if (!styleRegexStr) {\n throw new Error(\n `invalid or unsupported css style property: \"${styleProperty}\"`\n );\n }\n const styleRegex = new RegExp(styleRegexStr);\n const styleValue = value.trim();\n if (styleValue.length == 0) {\n throw new Error(`css style for \"${styleProperty}\" is empty`);\n }\n const isValidStyle = styleRegex.test(styleValue);\n if (!isValidStyle) {\n throw new Error(\n `invalid css style value for property \"${styleProperty}\"`\n );\n }\n validStyles[styleProperty] = styleValue;\n });\n\n return validStyles;\n}\n\n// Export all shared functions\nexport {\n setCryptoProvider,\n getSubtleCrypto,\n isDoublyIframed,\n loadQuorumKey,\n loadTargetKey,\n initEmbeddedKey,\n generateTargetKey,\n getEmbeddedKey,\n setEmbeddedKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n onResetEmbeddedKey,\n resetTargetEmbeddedKey,\n setParentFrameMessageChannelPort,\n setParentFrameOrigin,\n getSettings,\n setSettings,\n setItemWithExpiry,\n getItemWithExpiry,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n normalizePadding,\n additionalAssociatedData,\n fromDerSignature,\n verifyEnclaveSignature,\n sendMessageUp,\n logMessage,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n base58CheckDecode,\n decodeKey,\n encodeKey,\n parsePrivateKey,\n validateStyles,\n};\n","import * as nobleEd25519 from \"@noble/ed25519\";\nimport * as nobleHashes from \"@noble/hashes/sha512\";\nimport { fromDerSignature } from \"@turnkey/crypto\";\nimport * as SharedTKHQ from \"@shared/turnkey-core.js\";\n\nconst {\n initEmbeddedKey: sharedInitEmbeddedKey,\n generateTargetKey,\n setItemWithExpiry,\n getItemWithExpiry,\n getEmbeddedKey: sharedGetEmbeddedKey,\n setEmbeddedKey: sharedSetEmbeddedKey,\n onResetEmbeddedKey: sharedOnResetEmbeddedKey,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n encodeKey,\n sendMessageUp,\n logMessage,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n setParentFrameMessageChannelPort,\n setParentFrameOrigin,\n normalizePadding,\n additionalAssociatedData,\n getSettings,\n setSettings,\n parsePrivateKey,\n validateStyles,\n isDoublyIframed,\n loadQuorumKey,\n} = SharedTKHQ;\n\nconst LEGACY_EMBEDDED_KEY = \"TURNKEY_EMBEDDED_KEY\";\nconst LEGACY_EMBEDDED_KEY_ORIGIN = \"TURNKEY_EMBEDDED_KEY_ORIGIN\";\nconst ORIGIN_SCOPED_EMBEDDED_KEY_PREFIX = \"TURNKEY_EMBEDDED_KEY_V2\";\n\n// Embedded key state for this document, keyed by window so it is tied to the\n// document lifetime. Two shapes:\n// { mode: \"persistent\", origin, storageKey, ready } -- key lives in\n// localStorage, scoped to the browser-authenticated parent origin (or\n// this document's own origin in standalone mode). `ready` resolves once\n// the key has actually been persisted; readers racing the handshake must\n// await it before calling getEmbeddedKey.\n// { mode: \"ephemeral\", key } -- key lives in memory only. Used for legacy\n// (@turnkey/iframe-stamper < 2.1.0) parents: because the key is unique to\n// this document and never persisted, an unrelated embedder can never\n// obtain a key that decrypts another application's bundles (INT-697).\nconst embeddedKeyStates = new WeakMap();\n\nfunction validateParentOrigin(parentOrigin) {\n if (\n typeof parentOrigin !== \"string\" ||\n parentOrigin.length === 0 ||\n parentOrigin === \"null\"\n ) {\n throw new Error(\"a non-opaque parent origin is required\");\n }\n\n const parsedOrigin = new URL(parentOrigin).origin;\n if (parsedOrigin !== parentOrigin) {\n throw new Error(`invalid parent origin: ${parentOrigin}`);\n }\n\n return parsedOrigin;\n}\n\n// Never migrate the old global key: doing so would preserve the cross-origin\n// replay vulnerability for bundles encrypted before this change.\nfunction purgeLegacyEmbeddedKey() {\n window.localStorage.removeItem(LEGACY_EMBEDDED_KEY);\n window.localStorage.removeItem(LEGACY_EMBEDDED_KEY_ORIGIN);\n}\n\n/**\n * Creates (if needed) the persistent embedded key scoped to the given parent\n * origin and persists it in localStorage. A document can bind to exactly one\n * parent origin; an ephemeral key, if any, is superseded.\n * @param {string} parentOrigin\n */\nasync function initEmbeddedKey(parentOrigin) {\n if (isDoublyIframed()) {\n throw new Error(\"Doubly iframed\");\n }\n const validatedOrigin = validateParentOrigin(parentOrigin);\n const previousState = embeddedKeyStates.get(window);\n if (\n previousState?.mode === \"persistent\" &&\n previousState.origin !== validatedOrigin\n ) {\n throw new Error(\n `parent origin is already bound to ${previousState.origin}; refusing ${validatedOrigin}`\n );\n }\n purgeLegacyEmbeddedKey();\n const storageKey = `${ORIGIN_SCOPED_EMBEDDED_KEY_PREFIX}:${encodeURIComponent(\n validatedOrigin\n )}`;\n const state = { mode: \"persistent\", origin: validatedOrigin, storageKey };\n // The state is activated synchronously so a concurrent ephemeral init\n // cannot clobber it, but the key does not exist in localStorage until\n // sharedInitEmbeddedKey resolves; `ready` lets racing readers wait for it.\n // If persistence fails (e.g. blocked third-party storage), roll back so the\n // document keeps operating on its previous key and a retry is possible.\n state.ready = sharedInitEmbeddedKey(storageKey).catch((error) => {\n if (embeddedKeyStates.get(window) === state) {\n if (previousState) {\n embeddedKeyStates.set(window, previousState);\n } else {\n embeddedKeyStates.delete(window);\n }\n }\n throw error;\n });\n embeddedKeyStates.set(window, state);\n return await state.ready;\n}\n\n/**\n * Creates (if needed) an in-memory embedded key unique to this document, for\n * legacy (@turnkey/iframe-stamper < 2.1.0) parents that speak direct\n * postMessage. No-ops if a persistent origin-scoped key is already active\n * (i.e. the MessageChannel handshake completed first).\n */\nasync function initEphemeralEmbeddedKey() {\n if (isDoublyIframed()) {\n throw new Error(\"Doubly iframed\");\n }\n const state = embeddedKeyStates.get(window);\n if (state?.mode === \"persistent\") {\n // Wait for the in-flight persistence so callers can read the key.\n return await state.ready;\n }\n if (state?.key) {\n return;\n }\n purgeLegacyEmbeddedKey();\n const generatedKey = await generateTargetKey();\n // Re-check: a MessageChannel handshake may have activated a persistent key\n // while key generation was in flight; it must not be clobbered. Wait for it\n // so callers can read the key; if it fails (and rolls itself back), the\n // ephemeral key takes over below.\n const latestState = embeddedKeyStates.get(window);\n if (latestState?.mode === \"persistent\") {\n try {\n return await latestState.ready;\n } catch {\n // fall through to the ephemeral key\n }\n }\n if (embeddedKeyStates.get(window)?.mode !== \"persistent\") {\n embeddedKeyStates.set(window, { mode: \"ephemeral\", key: generatedKey });\n }\n}\n\nfunction getEmbeddedKey() {\n const state = embeddedKeyStates.get(window);\n if (!state) {\n return null;\n }\n return state.mode === \"persistent\"\n ? sharedGetEmbeddedKey(state.storageKey)\n : state.key;\n}\n\nfunction setEmbeddedKey(targetKey) {\n const state = embeddedKeyStates.get(window);\n if (!state) {\n throw new Error(\"embedded key has not been initialized\");\n }\n if (state.mode === \"persistent\") {\n sharedSetEmbeddedKey(targetKey, state.storageKey);\n } else {\n state.key = targetKey;\n }\n}\n\nfunction onResetEmbeddedKey() {\n const state = embeddedKeyStates.get(window);\n if (!state) {\n throw new Error(\"embedded key has not been initialized\");\n }\n if (state.mode === \"persistent\") {\n sharedOnResetEmbeddedKey(state.storageKey);\n } else {\n state.key = null;\n }\n}\n\n/**\n * Function to verify enclave signature on import bundle received from the server.\n * @param {string} enclaveQuorumPublic uncompressed public key for the quorum key which produced the signature\n * @param {string} publicSignature signature bytes encoded as a hexadecimal string\n * @param {string} signedData signed bytes encoded as a hexadecimal string. This could be public key bytes directly, or JSON-encoded bytes\n */\nasync function verifyEnclaveSignature(\n enclaveQuorumPublic,\n publicSignature,\n signedData\n) {\n /** Turnkey Signer enclave's public keys */\n const TURNKEY_SIGNERS_ENCLAVES = {\n prod: \"04cf288fe433cc4e1aa0ce1632feac4ea26bf2f5a09dcfe5a42c398e06898710330f0572882f4dbdf0f5304b8fc8703acd69adca9a4bbf7f5d00d20a5e364b2569\",\n preprod:\n \"04f3422b8afbe425d6ece77b8d2469954715a2ff273ab7ac89f1ed70e0a9325eaa1698b4351fd1b23734e65c0b6a86b62dd49d70b37c94606aac402cbd84353212\",\n };\n\n // Read environment from meta tag (templated at deploy time), fall back to window variable (for testing)\n let environment = null;\n if (typeof document !== \"undefined\") {\n const meta = document.querySelector(\n 'meta[name=\"turnkey-signer-environment\"]'\n );\n if (\n meta &&\n meta.content &&\n meta.content !== \"__TURNKEY_SIGNER_ENVIRONMENT__\"\n ) {\n environment = meta.content;\n }\n }\n if (!environment && typeof window !== \"undefined\") {\n environment = window.__TURNKEY_SIGNER_ENVIRONMENT__;\n }\n const TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY =\n TURNKEY_SIGNERS_ENCLAVES[environment];\n\n if (TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY === undefined) {\n throw new Error(\n `Configuration error: TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY is undefined`\n );\n }\n\n if (enclaveQuorumPublic !== TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY) {\n throw new Error(\n `enclave quorum public keys from client and bundle do not match. Client: ${TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY}. Bundle: ${enclaveQuorumPublic}.`\n );\n }\n\n const encryptionQuorumPublicBuf = new Uint8Array(\n uint8arrayFromHexString(TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY)\n );\n const quorumKey = await loadQuorumKey(encryptionQuorumPublicBuf);\n if (!quorumKey) {\n throw new Error(\"failed to load quorum key\");\n }\n\n // The ECDSA signature is ASN.1 DER encoded but WebCrypto uses raw format\n const publicSignatureBuf = fromDerSignature(publicSignature);\n const signedDataBuf = uint8arrayFromHexString(signedData);\n return await crypto.subtle.verify(\n { name: \"ECDSA\", hash: \"SHA-256\" },\n quorumKey,\n publicSignatureBuf,\n signedDataBuf\n );\n}\n\n/**\n * Returns the public key bytes for a hex-encoded Ed25519 private key.\n * @param {string} privateKeyHex\n */\nfunction getEd25519PublicKey(privateKeyHex) {\n nobleEd25519.etc.sha512Sync = (...m) =>\n nobleHashes.sha512(nobleEd25519.etc.concatBytes(...m));\n return nobleEd25519.getPublicKey(privateKeyHex);\n}\n\n/**\n * Function to apply settings on this page. For now, the only settings that can be applied\n * are for \"styles\". Upon successful application, return the valid, sanitized settings JSON string.\n * @param {string} settings\n * @return {string}\n */\nfunction applySettings(settings) {\n const validSettings = {};\n if (!settings) {\n return JSON.stringify(validSettings);\n }\n const settingsObj = JSON.parse(settings);\n if (settingsObj.styles) {\n // Valid styles will be applied the \"key-div\" div HTML element.\n const keyDivTextarea = document.getElementById(\"key-div\");\n if (!keyDivTextarea) {\n throw new Error(\"no key-div HTML element found to apply settings to.\");\n }\n\n // Validate, sanitize, and apply the styles to the \"key-div\" div element.\n const validStyles = validateStyles(settingsObj.styles);\n Object.entries(validStyles).forEach(([key, value]) => {\n keyDivTextarea.style[key] = value;\n });\n\n validSettings[\"styles\"] = validStyles;\n }\n\n return JSON.stringify(validSettings);\n}\n\nexport const TKHQ = {\n initEmbeddedKey,\n initEphemeralEmbeddedKey,\n generateTargetKey,\n setItemWithExpiry,\n getItemWithExpiry,\n getEmbeddedKey,\n setEmbeddedKey,\n onResetEmbeddedKey,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n encodeKey,\n sendMessageUp,\n logMessage,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n setParentFrameMessageChannelPort,\n setParentFrameOrigin,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n getEd25519PublicKey,\n applySettings,\n validateStyles,\n getSettings,\n setSettings,\n parsePrivateKey,\n};\n","/**\n * Best-effort telemetry distinguishing modern MessageChannel clients from\n * legacy direct-postMessage clients (@turnkey/iframe-stamper < 2.1.0). This\n * exists to size and monitor the legacy migration for INT-697. It must never\n * interfere with the export/signing flow: failures are swallowed and nothing\n * is sent unless the deployment templates an endpoint into the page.\n */\n\nexport const CHANNEL_MESSAGE_CHANNEL = \"message_channel\";\nexport const CHANNEL_LEGACY_POST_MESSAGE = \"legacy_post_message\";\n\nconst TELEMETRY_ENDPOINT_META_NAME = \"turnkey-telemetry-endpoint\";\nconst TELEMETRY_ENDPOINT_PLACEHOLDER = \"__TURNKEY_TELEMETRY_ENDPOINT__\";\nconst VALID_CHANNELS = new Set([\n CHANNEL_MESSAGE_CHANNEL,\n CHANNEL_LEGACY_POST_MESSAGE,\n]);\nconst reportedChannelsByWindow = new WeakMap();\n\nfunction getTelemetryEndpoint() {\n if (typeof document === \"undefined\") {\n return null;\n }\n const meta = document.querySelector(\n `meta[name=\"${TELEMETRY_ENDPOINT_META_NAME}\"]`\n );\n if (\n !meta ||\n !meta.content ||\n meta.content === TELEMETRY_ENDPOINT_PLACEHOLDER\n ) {\n return null;\n }\n return meta.content;\n}\n\n/**\n * Records the communication channel selected by one iframe document. Each\n * channel is reported at most once per document so arbitrary embedders cannot\n * amplify telemetry by sending repeated operations.\n * @param {string} channel CHANNEL_MESSAGE_CHANNEL or CHANNEL_LEGACY_POST_MESSAGE\n * @param {string} [parentOrigin] origin of the embedding document, if known\n */\nexport function recordChannelTelemetry(channel, parentOrigin) {\n try {\n if (!VALID_CHANNELS.has(channel) || typeof window === \"undefined\") {\n return;\n }\n\n const endpoint = getTelemetryEndpoint();\n if (\n !endpoint ||\n typeof navigator === \"undefined\" ||\n typeof navigator.sendBeacon !== \"function\"\n ) {\n return;\n }\n\n let reportedChannels = reportedChannelsByWindow.get(window);\n if (!reportedChannels) {\n reportedChannels = new Set();\n reportedChannelsByWindow.set(window, reportedChannels);\n }\n if (reportedChannels.has(channel)) {\n return;\n }\n\n const payload = JSON.stringify({\n frame: \"export-and-sign\",\n channel,\n parentOrigin: parentOrigin || null,\n timestamp: new Date().toISOString(),\n });\n const accepted = navigator.sendBeacon(\n endpoint,\n new Blob([payload], { type: \"application/json\" })\n );\n if (accepted !== false) {\n reportedChannels.add(channel);\n }\n } catch {\n // Telemetry must never break the signing flow; drop the sample.\n }\n}\n","import { TKHQ } from \"./turnkey-core.js\";\nimport {\n recordChannelTelemetry,\n CHANNEL_MESSAGE_CHANNEL,\n CHANNEL_LEGACY_POST_MESSAGE,\n} from \"./telemetry.js\";\nimport { Keypair, VersionedTransaction } from \"@solana/web3.js\";\nimport { parseTransaction } from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport * as nobleEd25519 from \"@noble/ed25519\";\nimport * as nobleHashes from \"@noble/hashes/sha512\";\n\n// Persist keys in memory via mapping of { address --> pk }\nlet inMemoryKeys = {};\n\n// Injected embedded key -- held in memory only, never persisted.\n// When set, decryptBundle uses this P-256 JWK instead of the iframe's embedded key.\nlet injectedEmbeddedKey = null;\n\nexport const DEFAULT_TTL_MILLISECONDS = 1000 * 24 * 60 * 60; // 24 hours or 86,400,000 milliseconds\n\n// Instantiate these once (for perf)\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\n/**\n * Verifies the enclave signature on a v1.0.0 bundle and returns the parsed signed data.\n * @param {string} bundle - JSON-stringified bundle\n * @param {string} organizationId - Expected organization ID\n * @returns {Promise} - The parsed signed data {organizationId, encappedPublic, ciphertext}\n */\nasync function verifyAndParseBundleData(bundle, organizationId) {\n const bundleObj = JSON.parse(bundle);\n\n if (bundleObj.version !== \"v1.0.0\") {\n throw new Error(`unsupported version: ${bundleObj.version}`);\n }\n if (!bundleObj.data) {\n throw new Error('missing \"data\" in bundle');\n }\n if (!bundleObj.dataSignature) {\n throw new Error('missing \"dataSignature\" in bundle');\n }\n if (!bundleObj.enclaveQuorumPublic) {\n throw new Error('missing \"enclaveQuorumPublic\" in bundle');\n }\n\n if (!TKHQ.verifyEnclaveSignature) {\n throw new Error(\"method TKHQ.verifyEnclaveSignature not loaded\");\n }\n const verified = await TKHQ.verifyEnclaveSignature(\n bundleObj.enclaveQuorumPublic,\n bundleObj.dataSignature,\n bundleObj.data\n );\n if (!verified) {\n throw new Error(\n `failed to verify enclave signature. Got signature: ${bundleObj.dataSignature}, enclaveQuorumPublic: ${bundleObj.enclaveQuorumPublic}`\n );\n }\n\n const signedData = JSON.parse(\n textDecoder.decode(TKHQ.uint8arrayFromHexString(bundleObj.data))\n );\n\n if (!organizationId) {\n throw new Error(\n `organization id is required. Please ensure you are using @turnkey/iframe-stamper >= v2.0.0 to pass \"organizationId\" for security purposes.`\n );\n } else if (\n !signedData.organizationId ||\n signedData.organizationId !== organizationId\n ) {\n throw new Error(\n `organization id does not match expected value. Expected: ${organizationId}. Found: ${signedData.organizationId}.`\n );\n }\n\n if (!signedData.encappedPublic) {\n throw new Error('missing \"encappedPublic\" in bundle signed data');\n }\n if (!signedData.ciphertext) {\n throw new Error('missing \"ciphertext\" in bundle signed data');\n }\n\n return signedData;\n}\n\n/**\n * Parse and decrypt the export bundle.\n * The `bundle` param is a JSON string of the encapsulated public\n * key, encapsulated public key signature, and the ciphertext.\n * @param {string} bundle\n * @param {string} organizationId\n * @param {Function} HpkeDecrypt\n */\nasync function decryptBundle(bundle, organizationId, HpkeDecrypt) {\n const signedData = await verifyAndParseBundleData(bundle, organizationId);\n\n const encappedKeyBuf = TKHQ.uint8arrayFromHexString(\n signedData.encappedPublic\n );\n const ciphertextBuf = TKHQ.uint8arrayFromHexString(signedData.ciphertext);\n\n // Use the injected embedded key if available, otherwise fall back to the embedded key\n const receiverPrivJwk = injectedEmbeddedKey || (await TKHQ.getEmbeddedKey());\n return await HpkeDecrypt({\n ciphertextBuf,\n encappedKeyBuf,\n receiverPrivJwk,\n });\n}\n\n/**\n * Function triggered when GET_EMBEDDED_PUBLIC_KEY event is received.\n * @param {string} requestId\n */\nasync function onGetPublicEmbeddedKey(requestId) {\n const embeddedKeyJwk = TKHQ.getEmbeddedKey();\n\n if (!embeddedKeyJwk) {\n TKHQ.sendMessageUp(\"EMBEDDED_PUBLIC_KEY\", \"\", requestId); // no key == empty string\n\n return;\n }\n\n const targetPubBuf = await TKHQ.p256JWKPrivateToPublic(embeddedKeyJwk);\n const targetPubHex = TKHQ.uint8arrayToHexString(targetPubBuf);\n\n // Send up EMBEDDED_PUBLIC_KEY message\n TKHQ.sendMessageUp(\"EMBEDDED_PUBLIC_KEY\", targetPubHex, requestId);\n}\n\n/**\n * Encodes raw key bytes and loads them into the in-memory key store.\n * @param {string} address - Wallet address (case-sensitive)\n * @param {ArrayBuffer} keyBytes - Raw decrypted private key bytes\n * @param {string} keyFormat - \"SOLANA\" | \"HEXADECIMAL\"\n * @param {string} organizationId - Organization ID\n */\nasync function loadKeyIntoMemory(address, keyBytes, keyFormat, organizationId) {\n let key;\n const privateKeyBytes = new Uint8Array(keyBytes);\n\n if (keyFormat === \"SOLANA\") {\n const privateKeyHex = TKHQ.uint8arrayToHexString(\n privateKeyBytes.subarray(0, 32)\n );\n const publicKeyBytes = TKHQ.getEd25519PublicKey(privateKeyHex);\n key = await TKHQ.encodeKey(privateKeyBytes, keyFormat, publicKeyBytes);\n } else {\n key = await TKHQ.encodeKey(privateKeyBytes, keyFormat);\n }\n\n const keyAddress = address || \"default\";\n\n // Cache keypair for improved signing perf\n let cachedKeypair;\n if (keyFormat === \"SOLANA\") {\n cachedKeypair = Keypair.fromSecretKey(TKHQ.base58Decode(key));\n } else if (keyFormat === \"HEXADECIMAL\") {\n cachedKeypair = await createSolanaKeypair(\n Array.from(TKHQ.uint8arrayFromHexString(key))\n );\n }\n\n inMemoryKeys = {\n ...inMemoryKeys,\n [keyAddress]: {\n organizationId,\n privateKey: key,\n format: keyFormat,\n expiry: new Date().getTime() + DEFAULT_TTL_MILLISECONDS,\n keypair: cachedKeypair,\n },\n };\n}\n\n/**\n * Function triggered when INJECT_KEY_EXPORT_BUNDLE event is received.\n * @param {string} requestId\n * @param {string} organizationId\n * @param {string} bundle\n * @param {string} keyFormat\n * @param {string} address\n * @param {Function} HpkeDecrypt // TODO: import this directly (instead of passing around)\n */\nasync function onInjectKeyBundle(\n requestId,\n organizationId,\n bundle,\n keyFormat,\n address,\n HpkeDecrypt\n) {\n // Decrypt the export bundle\n const keyBytes = await decryptBundle(bundle, organizationId, HpkeDecrypt);\n\n // Load decrypted key into memory\n await loadKeyIntoMemory(address, keyBytes, keyFormat, organizationId);\n\n // Send up BUNDLE_INJECTED message\n TKHQ.sendMessageUp(\"BUNDLE_INJECTED\", true, requestId);\n}\n\n/**\n * Function triggered when APPLY_SETTINGS event is received.\n * For now, the only settings that can be applied are for \"styles\".\n * Persist them in local storage so they can be applied on every\n * page load.\n * @param {string} settings: JSON-stringified settings\n * @param {string} requestId\n */\nasync function onApplySettings(settings, requestId) {\n // Apply settings\n const validSettings = TKHQ.applySettings(settings);\n\n // Persist in local storage\n TKHQ.setSettings(validSettings);\n\n // Send up SETTINGS_APPLIED message\n TKHQ.sendMessageUp(\"SETTINGS_APPLIED\", true, requestId);\n}\n\n/**\n * Function triggered when SIGN_TRANSACTION event is received.\n * @param {string} requestId\n * @param {string} transaction (serialized)\n * @param {string} address (case-sensitive --> enforce this, optional for backwards compatibility)\n */\nasync function onSignTransaction(requestId, serializedTransaction, address) {\n // If no address provided, use \"default\"\n const keyAddress = address || \"default\";\n const key = inMemoryKeys[keyAddress];\n\n // Validate key exists and is valid/non-expired\n if (!validateKey(key, keyAddress, requestId)) {\n return;\n }\n\n const transactionWrapper = JSON.parse(serializedTransaction);\n const transactionToSign = transactionWrapper.transaction;\n const transactionType = transactionWrapper.type;\n\n let signedTransaction;\n\n if (transactionType === \"SOLANA\") {\n // Get or create keypair (uses cached keypair if available)\n const keypair = await getOrCreateKeypair(key);\n\n // Fetch the transaction and sign\n const transactionBytes = TKHQ.uint8arrayFromHexString(transactionToSign);\n const transaction = VersionedTransaction.deserialize(transactionBytes);\n transaction.sign([keypair]);\n\n signedTransaction = transaction.serialize();\n } else if (transactionType === \"ETHEREUM\") {\n // viem returns the fully serialized, broadcast-ready signed tx as a\n // 0x-prefixed hex string.\n signedTransaction = await signEthereumTransaction(key, transactionToSign);\n } else {\n throw new Error(\"unsupported transaction type\");\n }\n\n // Solana signing returns raw bytes (encode to hex); Ethereum signing already\n // returns a 0x-prefixed hex string, which we pass through as-is.\n const signedTransactionHex =\n typeof signedTransaction === \"string\"\n ? signedTransaction\n : TKHQ.uint8arrayToHexString(signedTransaction);\n\n TKHQ.sendMessageUp(\"TRANSACTION_SIGNED\", signedTransactionHex, requestId);\n}\n\n/**\n * Function triggered when SIGN_MESSAGE event is received.\n * @param {string} requestId\n * @param {string} message (serialized, JSON-stringified)\n * @param {string} address (case-sensitive --> enforce this, optional for backwards compatibility)\n */\nasync function onSignMessage(requestId, serializedMessage, address) {\n // Backwards compatibility: if no address provided, use \"default\"\n const keyAddress = address || \"default\";\n const key = inMemoryKeys[keyAddress];\n\n // Validate key exists and has not expired\n if (!validateKey(key, keyAddress, requestId)) {\n return;\n }\n\n const messageWrapper = JSON.parse(serializedMessage);\n const messageToSign = messageWrapper.message;\n const messageType = messageWrapper.type;\n const messageBytes = textEncoder.encode(messageToSign);\n\n let signatureHex;\n\n if (messageType === \"SOLANA\") {\n // Get or create keypair (uses cached keypair if available)\n const keypair = await getOrCreateKeypair(key);\n\n // Set up sha512 for nobleEd25519 (required for signing)\n nobleEd25519.etc.sha512Sync = (...m) =>\n nobleHashes.sha512(nobleEd25519.etc.concatBytes(...m));\n\n // Extract the 32-byte private key from the 64-byte secretKey\n // Solana keypair.secretKey format: [32-byte private key][32-byte public key]\n const privateKey = keypair.secretKey.slice(0, 32);\n // Sign the message using nobleEd25519\n const signature = nobleEd25519.sign(messageBytes, privateKey);\n\n // Note: Signature verification is skipped for performance. The signature will always be valid if signing succeeds with a valid keypair.\n // Clients can verify the signature returned.\n\n signatureHex = TKHQ.uint8arrayToHexString(signature);\n } else if (messageType === \"ETHEREUM\") {\n const account = await getOrCreateEthereumAccount(key);\n\n // Match the Solana path: sign the message as a plain UTF-8 string\n // (EIP-191 personal_sign). viem returns a 0x-prefixed signature.\n signatureHex = await account.signMessage({ message: messageToSign });\n } else {\n TKHQ.sendMessageUp(\"ERROR\", \"unsupported message type\", requestId);\n\n return;\n }\n\n TKHQ.sendMessageUp(\"MESSAGE_SIGNED\", signatureHex, requestId);\n}\n\n/**\n * Function triggered when CLEAR_EMBEDDED_PRIVATE_KEY event is received.\n * @param {string} requestId\n * @param {string} address - Optional: The address of the key to clear (case-sensitive). If not provided, clears all keys.\n */\nasync function onClearEmbeddedPrivateKey(requestId, address) {\n // If no address is provided, clear all keys\n if (!address) {\n inMemoryKeys = {};\n TKHQ.sendMessageUp(\"EMBEDDED_PRIVATE_KEY_CLEARED\", true, requestId);\n\n return;\n }\n\n // Check if key exists for the specific address\n if (!inMemoryKeys[address]) {\n TKHQ.sendMessageUp(\n \"ERROR\",\n new Error(\n `key not found for address ${address}. Note that address is case sensitive.`\n ).toString(),\n requestId\n );\n\n return;\n }\n\n // Clear the specific key from memory\n delete inMemoryKeys[address];\n\n TKHQ.sendMessageUp(\"EMBEDDED_PRIVATE_KEY_CLEARED\", true, requestId);\n}\n\n/**\n * Handler for SET_EMBEDDED_KEY_OVERRIDE events.\n * Decrypts a P-256 private key bundle using the iframe's embedded key and\n * overrides the embedded key with it for subsequent bundle decryptions.\n * @param {string} requestId\n * @param {string} organizationId\n * @param {string} bundle - v1.0.0 bundle containing the P-256 private key\n * @param {Function} HpkeDecrypt\n */\nasync function onSetEmbeddedKeyOverride(\n requestId,\n organizationId,\n bundle,\n HpkeDecrypt\n) {\n // Decrypt the private key using the iframe's embedded key.\n // The decrypted payload is a raw 32-byte P-256 private key scalar.\n const keyBytes = await decryptBundle(bundle, organizationId, HpkeDecrypt);\n\n // Convert raw P-256 bytes to a full JWK (derives public key via WebCrypto)\n const keyJwk = await rawP256PrivateKeyToJwk(new Uint8Array(keyBytes));\n\n // Store in module-level variable (memory only)\n injectedEmbeddedKey = keyJwk;\n\n TKHQ.sendMessageUp(\"EMBEDDED_KEY_OVERRIDE_SET\", true, requestId);\n}\n\n/**\n * Handler for RESET_TO_DEFAULT_EMBEDDED_KEY events.\n * Clears the embedded key from memory, replacing it with the iframe's default embedded key.\n * @param {string} requestId\n */\nfunction onResetToDefaultEmbeddedKey(requestId) {\n injectedEmbeddedKey = null;\n TKHQ.sendMessageUp(\"RESET_TO_DEFAULT_EMBEDDED_KEY\", true, requestId);\n}\n\n// Utility functions\nasync function createSolanaKeypair(privateKey) {\n const privateKeyBytes = TKHQ.parsePrivateKey(privateKey);\n\n let keypair;\n if (privateKeyBytes.length === 32) {\n // 32-byte private key (seed)\n keypair = Keypair.fromSeed(privateKeyBytes);\n } else if (privateKeyBytes.length === 64) {\n // 64-byte secret key (private + public)\n keypair = Keypair.fromSecretKey(privateKeyBytes);\n } else {\n throw new Error(\n `Invalid private key length: ${privateKeyBytes.length}. Expected 32 or 64 bytes.`\n );\n }\n\n return keypair;\n}\n\n/**\n * Converts raw P-256 private key bytes (32-byte scalar) to a JWK.\n * Constructs a PKCS8 wrapper around the raw bytes, imports via WebCrypto\n * (which derives the public key), then exports as JWK.\n * @param {Uint8Array} rawPrivateKeyBytes - 32-byte P-256 private key scalar\n * @returns {Promise} - Full P-256 ECDH private key JWK\n */\nasync function rawP256PrivateKeyToJwk(rawPrivateKeyBytes) {\n if (rawPrivateKeyBytes.length !== 32) {\n throw new Error(\n `invalid decryption key length: expected 32 bytes, got ${rawPrivateKeyBytes.length}`\n );\n }\n\n // Fixed PKCS#8 DER prefix for a P-256 private key (36 bytes).\n // This wraps a raw 32-byte scalar into the PrivateKeyInfo structure\n // that WebCrypto's importKey(\"pkcs8\", ...) expects.\n //\n // Structure (per RFC 5958 §2 / RFC 5208 §5):\n // SEQUENCE {\n // INTEGER 0 -- version (v1)\n // SEQUENCE { -- AlgorithmIdentifier (RFC 5480 §2.1.1)\n // OID 1.2.840.10045.2.1 -- id-ecPublicKey\n // OID 1.2.840.10045.3.1.7 -- secp256r1 (P-256)\n // }\n // OCTET STRING { -- privateKey (SEC 1 §C.4 / RFC 5915 §3)\n // SEQUENCE {\n // INTEGER 1 -- version\n // OCTET STRING (32 bytes) -- raw private key scalar\n // }\n // }\n // }\n //\n // References:\n // - RFC 5958 / RFC 5208: PKCS#8 PrivateKeyInfo\n // - RFC 5480 §2.1.1: ECC AlgorithmIdentifier (OIDs)\n // - RFC 5915 / SEC 1 v2 §C.4: ECPrivateKey encoding\n const pkcs8Prefix = new Uint8Array([\n 0x30, 0x41, 0x02, 0x01, 0x00, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48,\n 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03,\n 0x01, 0x07, 0x04, 0x27, 0x30, 0x25, 0x02, 0x01, 0x01, 0x04, 0x20,\n ]);\n\n const pkcs8 = new Uint8Array(pkcs8Prefix.length + 32);\n pkcs8.set(pkcs8Prefix);\n pkcs8.set(rawPrivateKeyBytes, pkcs8Prefix.length);\n\n const cryptoKey = await crypto.subtle.importKey(\n \"pkcs8\",\n pkcs8,\n { name: \"ECDH\", namedCurve: \"P-256\" },\n true,\n [\"deriveBits\"]\n );\n\n return await crypto.subtle.exportKey(\"jwk\", cryptoKey);\n}\n\n/**\n * Generates the error message for missing or expired keys.\n * @param {string} keyAddress - The address of the key\n * @returns {string} - The error message string\n */\nexport function getKeyNotFoundErrorMessage(keyAddress) {\n return `key bytes have expired. Please re-inject export bundle for address ${keyAddress} into iframe. Note that address is case sensitive.`;\n}\n\n/**\n * Clears an expired key from memory. This is an internal helper function\n * that clears the key without sending messages to the parent frame.\n * @param {string} keyAddress - The address of the key to clear\n */\nfunction clearExpiredKey(keyAddress) {\n if (inMemoryKeys[keyAddress]) {\n delete inMemoryKeys[keyAddress];\n }\n}\n\n/**\n * Clears all expired keys from memory.\n * This function iterates through all keys and removes any that have expired.\n */\nfunction clearAllExpiredKeys() {\n const now = new Date().getTime();\n const addressesToRemove = [];\n\n for (const [address, key] of Object.entries(inMemoryKeys)) {\n if (key.expiry && now >= key.expiry) {\n addressesToRemove.push(address);\n }\n }\n\n for (const address of addressesToRemove) {\n clearExpiredKey(address);\n }\n}\n\n/**\n * Validates that a key exists and has not expired.\n * Clears the key from memory if it has expired.\n * Throws error if validation fails (and caller will send message up back to parent).\n * @param {Object} key - The key object from inMemoryKeys\n * @param {string} keyAddress - The address of the key\n * @returns {boolean} - True if key is valid, false otherwise\n */\nfunction validateKey(key, keyAddress) {\n if (!key) {\n throw new Error(\n `key bytes not found. Please re-inject export bundle for address ${keyAddress} into iframe. Note that address is case sensitive.`\n ).toString();\n }\n\n const now = new Date().getTime();\n if (now >= key.expiry) {\n // Clear all expired keys before processing the signing request\n clearAllExpiredKeys();\n throw new Error(getKeyNotFoundErrorMessage(keyAddress)).toString();\n }\n\n return true;\n}\n\n/**\n * Gets or creates a Solana keypair from a key object.\n * Uses cached keypair if available, otherwise creates a new one.\n * @param {Object} key - The key object containing format and privateKey\n * @returns {Promise} - The Solana keypair\n */\nasync function getOrCreateKeypair(key) {\n if (key.keypair) {\n return key.keypair;\n }\n\n if (key.format === \"SOLANA\") {\n return Keypair.fromSecretKey(TKHQ.base58Decode(key.privateKey));\n } else {\n return await createSolanaKeypair(\n Array.from(TKHQ.uint8arrayFromHexString(key.privateKey))\n );\n }\n}\n\n/**\n * Gets or creates a viem Ethereum account from a key object.\n * Caches the account on the key object for improved signing perf.\n * @param {Object} key - The key object containing the privateKey and format\n * @returns {Promise} - The viem account (from privateKeyToAccount)\n */\nasync function getOrCreateEthereumAccount(key) {\n if (key.ethereumAccount) {\n return key.ethereumAccount;\n }\n\n // Ethereum keys are exported in HEXADECIMAL format, where privateKey is a\n // 0x-prefixed hex string — exactly what viem's privateKeyToAccount expects.\n if (key.format !== \"HEXADECIMAL\") {\n throw new Error(\n `cannot sign Ethereum payload with key format \"${key.format}\"; expected \"HEXADECIMAL\"`\n );\n }\n\n key.ethereumAccount = privateKeyToAccount(key.privateKey);\n return key.ethereumAccount;\n}\n\n/**\n * Signs a serialized Ethereum transaction and returns the broadcast-ready,\n * 0x-prefixed serialized signed transaction.\n *\n * Mirrors the Solana path: the caller builds and serializes the *unsigned*\n * transaction with any library, then passes the 0x-prefixed serialized hex.\n * We parse it back into viem's transaction shape, sign, and re-serialize.\n *\n * Note: for legacy (non-typed) transactions, the serialized unsigned tx must\n * include the chainId so the resulting signature carries EIP-155 replay\n * protection. Typed txs (EIP-1559/2930) always encode the chainId.\n * @param {Object} key - The key object containing the privateKey and format\n * @param {string} transactionToSign - 0x-prefixed serialized unsigned transaction\n * @returns {Promise} - The 0x-prefixed serialized signed transaction\n */\nasync function signEthereumTransaction(key, transactionToSign) {\n const account = await getOrCreateEthereumAccount(key);\n return await account.signTransaction(parseTransaction(transactionToSign));\n}\n\n/**\n * DOM Event handlers to power the export flow in standalone mode\n * Instead of receiving events from the parent page, forms trigger them.\n * This is useful for debugging as well.\n */\nfunction addDOMEventListeners() {\n // only support injected keys, not wallets\n document.getElementById(\"inject-key\").addEventListener(\n \"click\",\n async (e) => {\n e.preventDefault();\n window.postMessage({\n type: \"INJECT_KEY_EXPORT_BUNDLE\",\n value: document.getElementById(\"key-export-bundle\").value,\n keyFormat: document.getElementById(\"key-export-format\").value,\n organizationId: document.getElementById(\"key-organization-id\").value,\n });\n },\n false\n );\n document.getElementById(\"sign-transaction\").addEventListener(\n \"click\",\n async (e) => {\n e.preventDefault();\n window.postMessage({\n type: \"SIGN_TRANSACTION\",\n value: document.getElementById(\"transaction-to-sign\").value,\n });\n },\n false\n );\n document.getElementById(\"sign-message\").addEventListener(\n \"click\",\n async (e) => {\n e.preventDefault();\n window.postMessage({\n type: \"SIGN_MESSAGE\",\n value: document.getElementById(\"message-to-sign\").value,\n });\n },\n false\n );\n document.getElementById(\"reset\").addEventListener(\n \"click\",\n async (e) => {\n e.preventDefault();\n window.postMessage({ type: \"RESET_EMBEDDED_KEY\" });\n },\n false\n );\n\n // Add wallet injection support\n const injectWalletBtn = document.getElementById(\"inject-wallet\");\n if (injectWalletBtn) {\n injectWalletBtn.addEventListener(\n \"click\",\n async (e) => {\n e.preventDefault();\n window.postMessage({\n type: \"INJECT_WALLET_EXPORT_BUNDLE\",\n value: document.getElementById(\"wallet-export-bundle\").value,\n organizationId: document.getElementById(\"wallet-organization-id\")\n .value,\n });\n },\n false\n );\n }\n}\n\n/**\n * Message Event Handlers to process messages from the parent frame\n */\nfunction initMessageEventListener(HpkeDecrypt) {\n return async function messageEventListener(event) {\n if (event.data && event.data[\"type\"] == \"INJECT_KEY_EXPORT_BUNDLE\") {\n TKHQ.logMessage(\n `⬇️ Received message ${event.data[\"type\"]}: ${event.data[\"value\"]}, ${event.data[\"keyFormat\"]}, ${event.data[\"organizationId\"]}`\n );\n try {\n await onInjectKeyBundle(\n event.data[\"requestId\"],\n event.data[\"organizationId\"],\n event.data[\"value\"], // bundle\n event.data[\"keyFormat\"],\n event.data[\"address\"],\n HpkeDecrypt\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"INJECT_WALLET_EXPORT_BUNDLE\") {\n TKHQ.logMessage(\n `⬇️ Received message ${event.data[\"type\"]}: ${event.data[\"value\"]}, ${event.data[\"organizationId\"]}`\n );\n try {\n await onInjectKeyBundle(\n event.data[\"requestId\"],\n event.data[\"organizationId\"],\n event.data[\"value\"],\n undefined, // keyFormat - default to HEXADECIMAL\n undefined, // address - default to \"default\"\n HpkeDecrypt\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"APPLY_SETTINGS\") {\n try {\n await onApplySettings(event.data[\"value\"], event.data[\"requestId\"]);\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"RESET_EMBEDDED_KEY\") {\n TKHQ.logMessage(`⬇️ Received message ${event.data[\"type\"]}`);\n try {\n TKHQ.onResetEmbeddedKey();\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString());\n }\n }\n if (event.data && event.data[\"type\"] == \"SIGN_TRANSACTION\") {\n TKHQ.logMessage(\n `⬇️ Received message ${event.data[\"type\"]}: ${event.data[\"value\"]}`\n );\n try {\n await onSignTransaction(\n event.data[\"requestId\"],\n event.data[\"value\"],\n event.data[\"address\"] // signing address (case sensitive)\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"SIGN_MESSAGE\") {\n TKHQ.logMessage(\n `⬇️ Received message ${event.data[\"type\"]}: ${event.data[\"value\"]}`\n );\n try {\n await onSignMessage(\n event.data[\"requestId\"],\n event.data[\"value\"],\n event.data[\"address\"] // signing address (case sensitive)\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"CLEAR_EMBEDDED_PRIVATE_KEY\") {\n TKHQ.logMessage(`⬇️ Received message ${event.data[\"type\"]}`);\n try {\n await onClearEmbeddedPrivateKey(\n event.data[\"requestId\"],\n event.data[\"address\"]\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"GET_EMBEDDED_PUBLIC_KEY\") {\n TKHQ.logMessage(`⬇️ Received message ${event.data[\"type\"]}`);\n try {\n await onGetPublicEmbeddedKey(event.data[\"requestId\"]);\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"SET_EMBEDDED_KEY_OVERRIDE\") {\n TKHQ.logMessage(`⬇️ Received message ${event.data[\"type\"]}`);\n try {\n await onSetEmbeddedKeyOverride(\n event.data[\"requestId\"],\n event.data[\"organizationId\"],\n event.data[\"value\"],\n HpkeDecrypt\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"RESET_TO_DEFAULT_EMBEDDED_KEY\") {\n TKHQ.logMessage(`⬇️ Received message ${event.data[\"type\"]}`);\n try {\n onResetToDefaultEmbeddedKey(event.data[\"requestId\"]);\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n };\n}\n\n/**\n * Set up event handlers for both DOM and message events\n * @param {Function} HpkeDecrypt\n */\nexport function initEventHandlers(HpkeDecrypt) {\n const messageEventListener = initMessageEventListener(HpkeDecrypt);\n\n // controllers to remove event listeners\n const messageListenerController = new AbortController();\n const turnkeyInitController = new AbortController();\n\n // Origin of a legacy (@turnkey/iframe-stamper < 2.1.0) parent, bound on its\n // first valid message. A document belongs to exactly one embedder for its\n // lifetime, so every subsequent message must come from the same origin.\n let legacyParentOrigin = null;\n let legacyTelemetryRecorded = false;\n\n if (window.parent === window) {\n // Standalone mode: the DOM forms drive the flow by posting messages to\n // this same window. Messages from other windows (e.g. a window.opener)\n // are not accepted.\n addDOMEventListeners();\n window.addEventListener(\n \"message\",\n async function (event) {\n if (event.source !== window) {\n return;\n }\n await messageEventListener(event);\n },\n {\n capture: false,\n signal: messageListenerController.signal,\n }\n );\n return { messageEventListener };\n }\n\n // Legacy embedded mode: @turnkey/iframe-stamper < 2.1.0 posts requests\n // straight to this window instead of establishing a MessageChannel.\n // These clients operate on the document-scoped ephemeral key (never\n // persisted -- see initEphemeralEmbeddedKey), so a malicious embedder can\n // only ever obtain a key that no legitimate bundle is encrypted to\n // (INT-697). Modern clients upgrade to the MessageChannel path below.\n window.addEventListener(\n \"message\",\n async function (event) {\n if (!event.data || !event.data[\"type\"]) {\n return;\n }\n // Channel establishment is owned by the handshake listener below.\n if (event.data[\"type\"] === \"TURNKEY_INIT_MESSAGE_CHANNEL\") {\n return;\n }\n // Only the direct parent, with a real (non-opaque) origin, may drive\n // the legacy path.\n if (event.source !== window.parent) {\n return;\n }\n if (!event.origin || event.origin === \"null\") {\n return;\n }\n if (legacyParentOrigin === null) {\n legacyParentOrigin = event.origin;\n // From now on, responses posted to window.parent are only readable\n // by the bound origin.\n TKHQ.setParentFrameOrigin(event.origin);\n } else if (event.origin !== legacyParentOrigin) {\n return;\n }\n if (!legacyTelemetryRecorded) {\n recordChannelTelemetry(CHANNEL_LEGACY_POST_MESSAGE, event.origin);\n legacyTelemetryRecorded = true;\n }\n await messageEventListener(event);\n },\n { capture: false, signal: messageListenerController.signal }\n );\n\n // Guard to prevent concurrent channel establishment from multiple senders\n let channelEstablished = false;\n\n // Handle MessageChannel initialization for iframe communication\n window.addEventListener(\n \"message\",\n async function (event) {\n /**\n * @turnkey/iframe-stamper >= v2.1.0 is using a MessageChannel to communicate with the parent frame.\n * The parent frame sends a TURNKEY_INIT_MESSAGE_CHANNEL event with the MessagePort.\n * If we receive this event, we want to remove the message event listener that was added in the DOMContentLoaded event to avoid processing messages twice.\n * We persist the MessagePort so we can use it to communicate with the parent window in subsequent calls to TKHQ.sendMessageUp\n */\n if (\n event.data &&\n event.data[\"type\"] == \"TURNKEY_INIT_MESSAGE_CHANNEL\" &&\n event.source === window.parent &&\n event.origin &&\n event.origin !== \"null\" &&\n event.ports?.length === 1\n ) {\n // A legacy-bound document may upgrade to the MessageChannel protocol,\n // but never on behalf of a different origin.\n if (\n legacyParentOrigin !== null &&\n legacyParentOrigin !== event.origin\n ) {\n return;\n }\n\n // Synchronously check-and-set the flag before any await. This prevents\n // a second concurrent invocation from racing through while the first is\n // suspended at an await, which would allow multiple origins to establish\n // a channel before turnkeyInitController.abort() is reached.\n if (channelEstablished) {\n return;\n }\n channelEstablished = true;\n\n const iframeMessagePort = event.ports[0];\n\n var targetPubHex;\n try {\n // Supersedes the ephemeral key, if the legacy bootstrap created one.\n await TKHQ.initEmbeddedKey(event.origin);\n var embeddedKeyJwk = await TKHQ.getEmbeddedKey();\n var targetPubBuf = await TKHQ.p256JWKPrivateToPublic(embeddedKeyJwk);\n targetPubHex = TKHQ.uint8arrayToHexString(targetPubBuf);\n } catch (e) {\n // Key setup failed (e.g. blocked third-party storage). Roll back so\n // the parent can retry the handshake, and keep the legacy/standalone\n // listener alive so the frame stays functional in the meantime.\n channelEstablished = false;\n iframeMessagePort.postMessage({ type: \"ERROR\", value: e.toString() });\n return;\n }\n\n // Commit: the MessagePort carries all requests from here on; stop\n // accepting legacy/standalone window messages.\n messageListenerController.abort();\n TKHQ.setParentFrameMessageChannelPort(iframeMessagePort);\n document.getElementById(\"embedded-key\").value = targetPubHex;\n\n iframeMessagePort.onmessage = messageEventListener;\n recordChannelTelemetry(CHANNEL_MESSAGE_CHANNEL, event.origin);\n TKHQ.sendMessageUp(\"PUBLIC_KEY_READY\", targetPubHex);\n\n // remove the listener for TURNKEY_INIT_MESSAGE_CHANNEL after it's been processed\n turnkeyInitController.abort();\n }\n },\n { signal: turnkeyInitController.signal }\n );\n\n return { messageEventListener };\n}\n/**\n * Expose internal handlers for targeted testing.\n */\nexport {\n onInjectKeyBundle,\n onSignTransaction,\n onSignMessage,\n onClearEmbeddedPrivateKey,\n onSetEmbeddedKeyOverride,\n onResetToDefaultEmbeddedKey,\n};\n","/**\n * Crypto Utilities - Shared\n * Contains HPKE encryption and decryption functions\n */\n\nimport {\n p256JWKPrivateToPublic,\n additionalAssociatedData,\n uint8arrayToHexString,\n} from \"./turnkey-core.js\";\nimport {\n CipherSuite,\n DhkemP256HkdfSha256,\n HkdfSha256,\n Aes256Gcm,\n} from \"@hpke/core\";\n\n// Pre-compute const (for perf)\nconst TURNKEY_HPKE_INFO = new TextEncoder().encode(\"turnkey_hpke\");\n\n/**\n * Decrypt the ciphertext (ArrayBuffer) given an encapsulation key (ArrayBuffer)\n * and the receivers private key (JSON Web Key).\n */\nexport async function HpkeDecrypt({\n ciphertextBuf,\n encappedKeyBuf,\n receiverPrivJwk,\n}) {\n const kemContext = new DhkemP256HkdfSha256();\n var receiverPriv = await kemContext.importKey(\n \"jwk\",\n { ...receiverPrivJwk },\n false\n );\n\n var suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n var recipientCtx = await suite.createRecipientContext({\n recipientKey: receiverPriv,\n enc: encappedKeyBuf,\n info: TURNKEY_HPKE_INFO,\n });\n\n var receiverPubBuf = await p256JWKPrivateToPublic(receiverPrivJwk);\n var aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n var res;\n try {\n res = await recipientCtx.open(ciphertextBuf, aad);\n } catch (e) {\n throw new Error(\n \"unable to decrypt bundle using embedded key. the bundle may be incorrect. failed with error: \" +\n e.toString()\n );\n }\n return res;\n}\n\n/**\n * Encrypt plaintext using HPKE with the receiver's public key.\n * @param {Object} params\n * @param {Uint8Array} params.plaintextBuf - Plaintext to encrypt\n * @param {JsonWebKey} params.receiverPubJwk - Receiver's public key in JWK format\n * @returns {Promise} JSON stringified encrypted bundle with encappedPublic and ciphertext\n */\nexport async function HpkeEncrypt({ plaintextBuf, receiverPubJwk }) {\n const kemContext = new DhkemP256HkdfSha256();\n const receiverPub = await kemContext.importKey(\n \"jwk\",\n { ...receiverPubJwk },\n true\n );\n\n const suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n const senderCtx = await suite.createSenderContext({\n recipientPublicKey: receiverPub,\n info: TURNKEY_HPKE_INFO,\n });\n\n // Need to import the key again as a JWK to export as a raw key, the format needed to\n // create the aad with the newly generated raw encapped key.\n const receiverPubCryptoKey = await crypto.subtle.importKey(\n \"jwk\",\n receiverPubJwk,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n const receiverPubRaw = await crypto.subtle.exportKey(\n \"raw\",\n receiverPubCryptoKey\n );\n const receiverPubBuf = new Uint8Array(receiverPubRaw);\n\n const encappedKeyBuf = new Uint8Array(senderCtx.enc);\n\n const aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n\n var ciphertextBuf;\n try {\n ciphertextBuf = await senderCtx.seal(plaintextBuf, aad);\n } catch (e) {\n throw new Error(\"failed to encrypt import bundle: \" + e.toString());\n }\n\n const ciphertextHex = uint8arrayToHexString(new Uint8Array(ciphertextBuf));\n const encappedKeyBufHex = uint8arrayToHexString(encappedKeyBuf);\n const encryptedBundle = JSON.stringify({\n encappedPublic: encappedKeyBufHex,\n ciphertext: ciphertextHex,\n });\n return encryptedBundle;\n}\n","// This file is the main entrypoint of the webpack-bundled application\n\n// Import relevant modules\nimport { TKHQ } from \"./turnkey-core.js\";\nimport { initEventHandlers } from \"./event-handlers.js\";\nimport { HpkeDecrypt } from \"@shared/crypto-utils.js\";\nimport \"./styles.css\";\n\n// Surface TKHQ for external access\nwindow.TKHQ = TKHQ;\n\n// Init app\ndocument.addEventListener(\"DOMContentLoaded\", async function () {\n initEventHandlers(HpkeDecrypt);\n\n // If styles are saved in local storage, sanitize and apply them\n const styleSettings = TKHQ.getSettings();\n if (styleSettings) {\n TKHQ.applySettings(styleSettings);\n }\n\n if (window.parent === window) {\n // Standalone mode has no parent; scope the persisted key to this\n // document's own origin.\n await TKHQ.initEmbeddedKey(window.location.origin);\n } else {\n // Embedded mode: create a document-scoped ephemeral key so legacy\n // (@turnkey/iframe-stamper < 2.1.0) parents, which passively wait for\n // PUBLIC_KEY_READY, can finish init(). Modern parents supersede it with\n // a persistent key scoped to their browser-authenticated origin during\n // the MessageChannel handshake (see event-handlers.js).\n await TKHQ.initEphemeralEmbeddedKey();\n }\n\n const embeddedKeyJwk = await TKHQ.getEmbeddedKey();\n const targetPubBuf = await TKHQ.p256JWKPrivateToPublic(embeddedKeyJwk);\n const targetPubHex = TKHQ.uint8arrayToHexString(targetPubBuf);\n document.getElementById(\"embedded-key\").value = targetPubHex;\n\n if (window.parent !== window) {\n // The parent origin is not known yet, but announcing the (non-secret)\n // public key broadly is required to bootstrap legacy clients.\n TKHQ.sendMessageUp(\"PUBLIC_KEY_READY\", targetPubHex);\n }\n});\n","module.exports = crypto;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"bundle.\" + {\"291\":\"c9a8b8d5055f705bd308\",\"825\":\"29203a225e88524b9cba\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","\n__webpack_require__.sriHashes = {\"291\":\"*-*-*-CHUNK-SRI-HASH-r3NPGwA4ft5fHgGXhVIptCiDVf06qPa+sxzG6L+8GwPuhn89e/\",\"825\":\"*-*-*-CHUNK-SRI-HASH-mfog3UJdGPOmSk4QZbKxsxHPFZtt298WnZNc1aQ1MCgc6YirFj\"};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t792: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkexport_and_sign\"] = self[\"webpackChunkexport_and_sign\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [96], () => (__webpack_require__(750)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","inProgress","dataWebpackPrefix","e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_invoke","enumerable","configurable","writable","_toConsumableArray","Array","isArray","_arrayLikeToArray","_arrayWithoutHoles","from","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","toString","slice","constructor","name","test","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","TURNKEY_SETTINGS","parentFrameMessageChannelPort","parentFrameTargetOrigin","getSubtleCrypto","globalThis","crypto","subtle","window","global","isDoublyIframed","undefined","location","ancestorOrigins","parent","top","_loadQuorumKey","_callee","quorumPublic","_context","Error","importKey","namedCurve","requireStorageKey","storageKey","_initEmbeddedKey","_callee3","_context3","getEmbeddedKey","generateTargetKey","setEmbeddedKey","_generateTargetKey","_callee4","p256key","_context4","generateKey","exportKey","privateKey","jwtKey","getItemWithExpiry","JSON","parse","targetKey","setItemWithExpiry","stringify","key","ttl","item","expiry","Date","getTime","localStorage","setItem","itemStr","getItem","hasOwnProperty","removeItem","uint8arrayFromHexString","hexString","hexWithoutPrefix","startsWith","Uint8Array","match","map","h","parseInt","uint8arrayToHexString","buffer","x","padStart","join","additionalAssociatedData","senderPubBuf","receiverPubBuf","s","concat","logMessage","content","messageLog","document","getElementById","message","createElement","innerText","appendChild","p256JWKPrivateToPublic","_x7","_p256JWKPrivateToPublic","_callee6","jwkPrivate","jwkPrivateCopy","publicKey","_context6","_objectSpread","key_ops","base58Encode","bytes","result","digits","carry","j","push","k","base58Decode","alphabet","decodedBytes","leadingZeros","indexOf","currentByte","reverse","_encodeKey","_callee9","privateKeyBytes","keyFormat","publicKeyBytes","concatenatedBytes","_t2","_context9","set","console","warn","sharedInitEmbeddedKey","_x3","SharedTKHQ","sharedGetEmbeddedKey","sharedSetEmbeddedKey","normalizePadding","byteArray","targetLength","paddingLength","padding","fill","expectedZeroCount","zeroCount","validateStyles","styles","element","validStyles","cssValidationRegex","margin","borderWidth","borderStyle","borderColor","borderRadius","fontSize","fontWeight","fontFamily","color","labelColor","backgroundColor","width","height","maxWidth","maxHeight","lineHeight","boxShadow","textAlign","overflowWrap","wordWrap","resize","entries","forEach","_ref","_ref2","_arrayWithHoles","next","_iterableToArrayLimit","_nonIterableRest","property","styleProperty","trim","styleRegexStr","styleRegex","RegExp","styleValue","loadQuorumKey","_x","embeddedKeyStates","WeakMap","validateParentOrigin","parentOrigin","parsedOrigin","URL","origin","purgeLegacyEmbeddedKey","validatedOrigin","previousState","state","get","mode","encodeURIComponent","ready","error","_initEphemeralEmbeddedKey","_callee2","_embeddedKeyStates$ge","generatedKey","latestState","_context2","_verifyEnclaveSignature","enclaveQuorumPublic","publicSignature","signedData","TURNKEY_SIGNERS_ENCLAVES","environment","meta","TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY","encryptionQuorumPublicBuf","quorumKey","publicSignatureBuf","signedDataBuf","prod","preprod","querySelector","__TURNKEY_SIGNER_ENVIRONMENT__","fromDerSignature","verify","hash","TKHQ","initEmbeddedKey","initEphemeralEmbeddedKey","onResetEmbeddedKey","encodeKey","_x1","_x10","_x11","sendMessageUp","type","requestId","postMessage","setParentFrameMessageChannelPort","port","setParentFrameOrigin","_unused","verifyEnclaveSignature","_x2","_x4","getEd25519PublicKey","privateKeyHex","nobleEd25519","sha512Sync","_nobleEd25519$etc","nobleHashes","concatBytes","applySettings","settings","validSettings","settingsObj","keyDivTextarea","style","getSettings","setSettings","parsePrivateKey","CHANNEL_MESSAGE_CHANNEL","CHANNEL_LEGACY_POST_MESSAGE","VALID_CHANNELS","Set","reportedChannelsByWindow","recordChannelTelemetry","channel","has","endpoint","getTelemetryEndpoint","navigator","sendBeacon","reportedChannels","payload","frame","timestamp","toISOString","Blob","add","_slicedToArray","inMemoryKeys","injectedEmbeddedKey","textEncoder","TextEncoder","textDecoder","TextDecoder","verifyAndParseBundleData","_verifyAndParseBundleData","_callee0","bundle","organizationId","bundleObj","_context0","version","data","dataSignature","decode","encappedPublic","ciphertext","decryptBundle","_x5","_decryptBundle","_callee1","HpkeDecrypt","encappedKeyBuf","ciphertextBuf","receiverPrivJwk","_t0","_context1","onGetPublicEmbeddedKey","_x6","_onGetPublicEmbeddedKey","_callee10","embeddedKeyJwk","targetPubBuf","targetPubHex","_context10","loadKeyIntoMemory","_x8","_x9","_x0","_loadKeyIntoMemory","_callee11","address","keyBytes","keyAddress","cachedKeypair","_context11","subarray","Keypair","fromSecretKey","createSolanaKeypair","_defineProperty","format","keypair","onInjectKeyBundle","_x12","_x13","_x14","_onInjectKeyBundle","_callee12","_context12","onApplySettings","_x15","_x16","_onApplySettings","_callee13","_context13","onSignTransaction","_x17","_x18","_x19","_onSignTransaction","_callee14","serializedTransaction","transactionWrapper","transactionToSign","transactionType","signedTransaction","transactionBytes","transaction","signedTransactionHex","_context14","validateKey","getOrCreateKeypair","VersionedTransaction","deserialize","sign","serialize","signEthereumTransaction","onSignMessage","_x20","_x21","_x22","_onSignMessage","_callee15","serializedMessage","messageWrapper","messageToSign","messageType","messageBytes","signatureHex","signature","account","_context15","encode","secretKey","getOrCreateEthereumAccount","signMessage","onClearEmbeddedPrivateKey","_x23","_x24","_onClearEmbeddedPrivateKey","_callee16","_context16","onSetEmbeddedKeyOverride","_x25","_x26","_x27","_x28","_onSetEmbeddedKeyOverride","_callee17","keyJwk","_context17","rawP256PrivateKeyToJwk","onResetToDefaultEmbeddedKey","_x29","_createSolanaKeypair","_callee18","_context18","fromSeed","_x30","_rawP256PrivateKeyToJwk","_callee19","rawPrivateKeyBytes","pkcs8Prefix","pkcs8","cryptoKey","_context19","clearExpiredKey","now","addressesToRemove","_i","_Object$entries","_Object$entries$_i","_i2","_addressesToRemove","clearAllExpiredKeys","getKeyNotFoundErrorMessage","_x31","_getOrCreateKeypair","_callee20","_context20","_x32","_getOrCreateEthereumAccount","_callee21","_context21","ethereumAccount","privateKeyToAccount","_x33","_x34","_signEthereumTransaction","_callee22","_context22","signTransaction","parseTransaction","initEventHandlers","messageEventListener","_messageEventListener","event","_t","_t3","_t4","_t5","_t6","_t7","_t8","_x40","initMessageEventListener","messageListenerController","AbortController","turnkeyInitController","legacyParentOrigin","legacyTelemetryRecorded","addEventListener","preventDefault","_x35","_x36","_ref3","_x37","_ref4","_x38","injectWalletBtn","_ref5","_callee5","_context5","_x39","addDOMEventListeners","_ref6","_callee7","_context7","source","_x41","capture","signal","_ref7","_callee8","_context8","_x42","channelEstablished","_ref8","_event$ports","iframeMessagePort","_t9","ports","abort","onmessage","_x43","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","getOwnPropertyDescriptors","defineProperties","_typeof","toPrimitive","String","_toPrimitive","_toPropertyKey","TURNKEY_HPKE_INFO","_HpkeDecrypt","kemContext","receiverPriv","suite","recipientCtx","aad","res","DhkemP256HkdfSha256","CipherSuite","kem","kdf","HkdfSha256","aead","Aes256Gcm","createRecipientContext","recipientKey","enc","info","open","styleSettings","module","exports","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","id","loaded","__webpack_modules__","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","every","splice","getter","__esModule","obj","this","ns","def","current","getOwnPropertyNames","definition","chunkId","all","reduce","promises","miniCssF","g","Function","prop","url","script","needAttach","scripts","getElementsByTagName","getAttribute","charset","nc","setAttribute","src","crossOrigin","integrity","sriHashes","onScriptComplete","prev","onerror","onload","clearTimeout","timeout","doneFns","parentNode","removeChild","setTimeout","target","head","nmd","paths","children","installedChunks","installedChunkData","promise","reject","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file diff --git a/export-and-sign/dist/bundle.6a4c3b0995683838803c.js b/export-and-sign/dist/bundle.6a4c3b0995683838803c.js deleted file mode 100644 index 7d652e0f..00000000 --- a/export-and-sign/dist/bundle.6a4c3b0995683838803c.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see bundle.6a4c3b0995683838803c.js.LICENSE.txt */ -(()=>{var e,t,r,n,a,o={750:(e,t,r)=>{"use strict";var n=r(7598),a=r(4443),o=r(566);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e){for(var t=1;t3?(a=y===n)&&(u=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=p&&((a=r<2&&pn||n>y)&&(o[4]=r,o[5]=n,d.n=y,c=0))}if(a||r>1)return i;throw l=!0,n}return function(a,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&p(f,y),c=f,u=y;(t=c<2?e:u)||!l;){o||(c?c<3?(c>1&&(d.n=-1),p(c,u)):d.n=u:d.v=u);try{if(s=2,o){if(c||(a="next"),t=o[a]){if(!(t=t.call(o,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);o=e}else if((t=(l=d.n<0)?u:r.call(n,d))!==i)break}catch(t){o=e,c=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,a,o),!0),s}var i={};function c(){}function u(){}function s(){}t=Object.getPrototypeOf;var d=[][n]?t(t([][n]())):(l(t={},n,function(){return this}),t),p=s.prototype=c.prototype=Object.create(d);function y(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,l(e,a,"GeneratorFunction")),e.prototype=Object.create(p),e}return u.prototype=s,l(p,"constructor",s),l(s,"constructor",u),u.displayName="GeneratorFunction",l(s,a,"GeneratorFunction"),l(p),l(p,a,"Generator"),l(p,n,function(){return this}),l(p,"toString",function(){return"[object Generator]"}),(f=function(){return{w:o,m:y}})()}function l(e,t,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}l=function(e,t,r,n){function o(t,r){l(e,t,function(e){return this._invoke(t,r,e)})}t?a?a(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(o("next",0),o("throw",1),o("return",2))},l(e,t,r,n)}function d(e){return function(e){if(Array.isArray(e))return y(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||p(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p(e,t){if(e){if("string"==typeof e)return y(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?y(e,t):void 0}}function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r1:window.parent!==window.top}function S(){return(S=b(f().m(function e(t){var r;return f().w(function(e){for(;;)switch(e.n){case 0:if(r=w()){e.n=1;break}throw new Error("WebCrypto subtle API is unavailable");case 1:return e.n=2,r.importKey("raw",t,{name:"ECDSA",namedCurve:"P-256"},!0,["verify"]);case 2:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function O(e){if("string"!=typeof e||0===e.length)throw new Error("an explicit embedded key storage key is required")}function k(){return(k=b(f().m(function e(t){return f().w(function(e){for(;;)switch(e.n){case 0:if(O(t),!E()){e.n=1;break}throw new Error("Doubly iframed");case 1:return e.n=2,P(t);case 2:if(null!==e.v){e.n=4;break}return e.n=3,_();case 3:T(e.v,t);case 4:return e.a(2)}},e)}))).apply(this,arguments)}function _(){return j.apply(this,arguments)}function j(){return(j=b(f().m(function e(){var t,r;return f().w(function(e){for(;;)switch(e.n){case 0:if(t=w()){e.n=1;break}throw new Error("WebCrypto subtle API is unavailable");case 1:return e.n=2,t.generateKey({name:"ECDH",namedCurve:"P-256"},!0,["deriveBits"]);case 2:return r=e.v,e.n=3,t.exportKey("jwk",r.privateKey);case 3:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function P(e){O(e);var t=A(e);return t?JSON.parse(t):null}function T(e,t){O(t),I(t,JSON.stringify(e),1728e5)}function I(e,t,r){var n={value:t,expiry:(new Date).getTime()+r};window.localStorage.setItem(e,JSON.stringify(n))}function A(e){var t=window.localStorage.getItem(e);if(!t)return null;var r=JSON.parse(t);return Object.prototype.hasOwnProperty.call(r,"expiry")&&Object.prototype.hasOwnProperty.call(r,"value")?(new Date).getTime()>r.expiry?(window.localStorage.removeItem(e),null):r.value:(window.localStorage.removeItem(e),null)}function x(e){if(!e||"string"!=typeof e)throw new Error("cannot create uint8array from invalid hex string");var t=e.startsWith("0x")||e.startsWith("0X")?e.slice(2):e;if(t.length%2!=0||!/^[0-9A-Fa-f]+$/.test(t))throw new Error("cannot create uint8array from invalid hex string");return new Uint8Array(t.match(/../g).map(function(e){return parseInt(e,16)}))}function D(e){return d(e).map(function(e){return e.toString(16).padStart(2,"0")}).join("")}function R(e,t){var r=Array.from(new Uint8Array(e)),n=Array.from(new Uint8Array(t));return new Uint8Array([].concat(r,n))}function N(e){var t=document.getElementById("message-log");if(t){var r=document.createElement("p");r.innerText=e,t.appendChild(r)}}function M(e){return K.apply(this,arguments)}function K(){return(K=b(f().m(function e(t){var r,n,a,o;return f().w(function(e){for(;;)switch(e.n){case 0:if(r=w()){e.n=1;break}throw new Error("WebCrypto subtle API is unavailable");case 1:return delete(n=u({},t)).d,n.key_ops=["verify"],e.n=2,r.importKey("jwk",n,{name:"ECDSA",namedCurve:"P-256"},!0,["verify"]);case 2:return a=e.v,e.n=3,r.exportKey("raw",a);case 3:return o=e.v,e.a(2,new Uint8Array(o))}},e)}))).apply(this,arguments)}function U(e){for(var t="",r=[0],n=0;n0;)r.push(a%58),a=a/58|0}for(var i=0;i0;){var c=r[i];o=(c=void 0===c?o:58*c+o)>>8,r[i]=c%256,i++}}var u=n.concat(r.reverse());return new Uint8Array(u)}function G(){return(G=b(f().m(function e(t,r,n){var a,o;return f().w(function(e){for(;;)switch(e.n){case 0:o=r,e.n="SOLANA"===o?1:"HEXADECIMAL"===o?5:6;break;case 1:if(n){e.n=2;break}throw new Error("public key must be specified for SOLANA key format");case 2:if(32===t.length){e.n=3;break}throw new Error("invalid private key length. Expected 32 bytes. Got ".concat(t.length,"."));case 3:if(32===n.length){e.n=4;break}throw new Error("invalid public key length. Expected 32 bytes. Got ".concat(n.length,"."));case 4:return(a=new Uint8Array(64)).set(t,0),a.set(n,32),e.a(2,U(a));case 5:return e.a(2,"0x"+D(t));case 6:return console.warn("invalid key format: ".concat(r,". Defaulting to HEXADECIMAL.")),e.a(2,"0x"+D(t));case 7:return e.a(2)}},e)}))).apply(this,arguments)}function L(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",a=r.toStringTag||"@@toStringTag";function o(r,n,a,o){var u=n&&n.prototype instanceof c?n:c,s=Object.create(u.prototype);return B(s,"_invoke",function(r,n,a){var o,c,u,s=0,f=a||[],l=!1,d={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,r){return o=t,c=0,u=e,d.n=r,i}};function p(r,n){for(c=r,u=n,t=0;!l&&s&&!a&&t3?(a=y===n)&&(u=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=p&&((a=r<2&&pn||n>y)&&(o[4]=r,o[5]=n,d.n=y,c=0))}if(a||r>1)return i;throw l=!0,n}return function(a,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&p(f,y),c=f,u=y;(t=c<2?e:u)||!l;){o||(c?c<3?(c>1&&(d.n=-1),p(c,u)):d.n=u:d.v=u);try{if(s=2,o){if(c||(a="next"),t=o[a]){if(!(t=t.call(o,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);o=e}else if((t=(l=d.n<0)?u:r.call(n,d))!==i)break}catch(t){o=e,c=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,a,o),!0),s}var i={};function c(){}function u(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(B(t={},n,function(){return this}),t),l=s.prototype=c.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,B(e,a,"GeneratorFunction")),e.prototype=Object.create(l),e}return u.prototype=s,B(l,"constructor",s),B(s,"constructor",u),u.displayName="GeneratorFunction",B(s,a,"GeneratorFunction"),B(l),B(l,a,"Generator"),B(l,n,function(){return this}),B(l,"toString",function(){return"[object Generator]"}),(L=function(){return{w:o,m:d}})()}function B(e,t,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}B=function(e,t,r,n){function o(t,r){B(e,t,function(e){return this._invoke(t,r,e)})}t?a?a(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(o("next",0),o("throw",1),o("return",2))},B(e,t,r,n)}function H(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r0){var n=new Uint8Array(r).fill(0);return new Uint8Array([].concat(d(n),d(e)))}if(r<0){for(var a=-1*r,o=0,i=0;i]*$',color:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",labelColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",backgroundColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",width:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$",height:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$",maxWidth:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$",maxHeight:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$",lineHeight:"^(\\d+(\\.\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$",boxShadow:"^(none|(\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)) ?(inset)?)$",textAlign:"^(left|right|center|justify|initial|inherit)$",overflowWrap:"^(normal|break-word|anywhere)$",wordWrap:"^(normal|break-word)$",resize:"^(none|both|horizontal|vertical|block|inline)$"};return Object.entries(e).forEach(function(e){var t,a,o=(a=2,function(e){if(Array.isArray(e))return e}(t=e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,c=[],u=!0,s=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=o.call(r)).done)&&(c.push(n.value),c.length!==t);u=!0);}catch(e){s=!0,a=e}finally{try{if(!u&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return c}}(t,a)||p(t,a)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),i=o[0],c=o[1],u=i.trim();if(0===u.length)throw new Error("css style property cannot be empty");var s=n[u];if(!s)throw new Error('invalid or unsupported css style property: "'.concat(u,'"'));var f=new RegExp(s),l=c.trim();if(0==l.length)throw new Error('css style for "'.concat(u,'" is empty'));if(!f.test(l))throw new Error('invalid css style value for property "'.concat(u,'"'));r[u]=l}),r},ie=E,ce=function(e){return S.apply(this,arguments)},ue=new WeakMap;function se(e){if("string"!=typeof e||0===e.length||"null"===e)throw new Error("a non-opaque parent origin is required");var t=new URL(e).origin;if(t!==e)throw new Error("invalid parent origin: ".concat(e));return t}function fe(){window.localStorage.removeItem("TURNKEY_EMBEDDED_KEY"),window.localStorage.removeItem("TURNKEY_EMBEDDED_KEY_ORIGIN")}function le(){return(le=Y(L().m(function e(t){var r,n,a,o;return L().w(function(e){for(;;)switch(e.n){case 0:if(!ie()){e.n=1;break}throw new Error("Doubly iframed");case 1:if(r=se(t),"persistent"!==(null==(n=ue.get(window))?void 0:n.mode)||n.origin===r){e.n=2;break}throw new Error("parent origin is already bound to ".concat(n.origin,"; refusing ").concat(r));case 2:return fe(),a="".concat("TURNKEY_EMBEDDED_KEY_V2",":").concat(encodeURIComponent(r)),(o={mode:"persistent",origin:r,storageKey:a}).ready=q(a).catch(function(e){throw ue.get(window)===o&&(n?ue.set(window,n):ue.delete(window)),e}),ue.set(window,o),e.n=3,o.ready;case 3:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function de(){return(de=Y(L().m(function e(){var t,r,n,a;return L().w(function(e){for(;;)switch(e.p=e.n){case 0:if(!ie()){e.n=1;break}throw new Error("Doubly iframed");case 1:if("persistent"!==(null==(r=ue.get(window))?void 0:r.mode)){e.n=3;break}return e.n=2,r.ready;case 2:return e.a(2,e.v);case 3:if(null==r||!r.key){e.n=4;break}return e.a(2);case 4:return fe(),e.n=5,z();case 5:if(n=e.v,"persistent"!==(null==(a=ue.get(window))?void 0:a.mode)){e.n=9;break}return e.p=6,e.n=7,a.ready;case 7:return e.a(2,e.v);case 8:e.p=8,e.v;case 9:"persistent"!==(null===(t=ue.get(window))||void 0===t?void 0:t.mode)&&ue.set(window,{mode:"ephemeral",key:n});case 10:return e.a(2)}},e,null,[[6,8]])}))).apply(this,arguments)}function pe(){return(pe=Y(L().m(function e(t,r,n){var a,i,c,u,s,f,l,d;return L().w(function(e){for(;;)switch(e.n){case 0:if(a={prod:"04cf288fe433cc4e1aa0ce1632feac4ea26bf2f5a09dcfe5a42c398e06898710330f0572882f4dbdf0f5304b8fc8703acd69adca9a4bbf7f5d00d20a5e364b2569",preprod:"04f3422b8afbe425d6ece77b8d2469954715a2ff273ab7ac89f1ed70e0a9325eaa1698b4351fd1b23734e65c0b6a86b62dd49d70b37c94606aac402cbd84353212"},i=null,"undefined"!=typeof document&&(c=document.querySelector('meta[name="turnkey-signer-environment"]'))&&c.content&&"__TURNKEY_SIGNER_ENVIRONMENT__"!==c.content&&(i=c.content),i||"undefined"==typeof window||(i=window.__TURNKEY_SIGNER_ENVIRONMENT__),void 0!==(u=a[i])){e.n=1;break}throw new Error("Configuration error: TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY is undefined");case 1:if(t===u){e.n=2;break}throw new Error("enclave quorum public keys from client and bundle do not match. Client: ".concat(u,". Bundle: ").concat(t,"."));case 2:return s=new Uint8Array(te(u)),e.n=3,ce(s);case 3:if(f=e.v){e.n=4;break}throw new Error("failed to load quorum key");case 4:return l=(0,o.g8)(r),d=te(n),e.n=5,crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},f,l,d);case 5:return e.a(2,e.v)}},e)}))).apply(this,arguments)}var ye={initEmbeddedKey:function(e){return le.apply(this,arguments)},initEphemeralEmbeddedKey:function(){return de.apply(this,arguments)},generateTargetKey:z,setItemWithExpiry:J,getItemWithExpiry:$,getEmbeddedKey:function(){var e=ue.get(window);return e?"persistent"===e.mode?W(e.storageKey):e.key:null},setEmbeddedKey:function(e){var t=ue.get(window);if(!t)throw new Error("embedded key has not been initialized");"persistent"===t.mode?X(e,t.storageKey):t.key=e},onResetEmbeddedKey:function(){var e,t=ue.get(window);if(!t)throw new Error("embedded key has not been initialized");"persistent"===t.mode?(O(e=t.storageKey),window.localStorage.removeItem(e)):t.key=null},p256JWKPrivateToPublic:V,base58Encode:Q,base58Decode:Z,encodeKey:function(e,t,r){return G.apply(this,arguments)},sendMessageUp:function(e,t,r){var n={type:e,value:t};r&&(n.requestId=r),m?m.postMessage(n):window.parent!==window&&window.parent.postMessage(n,h),N("⬆️ Sent message ".concat(e,": ").concat(t))},logMessage:ee,uint8arrayFromHexString:te,uint8arrayToHexString:re,setParentFrameMessageChannelPort:function(e){m=e},setParentFrameOrigin:function(e){if("string"!=typeof e||0===e.length||"*"===e)throw new Error("a concrete parent frame origin is required");h=e},normalizePadding:ne,fromDerSignature:o.g8,additionalAssociatedData:ae,verifyEnclaveSignature:function(e,t,r){return pe.apply(this,arguments)},getEd25519PublicKey:function(e){return n.jn.sha512Sync=function(){var e;return a.Zf((e=n.jn).concatBytes.apply(e,arguments))},n.lG(e)},applySettings:function(e){var t={};if(!e)return JSON.stringify(t);var r=JSON.parse(e);if(r.styles){var n=document.getElementById("key-div");if(!n)throw new Error("no key-div HTML element found to apply settings to.");var a=oe(r.styles);Object.entries(a).forEach(function(e){var t,r,a=(r=2,function(e){if(Array.isArray(e))return e}(t=e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,c=[],u=!0,s=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=o.call(r)).done)&&(c.push(n.value),c.length!==t);u=!0);}catch(e){s=!0,a=e}finally{try{if(!u&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return c}}(t,r)||function(e,t){if(e){if("string"==typeof e)return H(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?H(e,t):void 0}}(t,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),o=a[0],i=a[1];n.style[o]=i}),t.styles=a}return JSON.stringify(t)},validateStyles:oe,getSettings:function(){var e=window.localStorage.getItem(g);return e?JSON.parse(e):null},setSettings:function(e){window.localStorage.setItem(g,JSON.stringify(e))},parsePrivateKey:function(e){if(Array.isArray(e))return new Uint8Array(e);if("string"==typeof e){if(e.startsWith("0x")&&(e=e.slice(2)),64===e.length&&/^[0-9a-fA-F]+$/.test(e))return x(e);try{return C(e)}catch(e){throw new Error("Invalid private key format. Use hex (64 chars) or base58 format.")}}throw new Error("Private key must be a string (hex/base58) or number array")}},ve="message_channel";function be(e,t,r){try{var n=function(){if("undefined"==typeof document)return null;var e=document.querySelector('meta[name="'.concat("turnkey-telemetry-endpoint",'"]'));return e&&e.content&&"__TURNKEY_TELEMETRY_ENDPOINT__"!==e.content?e.content:null}();if(!n||"undefined"==typeof navigator||"function"!=typeof navigator.sendBeacon)return;var a=JSON.stringify({frame:"export-and-sign",channel:e,eventType:t||null,parentOrigin:r||null,timestamp:(new Date).toISOString()});navigator.sendBeacon(n,new Blob([a],{type:"application/json"}))}catch(e){}}var ge=r(2542),me=r(6092),he=r(7270);function we(e){return we="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},we(e)}function Ee(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function Se(e){for(var t=1;t3?(a=y===n)&&(u=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=p&&((a=r<2&&pn||n>y)&&(o[4]=r,o[5]=n,d.n=y,c=0))}if(a||r>1)return i;throw l=!0,n}return function(a,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&p(f,y),c=f,u=y;(t=c<2?e:u)||!l;){o||(c?c<3?(c>1&&(d.n=-1),p(c,u)):d.n=u:d.v=u);try{if(s=2,o){if(c||(a="next"),t=o[a]){if(!(t=t.call(o,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);o=e}else if((t=(l=d.n<0)?u:r.call(n,d))!==i)break}catch(t){o=e,c=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,a,o),!0),s}var i={};function c(){}function u(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(_e(t={},n,function(){return this}),t),l=s.prototype=c.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,_e(e,a,"GeneratorFunction")),e.prototype=Object.create(l),e}return u.prototype=s,_e(l,"constructor",s),_e(s,"constructor",u),u.displayName="GeneratorFunction",_e(s,a,"GeneratorFunction"),_e(l),_e(l,a,"Generator"),_e(l,n,function(){return this}),_e(l,"toString",function(){return"[object Generator]"}),(ke=function(){return{w:o,m:d}})()}function _e(e,t,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}_e=function(e,t,r,n){function o(t,r){_e(e,t,function(e){return this._invoke(t,r,e)})}t?a?a(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(o("next",0),o("throw",1),o("return",2))},_e(e,t,r,n)}function je(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,c=[],u=!0,s=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=o.call(r)).done)&&(c.push(n.value),c.length!==t);u=!0);}catch(e){s=!0,a=e}finally{try{if(!u&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Pe(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Pe(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Pe(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r= v2.0.0 to pass "organizationId" for security purposes.');case 8:if(a.organizationId&&a.organizationId===r){e.n=9;break}throw new Error("organization id does not match expected value. Expected: ".concat(r,". Found: ").concat(a.organizationId,"."));case 9:if(a.encappedPublic){e.n=10;break}throw new Error('missing "encappedPublic" in bundle signed data');case 10:if(a.ciphertext){e.n=11;break}throw new Error('missing "ciphertext" in bundle signed data');case 11:return e.a(2,a)}},e)}))).apply(this,arguments)}function Ke(e,t,r){return Ue.apply(this,arguments)}function Ue(){return Ue=Ie(ke().m(function e(t,r,n){var a,o,i,c,u;return ke().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,Ne(t,r);case 1:if(a=e.v,o=ye.uint8arrayFromHexString(a.encappedPublic),i=ye.uint8arrayFromHexString(a.ciphertext),u=xe){e.n=3;break}return e.n=2,ye.getEmbeddedKey();case 2:u=e.v;case 3:return c=u,e.n=4,n({ciphertextBuf:i,encappedKeyBuf:o,receiverPrivJwk:c});case 4:return e.a(2,e.v)}},e)})),Ue.apply(this,arguments)}function Ce(e){return Ge.apply(this,arguments)}function Ge(){return(Ge=Ie(ke().m(function e(t){var r,n,a;return ke().w(function(e){for(;;)switch(e.n){case 0:if(r=ye.getEmbeddedKey()){e.n=1;break}return ye.sendMessageUp("EMBEDDED_PUBLIC_KEY","",t),e.a(2);case 1:return e.n=2,ye.p256JWKPrivateToPublic(r);case 2:n=e.v,a=ye.uint8arrayToHexString(n),ye.sendMessageUp("EMBEDDED_PUBLIC_KEY",a,t);case 3:return e.a(2)}},e)}))).apply(this,arguments)}function Le(e,t,r,n){return Be.apply(this,arguments)}function Be(){return(Be=Ie(ke().m(function e(t,r,n,a){var o,i,c,u,s,f;return ke().w(function(e){for(;;)switch(e.n){case 0:if(i=new Uint8Array(r),"SOLANA"!==n){e.n=2;break}return c=ye.uint8arrayToHexString(i.subarray(0,32)),u=ye.getEd25519PublicKey(c),e.n=1,ye.encodeKey(i,n,u);case 1:o=e.v,e.n=4;break;case 2:return e.n=3,ye.encodeKey(i,n);case 3:o=e.v;case 4:if(s=t||"default","SOLANA"!==n){e.n=5;break}f=ge.AX.fromSecretKey(ye.base58Decode(o)),e.n=7;break;case 5:if("HEXADECIMAL"!==n){e.n=7;break}return e.n=6,tt(Array.from(ye.uint8arrayFromHexString(o)));case 6:f=e.v;case 7:Ae=Se(Se({},Ae),{},Oe({},s,{organizationId:a,privateKey:o,format:n,expiry:(new Date).getTime()+864e5,keypair:f}));case 8:return e.a(2)}},e)}))).apply(this,arguments)}function He(e,t,r,n,a,o){return Fe.apply(this,arguments)}function Fe(){return Fe=Ie(ke().m(function e(t,r,n,a,o,i){var c;return ke().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,Ke(n,r,i);case 1:return c=e.v,e.n=2,Le(o,c,a,r);case 2:ye.sendMessageUp("BUNDLE_INJECTED",!0,t);case 3:return e.a(2)}},e)})),Fe.apply(this,arguments)}function Ye(e,t){return qe.apply(this,arguments)}function qe(){return(qe=Ie(ke().m(function e(t,r){var n;return ke().w(function(e){for(;;)switch(e.n){case 0:n=ye.applySettings(t),ye.setSettings(n),ye.sendMessageUp("SETTINGS_APPLIED",!0,r);case 1:return e.a(2)}},e)}))).apply(this,arguments)}function ze(e,t,r){return Je.apply(this,arguments)}function Je(){return(Je=Ie(ke().m(function e(t,r,n){var a,o,i,c,u,s,f,l,d,p;return ke().w(function(e){for(;;)switch(e.n){case 0:if(it(o=Ae[a=n||"default"],a)){e.n=1;break}return e.a(2);case 1:if(i=JSON.parse(r),c=i.transaction,"SOLANA"!==(u=i.type)){e.n=3;break}return e.n=2,ct(o);case 2:f=e.v,l=ye.uint8arrayFromHexString(c),(d=ge.Kt.deserialize(l)).sign([f]),s=d.serialize(),e.n=6;break;case 3:if("ETHEREUM"!==u){e.n=5;break}return e.n=4,lt(o,c);case 4:s=e.v,e.n=6;break;case 5:throw new Error("unsupported transaction type");case 6:p="string"==typeof s?s:ye.uint8arrayToHexString(s),ye.sendMessageUp("TRANSACTION_SIGNED",p,t);case 7:return e.a(2)}},e)}))).apply(this,arguments)}function $e(e,t,r){return We.apply(this,arguments)}function We(){return We=Ie(ke().m(function e(t,r,o){var i,c,u,s,f,l,d,p,y,v,b;return ke().w(function(e){for(;;)switch(e.n){case 0:if(it(c=Ae[i=o||"default"],i)){e.n=1;break}return e.a(2);case 1:if(u=JSON.parse(r),s=u.message,f=u.type,l=De.encode(s),"SOLANA"!==f){e.n=3;break}return e.n=2,ct(c);case 2:p=e.v,n.jn.sha512Sync=function(){var e;return a.Zf((e=n.jn).concatBytes.apply(e,arguments))},y=p.secretKey.slice(0,32),v=n._S(l,y),d=ye.uint8arrayToHexString(v),e.n=7;break;case 3:if("ETHEREUM"!==f){e.n=6;break}return e.n=4,st(c);case 4:return b=e.v,e.n=5,b.signMessage({message:s});case 5:d=e.v,e.n=7;break;case 6:return ye.sendMessageUp("ERROR","unsupported message type",t),e.a(2);case 7:ye.sendMessageUp("MESSAGE_SIGNED",d,t);case 8:return e.a(2)}},e)})),We.apply(this,arguments)}function Xe(e,t){return Ve.apply(this,arguments)}function Ve(){return(Ve=Ie(ke().m(function e(t,r){return ke().w(function(e){for(;;)switch(e.n){case 0:if(r){e.n=1;break}return Ae={},ye.sendMessageUp("EMBEDDED_PRIVATE_KEY_CLEARED",!0,t),e.a(2);case 1:if(Ae[r]){e.n=2;break}return ye.sendMessageUp("ERROR",new Error("key not found for address ".concat(r,". Note that address is case sensitive.")).toString(),t),e.a(2);case 2:delete Ae[r],ye.sendMessageUp("EMBEDDED_PRIVATE_KEY_CLEARED",!0,t);case 3:return e.a(2)}},e)}))).apply(this,arguments)}function Qe(e,t,r,n){return Ze.apply(this,arguments)}function Ze(){return Ze=Ie(ke().m(function e(t,r,n,a){var o,i;return ke().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,Ke(n,r,a);case 1:return o=e.v,e.n=2,nt(new Uint8Array(o));case 2:i=e.v,xe=i,ye.sendMessageUp("EMBEDDED_KEY_OVERRIDE_SET",!0,t);case 3:return e.a(2)}},e)})),Ze.apply(this,arguments)}function et(e){xe=null,ye.sendMessageUp("RESET_TO_DEFAULT_EMBEDDED_KEY",!0,e)}function tt(e){return rt.apply(this,arguments)}function rt(){return(rt=Ie(ke().m(function e(t){var r,n;return ke().w(function(e){for(;;)switch(e.n){case 0:if(32!==(r=ye.parsePrivateKey(t)).length){e.n=1;break}n=ge.AX.fromSeed(r),e.n=3;break;case 1:if(64!==r.length){e.n=2;break}n=ge.AX.fromSecretKey(r),e.n=3;break;case 2:throw new Error("Invalid private key length: ".concat(r.length,". Expected 32 or 64 bytes."));case 3:return e.a(2,n)}},e)}))).apply(this,arguments)}function nt(e){return at.apply(this,arguments)}function at(){return(at=Ie(ke().m(function e(t){var r,n,a;return ke().w(function(e){for(;;)switch(e.n){case 0:if(32===t.length){e.n=1;break}throw new Error("invalid decryption key length: expected 32 bytes, got ".concat(t.length));case 1:return r=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),(n=new Uint8Array(r.length+32)).set(r),n.set(t,r.length),e.n=2,crypto.subtle.importKey("pkcs8",n,{name:"ECDH",namedCurve:"P-256"},!0,["deriveBits"]);case 2:return a=e.v,e.n=3,crypto.subtle.exportKey("jwk",a);case 3:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function ot(e){Ae[e]&&delete Ae[e]}function it(e,t){if(!e)throw new Error("key bytes not found. Please re-inject export bundle for address ".concat(t," into iframe. Note that address is case sensitive.")).toString();if((new Date).getTime()>=e.expiry)throw function(){for(var e=(new Date).getTime(),t=[],r=0,n=Object.entries(Ae);r=i.expiry&&t.push(o)}for(var c=0,u=t;c3?(a=y===n)&&(u=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=p&&((a=r<2&&pn||n>y)&&(o[4]=r,o[5]=n,d.n=y,c=0))}if(a||r>1)return i;throw l=!0,n}return function(a,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&p(f,y),c=f,u=y;(t=c<2?e:u)||!l;){o||(c?c<3?(c>1&&(d.n=-1),p(c,u)):d.n=u:d.v=u);try{if(s=2,o){if(c||(a="next"),t=o[a]){if(!(t=t.call(o,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);o=e}else if((t=(l=d.n<0)?u:r.call(n,d))!==i)break}catch(t){o=e,c=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,a,o),!0),s}var i={};function c(){}function u(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(gt(t={},n,function(){return this}),t),l=s.prototype=c.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,gt(e,a,"GeneratorFunction")),e.prototype=Object.create(l),e}return u.prototype=s,gt(l,"constructor",s),gt(s,"constructor",u),u.displayName="GeneratorFunction",gt(s,a,"GeneratorFunction"),gt(l),gt(l,a,"Generator"),gt(l,n,function(){return this}),gt(l,"toString",function(){return"[object Generator]"}),(bt=function(){return{w:o,m:d}})()}function gt(e,t,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}gt=function(e,t,r,n){function o(t,r){gt(e,t,function(e){return this._invoke(t,r,e)})}t?a?a(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(o("next",0),o("throw",1),o("return",2))},gt(e,t,r,n)}function mt(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function ht(e){for(var t=1;t3?(a=y===n)&&(u=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=p&&((a=r<2&&pn||n>y)&&(o[4]=r,o[5]=n,d.n=y,c=0))}if(a||r>1)return i;throw l=!0,n}return function(a,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&p(f,y),c=f,u=y;(t=c<2?e:u)||!l;){o||(c?c<3?(c>1&&(d.n=-1),p(c,u)):d.n=u:d.v=u);try{if(s=2,o){if(c||(a="next"),t=o[a]){if(!(t=t.call(o,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);o=e}else if((t=(l=d.n<0)?u:r.call(n,d))!==i)break}catch(t){o=e,c=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,a,o),!0),s}var i={};function c(){}function u(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(jt(t={},n,function(){return this}),t),l=s.prototype=c.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,jt(e,a,"GeneratorFunction")),e.prototype=Object.create(l),e}return u.prototype=s,jt(l,"constructor",s),jt(s,"constructor",u),u.displayName="GeneratorFunction",jt(s,a,"GeneratorFunction"),jt(l),jt(l,a,"Generator"),jt(l,n,function(){return this}),jt(l,"toString",function(){return"[object Generator]"}),(_t=function(){return{w:o,m:d}})()}function jt(e,t,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}jt=function(e,t,r,n){function o(t,r){jt(e,t,function(e){return this._invoke(t,r,e)})}t?a?a(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(o("next",0),o("throw",1),o("return",2))},jt(e,t,r,n)}function Pt(e,t,r,n,a,o,i){try{var c=e[o](i),u=c.value}catch(e){return void r(e)}c.done?t(u):Promise.resolve(u).then(n,a)}function Tt(e){return function(){var t=this,r=arguments;return new Promise(function(n,a){var o=e.apply(t,r);function i(e){Pt(o,n,a,i,c,"next",e)}function c(e){Pt(o,n,a,i,c,"throw",e)}i(void 0)})}}window.TKHQ=ye,document.addEventListener("DOMContentLoaded",Tt(_t().m(function e(){var t,r,n,a;return _t().w(function(e){for(;;)switch(e.n){case 0:if(pt(Ot),(t=ye.getSettings())&&ye.applySettings(t),window.parent!==window){e.n=2;break}return e.n=1,ye.initEmbeddedKey(window.location.origin);case 1:e.n=3;break;case 2:return e.n=3,ye.initEphemeralEmbeddedKey();case 3:return e.n=4,ye.getEmbeddedKey();case 4:return r=e.v,e.n=5,ye.p256JWKPrivateToPublic(r);case 5:n=e.v,a=ye.uint8arrayToHexString(n),document.getElementById("embedded-key").value=a,window.parent!==window&&ye.sendMessageUp("PUBLIC_KEY_READY",a);case 6:return e.a(2)}},e)})))},3846:e=>{"use strict";e.exports=crypto},7790:()=>{}},i={};function c(e){var t=i[e];if(void 0!==t)return t.exports;var r=i[e]={id:e,loaded:!1,exports:{}};return o[e].call(r.exports,r,r.exports,c),r.loaded=!0,r.exports}c.m=o,e=[],c.O=(t,r,n,a)=>{if(!r){var o=1/0;for(f=0;f=a)&&Object.keys(c.O).every(e=>c.O[e](r[u]))?r.splice(u--,1):(i=!1,a0&&e[f-1][2]>a;f--)e[f]=e[f-1];e[f]=[r,n,a]},c.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return c.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,c.t=function(e,n){if(1&n&&(e=this(e)),8&n)return e;if("object"==typeof e&&e){if(4&n&&e.__esModule)return e;if(16&n&&"function"==typeof e.then)return e}var a=Object.create(null);c.r(a);var o={};t=t||[null,r({}),r([]),r(r)];for(var i=2&n&&e;("object"==typeof i||"function"==typeof i)&&!~t.indexOf(i);i=r(i))Object.getOwnPropertyNames(i).forEach(t=>o[t]=()=>e[t]);return o.default=()=>e,c.d(a,o),a},c.d=(e,t)=>{for(var r in t)c.o(t,r)&&!c.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},c.f={},c.e=e=>Promise.all(Object.keys(c.f).reduce((t,r)=>(c.f[r](e,t),t),[])),c.u=e=>"bundle."+{291:"c9a8b8d5055f705bd308",825:"29203a225e88524b9cba"}[e]+".js",c.miniCssF=e=>{},c.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),c.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n={},a="export-and-sign:",c.l=(e,t,r,o)=>{if(n[e])n[e].push(t);else{var i,u;if(void 0!==r)for(var s=document.getElementsByTagName("script"),f=0;f{i.onerror=i.onload=null,clearTimeout(p);var a=n[e];if(delete n[e],i.parentNode&&i.parentNode.removeChild(i),a&&a.forEach(e=>e(r)),t)return t(r)},p=setTimeout(d.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=d.bind(null,i.onerror),i.onload=d.bind(null,i.onload),u&&document.head.appendChild(i)}},c.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),c.p="/",c.sriHashes={291:"sha384-NziyQFa0c+tM/folhGewwHGB+kndrJOhSqc+I6I58zjk3ee0ZF/F0HIPyk5cdxYN",825:"sha384-tka20zEdSvhDidwx3jpd3ODdJVt6y+tmsVdN//IcKAo80EdBzm93OpxaFjB9NQxL"},(()=>{var e={792:0};c.f.j=(t,r)=>{var n=c.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var a=new Promise((r,a)=>n=e[t]=[r,a]);r.push(n[2]=a);var o=c.p+c.u(t),i=new Error;c.l(o,r=>{if(c.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var a=r&&("load"===r.type?"missing":r.type),o=r&&r.target&&r.target.src;i.message="Loading chunk "+t+" failed.\n("+a+": "+o+")",i.name="ChunkLoadError",i.type=a,i.request=o,n[1](i)}},"chunk-"+t,t)}},c.O.j=t=>0===e[t];var t=(t,r)=>{var n,a,[o,i,u]=r,s=0;if(o.some(t=>0!==e[t])){for(n in i)c.o(i,n)&&(c.m[n]=i[n]);if(u)var f=u(c)}for(t&&t(r);sc(750));u=c.O(u)})(); -//# sourceMappingURL=bundle.6a4c3b0995683838803c.js.map \ No newline at end of file diff --git a/export-and-sign/dist/bundle.6a4c3b0995683838803c.js.map b/export-and-sign/dist/bundle.6a4c3b0995683838803c.js.map deleted file mode 100644 index 1f1bc0a2..00000000 --- a/export-and-sign/dist/bundle.6a4c3b0995683838803c.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"bundle.6a4c3b0995683838803c.js","mappings":"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","sources":["webpack://export-and-sign/webpack/runtime/chunk loaded","webpack://export-and-sign/webpack/runtime/create fake namespace object","webpack://export-and-sign/webpack/runtime/load script","webpack://export-and-sign/../shared/turnkey-core.js","webpack://export-and-sign/./src/turnkey-core.js","webpack://export-and-sign/./src/telemetry.js","webpack://export-and-sign/./src/event-handlers.js","webpack://export-and-sign/../shared/crypto-utils.js","webpack://export-and-sign/./src/index.js","webpack://export-and-sign/external var \"crypto\"","webpack://export-and-sign/webpack/bootstrap","webpack://export-and-sign/webpack/runtime/compat get default export","webpack://export-and-sign/webpack/runtime/define property getters","webpack://export-and-sign/webpack/runtime/ensure chunk","webpack://export-and-sign/webpack/runtime/get javascript chunk filename","webpack://export-and-sign/webpack/runtime/get mini-css chunk filename","webpack://export-and-sign/webpack/runtime/global","webpack://export-and-sign/webpack/runtime/hasOwnProperty shorthand","webpack://export-and-sign/webpack/runtime/make namespace object","webpack://export-and-sign/webpack/runtime/node module decorator","webpack://export-and-sign/webpack/runtime/publicPath","webpack://export-and-sign/webpack/runtime/compat","webpack://export-and-sign/webpack/runtime/jsonp chunk loading","webpack://export-and-sign/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"export-and-sign:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t\tif (script.src.indexOf(window.location.origin + '/') !== 0) {\n\t\t\tscript.crossOrigin = \"anonymous\";\n\t\t}\n\t\tscript.integrity = __webpack_require__.sriHashes[chunkId];\n\t\tscript.crossOrigin = \"anonymous\";\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import { bech32 } from \"bech32\";\n\n/**\n * Turnkey Core Module - Shared\n * Contains all the core cryptographic and utility functions shared across frames\n */\n\n/** constants for LocalStorage */\nconst TURNKEY_TARGET_EMBEDDED_KEY = \"TURNKEY_TARGET_EMBEDDED_KEY\";\nconst TURNKEY_SETTINGS = \"TURNKEY_SETTINGS\";\n/** 48 hours in milliseconds */\nconst TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS = 1000 * 60 * 60 * 48;\n\nlet parentFrameMessageChannelPort = null;\nlet parentFrameTargetOrigin = \"*\";\nvar cryptoProviderOverride = null;\n\n/*\n * Returns a reference to the WebCrypto subtle interface regardless of the host environment.\n */\nfunction getSubtleCrypto() {\n if (cryptoProviderOverride && cryptoProviderOverride.subtle) {\n return cryptoProviderOverride.subtle;\n }\n if (\n typeof globalThis !== \"undefined\" &&\n globalThis.crypto &&\n globalThis.crypto.subtle\n ) {\n return globalThis.crypto.subtle;\n }\n if (typeof window !== \"undefined\" && window.crypto && window.crypto.subtle) {\n return window.crypto.subtle;\n }\n if (typeof global !== \"undefined\" && global.crypto && global.crypto.subtle) {\n return global.crypto.subtle;\n }\n if (typeof crypto !== \"undefined\" && crypto.subtle) {\n return crypto.subtle;\n }\n\n return null;\n}\n\n/*\n * Allows tests to explicitly set the crypto provider (e.g. crypto.webcrypto) when the runtime\n * environment does not expose one on the global/window objects.\n */\nfunction setCryptoProvider(cryptoProvider) {\n cryptoProviderOverride = cryptoProvider || null;\n}\n\n/* Security functions */\n\nfunction isDoublyIframed() {\n if (window.location.ancestorOrigins !== undefined) {\n // Does not exist in IE and firefox.\n // See https://developer.mozilla.org/en-US/docs/Web/API/Location/ancestorOrigins for how this works\n return window.location.ancestorOrigins.length > 1;\n } else {\n return window.parent !== window.top;\n }\n}\n\n/*\n * Loads the quorum public key as a CryptoKey.\n */\nasync function loadQuorumKey(quorumPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.importKey(\n \"raw\",\n quorumPublic,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n [\"verify\"]\n );\n}\n\n/*\n * Load a key to encrypt to as a CryptoKey and return it as a JSON Web Key.\n */\nasync function loadTargetKey(targetPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const targetKey = await subtle.importKey(\n \"raw\",\n targetPublic,\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n\n return await subtle.exportKey(\"jwk\", targetKey);\n}\n\n/**\n * Throws unless the caller provided an explicit storage key. Consumers must\n * choose a key slot deliberately (e.g. scoped by parent origin); an implicit\n * global default is what enabled cross-origin bundle replay (INT-697).\n * @param {string} storageKey\n */\nfunction requireStorageKey(storageKey) {\n if (typeof storageKey !== \"string\" || storageKey.length === 0) {\n throw new Error(\"an explicit embedded key storage key is required\");\n }\n}\n\n/**\n * Creates a new public/private key pair and persists it in localStorage\n * @param {string} storageKey localStorage key used for persistence\n */\nasync function initEmbeddedKey(storageKey) {\n requireStorageKey(storageKey);\n if (isDoublyIframed()) {\n throw new Error(\"Doubly iframed\");\n }\n const retrievedKey = await getEmbeddedKey(storageKey);\n if (retrievedKey === null) {\n const targetKey = await generateTargetKey();\n setEmbeddedKey(targetKey, storageKey);\n }\n // Nothing to do, key is correctly initialized!\n}\n\n/*\n * Generate a key to encrypt to and export it as a JSON Web Key.\n */\nasync function generateTargetKey() {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const p256key = await subtle.generateKey(\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n [\"deriveBits\"]\n );\n\n return await subtle.exportKey(\"jwk\", p256key.privateKey);\n}\n\n/**\n * Gets the current embedded private key JWK. Returns `null` if not found.\n * @param {string} storageKey localStorage key used for persistence\n */\nfunction getEmbeddedKey(storageKey) {\n requireStorageKey(storageKey);\n const jwtKey = getItemWithExpiry(storageKey);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the embedded private key JWK with the default expiration time.\n * @param {JsonWebKey} targetKey\n * @param {string} storageKey localStorage key used for persistence\n */\nfunction setEmbeddedKey(targetKey, storageKey) {\n requireStorageKey(storageKey);\n setItemWithExpiry(\n storageKey,\n JSON.stringify(targetKey),\n TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS\n );\n}\n\n/**\n * Gets the current target embedded private key JWK. Returns `null` if not found.\n */\nfunction getTargetEmbeddedKey() {\n const jwtKey = window.localStorage.getItem(TURNKEY_TARGET_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the target embedded public key JWK.\n * @param {JsonWebKey} targetKey\n */\nfunction setTargetEmbeddedKey(targetKey) {\n window.localStorage.setItem(\n TURNKEY_TARGET_EMBEDDED_KEY,\n JSON.stringify(targetKey)\n );\n}\n\n/**\n * Resets the current embedded private key JWK.\n * @param {string} storageKey localStorage key used for persistence\n */\nfunction onResetEmbeddedKey(storageKey) {\n requireStorageKey(storageKey);\n window.localStorage.removeItem(storageKey);\n}\n\n/**\n * Resets the current target embedded private key JWK.\n */\nfunction resetTargetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_TARGET_EMBEDDED_KEY);\n}\n\nfunction setParentFrameMessageChannelPort(port) {\n parentFrameMessageChannelPort = port;\n}\n\n/**\n * Restricts direct window.parent postMessages to the given origin. Used by\n * the legacy (< 2.1.0 iframe-stamper) path once the parent origin is bound,\n * so responses are only readable by that origin.\n * @param {string} origin\n */\nfunction setParentFrameOrigin(origin) {\n if (typeof origin !== \"string\" || origin.length === 0 || origin === \"*\") {\n throw new Error(\"a concrete parent frame origin is required\");\n }\n parentFrameTargetOrigin = origin;\n}\n\n/**\n * Gets the current settings.\n */\nfunction getSettings() {\n const settings = window.localStorage.getItem(TURNKEY_SETTINGS);\n return settings ? JSON.parse(settings) : null;\n}\n\n/**\n * Sets the settings object.\n * @param {Object} settings\n */\nfunction setSettings(settings) {\n window.localStorage.setItem(TURNKEY_SETTINGS, JSON.stringify(settings));\n}\n\n/**\n * Set an item in localStorage with an expiration time\n * @param {string} key\n * @param {string} value\n * @param {number} ttl expiration time in milliseconds\n */\nfunction setItemWithExpiry(key, value, ttl) {\n const now = new Date();\n const item = {\n value: value,\n expiry: now.getTime() + ttl,\n };\n window.localStorage.setItem(key, JSON.stringify(item));\n}\n\n/**\n * Get an item from localStorage. Returns `null` and\n * removes the item from localStorage if expired or\n * expiry time is missing.\n * @param {string} key\n */\nfunction getItemWithExpiry(key) {\n const itemStr = window.localStorage.getItem(key);\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n if (\n !Object.prototype.hasOwnProperty.call(item, \"expiry\") ||\n !Object.prototype.hasOwnProperty.call(item, \"value\")\n ) {\n window.localStorage.removeItem(key);\n return null;\n }\n const now = new Date();\n if (now.getTime() > item.expiry) {\n window.localStorage.removeItem(key);\n return null;\n }\n return item.value;\n}\n\n/**\n * Takes a hex string (e.g. \"e4567ab\" or \"0xe4567ab\") and returns an array buffer (Uint8Array)\n * @param {string} hexString - Hex string with or without \"0x\" prefix\n * @returns {Uint8Array}\n */\nfunction uint8arrayFromHexString(hexString) {\n if (!hexString || typeof hexString !== \"string\") {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n\n // Remove 0x prefix if present\n const hexWithoutPrefix =\n hexString.startsWith(\"0x\") || hexString.startsWith(\"0X\")\n ? hexString.slice(2)\n : hexString;\n\n var hexRegex = /^[0-9A-Fa-f]+$/;\n if (hexWithoutPrefix.length % 2 != 0 || !hexRegex.test(hexWithoutPrefix)) {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n return new Uint8Array(\n hexWithoutPrefix.match(/../g).map((h) => parseInt(h, 16))\n );\n}\n\n/**\n * Takes a Uint8Array and returns a hex string\n * @param {Uint8Array} buffer\n * @return {string}\n */\nfunction uint8arrayToHexString(buffer) {\n return [...buffer].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n/**\n * Function to normalize padding of byte array with 0's to a target length\n */\nfunction normalizePadding(byteArray, targetLength) {\n const paddingLength = targetLength - byteArray.length;\n\n // Add leading 0's to array\n if (paddingLength > 0) {\n const padding = new Uint8Array(paddingLength).fill(0);\n return new Uint8Array([...padding, ...byteArray]);\n }\n\n // Remove leading 0's from array\n if (paddingLength < 0) {\n const expectedZeroCount = paddingLength * -1;\n let zeroCount = 0;\n for (let i = 0; i < expectedZeroCount && i < byteArray.length; i++) {\n if (byteArray[i] === 0) {\n zeroCount++;\n }\n }\n // Check if the number of zeros found equals the number of zeroes expected\n if (zeroCount !== expectedZeroCount) {\n throw new Error(\n `invalid number of starting zeroes. Expected number of zeroes: ${expectedZeroCount}. Found: ${zeroCount}.`\n );\n }\n return byteArray.slice(expectedZeroCount, expectedZeroCount + targetLength);\n }\n return byteArray;\n}\n\n/**\n * Additional Associated Data (AAD) in the format dictated by the enclave_encrypt crate.\n */\nfunction additionalAssociatedData(senderPubBuf, receiverPubBuf) {\n const s = Array.from(new Uint8Array(senderPubBuf));\n const r = Array.from(new Uint8Array(receiverPubBuf));\n return new Uint8Array([...s, ...r]);\n}\n\n/**\n * Converts an ASN.1 DER-encoded ECDSA signature to the raw format that WebCrypto uses.\n */\nfunction fromDerSignature(derSignature) {\n const derSignatureBuf = uint8arrayFromHexString(derSignature);\n\n // Check and skip the sequence tag (0x30)\n let index = 2;\n\n // Parse 'r' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for r\"\n );\n }\n index++; // Move past the INTEGER tag\n const rLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const r = derSignatureBuf.slice(index, index + rLength);\n index += rLength; // Move to the start of s\n\n // Parse 's' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for s\"\n );\n }\n index++; // Move past the INTEGER tag\n const sLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const s = derSignatureBuf.slice(index, index + sLength);\n\n // Normalize 'r' and 's' to 32 bytes each\n const rPadded = normalizePadding(r, 32);\n const sPadded = normalizePadding(s, 32);\n\n // Concatenate and return the raw signature\n return new Uint8Array([...rPadded, ...sPadded]);\n}\n\n/**\n * Function to verify enclave signature on import bundle received from the server.\n * @param {string} enclaveQuorumPublic uncompressed public key for the quorum key which produced the signature\n * @param {string} publicSignature signature bytes encoded as a hexadecimal string\n * @param {string} signedData signed bytes encoded as a hexadecimal string. This could be public key bytes directly, or JSON-encoded bytes\n */\nasync function verifyEnclaveSignature(\n enclaveQuorumPublic,\n publicSignature,\n signedData\n) {\n /** Turnkey Signer enclave's public keys */\n const TURNKEY_SIGNERS_ENCLAVES = {\n prod: \"04cf288fe433cc4e1aa0ce1632feac4ea26bf2f5a09dcfe5a42c398e06898710330f0572882f4dbdf0f5304b8fc8703acd69adca9a4bbf7f5d00d20a5e364b2569\",\n preprod:\n \"04f3422b8afbe425d6ece77b8d2469954715a2ff273ab7ac89f1ed70e0a9325eaa1698b4351fd1b23734e65c0b6a86b62dd49d70b37c94606aac402cbd84353212\",\n dev: \"048cf9ed5f579298cc1571823a3222b82d80c529c551f6070fbe712ae1a9e8d1a23b7006e306d27190358dfcd9c44624918a00f23c920a33cb14f5b026eafc865d\",\n };\n\n // Use window.__TURNKEY_SIGNER_ENVIRONMENT__ if available (for testing), otherwise use the webpack replacement\n const environment =\n (typeof window !== \"undefined\" && window.__TURNKEY_SIGNER_ENVIRONMENT__) ||\n \"__TURNKEY_SIGNER_ENVIRONMENT__\";\n const TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY =\n TURNKEY_SIGNERS_ENCLAVES[environment];\n\n if (TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY === undefined) {\n throw new Error(\n `Configuration error: TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY is undefined`\n );\n }\n\n // todo(olivia): throw error if enclave quorum public is null once server changes are deployed\n if (enclaveQuorumPublic) {\n if (enclaveQuorumPublic !== TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY) {\n throw new Error(\n `enclave quorum public keys from client and bundle do not match. Client: ${TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY}. Bundle: ${enclaveQuorumPublic}.`\n );\n }\n }\n\n const encryptionQuorumPublicBuf = new Uint8Array(\n uint8arrayFromHexString(TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY)\n );\n const quorumKey = await loadQuorumKey(encryptionQuorumPublicBuf);\n if (!quorumKey) {\n throw new Error(\"failed to load quorum key\");\n }\n\n // The ECDSA signature is ASN.1 DER encoded but WebCrypto uses raw format\n const publicSignatureBuf = fromDerSignature(publicSignature);\n const signedDataBuf = uint8arrayFromHexString(signedData);\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.verify(\n { name: \"ECDSA\", hash: \"SHA-256\" },\n quorumKey,\n publicSignatureBuf,\n signedDataBuf\n );\n}\n\n/**\n * Function to send a message.\n *\n * If this page is embedded as an iframe we'll send a postMessage\n * in one of two ways depending on the version of @turnkey/iframe-stamper:\n * 1. newer versions (>=v2.1.0) pass a MessageChannel MessagePort from the parent frame for postMessages.\n * 2. older versions ( 0) {\n digits.push(carry % 58);\n carry = (carry / 58) | 0;\n }\n }\n // Convert digits to a base58 string\n for (let k = 0; k < digits.length; k++) {\n result = alphabet[digits[k]] + result;\n }\n\n // Add '1' for each leading 0 byte\n for (let i = 0; bytes[i] === 0 && i < bytes.length - 1; i++) {\n result = \"1\" + result;\n }\n return result;\n}\n\n/**\n * Decodes a base58-encoded string into a buffer\n * This function throws an error when the string contains invalid characters.\n * @param {string} s The base58-encoded string.\n * @return {Uint8Array} The decoded buffer.\n */\nfunction base58Decode(s) {\n // See https://en.bitcoin.it/wiki/Base58Check_encoding\n var alphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\n var decodedBytes = [];\n var leadingZeros = [];\n for (var i = 0; i < s.length; i++) {\n if (alphabet.indexOf(s[i]) === -1) {\n throw new Error(`cannot base58-decode: ${s[i]} isn't a valid character`);\n }\n var carry = alphabet.indexOf(s[i]);\n\n // If the current base58 digit is 0, append a 0 byte.\n // \"i == leadingZeros.length\" can only be true if we have not seen non-zero bytes so far.\n // If we had seen a non-zero byte, carry wouldn't be 0, and i would be strictly more than `leadingZeros.length`\n if (carry == 0 && i === leadingZeros.length) {\n leadingZeros.push(0);\n }\n\n var j = 0;\n while (j < decodedBytes.length || carry > 0) {\n var currentByte = decodedBytes[j];\n\n // shift the current byte 58 units and add the carry amount\n // (or just add the carry amount if this is a new byte -- undefined case)\n if (currentByte === undefined) {\n currentByte = carry;\n } else {\n currentByte = currentByte * 58 + carry;\n }\n\n // find the new carry amount (1-byte shift of current byte value)\n carry = currentByte >> 8;\n // reset the current byte to the remainder (the carry amount will pass on the overflow)\n decodedBytes[j] = currentByte % 256;\n j++;\n }\n }\n\n var result = leadingZeros.concat(decodedBytes.reverse());\n return new Uint8Array(result);\n}\n\n/**\n * Decodes a base58check-encoded string and verifies the checksum.\n * Base58Check encoding includes a 4-byte checksum at the end to detect errors.\n * The checksum is the first 4 bytes of SHA256(SHA256(payload)).\n * This function throws an error if the checksum is invalid.\n * @param {string} s The base58check-encoded string.\n * @return {Promise} The decoded payload (without checksum).\n */\nasync function base58CheckDecode(s) {\n const decoded = base58Decode(s);\n\n if (decoded.length < 5) {\n throw new Error(\n `invalid base58check length: expected at least 5 bytes, got ${decoded.length}`\n );\n }\n\n const payload = decoded.subarray(0, decoded.length - 4);\n const checksum = decoded.subarray(decoded.length - 4);\n\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n\n // Compute double SHA256 hash\n const hash1Buf = await subtle.digest(\"SHA-256\", payload);\n const hash1 = new Uint8Array(hash1Buf);\n const hash2Buf = await subtle.digest(\"SHA-256\", hash1);\n const hash2 = new Uint8Array(hash2Buf);\n const computedChecksum = hash2.subarray(0, 4);\n\n // Verify checksum\n const mismatch =\n (checksum[0] ^ computedChecksum[0]) |\n (checksum[1] ^ computedChecksum[1]) |\n (checksum[2] ^ computedChecksum[2]) |\n (checksum[3] ^ computedChecksum[3]);\n if (mismatch !== 0) {\n throw new Error(\"invalid base58check checksum\");\n }\n\n return payload;\n}\n\n/**\n * Returns private key bytes from a private key, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {string} privateKey\n * @param {string} keyFormat Can be \"HEXADECIMAL\", \"SUI_BECH32\", \"BITCOIN_MAINNET_WIF\", \"BITCOIN_TESTNET_WIF\" or \"SOLANA\"\n * @return {Promise}\n */\nasync function decodeKey(privateKey, keyFormat) {\n switch (keyFormat) {\n case \"SOLANA\": {\n const decodedKeyBytes = base58Decode(privateKey);\n if (decodedKeyBytes.length !== 64) {\n throw new Error(\n `invalid key length. Expected 64 bytes. Got ${decodedKeyBytes.length}.`\n );\n }\n return decodedKeyBytes.subarray(0, 32);\n }\n case \"HEXADECIMAL\":\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n case \"BITCOIN_MAINNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0x80 = mainnet\n if (version !== 0x80) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0x80 (mainnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"BITCOIN_TESTNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0xEF = testnet\n if (version !== 0xef) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0xEF (testnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"SUI_BECH32\": {\n const { prefix, words } = bech32.decode(privateKey);\n\n if (prefix !== \"suiprivkey\") {\n throw new Error(\n `invalid SUI private key human-readable part (HRP): expected \"suiprivkey\"`\n );\n }\n\n const bytes = bech32.fromWords(words);\n if (bytes.length !== 33) {\n throw new Error(\n `invalid SUI private key length: expected 33 bytes, got ${bytes.length}`\n );\n }\n\n const schemeFlag = bytes[0];\n const privkey = bytes.slice(1);\n\n // schemeFlag = 0 is Ed25519; We currently only support Ed25519 keys for SUI.\n if (schemeFlag !== 0) {\n throw new Error(\n `invalid SUI private key scheme flag: expected 0 (Ed25519). Turnkey only supports Ed25519 keys for SUI.`\n );\n }\n\n return new Uint8Array(privkey);\n }\n default:\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n }\n}\n\n/**\n * Returns a private key from private key bytes, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {Uint8Array} privateKeyBytes\n * @param {string} keyFormat Can be \"HEXADECIMAL\" or \"SOLANA\"\n */\nasync function encodeKey(privateKeyBytes, keyFormat, publicKeyBytes) {\n switch (keyFormat) {\n case \"SOLANA\":\n if (!publicKeyBytes) {\n throw new Error(\"public key must be specified for SOLANA key format\");\n }\n if (privateKeyBytes.length !== 32) {\n throw new Error(\n `invalid private key length. Expected 32 bytes. Got ${privateKeyBytes.length}.`\n );\n }\n if (publicKeyBytes.length !== 32) {\n throw new Error(\n `invalid public key length. Expected 32 bytes. Got ${publicKeyBytes.length}.`\n );\n }\n {\n const concatenatedBytes = new Uint8Array(64);\n concatenatedBytes.set(privateKeyBytes, 0);\n concatenatedBytes.set(publicKeyBytes, 32);\n return base58Encode(concatenatedBytes);\n }\n case \"HEXADECIMAL\":\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n default:\n // keeping console.warn for debugging purposes.\n // eslint-disable-next-line no-console\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n }\n}\n\n// Helper to parse a private key into a Solana base58 private key.\n// To be used if a wallet account is exported without the `SOLANA` address format.\nfunction parsePrivateKey(privateKey) {\n if (Array.isArray(privateKey)) {\n return new Uint8Array(privateKey);\n }\n\n if (typeof privateKey === \"string\") {\n // Remove 0x prefix if present\n if (privateKey.startsWith(\"0x\")) {\n privateKey = privateKey.slice(2);\n }\n\n // Check if it's hex-formatted correctly (i.e. 64 hex chars)\n if (privateKey.length === 64 && /^[0-9a-fA-F]+$/.test(privateKey)) {\n return uint8arrayFromHexString(privateKey);\n }\n\n // Otherwise assume it's base58 format (for Solana)\n try {\n return base58Decode(privateKey);\n } catch (error) {\n throw new Error(\n \"Invalid private key format. Use hex (64 chars) or base58 format.\"\n );\n }\n }\n\n throw new Error(\"Private key must be a string (hex/base58) or number array\");\n}\n\n/**\n * Function to validate and sanitize the styles object using the accepted map of style keys and values (as regular expressions).\n * Any invalid style throws an error. Returns an object of valid styles.\n * @param {Object} styles\n * @param {HTMLElement} element - Optional element parameter (for import frame)\n * @return {Object}\n */\nfunction validateStyles(styles, element) {\n const validStyles = {};\n\n const cssValidationRegex = {\n padding: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n margin: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n borderWidth: \"^(\\\\d+(px|em|rem) ?){1,4}$\",\n borderStyle:\n \"^(none|solid|dashed|dotted|double|groove|ridge|inset|outset)$\",\n borderColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n borderRadius: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n fontSize: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax))$\",\n fontWeight: \"^(normal|bold|bolder|lighter|\\\\d{3})$\",\n fontFamily: '^[^\";<>]*$', // checks for the absence of some characters that could lead to CSS/HTML injection\n color:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n labelColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n backgroundColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n width: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n height: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n maxWidth: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n maxHeight:\n \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n lineHeight:\n \"^(\\\\d+(\\\\.\\\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$\",\n boxShadow:\n \"^(none|(\\\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)) ?(inset)?)$\",\n textAlign: \"^(left|right|center|justify|initial|inherit)$\",\n overflowWrap: \"^(normal|break-word|anywhere)$\",\n wordWrap: \"^(normal|break-word)$\",\n resize: \"^(none|both|horizontal|vertical|block|inline)$\",\n };\n\n Object.entries(styles).forEach(([property, value]) => {\n const styleProperty = property.trim();\n if (styleProperty.length === 0) {\n throw new Error(\"css style property cannot be empty\");\n }\n const styleRegexStr = cssValidationRegex[styleProperty];\n if (!styleRegexStr) {\n throw new Error(\n `invalid or unsupported css style property: \"${styleProperty}\"`\n );\n }\n const styleRegex = new RegExp(styleRegexStr);\n const styleValue = value.trim();\n if (styleValue.length == 0) {\n throw new Error(`css style for \"${styleProperty}\" is empty`);\n }\n const isValidStyle = styleRegex.test(styleValue);\n if (!isValidStyle) {\n throw new Error(\n `invalid css style value for property \"${styleProperty}\"`\n );\n }\n validStyles[styleProperty] = styleValue;\n });\n\n return validStyles;\n}\n\n// Export all shared functions\nexport {\n setCryptoProvider,\n getSubtleCrypto,\n isDoublyIframed,\n loadQuorumKey,\n loadTargetKey,\n initEmbeddedKey,\n generateTargetKey,\n getEmbeddedKey,\n setEmbeddedKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n onResetEmbeddedKey,\n resetTargetEmbeddedKey,\n setParentFrameMessageChannelPort,\n setParentFrameOrigin,\n getSettings,\n setSettings,\n setItemWithExpiry,\n getItemWithExpiry,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n normalizePadding,\n additionalAssociatedData,\n fromDerSignature,\n verifyEnclaveSignature,\n sendMessageUp,\n logMessage,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n base58CheckDecode,\n decodeKey,\n encodeKey,\n parsePrivateKey,\n validateStyles,\n};\n","import * as nobleEd25519 from \"@noble/ed25519\";\nimport * as nobleHashes from \"@noble/hashes/sha512\";\nimport { fromDerSignature } from \"@turnkey/crypto\";\nimport * as SharedTKHQ from \"@shared/turnkey-core.js\";\n\nconst {\n initEmbeddedKey: sharedInitEmbeddedKey,\n generateTargetKey,\n setItemWithExpiry,\n getItemWithExpiry,\n getEmbeddedKey: sharedGetEmbeddedKey,\n setEmbeddedKey: sharedSetEmbeddedKey,\n onResetEmbeddedKey: sharedOnResetEmbeddedKey,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n encodeKey,\n sendMessageUp,\n logMessage,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n setParentFrameMessageChannelPort,\n setParentFrameOrigin,\n normalizePadding,\n additionalAssociatedData,\n getSettings,\n setSettings,\n parsePrivateKey,\n validateStyles,\n isDoublyIframed,\n loadQuorumKey,\n} = SharedTKHQ;\n\nconst LEGACY_EMBEDDED_KEY = \"TURNKEY_EMBEDDED_KEY\";\nconst LEGACY_EMBEDDED_KEY_ORIGIN = \"TURNKEY_EMBEDDED_KEY_ORIGIN\";\nconst ORIGIN_SCOPED_EMBEDDED_KEY_PREFIX = \"TURNKEY_EMBEDDED_KEY_V2\";\n\n// Embedded key state for this document, keyed by window so it is tied to the\n// document lifetime. Two shapes:\n// { mode: \"persistent\", origin, storageKey, ready } -- key lives in\n// localStorage, scoped to the browser-authenticated parent origin (or\n// this document's own origin in standalone mode). `ready` resolves once\n// the key has actually been persisted; readers racing the handshake must\n// await it before calling getEmbeddedKey.\n// { mode: \"ephemeral\", key } -- key lives in memory only. Used for legacy\n// (@turnkey/iframe-stamper < 2.1.0) parents: because the key is unique to\n// this document and never persisted, an unrelated embedder can never\n// obtain a key that decrypts another application's bundles (INT-697).\nconst embeddedKeyStates = new WeakMap();\n\nfunction validateParentOrigin(parentOrigin) {\n if (\n typeof parentOrigin !== \"string\" ||\n parentOrigin.length === 0 ||\n parentOrigin === \"null\"\n ) {\n throw new Error(\"a non-opaque parent origin is required\");\n }\n\n const parsedOrigin = new URL(parentOrigin).origin;\n if (parsedOrigin !== parentOrigin) {\n throw new Error(`invalid parent origin: ${parentOrigin}`);\n }\n\n return parsedOrigin;\n}\n\n// Never migrate the old global key: doing so would preserve the cross-origin\n// replay vulnerability for bundles encrypted before this change.\nfunction purgeLegacyEmbeddedKey() {\n window.localStorage.removeItem(LEGACY_EMBEDDED_KEY);\n window.localStorage.removeItem(LEGACY_EMBEDDED_KEY_ORIGIN);\n}\n\n/**\n * Creates (if needed) the persistent embedded key scoped to the given parent\n * origin and persists it in localStorage. A document can bind to exactly one\n * parent origin; an ephemeral key, if any, is superseded.\n * @param {string} parentOrigin\n */\nasync function initEmbeddedKey(parentOrigin) {\n if (isDoublyIframed()) {\n throw new Error(\"Doubly iframed\");\n }\n const validatedOrigin = validateParentOrigin(parentOrigin);\n const previousState = embeddedKeyStates.get(window);\n if (\n previousState?.mode === \"persistent\" &&\n previousState.origin !== validatedOrigin\n ) {\n throw new Error(\n `parent origin is already bound to ${previousState.origin}; refusing ${validatedOrigin}`\n );\n }\n purgeLegacyEmbeddedKey();\n const storageKey = `${ORIGIN_SCOPED_EMBEDDED_KEY_PREFIX}:${encodeURIComponent(\n validatedOrigin\n )}`;\n const state = { mode: \"persistent\", origin: validatedOrigin, storageKey };\n // The state is activated synchronously so a concurrent ephemeral init\n // cannot clobber it, but the key does not exist in localStorage until\n // sharedInitEmbeddedKey resolves; `ready` lets racing readers wait for it.\n // If persistence fails (e.g. blocked third-party storage), roll back so the\n // document keeps operating on its previous key and a retry is possible.\n state.ready = sharedInitEmbeddedKey(storageKey).catch((error) => {\n if (embeddedKeyStates.get(window) === state) {\n if (previousState) {\n embeddedKeyStates.set(window, previousState);\n } else {\n embeddedKeyStates.delete(window);\n }\n }\n throw error;\n });\n embeddedKeyStates.set(window, state);\n return await state.ready;\n}\n\n/**\n * Creates (if needed) an in-memory embedded key unique to this document, for\n * legacy (@turnkey/iframe-stamper < 2.1.0) parents that speak direct\n * postMessage. No-ops if a persistent origin-scoped key is already active\n * (i.e. the MessageChannel handshake completed first).\n */\nasync function initEphemeralEmbeddedKey() {\n if (isDoublyIframed()) {\n throw new Error(\"Doubly iframed\");\n }\n const state = embeddedKeyStates.get(window);\n if (state?.mode === \"persistent\") {\n // Wait for the in-flight persistence so callers can read the key.\n return await state.ready;\n }\n if (state?.key) {\n return;\n }\n purgeLegacyEmbeddedKey();\n const generatedKey = await generateTargetKey();\n // Re-check: a MessageChannel handshake may have activated a persistent key\n // while key generation was in flight; it must not be clobbered. Wait for it\n // so callers can read the key; if it fails (and rolls itself back), the\n // ephemeral key takes over below.\n const latestState = embeddedKeyStates.get(window);\n if (latestState?.mode === \"persistent\") {\n try {\n return await latestState.ready;\n } catch {\n // fall through to the ephemeral key\n }\n }\n if (embeddedKeyStates.get(window)?.mode !== \"persistent\") {\n embeddedKeyStates.set(window, { mode: \"ephemeral\", key: generatedKey });\n }\n}\n\nfunction getEmbeddedKey() {\n const state = embeddedKeyStates.get(window);\n if (!state) {\n return null;\n }\n return state.mode === \"persistent\"\n ? sharedGetEmbeddedKey(state.storageKey)\n : state.key;\n}\n\nfunction setEmbeddedKey(targetKey) {\n const state = embeddedKeyStates.get(window);\n if (!state) {\n throw new Error(\"embedded key has not been initialized\");\n }\n if (state.mode === \"persistent\") {\n sharedSetEmbeddedKey(targetKey, state.storageKey);\n } else {\n state.key = targetKey;\n }\n}\n\nfunction onResetEmbeddedKey() {\n const state = embeddedKeyStates.get(window);\n if (!state) {\n throw new Error(\"embedded key has not been initialized\");\n }\n if (state.mode === \"persistent\") {\n sharedOnResetEmbeddedKey(state.storageKey);\n } else {\n state.key = null;\n }\n}\n\n/**\n * Function to verify enclave signature on import bundle received from the server.\n * @param {string} enclaveQuorumPublic uncompressed public key for the quorum key which produced the signature\n * @param {string} publicSignature signature bytes encoded as a hexadecimal string\n * @param {string} signedData signed bytes encoded as a hexadecimal string. This could be public key bytes directly, or JSON-encoded bytes\n */\nasync function verifyEnclaveSignature(\n enclaveQuorumPublic,\n publicSignature,\n signedData\n) {\n /** Turnkey Signer enclave's public keys */\n const TURNKEY_SIGNERS_ENCLAVES = {\n prod: \"04cf288fe433cc4e1aa0ce1632feac4ea26bf2f5a09dcfe5a42c398e06898710330f0572882f4dbdf0f5304b8fc8703acd69adca9a4bbf7f5d00d20a5e364b2569\",\n preprod:\n \"04f3422b8afbe425d6ece77b8d2469954715a2ff273ab7ac89f1ed70e0a9325eaa1698b4351fd1b23734e65c0b6a86b62dd49d70b37c94606aac402cbd84353212\",\n };\n\n // Read environment from meta tag (templated at deploy time), fall back to window variable (for testing)\n let environment = null;\n if (typeof document !== \"undefined\") {\n const meta = document.querySelector(\n 'meta[name=\"turnkey-signer-environment\"]'\n );\n if (\n meta &&\n meta.content &&\n meta.content !== \"__TURNKEY_SIGNER_ENVIRONMENT__\"\n ) {\n environment = meta.content;\n }\n }\n if (!environment && typeof window !== \"undefined\") {\n environment = window.__TURNKEY_SIGNER_ENVIRONMENT__;\n }\n const TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY =\n TURNKEY_SIGNERS_ENCLAVES[environment];\n\n if (TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY === undefined) {\n throw new Error(\n `Configuration error: TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY is undefined`\n );\n }\n\n if (enclaveQuorumPublic !== TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY) {\n throw new Error(\n `enclave quorum public keys from client and bundle do not match. Client: ${TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY}. Bundle: ${enclaveQuorumPublic}.`\n );\n }\n\n const encryptionQuorumPublicBuf = new Uint8Array(\n uint8arrayFromHexString(TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY)\n );\n const quorumKey = await loadQuorumKey(encryptionQuorumPublicBuf);\n if (!quorumKey) {\n throw new Error(\"failed to load quorum key\");\n }\n\n // The ECDSA signature is ASN.1 DER encoded but WebCrypto uses raw format\n const publicSignatureBuf = fromDerSignature(publicSignature);\n const signedDataBuf = uint8arrayFromHexString(signedData);\n return await crypto.subtle.verify(\n { name: \"ECDSA\", hash: \"SHA-256\" },\n quorumKey,\n publicSignatureBuf,\n signedDataBuf\n );\n}\n\n/**\n * Returns the public key bytes for a hex-encoded Ed25519 private key.\n * @param {string} privateKeyHex\n */\nfunction getEd25519PublicKey(privateKeyHex) {\n nobleEd25519.etc.sha512Sync = (...m) =>\n nobleHashes.sha512(nobleEd25519.etc.concatBytes(...m));\n return nobleEd25519.getPublicKey(privateKeyHex);\n}\n\n/**\n * Function to apply settings on this page. For now, the only settings that can be applied\n * are for \"styles\". Upon successful application, return the valid, sanitized settings JSON string.\n * @param {string} settings\n * @return {string}\n */\nfunction applySettings(settings) {\n const validSettings = {};\n if (!settings) {\n return JSON.stringify(validSettings);\n }\n const settingsObj = JSON.parse(settings);\n if (settingsObj.styles) {\n // Valid styles will be applied the \"key-div\" div HTML element.\n const keyDivTextarea = document.getElementById(\"key-div\");\n if (!keyDivTextarea) {\n throw new Error(\"no key-div HTML element found to apply settings to.\");\n }\n\n // Validate, sanitize, and apply the styles to the \"key-div\" div element.\n const validStyles = validateStyles(settingsObj.styles);\n Object.entries(validStyles).forEach(([key, value]) => {\n keyDivTextarea.style[key] = value;\n });\n\n validSettings[\"styles\"] = validStyles;\n }\n\n return JSON.stringify(validSettings);\n}\n\nexport const TKHQ = {\n initEmbeddedKey,\n initEphemeralEmbeddedKey,\n generateTargetKey,\n setItemWithExpiry,\n getItemWithExpiry,\n getEmbeddedKey,\n setEmbeddedKey,\n onResetEmbeddedKey,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n encodeKey,\n sendMessageUp,\n logMessage,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n setParentFrameMessageChannelPort,\n setParentFrameOrigin,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n getEd25519PublicKey,\n applySettings,\n validateStyles,\n getSettings,\n setSettings,\n parsePrivateKey,\n};\n","/**\n * Best-effort telemetry distinguishing modern MessageChannel clients from\n * legacy direct-postMessage clients (@turnkey/iframe-stamper < 2.1.0). This\n * exists to size and monitor the legacy migration for INT-697. It must never\n * interfere with the export/signing flow: failures are swallowed and nothing\n * is sent unless the deployment templates an endpoint into the page.\n */\n\nexport const CHANNEL_MESSAGE_CHANNEL = \"message_channel\";\nexport const CHANNEL_LEGACY_POST_MESSAGE = \"legacy_post_message\";\n\nconst TELEMETRY_ENDPOINT_META_NAME = \"turnkey-telemetry-endpoint\";\nconst TELEMETRY_ENDPOINT_PLACEHOLDER = \"__TURNKEY_TELEMETRY_ENDPOINT__\";\n\nfunction getTelemetryEndpoint() {\n if (typeof document === \"undefined\") {\n return null;\n }\n const meta = document.querySelector(\n `meta[name=\"${TELEMETRY_ENDPOINT_META_NAME}\"]`\n );\n if (\n !meta ||\n !meta.content ||\n meta.content === TELEMETRY_ENDPOINT_PLACEHOLDER\n ) {\n return null;\n }\n return meta.content;\n}\n\n/**\n * Records one operation received over a parent communication channel.\n * @param {string} channel CHANNEL_MESSAGE_CHANNEL or CHANNEL_LEGACY_POST_MESSAGE\n * @param {string} eventType the message type that was processed\n * @param {string} [parentOrigin] origin of the embedding document, if known\n */\nexport function recordChannelTelemetry(channel, eventType, parentOrigin) {\n try {\n const endpoint = getTelemetryEndpoint();\n if (\n !endpoint ||\n typeof navigator === \"undefined\" ||\n typeof navigator.sendBeacon !== \"function\"\n ) {\n return;\n }\n const payload = JSON.stringify({\n frame: \"export-and-sign\",\n channel,\n eventType: eventType || null,\n parentOrigin: parentOrigin || null,\n timestamp: new Date().toISOString(),\n });\n navigator.sendBeacon(\n endpoint,\n new Blob([payload], { type: \"application/json\" })\n );\n } catch {\n // Telemetry must never break the signing flow; drop the sample.\n }\n}\n","import { TKHQ } from \"./turnkey-core.js\";\nimport {\n recordChannelTelemetry,\n CHANNEL_MESSAGE_CHANNEL,\n CHANNEL_LEGACY_POST_MESSAGE,\n} from \"./telemetry.js\";\nimport { Keypair, VersionedTransaction } from \"@solana/web3.js\";\nimport { parseTransaction } from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport * as nobleEd25519 from \"@noble/ed25519\";\nimport * as nobleHashes from \"@noble/hashes/sha512\";\n\n// Persist keys in memory via mapping of { address --> pk }\nlet inMemoryKeys = {};\n\n// Injected embedded key -- held in memory only, never persisted.\n// When set, decryptBundle uses this P-256 JWK instead of the iframe's embedded key.\nlet injectedEmbeddedKey = null;\n\nexport const DEFAULT_TTL_MILLISECONDS = 1000 * 24 * 60 * 60; // 24 hours or 86,400,000 milliseconds\n\n// Instantiate these once (for perf)\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\n/**\n * Verifies the enclave signature on a v1.0.0 bundle and returns the parsed signed data.\n * @param {string} bundle - JSON-stringified bundle\n * @param {string} organizationId - Expected organization ID\n * @returns {Promise} - The parsed signed data {organizationId, encappedPublic, ciphertext}\n */\nasync function verifyAndParseBundleData(bundle, organizationId) {\n const bundleObj = JSON.parse(bundle);\n\n if (bundleObj.version !== \"v1.0.0\") {\n throw new Error(`unsupported version: ${bundleObj.version}`);\n }\n if (!bundleObj.data) {\n throw new Error('missing \"data\" in bundle');\n }\n if (!bundleObj.dataSignature) {\n throw new Error('missing \"dataSignature\" in bundle');\n }\n if (!bundleObj.enclaveQuorumPublic) {\n throw new Error('missing \"enclaveQuorumPublic\" in bundle');\n }\n\n if (!TKHQ.verifyEnclaveSignature) {\n throw new Error(\"method TKHQ.verifyEnclaveSignature not loaded\");\n }\n const verified = await TKHQ.verifyEnclaveSignature(\n bundleObj.enclaveQuorumPublic,\n bundleObj.dataSignature,\n bundleObj.data\n );\n if (!verified) {\n throw new Error(\n `failed to verify enclave signature. Got signature: ${bundleObj.dataSignature}, enclaveQuorumPublic: ${bundleObj.enclaveQuorumPublic}`\n );\n }\n\n const signedData = JSON.parse(\n textDecoder.decode(TKHQ.uint8arrayFromHexString(bundleObj.data))\n );\n\n if (!organizationId) {\n throw new Error(\n `organization id is required. Please ensure you are using @turnkey/iframe-stamper >= v2.0.0 to pass \"organizationId\" for security purposes.`\n );\n } else if (\n !signedData.organizationId ||\n signedData.organizationId !== organizationId\n ) {\n throw new Error(\n `organization id does not match expected value. Expected: ${organizationId}. Found: ${signedData.organizationId}.`\n );\n }\n\n if (!signedData.encappedPublic) {\n throw new Error('missing \"encappedPublic\" in bundle signed data');\n }\n if (!signedData.ciphertext) {\n throw new Error('missing \"ciphertext\" in bundle signed data');\n }\n\n return signedData;\n}\n\n/**\n * Parse and decrypt the export bundle.\n * The `bundle` param is a JSON string of the encapsulated public\n * key, encapsulated public key signature, and the ciphertext.\n * @param {string} bundle\n * @param {string} organizationId\n * @param {Function} HpkeDecrypt\n */\nasync function decryptBundle(bundle, organizationId, HpkeDecrypt) {\n const signedData = await verifyAndParseBundleData(bundle, organizationId);\n\n const encappedKeyBuf = TKHQ.uint8arrayFromHexString(\n signedData.encappedPublic\n );\n const ciphertextBuf = TKHQ.uint8arrayFromHexString(signedData.ciphertext);\n\n // Use the injected embedded key if available, otherwise fall back to the embedded key\n const receiverPrivJwk = injectedEmbeddedKey || (await TKHQ.getEmbeddedKey());\n return await HpkeDecrypt({\n ciphertextBuf,\n encappedKeyBuf,\n receiverPrivJwk,\n });\n}\n\n/**\n * Function triggered when GET_EMBEDDED_PUBLIC_KEY event is received.\n * @param {string} requestId\n */\nasync function onGetPublicEmbeddedKey(requestId) {\n const embeddedKeyJwk = TKHQ.getEmbeddedKey();\n\n if (!embeddedKeyJwk) {\n TKHQ.sendMessageUp(\"EMBEDDED_PUBLIC_KEY\", \"\", requestId); // no key == empty string\n\n return;\n }\n\n const targetPubBuf = await TKHQ.p256JWKPrivateToPublic(embeddedKeyJwk);\n const targetPubHex = TKHQ.uint8arrayToHexString(targetPubBuf);\n\n // Send up EMBEDDED_PUBLIC_KEY message\n TKHQ.sendMessageUp(\"EMBEDDED_PUBLIC_KEY\", targetPubHex, requestId);\n}\n\n/**\n * Encodes raw key bytes and loads them into the in-memory key store.\n * @param {string} address - Wallet address (case-sensitive)\n * @param {ArrayBuffer} keyBytes - Raw decrypted private key bytes\n * @param {string} keyFormat - \"SOLANA\" | \"HEXADECIMAL\"\n * @param {string} organizationId - Organization ID\n */\nasync function loadKeyIntoMemory(address, keyBytes, keyFormat, organizationId) {\n let key;\n const privateKeyBytes = new Uint8Array(keyBytes);\n\n if (keyFormat === \"SOLANA\") {\n const privateKeyHex = TKHQ.uint8arrayToHexString(\n privateKeyBytes.subarray(0, 32)\n );\n const publicKeyBytes = TKHQ.getEd25519PublicKey(privateKeyHex);\n key = await TKHQ.encodeKey(privateKeyBytes, keyFormat, publicKeyBytes);\n } else {\n key = await TKHQ.encodeKey(privateKeyBytes, keyFormat);\n }\n\n const keyAddress = address || \"default\";\n\n // Cache keypair for improved signing perf\n let cachedKeypair;\n if (keyFormat === \"SOLANA\") {\n cachedKeypair = Keypair.fromSecretKey(TKHQ.base58Decode(key));\n } else if (keyFormat === \"HEXADECIMAL\") {\n cachedKeypair = await createSolanaKeypair(\n Array.from(TKHQ.uint8arrayFromHexString(key))\n );\n }\n\n inMemoryKeys = {\n ...inMemoryKeys,\n [keyAddress]: {\n organizationId,\n privateKey: key,\n format: keyFormat,\n expiry: new Date().getTime() + DEFAULT_TTL_MILLISECONDS,\n keypair: cachedKeypair,\n },\n };\n}\n\n/**\n * Function triggered when INJECT_KEY_EXPORT_BUNDLE event is received.\n * @param {string} requestId\n * @param {string} organizationId\n * @param {string} bundle\n * @param {string} keyFormat\n * @param {string} address\n * @param {Function} HpkeDecrypt // TODO: import this directly (instead of passing around)\n */\nasync function onInjectKeyBundle(\n requestId,\n organizationId,\n bundle,\n keyFormat,\n address,\n HpkeDecrypt\n) {\n // Decrypt the export bundle\n const keyBytes = await decryptBundle(bundle, organizationId, HpkeDecrypt);\n\n // Load decrypted key into memory\n await loadKeyIntoMemory(address, keyBytes, keyFormat, organizationId);\n\n // Send up BUNDLE_INJECTED message\n TKHQ.sendMessageUp(\"BUNDLE_INJECTED\", true, requestId);\n}\n\n/**\n * Function triggered when APPLY_SETTINGS event is received.\n * For now, the only settings that can be applied are for \"styles\".\n * Persist them in local storage so they can be applied on every\n * page load.\n * @param {string} settings: JSON-stringified settings\n * @param {string} requestId\n */\nasync function onApplySettings(settings, requestId) {\n // Apply settings\n const validSettings = TKHQ.applySettings(settings);\n\n // Persist in local storage\n TKHQ.setSettings(validSettings);\n\n // Send up SETTINGS_APPLIED message\n TKHQ.sendMessageUp(\"SETTINGS_APPLIED\", true, requestId);\n}\n\n/**\n * Function triggered when SIGN_TRANSACTION event is received.\n * @param {string} requestId\n * @param {string} transaction (serialized)\n * @param {string} address (case-sensitive --> enforce this, optional for backwards compatibility)\n */\nasync function onSignTransaction(requestId, serializedTransaction, address) {\n // If no address provided, use \"default\"\n const keyAddress = address || \"default\";\n const key = inMemoryKeys[keyAddress];\n\n // Validate key exists and is valid/non-expired\n if (!validateKey(key, keyAddress, requestId)) {\n return;\n }\n\n const transactionWrapper = JSON.parse(serializedTransaction);\n const transactionToSign = transactionWrapper.transaction;\n const transactionType = transactionWrapper.type;\n\n let signedTransaction;\n\n if (transactionType === \"SOLANA\") {\n // Get or create keypair (uses cached keypair if available)\n const keypair = await getOrCreateKeypair(key);\n\n // Fetch the transaction and sign\n const transactionBytes = TKHQ.uint8arrayFromHexString(transactionToSign);\n const transaction = VersionedTransaction.deserialize(transactionBytes);\n transaction.sign([keypair]);\n\n signedTransaction = transaction.serialize();\n } else if (transactionType === \"ETHEREUM\") {\n // viem returns the fully serialized, broadcast-ready signed tx as a\n // 0x-prefixed hex string.\n signedTransaction = await signEthereumTransaction(key, transactionToSign);\n } else {\n throw new Error(\"unsupported transaction type\");\n }\n\n // Solana signing returns raw bytes (encode to hex); Ethereum signing already\n // returns a 0x-prefixed hex string, which we pass through as-is.\n const signedTransactionHex =\n typeof signedTransaction === \"string\"\n ? signedTransaction\n : TKHQ.uint8arrayToHexString(signedTransaction);\n\n TKHQ.sendMessageUp(\"TRANSACTION_SIGNED\", signedTransactionHex, requestId);\n}\n\n/**\n * Function triggered when SIGN_MESSAGE event is received.\n * @param {string} requestId\n * @param {string} message (serialized, JSON-stringified)\n * @param {string} address (case-sensitive --> enforce this, optional for backwards compatibility)\n */\nasync function onSignMessage(requestId, serializedMessage, address) {\n // Backwards compatibility: if no address provided, use \"default\"\n const keyAddress = address || \"default\";\n const key = inMemoryKeys[keyAddress];\n\n // Validate key exists and has not expired\n if (!validateKey(key, keyAddress, requestId)) {\n return;\n }\n\n const messageWrapper = JSON.parse(serializedMessage);\n const messageToSign = messageWrapper.message;\n const messageType = messageWrapper.type;\n const messageBytes = textEncoder.encode(messageToSign);\n\n let signatureHex;\n\n if (messageType === \"SOLANA\") {\n // Get or create keypair (uses cached keypair if available)\n const keypair = await getOrCreateKeypair(key);\n\n // Set up sha512 for nobleEd25519 (required for signing)\n nobleEd25519.etc.sha512Sync = (...m) =>\n nobleHashes.sha512(nobleEd25519.etc.concatBytes(...m));\n\n // Extract the 32-byte private key from the 64-byte secretKey\n // Solana keypair.secretKey format: [32-byte private key][32-byte public key]\n const privateKey = keypair.secretKey.slice(0, 32);\n // Sign the message using nobleEd25519\n const signature = nobleEd25519.sign(messageBytes, privateKey);\n\n // Note: Signature verification is skipped for performance. The signature will always be valid if signing succeeds with a valid keypair.\n // Clients can verify the signature returned.\n\n signatureHex = TKHQ.uint8arrayToHexString(signature);\n } else if (messageType === \"ETHEREUM\") {\n const account = await getOrCreateEthereumAccount(key);\n\n // Match the Solana path: sign the message as a plain UTF-8 string\n // (EIP-191 personal_sign). viem returns a 0x-prefixed signature.\n signatureHex = await account.signMessage({ message: messageToSign });\n } else {\n TKHQ.sendMessageUp(\"ERROR\", \"unsupported message type\", requestId);\n\n return;\n }\n\n TKHQ.sendMessageUp(\"MESSAGE_SIGNED\", signatureHex, requestId);\n}\n\n/**\n * Function triggered when CLEAR_EMBEDDED_PRIVATE_KEY event is received.\n * @param {string} requestId\n * @param {string} address - Optional: The address of the key to clear (case-sensitive). If not provided, clears all keys.\n */\nasync function onClearEmbeddedPrivateKey(requestId, address) {\n // If no address is provided, clear all keys\n if (!address) {\n inMemoryKeys = {};\n TKHQ.sendMessageUp(\"EMBEDDED_PRIVATE_KEY_CLEARED\", true, requestId);\n\n return;\n }\n\n // Check if key exists for the specific address\n if (!inMemoryKeys[address]) {\n TKHQ.sendMessageUp(\n \"ERROR\",\n new Error(\n `key not found for address ${address}. Note that address is case sensitive.`\n ).toString(),\n requestId\n );\n\n return;\n }\n\n // Clear the specific key from memory\n delete inMemoryKeys[address];\n\n TKHQ.sendMessageUp(\"EMBEDDED_PRIVATE_KEY_CLEARED\", true, requestId);\n}\n\n/**\n * Handler for SET_EMBEDDED_KEY_OVERRIDE events.\n * Decrypts a P-256 private key bundle using the iframe's embedded key and\n * overrides the embedded key with it for subsequent bundle decryptions.\n * @param {string} requestId\n * @param {string} organizationId\n * @param {string} bundle - v1.0.0 bundle containing the P-256 private key\n * @param {Function} HpkeDecrypt\n */\nasync function onSetEmbeddedKeyOverride(\n requestId,\n organizationId,\n bundle,\n HpkeDecrypt\n) {\n // Decrypt the private key using the iframe's embedded key.\n // The decrypted payload is a raw 32-byte P-256 private key scalar.\n const keyBytes = await decryptBundle(bundle, organizationId, HpkeDecrypt);\n\n // Convert raw P-256 bytes to a full JWK (derives public key via WebCrypto)\n const keyJwk = await rawP256PrivateKeyToJwk(new Uint8Array(keyBytes));\n\n // Store in module-level variable (memory only)\n injectedEmbeddedKey = keyJwk;\n\n TKHQ.sendMessageUp(\"EMBEDDED_KEY_OVERRIDE_SET\", true, requestId);\n}\n\n/**\n * Handler for RESET_TO_DEFAULT_EMBEDDED_KEY events.\n * Clears the embedded key from memory, replacing it with the iframe's default embedded key.\n * @param {string} requestId\n */\nfunction onResetToDefaultEmbeddedKey(requestId) {\n injectedEmbeddedKey = null;\n TKHQ.sendMessageUp(\"RESET_TO_DEFAULT_EMBEDDED_KEY\", true, requestId);\n}\n\n// Utility functions\nasync function createSolanaKeypair(privateKey) {\n const privateKeyBytes = TKHQ.parsePrivateKey(privateKey);\n\n let keypair;\n if (privateKeyBytes.length === 32) {\n // 32-byte private key (seed)\n keypair = Keypair.fromSeed(privateKeyBytes);\n } else if (privateKeyBytes.length === 64) {\n // 64-byte secret key (private + public)\n keypair = Keypair.fromSecretKey(privateKeyBytes);\n } else {\n throw new Error(\n `Invalid private key length: ${privateKeyBytes.length}. Expected 32 or 64 bytes.`\n );\n }\n\n return keypair;\n}\n\n/**\n * Converts raw P-256 private key bytes (32-byte scalar) to a JWK.\n * Constructs a PKCS8 wrapper around the raw bytes, imports via WebCrypto\n * (which derives the public key), then exports as JWK.\n * @param {Uint8Array} rawPrivateKeyBytes - 32-byte P-256 private key scalar\n * @returns {Promise} - Full P-256 ECDH private key JWK\n */\nasync function rawP256PrivateKeyToJwk(rawPrivateKeyBytes) {\n if (rawPrivateKeyBytes.length !== 32) {\n throw new Error(\n `invalid decryption key length: expected 32 bytes, got ${rawPrivateKeyBytes.length}`\n );\n }\n\n // Fixed PKCS#8 DER prefix for a P-256 private key (36 bytes).\n // This wraps a raw 32-byte scalar into the PrivateKeyInfo structure\n // that WebCrypto's importKey(\"pkcs8\", ...) expects.\n //\n // Structure (per RFC 5958 §2 / RFC 5208 §5):\n // SEQUENCE {\n // INTEGER 0 -- version (v1)\n // SEQUENCE { -- AlgorithmIdentifier (RFC 5480 §2.1.1)\n // OID 1.2.840.10045.2.1 -- id-ecPublicKey\n // OID 1.2.840.10045.3.1.7 -- secp256r1 (P-256)\n // }\n // OCTET STRING { -- privateKey (SEC 1 §C.4 / RFC 5915 §3)\n // SEQUENCE {\n // INTEGER 1 -- version\n // OCTET STRING (32 bytes) -- raw private key scalar\n // }\n // }\n // }\n //\n // References:\n // - RFC 5958 / RFC 5208: PKCS#8 PrivateKeyInfo\n // - RFC 5480 §2.1.1: ECC AlgorithmIdentifier (OIDs)\n // - RFC 5915 / SEC 1 v2 §C.4: ECPrivateKey encoding\n const pkcs8Prefix = new Uint8Array([\n 0x30, 0x41, 0x02, 0x01, 0x00, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48,\n 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03,\n 0x01, 0x07, 0x04, 0x27, 0x30, 0x25, 0x02, 0x01, 0x01, 0x04, 0x20,\n ]);\n\n const pkcs8 = new Uint8Array(pkcs8Prefix.length + 32);\n pkcs8.set(pkcs8Prefix);\n pkcs8.set(rawPrivateKeyBytes, pkcs8Prefix.length);\n\n const cryptoKey = await crypto.subtle.importKey(\n \"pkcs8\",\n pkcs8,\n { name: \"ECDH\", namedCurve: \"P-256\" },\n true,\n [\"deriveBits\"]\n );\n\n return await crypto.subtle.exportKey(\"jwk\", cryptoKey);\n}\n\n/**\n * Generates the error message for missing or expired keys.\n * @param {string} keyAddress - The address of the key\n * @returns {string} - The error message string\n */\nexport function getKeyNotFoundErrorMessage(keyAddress) {\n return `key bytes have expired. Please re-inject export bundle for address ${keyAddress} into iframe. Note that address is case sensitive.`;\n}\n\n/**\n * Clears an expired key from memory. This is an internal helper function\n * that clears the key without sending messages to the parent frame.\n * @param {string} keyAddress - The address of the key to clear\n */\nfunction clearExpiredKey(keyAddress) {\n if (inMemoryKeys[keyAddress]) {\n delete inMemoryKeys[keyAddress];\n }\n}\n\n/**\n * Clears all expired keys from memory.\n * This function iterates through all keys and removes any that have expired.\n */\nfunction clearAllExpiredKeys() {\n const now = new Date().getTime();\n const addressesToRemove = [];\n\n for (const [address, key] of Object.entries(inMemoryKeys)) {\n if (key.expiry && now >= key.expiry) {\n addressesToRemove.push(address);\n }\n }\n\n for (const address of addressesToRemove) {\n clearExpiredKey(address);\n }\n}\n\n/**\n * Validates that a key exists and has not expired.\n * Clears the key from memory if it has expired.\n * Throws error if validation fails (and caller will send message up back to parent).\n * @param {Object} key - The key object from inMemoryKeys\n * @param {string} keyAddress - The address of the key\n * @returns {boolean} - True if key is valid, false otherwise\n */\nfunction validateKey(key, keyAddress) {\n if (!key) {\n throw new Error(\n `key bytes not found. Please re-inject export bundle for address ${keyAddress} into iframe. Note that address is case sensitive.`\n ).toString();\n }\n\n const now = new Date().getTime();\n if (now >= key.expiry) {\n // Clear all expired keys before processing the signing request\n clearAllExpiredKeys();\n throw new Error(getKeyNotFoundErrorMessage(keyAddress)).toString();\n }\n\n return true;\n}\n\n/**\n * Gets or creates a Solana keypair from a key object.\n * Uses cached keypair if available, otherwise creates a new one.\n * @param {Object} key - The key object containing format and privateKey\n * @returns {Promise} - The Solana keypair\n */\nasync function getOrCreateKeypair(key) {\n if (key.keypair) {\n return key.keypair;\n }\n\n if (key.format === \"SOLANA\") {\n return Keypair.fromSecretKey(TKHQ.base58Decode(key.privateKey));\n } else {\n return await createSolanaKeypair(\n Array.from(TKHQ.uint8arrayFromHexString(key.privateKey))\n );\n }\n}\n\n/**\n * Gets or creates a viem Ethereum account from a key object.\n * Caches the account on the key object for improved signing perf.\n * @param {Object} key - The key object containing the privateKey and format\n * @returns {Promise} - The viem account (from privateKeyToAccount)\n */\nasync function getOrCreateEthereumAccount(key) {\n if (key.ethereumAccount) {\n return key.ethereumAccount;\n }\n\n // Ethereum keys are exported in HEXADECIMAL format, where privateKey is a\n // 0x-prefixed hex string — exactly what viem's privateKeyToAccount expects.\n if (key.format !== \"HEXADECIMAL\") {\n throw new Error(\n `cannot sign Ethereum payload with key format \"${key.format}\"; expected \"HEXADECIMAL\"`\n );\n }\n\n key.ethereumAccount = privateKeyToAccount(key.privateKey);\n return key.ethereumAccount;\n}\n\n/**\n * Signs a serialized Ethereum transaction and returns the broadcast-ready,\n * 0x-prefixed serialized signed transaction.\n *\n * Mirrors the Solana path: the caller builds and serializes the *unsigned*\n * transaction with any library, then passes the 0x-prefixed serialized hex.\n * We parse it back into viem's transaction shape, sign, and re-serialize.\n *\n * Note: for legacy (non-typed) transactions, the serialized unsigned tx must\n * include the chainId so the resulting signature carries EIP-155 replay\n * protection. Typed txs (EIP-1559/2930) always encode the chainId.\n * @param {Object} key - The key object containing the privateKey and format\n * @param {string} transactionToSign - 0x-prefixed serialized unsigned transaction\n * @returns {Promise} - The 0x-prefixed serialized signed transaction\n */\nasync function signEthereumTransaction(key, transactionToSign) {\n const account = await getOrCreateEthereumAccount(key);\n return await account.signTransaction(parseTransaction(transactionToSign));\n}\n\n/**\n * DOM Event handlers to power the export flow in standalone mode\n * Instead of receiving events from the parent page, forms trigger them.\n * This is useful for debugging as well.\n */\nfunction addDOMEventListeners() {\n // only support injected keys, not wallets\n document.getElementById(\"inject-key\").addEventListener(\n \"click\",\n async (e) => {\n e.preventDefault();\n window.postMessage({\n type: \"INJECT_KEY_EXPORT_BUNDLE\",\n value: document.getElementById(\"key-export-bundle\").value,\n keyFormat: document.getElementById(\"key-export-format\").value,\n organizationId: document.getElementById(\"key-organization-id\").value,\n });\n },\n false\n );\n document.getElementById(\"sign-transaction\").addEventListener(\n \"click\",\n async (e) => {\n e.preventDefault();\n window.postMessage({\n type: \"SIGN_TRANSACTION\",\n value: document.getElementById(\"transaction-to-sign\").value,\n });\n },\n false\n );\n document.getElementById(\"sign-message\").addEventListener(\n \"click\",\n async (e) => {\n e.preventDefault();\n window.postMessage({\n type: \"SIGN_MESSAGE\",\n value: document.getElementById(\"message-to-sign\").value,\n });\n },\n false\n );\n document.getElementById(\"reset\").addEventListener(\n \"click\",\n async (e) => {\n e.preventDefault();\n window.postMessage({ type: \"RESET_EMBEDDED_KEY\" });\n },\n false\n );\n\n // Add wallet injection support\n const injectWalletBtn = document.getElementById(\"inject-wallet\");\n if (injectWalletBtn) {\n injectWalletBtn.addEventListener(\n \"click\",\n async (e) => {\n e.preventDefault();\n window.postMessage({\n type: \"INJECT_WALLET_EXPORT_BUNDLE\",\n value: document.getElementById(\"wallet-export-bundle\").value,\n organizationId: document.getElementById(\"wallet-organization-id\")\n .value,\n });\n },\n false\n );\n }\n}\n\n/**\n * Message Event Handlers to process messages from the parent frame\n */\nfunction initMessageEventListener(HpkeDecrypt) {\n return async function messageEventListener(event) {\n if (event.data && event.data[\"type\"] == \"INJECT_KEY_EXPORT_BUNDLE\") {\n TKHQ.logMessage(\n `⬇️ Received message ${event.data[\"type\"]}: ${event.data[\"value\"]}, ${event.data[\"keyFormat\"]}, ${event.data[\"organizationId\"]}`\n );\n try {\n await onInjectKeyBundle(\n event.data[\"requestId\"],\n event.data[\"organizationId\"],\n event.data[\"value\"], // bundle\n event.data[\"keyFormat\"],\n event.data[\"address\"],\n HpkeDecrypt\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"INJECT_WALLET_EXPORT_BUNDLE\") {\n TKHQ.logMessage(\n `⬇️ Received message ${event.data[\"type\"]}: ${event.data[\"value\"]}, ${event.data[\"organizationId\"]}`\n );\n try {\n await onInjectKeyBundle(\n event.data[\"requestId\"],\n event.data[\"organizationId\"],\n event.data[\"value\"],\n undefined, // keyFormat - default to HEXADECIMAL\n undefined, // address - default to \"default\"\n HpkeDecrypt\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"APPLY_SETTINGS\") {\n try {\n await onApplySettings(event.data[\"value\"], event.data[\"requestId\"]);\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"RESET_EMBEDDED_KEY\") {\n TKHQ.logMessage(`⬇️ Received message ${event.data[\"type\"]}`);\n try {\n TKHQ.onResetEmbeddedKey();\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString());\n }\n }\n if (event.data && event.data[\"type\"] == \"SIGN_TRANSACTION\") {\n TKHQ.logMessage(\n `⬇️ Received message ${event.data[\"type\"]}: ${event.data[\"value\"]}`\n );\n try {\n await onSignTransaction(\n event.data[\"requestId\"],\n event.data[\"value\"],\n event.data[\"address\"] // signing address (case sensitive)\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"SIGN_MESSAGE\") {\n TKHQ.logMessage(\n `⬇️ Received message ${event.data[\"type\"]}: ${event.data[\"value\"]}`\n );\n try {\n await onSignMessage(\n event.data[\"requestId\"],\n event.data[\"value\"],\n event.data[\"address\"] // signing address (case sensitive)\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"CLEAR_EMBEDDED_PRIVATE_KEY\") {\n TKHQ.logMessage(`⬇️ Received message ${event.data[\"type\"]}`);\n try {\n await onClearEmbeddedPrivateKey(\n event.data[\"requestId\"],\n event.data[\"address\"]\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"GET_EMBEDDED_PUBLIC_KEY\") {\n TKHQ.logMessage(`⬇️ Received message ${event.data[\"type\"]}`);\n try {\n await onGetPublicEmbeddedKey(event.data[\"requestId\"]);\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"SET_EMBEDDED_KEY_OVERRIDE\") {\n TKHQ.logMessage(`⬇️ Received message ${event.data[\"type\"]}`);\n try {\n await onSetEmbeddedKeyOverride(\n event.data[\"requestId\"],\n event.data[\"organizationId\"],\n event.data[\"value\"],\n HpkeDecrypt\n );\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n if (event.data && event.data[\"type\"] == \"RESET_TO_DEFAULT_EMBEDDED_KEY\") {\n TKHQ.logMessage(`⬇️ Received message ${event.data[\"type\"]}`);\n try {\n onResetToDefaultEmbeddedKey(event.data[\"requestId\"]);\n } catch (e) {\n TKHQ.sendMessageUp(\"ERROR\", e.toString(), event.data[\"requestId\"]);\n }\n }\n };\n}\n\n/**\n * Set up event handlers for both DOM and message events\n * @param {Function} HpkeDecrypt\n */\nexport function initEventHandlers(HpkeDecrypt) {\n const messageEventListener = initMessageEventListener(HpkeDecrypt);\n\n // controllers to remove event listeners\n const messageListenerController = new AbortController();\n const turnkeyInitController = new AbortController();\n\n // Origin of a legacy (@turnkey/iframe-stamper < 2.1.0) parent, bound on its\n // first valid message. A document belongs to exactly one embedder for its\n // lifetime, so every subsequent message must come from the same origin.\n let legacyParentOrigin = null;\n\n if (window.parent === window) {\n // Standalone mode: the DOM forms drive the flow by posting messages to\n // this same window. Messages from other windows (e.g. a window.opener)\n // are not accepted.\n addDOMEventListeners();\n window.addEventListener(\n \"message\",\n async function (event) {\n if (event.source !== window) {\n return;\n }\n await messageEventListener(event);\n },\n {\n capture: false,\n signal: messageListenerController.signal,\n }\n );\n return { messageEventListener };\n }\n\n // Legacy embedded mode: @turnkey/iframe-stamper < 2.1.0 posts requests\n // straight to this window instead of establishing a MessageChannel.\n // These clients operate on the document-scoped ephemeral key (never\n // persisted -- see initEphemeralEmbeddedKey), so a malicious embedder can\n // only ever obtain a key that no legitimate bundle is encrypted to\n // (INT-697). Modern clients upgrade to the MessageChannel path below.\n window.addEventListener(\n \"message\",\n async function (event) {\n if (!event.data || !event.data[\"type\"]) {\n return;\n }\n // Channel establishment is owned by the handshake listener below.\n if (event.data[\"type\"] === \"TURNKEY_INIT_MESSAGE_CHANNEL\") {\n return;\n }\n // Only the direct parent, with a real (non-opaque) origin, may drive\n // the legacy path.\n if (event.source !== window.parent) {\n return;\n }\n if (!event.origin || event.origin === \"null\") {\n return;\n }\n if (legacyParentOrigin === null) {\n legacyParentOrigin = event.origin;\n // From now on, responses posted to window.parent are only readable\n // by the bound origin.\n TKHQ.setParentFrameOrigin(event.origin);\n } else if (event.origin !== legacyParentOrigin) {\n return;\n }\n recordChannelTelemetry(\n CHANNEL_LEGACY_POST_MESSAGE,\n event.data[\"type\"],\n event.origin\n );\n await messageEventListener(event);\n },\n { capture: false, signal: messageListenerController.signal }\n );\n\n // Guard to prevent concurrent channel establishment from multiple senders\n let channelEstablished = false;\n\n // Handle MessageChannel initialization for iframe communication\n window.addEventListener(\n \"message\",\n async function (event) {\n /**\n * @turnkey/iframe-stamper >= v2.1.0 is using a MessageChannel to communicate with the parent frame.\n * The parent frame sends a TURNKEY_INIT_MESSAGE_CHANNEL event with the MessagePort.\n * If we receive this event, we want to remove the message event listener that was added in the DOMContentLoaded event to avoid processing messages twice.\n * We persist the MessagePort so we can use it to communicate with the parent window in subsequent calls to TKHQ.sendMessageUp\n */\n if (\n event.data &&\n event.data[\"type\"] == \"TURNKEY_INIT_MESSAGE_CHANNEL\" &&\n event.source === window.parent &&\n event.origin &&\n event.origin !== \"null\" &&\n event.ports?.length === 1\n ) {\n // A legacy-bound document may upgrade to the MessageChannel protocol,\n // but never on behalf of a different origin.\n if (\n legacyParentOrigin !== null &&\n legacyParentOrigin !== event.origin\n ) {\n return;\n }\n\n // Synchronously check-and-set the flag before any await. This prevents\n // a second concurrent invocation from racing through while the first is\n // suspended at an await, which would allow multiple origins to establish\n // a channel before turnkeyInitController.abort() is reached.\n if (channelEstablished) {\n return;\n }\n channelEstablished = true;\n\n const iframeMessagePort = event.ports[0];\n\n var targetPubHex;\n try {\n // Supersedes the ephemeral key, if the legacy bootstrap created one.\n await TKHQ.initEmbeddedKey(event.origin);\n var embeddedKeyJwk = await TKHQ.getEmbeddedKey();\n var targetPubBuf = await TKHQ.p256JWKPrivateToPublic(embeddedKeyJwk);\n targetPubHex = TKHQ.uint8arrayToHexString(targetPubBuf);\n } catch (e) {\n // Key setup failed (e.g. blocked third-party storage). Roll back so\n // the parent can retry the handshake, and keep the legacy/standalone\n // listener alive so the frame stays functional in the meantime.\n channelEstablished = false;\n iframeMessagePort.postMessage({ type: \"ERROR\", value: e.toString() });\n return;\n }\n\n // Commit: the MessagePort carries all requests from here on; stop\n // accepting legacy/standalone window messages.\n messageListenerController.abort();\n TKHQ.setParentFrameMessageChannelPort(iframeMessagePort);\n document.getElementById(\"embedded-key\").value = targetPubHex;\n\n iframeMessagePort.onmessage = function (portEvent) {\n recordChannelTelemetry(\n CHANNEL_MESSAGE_CHANNEL,\n portEvent.data && portEvent.data[\"type\"],\n event.origin\n );\n return messageEventListener(portEvent);\n };\n recordChannelTelemetry(\n CHANNEL_MESSAGE_CHANNEL,\n \"TURNKEY_INIT_MESSAGE_CHANNEL\",\n event.origin\n );\n TKHQ.sendMessageUp(\"PUBLIC_KEY_READY\", targetPubHex);\n\n // remove the listener for TURNKEY_INIT_MESSAGE_CHANNEL after it's been processed\n turnkeyInitController.abort();\n }\n },\n { signal: turnkeyInitController.signal }\n );\n\n return { messageEventListener };\n}\n/**\n * Expose internal handlers for targeted testing.\n */\nexport {\n onInjectKeyBundle,\n onSignTransaction,\n onSignMessage,\n onClearEmbeddedPrivateKey,\n onSetEmbeddedKeyOverride,\n onResetToDefaultEmbeddedKey,\n};\n","/**\n * Crypto Utilities - Shared\n * Contains HPKE encryption and decryption functions\n */\n\nimport {\n p256JWKPrivateToPublic,\n additionalAssociatedData,\n uint8arrayToHexString,\n} from \"./turnkey-core.js\";\nimport {\n CipherSuite,\n DhkemP256HkdfSha256,\n HkdfSha256,\n Aes256Gcm,\n} from \"@hpke/core\";\n\n// Pre-compute const (for perf)\nconst TURNKEY_HPKE_INFO = new TextEncoder().encode(\"turnkey_hpke\");\n\n/**\n * Decrypt the ciphertext (ArrayBuffer) given an encapsulation key (ArrayBuffer)\n * and the receivers private key (JSON Web Key).\n */\nexport async function HpkeDecrypt({\n ciphertextBuf,\n encappedKeyBuf,\n receiverPrivJwk,\n}) {\n const kemContext = new DhkemP256HkdfSha256();\n var receiverPriv = await kemContext.importKey(\n \"jwk\",\n { ...receiverPrivJwk },\n false\n );\n\n var suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n var recipientCtx = await suite.createRecipientContext({\n recipientKey: receiverPriv,\n enc: encappedKeyBuf,\n info: TURNKEY_HPKE_INFO,\n });\n\n var receiverPubBuf = await p256JWKPrivateToPublic(receiverPrivJwk);\n var aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n var res;\n try {\n res = await recipientCtx.open(ciphertextBuf, aad);\n } catch (e) {\n throw new Error(\n \"unable to decrypt bundle using embedded key. the bundle may be incorrect. failed with error: \" +\n e.toString()\n );\n }\n return res;\n}\n\n/**\n * Encrypt plaintext using HPKE with the receiver's public key.\n * @param {Object} params\n * @param {Uint8Array} params.plaintextBuf - Plaintext to encrypt\n * @param {JsonWebKey} params.receiverPubJwk - Receiver's public key in JWK format\n * @returns {Promise} JSON stringified encrypted bundle with encappedPublic and ciphertext\n */\nexport async function HpkeEncrypt({ plaintextBuf, receiverPubJwk }) {\n const kemContext = new DhkemP256HkdfSha256();\n const receiverPub = await kemContext.importKey(\n \"jwk\",\n { ...receiverPubJwk },\n true\n );\n\n const suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n const senderCtx = await suite.createSenderContext({\n recipientPublicKey: receiverPub,\n info: TURNKEY_HPKE_INFO,\n });\n\n // Need to import the key again as a JWK to export as a raw key, the format needed to\n // create the aad with the newly generated raw encapped key.\n const receiverPubCryptoKey = await crypto.subtle.importKey(\n \"jwk\",\n receiverPubJwk,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n const receiverPubRaw = await crypto.subtle.exportKey(\n \"raw\",\n receiverPubCryptoKey\n );\n const receiverPubBuf = new Uint8Array(receiverPubRaw);\n\n const encappedKeyBuf = new Uint8Array(senderCtx.enc);\n\n const aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n\n var ciphertextBuf;\n try {\n ciphertextBuf = await senderCtx.seal(plaintextBuf, aad);\n } catch (e) {\n throw new Error(\"failed to encrypt import bundle: \" + e.toString());\n }\n\n const ciphertextHex = uint8arrayToHexString(new Uint8Array(ciphertextBuf));\n const encappedKeyBufHex = uint8arrayToHexString(encappedKeyBuf);\n const encryptedBundle = JSON.stringify({\n encappedPublic: encappedKeyBufHex,\n ciphertext: ciphertextHex,\n });\n return encryptedBundle;\n}\n","// This file is the main entrypoint of the webpack-bundled application\n\n// Import relevant modules\nimport { TKHQ } from \"./turnkey-core.js\";\nimport { initEventHandlers } from \"./event-handlers.js\";\nimport { HpkeDecrypt } from \"@shared/crypto-utils.js\";\nimport \"./styles.css\";\n\n// Surface TKHQ for external access\nwindow.TKHQ = TKHQ;\n\n// Init app\ndocument.addEventListener(\"DOMContentLoaded\", async function () {\n initEventHandlers(HpkeDecrypt);\n\n // If styles are saved in local storage, sanitize and apply them\n const styleSettings = TKHQ.getSettings();\n if (styleSettings) {\n TKHQ.applySettings(styleSettings);\n }\n\n if (window.parent === window) {\n // Standalone mode has no parent; scope the persisted key to this\n // document's own origin.\n await TKHQ.initEmbeddedKey(window.location.origin);\n } else {\n // Embedded mode: create a document-scoped ephemeral key so legacy\n // (@turnkey/iframe-stamper < 2.1.0) parents, which passively wait for\n // PUBLIC_KEY_READY, can finish init(). Modern parents supersede it with\n // a persistent key scoped to their browser-authenticated origin during\n // the MessageChannel handshake (see event-handlers.js).\n await TKHQ.initEphemeralEmbeddedKey();\n }\n\n const embeddedKeyJwk = await TKHQ.getEmbeddedKey();\n const targetPubBuf = await TKHQ.p256JWKPrivateToPublic(embeddedKeyJwk);\n const targetPubHex = TKHQ.uint8arrayToHexString(targetPubBuf);\n document.getElementById(\"embedded-key\").value = targetPubHex;\n\n if (window.parent !== window) {\n // The parent origin is not known yet, but announcing the (non-secret)\n // public key broadly is required to bootstrap legacy clients.\n TKHQ.sendMessageUp(\"PUBLIC_KEY_READY\", targetPubHex);\n }\n});\n","module.exports = crypto;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"bundle.\" + {\"291\":\"c9a8b8d5055f705bd308\",\"825\":\"29203a225e88524b9cba\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","\n__webpack_require__.sriHashes = {\"291\":\"*-*-*-CHUNK-SRI-HASH-r3NPGwA4ft5fHgGXhVIptCiDVf06qPa+sxzG6L+8GwPuhn89e/\",\"825\":\"*-*-*-CHUNK-SRI-HASH-mfog3UJdGPOmSk4QZbKxsxHPFZtt298WnZNc1aQ1MCgc6YirFj\"};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t792: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkexport_and_sign\"] = self[\"webpackChunkexport_and_sign\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [96], () => (__webpack_require__(750)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","inProgress","dataWebpackPrefix","e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_invoke","enumerable","configurable","writable","_toConsumableArray","Array","isArray","_arrayLikeToArray","_arrayWithoutHoles","from","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","toString","slice","constructor","name","test","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","TURNKEY_SETTINGS","parentFrameMessageChannelPort","parentFrameTargetOrigin","getSubtleCrypto","globalThis","crypto","subtle","window","global","isDoublyIframed","undefined","location","ancestorOrigins","parent","top","_loadQuorumKey","_callee","quorumPublic","_context","Error","importKey","namedCurve","requireStorageKey","storageKey","_initEmbeddedKey","_callee3","_context3","getEmbeddedKey","generateTargetKey","setEmbeddedKey","_generateTargetKey","_callee4","p256key","_context4","generateKey","exportKey","privateKey","jwtKey","getItemWithExpiry","JSON","parse","targetKey","setItemWithExpiry","stringify","key","ttl","item","expiry","Date","getTime","localStorage","setItem","itemStr","getItem","hasOwnProperty","removeItem","uint8arrayFromHexString","hexString","hexWithoutPrefix","startsWith","Uint8Array","match","map","h","parseInt","uint8arrayToHexString","buffer","x","padStart","join","additionalAssociatedData","senderPubBuf","receiverPubBuf","s","concat","logMessage","content","messageLog","document","getElementById","message","createElement","innerText","appendChild","p256JWKPrivateToPublic","_x7","_p256JWKPrivateToPublic","_callee6","jwkPrivate","jwkPrivateCopy","publicKey","_context6","_objectSpread","key_ops","base58Encode","bytes","result","digits","carry","j","push","k","base58Decode","alphabet","decodedBytes","leadingZeros","indexOf","currentByte","reverse","_encodeKey","_callee9","privateKeyBytes","keyFormat","publicKeyBytes","concatenatedBytes","_t2","_context9","set","console","warn","sharedInitEmbeddedKey","_x3","SharedTKHQ","sharedGetEmbeddedKey","sharedSetEmbeddedKey","normalizePadding","byteArray","targetLength","paddingLength","padding","fill","expectedZeroCount","zeroCount","validateStyles","styles","element","validStyles","cssValidationRegex","margin","borderWidth","borderStyle","borderColor","borderRadius","fontSize","fontWeight","fontFamily","color","labelColor","backgroundColor","width","height","maxWidth","maxHeight","lineHeight","boxShadow","textAlign","overflowWrap","wordWrap","resize","entries","forEach","_ref","_ref2","_arrayWithHoles","next","_iterableToArrayLimit","_nonIterableRest","property","styleProperty","trim","styleRegexStr","styleRegex","RegExp","styleValue","loadQuorumKey","_x","embeddedKeyStates","WeakMap","validateParentOrigin","parentOrigin","parsedOrigin","URL","origin","purgeLegacyEmbeddedKey","validatedOrigin","previousState","state","get","mode","encodeURIComponent","ready","error","_initEphemeralEmbeddedKey","_callee2","_embeddedKeyStates$ge","generatedKey","latestState","_context2","_verifyEnclaveSignature","enclaveQuorumPublic","publicSignature","signedData","TURNKEY_SIGNERS_ENCLAVES","environment","meta","TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY","encryptionQuorumPublicBuf","quorumKey","publicSignatureBuf","signedDataBuf","prod","preprod","querySelector","__TURNKEY_SIGNER_ENVIRONMENT__","fromDerSignature","verify","hash","TKHQ","initEmbeddedKey","initEphemeralEmbeddedKey","onResetEmbeddedKey","encodeKey","_x1","_x10","_x11","sendMessageUp","type","requestId","postMessage","setParentFrameMessageChannelPort","port","setParentFrameOrigin","verifyEnclaveSignature","_x2","_x4","getEd25519PublicKey","privateKeyHex","nobleEd25519","sha512Sync","_nobleEd25519$etc","nobleHashes","concatBytes","applySettings","settings","validSettings","settingsObj","keyDivTextarea","style","getSettings","setSettings","parsePrivateKey","CHANNEL_MESSAGE_CHANNEL","recordChannelTelemetry","channel","eventType","endpoint","getTelemetryEndpoint","navigator","sendBeacon","payload","frame","timestamp","toISOString","Blob","_unused","_slicedToArray","inMemoryKeys","injectedEmbeddedKey","textEncoder","TextEncoder","textDecoder","TextDecoder","verifyAndParseBundleData","_verifyAndParseBundleData","_callee0","bundle","organizationId","bundleObj","_context0","version","data","dataSignature","decode","encappedPublic","ciphertext","decryptBundle","_x5","_decryptBundle","_callee1","HpkeDecrypt","encappedKeyBuf","ciphertextBuf","receiverPrivJwk","_t0","_context1","onGetPublicEmbeddedKey","_x6","_onGetPublicEmbeddedKey","_callee10","embeddedKeyJwk","targetPubBuf","targetPubHex","_context10","loadKeyIntoMemory","_x8","_x9","_x0","_loadKeyIntoMemory","_callee11","address","keyBytes","keyAddress","cachedKeypair","_context11","subarray","Keypair","fromSecretKey","createSolanaKeypair","_defineProperty","format","keypair","onInjectKeyBundle","_x12","_x13","_x14","_onInjectKeyBundle","_callee12","_context12","onApplySettings","_x15","_x16","_onApplySettings","_callee13","_context13","onSignTransaction","_x17","_x18","_x19","_onSignTransaction","_callee14","serializedTransaction","transactionWrapper","transactionToSign","transactionType","signedTransaction","transactionBytes","transaction","signedTransactionHex","_context14","validateKey","getOrCreateKeypair","VersionedTransaction","deserialize","sign","serialize","signEthereumTransaction","onSignMessage","_x20","_x21","_x22","_onSignMessage","_callee15","serializedMessage","messageWrapper","messageToSign","messageType","messageBytes","signatureHex","signature","account","_context15","encode","secretKey","getOrCreateEthereumAccount","signMessage","onClearEmbeddedPrivateKey","_x23","_x24","_onClearEmbeddedPrivateKey","_callee16","_context16","onSetEmbeddedKeyOverride","_x25","_x26","_x27","_x28","_onSetEmbeddedKeyOverride","_callee17","keyJwk","_context17","rawP256PrivateKeyToJwk","onResetToDefaultEmbeddedKey","_x29","_createSolanaKeypair","_callee18","_context18","fromSeed","_x30","_rawP256PrivateKeyToJwk","_callee19","rawPrivateKeyBytes","pkcs8Prefix","pkcs8","cryptoKey","_context19","clearExpiredKey","now","addressesToRemove","_i","_Object$entries","_Object$entries$_i","_i2","_addressesToRemove","clearAllExpiredKeys","getKeyNotFoundErrorMessage","_x31","_getOrCreateKeypair","_callee20","_context20","_x32","_getOrCreateEthereumAccount","_callee21","_context21","ethereumAccount","privateKeyToAccount","_x33","_x34","_signEthereumTransaction","_callee22","_context22","signTransaction","parseTransaction","initEventHandlers","messageEventListener","_messageEventListener","event","_t","_t3","_t4","_t5","_t6","_t7","_t8","_x40","initMessageEventListener","messageListenerController","AbortController","turnkeyInitController","legacyParentOrigin","addEventListener","preventDefault","_x35","_x36","_ref3","_x37","_ref4","_x38","injectWalletBtn","_ref5","_callee5","_context5","_x39","addDOMEventListeners","_ref6","_callee7","_context7","source","_x41","capture","signal","_ref7","_callee8","_context8","_x42","channelEstablished","_ref8","_event$ports","iframeMessagePort","_t9","ports","abort","onmessage","portEvent","_x43","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","getOwnPropertyDescriptors","defineProperties","_typeof","toPrimitive","String","_toPrimitive","_toPropertyKey","TURNKEY_HPKE_INFO","_HpkeDecrypt","kemContext","receiverPriv","suite","recipientCtx","aad","res","DhkemP256HkdfSha256","CipherSuite","kem","kdf","HkdfSha256","aead","Aes256Gcm","createRecipientContext","recipientKey","enc","info","open","styleSettings","module","exports","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","id","loaded","__webpack_modules__","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","every","splice","getter","__esModule","obj","this","ns","def","current","getOwnPropertyNames","definition","chunkId","all","reduce","promises","miniCssF","g","Function","prop","url","script","needAttach","scripts","getElementsByTagName","getAttribute","charset","nc","setAttribute","src","crossOrigin","integrity","sriHashes","onScriptComplete","prev","onerror","onload","clearTimeout","timeout","doneFns","parentNode","removeChild","setTimeout","target","head","nmd","paths","children","installedChunks","installedChunkData","promise","reject","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file diff --git a/export-and-sign/dist/index.html b/export-and-sign/dist/index.html index 43a1dd6d..96a1f0c0 100644 --- a/export-and-sign/dist/index.html +++ b/export-and-sign/dist/index.html @@ -1 +1 @@ -Turnkey Export

Export Key Material

This public key will be sent along with a private key ID or wallet ID inside of a new EXPORT_PRIVATE_KEY or EXPORT_WALLET activity




Inject Key Export Bundle

The export bundle comes from the parent page and is composed of a public key and an encrypted payload. The payload is encrypted to this document's embedded key (stored in local storage and displayed above). The scheme relies on HPKE (RFC 9180).





Inject Wallet Export Bundle

The export bundle comes from the parent page and is composed of a public key and an encrypted payload. The payload is encrypted to this document's embedded key (stored in local storage and displayed above). The scheme relies on HPKE (RFC 9180).




Sign Transaction

Input a serialized transaction to sign.



Sign Message

Input a serialized message to sign.



Message log

Below we display a log of the messages sent / received. The forms above send messages, and the code communicates results by sending events via the postMessage API.

\ No newline at end of file +Turnkey Export

Export Key Material

This public key will be sent along with a private key ID or wallet ID inside of a new EXPORT_PRIVATE_KEY or EXPORT_WALLET activity




Inject Key Export Bundle

The export bundle comes from the parent page and is composed of a public key and an encrypted payload. The payload is encrypted to this document's embedded key (stored in local storage and displayed above). The scheme relies on HPKE (RFC 9180).





Inject Wallet Export Bundle

The export bundle comes from the parent page and is composed of a public key and an encrypted payload. The payload is encrypted to this document's embedded key (stored in local storage and displayed above). The scheme relies on HPKE (RFC 9180).




Sign Transaction

Input a serialized transaction to sign.



Sign Message

Input a serialized message to sign.



Message log

Below we display a log of the messages sent / received. The forms above send messages, and the code communicates results by sending events via the postMessage API.

\ No newline at end of file diff --git a/export-and-sign/index.test.js b/export-and-sign/index.test.js index ae3ce927..c6c6c066 100644 --- a/export-and-sign/index.test.js +++ b/export-and-sign/index.test.js @@ -502,9 +502,52 @@ describe("TKHQ", () => { }).toThrow("Private key must be a string"); }); - it("logs messages and sends messages up", async () => { - // TODO: test logMessage / sendMessageUp - expect(true).toBe(true); + it("restricts parent messages to the bound origin", () => { + const parentWindow = { postMessage: jest.fn() }; + Object.defineProperty(dom.window, "parent", { + configurable: true, + value: parentWindow, + }); + + // Legacy clients need the initial, non-secret public key before they can + // send a message that binds the document to their origin. + TKHQ.sendMessageUp("PUBLIC_KEY_READY", "public-key"); + expect(parentWindow.postMessage).toHaveBeenCalledWith( + { type: "PUBLIC_KEY_READY", value: "public-key" }, + "*" + ); + + expect(() => TKHQ.setParentFrameOrigin("null")).toThrow( + "a canonical, non-opaque parent frame origin is required" + ); + expect(() => + TKHQ.setParentFrameOrigin("https://app.turnkey.com/path") + ).toThrow("a canonical, non-opaque parent frame origin is required"); + + TKHQ.setParentFrameOrigin("https://app.turnkey.com"); + TKHQ.sendMessageUp("BUNDLE_INJECTED", true, "request-1"); + expect(parentWindow.postMessage).toHaveBeenLastCalledWith( + { + type: "BUNDLE_INJECTED", + value: true, + requestId: "request-1", + }, + "https://app.turnkey.com" + ); + + const messagePort = { postMessage: jest.fn() }; + TKHQ.setParentFrameMessageChannelPort(messagePort); + TKHQ.sendMessageUp("MESSAGE_SIGNED", "signature", "request-2"); + expect(messagePort.postMessage).toHaveBeenCalledWith({ + type: "MESSAGE_SIGNED", + value: "signature", + requestId: "request-2", + }); + expect(parentWindow.postMessage).toHaveBeenCalledTimes(2); + + // Avoid leaking the mocked port into later tests. Production modules are + // loaded once per iframe document, but Jest reuses this module instance. + TKHQ.setParentFrameMessageChannelPort(null); }); it("normalizes padding in a byte array", () => { @@ -2144,7 +2187,6 @@ describe("Telemetry", () => { it("does not send anything when no endpoint is configured", () => { recordChannelTelemetry( CHANNEL_LEGACY_POST_MESSAGE, - "SIGN_MESSAGE", "https://app.turnkey.com" ); expect(sendBeacon).not.toHaveBeenCalled(); @@ -2152,20 +2194,19 @@ describe("Telemetry", () => { it("treats the deploy-time placeholder as unconfigured", () => { setTelemetryMeta("__TURNKEY_TELEMETRY_ENDPOINT__"); - recordChannelTelemetry( - CHANNEL_MESSAGE_CHANNEL, - "SIGN_MESSAGE", - "https://app.turnkey.com" - ); + recordChannelTelemetry(CHANNEL_MESSAGE_CHANNEL, "https://app.turnkey.com"); expect(sendBeacon).not.toHaveBeenCalled(); }); - it("sends a beacon describing the channel and operation", async () => { + it("sends one beacon per channel and document", async () => { setTelemetryMeta("https://telemetry.turnkey.com/frames"); recordChannelTelemetry( CHANNEL_LEGACY_POST_MESSAGE, - "SIGN_TRANSACTION", + "https://app.turnkey.com" + ); + recordChannelTelemetry( + CHANNEL_LEGACY_POST_MESSAGE, "https://app.turnkey.com" ); @@ -2177,10 +2218,20 @@ describe("Telemetry", () => { expect(payload).toEqual({ frame: "export-and-sign", channel: "legacy_post_message", - eventType: "SIGN_TRANSACTION", parentOrigin: "https://app.turnkey.com", timestamp: expect.any(String), }); + + recordChannelTelemetry(CHANNEL_MESSAGE_CHANNEL, "https://app.turnkey.com"); + expect(sendBeacon).toHaveBeenCalledTimes(2); + }); + + it("ignores unknown channel classifications", () => { + setTelemetryMeta("https://telemetry.turnkey.com/frames"); + + recordChannelTelemetry("untrusted-channel", "https://app.turnkey.com"); + + expect(sendBeacon).not.toHaveBeenCalled(); }); it("never throws, even when the beacon API fails", () => { @@ -2190,7 +2241,7 @@ describe("Telemetry", () => { }); expect(() => - recordChannelTelemetry(CHANNEL_MESSAGE_CHANNEL, "SIGN_MESSAGE") + recordChannelTelemetry(CHANNEL_MESSAGE_CHANNEL, "https://app.turnkey.com") ).not.toThrow(); }); }); diff --git a/export-and-sign/src/event-handlers.js b/export-and-sign/src/event-handlers.js index 735efcdd..237fb963 100644 --- a/export-and-sign/src/event-handlers.js +++ b/export-and-sign/src/event-handlers.js @@ -814,6 +814,7 @@ export function initEventHandlers(HpkeDecrypt) { // first valid message. A document belongs to exactly one embedder for its // lifetime, so every subsequent message must come from the same origin. let legacyParentOrigin = null; + let legacyTelemetryRecorded = false; if (window.parent === window) { // Standalone mode: the DOM forms drive the flow by posting messages to @@ -868,11 +869,10 @@ export function initEventHandlers(HpkeDecrypt) { } else if (event.origin !== legacyParentOrigin) { return; } - recordChannelTelemetry( - CHANNEL_LEGACY_POST_MESSAGE, - event.data["type"], - event.origin - ); + if (!legacyTelemetryRecorded) { + recordChannelTelemetry(CHANNEL_LEGACY_POST_MESSAGE, event.origin); + legacyTelemetryRecorded = true; + } await messageEventListener(event); }, { capture: false, signal: messageListenerController.signal } @@ -941,19 +941,8 @@ export function initEventHandlers(HpkeDecrypt) { TKHQ.setParentFrameMessageChannelPort(iframeMessagePort); document.getElementById("embedded-key").value = targetPubHex; - iframeMessagePort.onmessage = function (portEvent) { - recordChannelTelemetry( - CHANNEL_MESSAGE_CHANNEL, - portEvent.data && portEvent.data["type"], - event.origin - ); - return messageEventListener(portEvent); - }; - recordChannelTelemetry( - CHANNEL_MESSAGE_CHANNEL, - "TURNKEY_INIT_MESSAGE_CHANNEL", - event.origin - ); + iframeMessagePort.onmessage = messageEventListener; + recordChannelTelemetry(CHANNEL_MESSAGE_CHANNEL, event.origin); TKHQ.sendMessageUp("PUBLIC_KEY_READY", targetPubHex); // remove the listener for TURNKEY_INIT_MESSAGE_CHANNEL after it's been processed diff --git a/export-and-sign/src/telemetry.js b/export-and-sign/src/telemetry.js index bef76dda..0ec5b462 100644 --- a/export-and-sign/src/telemetry.js +++ b/export-and-sign/src/telemetry.js @@ -11,6 +11,11 @@ export const CHANNEL_LEGACY_POST_MESSAGE = "legacy_post_message"; const TELEMETRY_ENDPOINT_META_NAME = "turnkey-telemetry-endpoint"; const TELEMETRY_ENDPOINT_PLACEHOLDER = "__TURNKEY_TELEMETRY_ENDPOINT__"; +const VALID_CHANNELS = new Set([ + CHANNEL_MESSAGE_CHANNEL, + CHANNEL_LEGACY_POST_MESSAGE, +]); +const reportedChannelsByWindow = new WeakMap(); function getTelemetryEndpoint() { if (typeof document === "undefined") { @@ -30,13 +35,18 @@ function getTelemetryEndpoint() { } /** - * Records one operation received over a parent communication channel. + * Records the communication channel selected by one iframe document. Each + * channel is reported at most once per document so arbitrary embedders cannot + * amplify telemetry by sending repeated operations. * @param {string} channel CHANNEL_MESSAGE_CHANNEL or CHANNEL_LEGACY_POST_MESSAGE - * @param {string} eventType the message type that was processed * @param {string} [parentOrigin] origin of the embedding document, if known */ -export function recordChannelTelemetry(channel, eventType, parentOrigin) { +export function recordChannelTelemetry(channel, parentOrigin) { try { + if (!VALID_CHANNELS.has(channel) || typeof window === "undefined") { + return; + } + const endpoint = getTelemetryEndpoint(); if ( !endpoint || @@ -45,17 +55,29 @@ export function recordChannelTelemetry(channel, eventType, parentOrigin) { ) { return; } + + let reportedChannels = reportedChannelsByWindow.get(window); + if (!reportedChannels) { + reportedChannels = new Set(); + reportedChannelsByWindow.set(window, reportedChannels); + } + if (reportedChannels.has(channel)) { + return; + } + const payload = JSON.stringify({ frame: "export-and-sign", channel, - eventType: eventType || null, parentOrigin: parentOrigin || null, timestamp: new Date().toISOString(), }); - navigator.sendBeacon( + const accepted = navigator.sendBeacon( endpoint, new Blob([payload], { type: "application/json" }) ); + if (accepted !== false) { + reportedChannels.add(channel); + } } catch { // Telemetry must never break the signing flow; drop the sample. } diff --git a/export-and-sign/webpack.config.js b/export-and-sign/webpack.config.js index 07bea713..cb3ce377 100644 --- a/export-and-sign/webpack.config.js +++ b/export-and-sign/webpack.config.js @@ -52,7 +52,7 @@ module.exports = (env, argv) => { // meta tag). Left untemplated, the placeholder is an invalid CSP // source expression that browsers ignore, leaving just 'self'. content: - "default-src 'self'; script-src 'self'; style-src 'self'; connect-src 'self' __TURNKEY_TELEMETRY_ENDPOINT__; base-uri 'self'; object-src 'none'; form-action 'none'", + "default-src 'self'; script-src 'self'; style-src 'self'; connect-src 'self' __TURNKEY_TELEMETRY_ORIGIN__; base-uri 'self'; object-src 'none'; form-action 'none'", }, }, minify: isProduction diff --git a/export-and-sign/webpack.security.test.js b/export-and-sign/webpack.security.test.js new file mode 100644 index 00000000..0ada5172 --- /dev/null +++ b/export-and-sign/webpack.security.test.js @@ -0,0 +1,22 @@ +const createWebpackConfig = require("./webpack.config"); + +function getContentSecurityPolicy(config) { + const htmlPlugin = config.plugins.find( + (plugin) => plugin.constructor.name === "HtmlWebpackPlugin" + ); + return htmlPlugin.userOptions.meta["Content-Security-Policy"].content; +} + +describe("webpack telemetry CSP templating", () => { + it("templates only the telemetry origin into connect-src", () => { + const config = createWebpackConfig({}, { mode: "production" }); + const contentSecurityPolicy = getContentSecurityPolicy(config); + + expect(contentSecurityPolicy).toContain( + "connect-src 'self' __TURNKEY_TELEMETRY_ORIGIN__" + ); + expect(contentSecurityPolicy).not.toContain( + "__TURNKEY_TELEMETRY_ENDPOINT__" + ); + }); +}); diff --git a/import/dist/551.bundle.3bf0db01aff38b17d9e1.js b/import/dist/551.bundle.3bf0db01aff38b17d9e1.js new file mode 100644 index 00000000..06f065c5 --- /dev/null +++ b/import/dist/551.bundle.3bf0db01aff38b17d9e1.js @@ -0,0 +1,3 @@ +/*! For license information please see 551.bundle.3bf0db01aff38b17d9e1.js.LICENSE.txt */ +"use strict";(self.webpackChunkimport=self.webpackChunkimport||[]).push([[551],{275:(e,t,r)=>{r.d(t,{Di:()=>D,FZ:()=>j,MO:()=>N,P2:()=>P,Rx:()=>H,Sb:()=>W,Tn:()=>Y,VU:()=>C,Wq:()=>$,Y$:()=>K,ZX:()=>B,Z_:()=>q,b6:()=>O,fX:()=>G,fw:()=>_,g8:()=>R,mt:()=>U,oc:()=>F,y3:()=>L});var n=r(343);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function a(){var e=f(),t=e.m(a),r=(Object.getPrototypeOf?Object.getPrototypeOf(t):t.__proto__).constructor;function n(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===r||"GeneratorFunction"===(t.displayName||t.name))}var o={throw:1,return:2,break:3,continue:3};function p(e){var t,r;return function(n){t||(t={stop:function(){return r(n.a,2)},catch:function(){return n.v},abrupt:function(e,t){return r(n.a,o[e],t)},delegateYield:function(e,o,a){return t.resultName=o,r(n.d,i(e),a)},finish:function(e){return r(n.f,e)}},r=function(e,r,o){n.p=t.prev,n.n=t.next;try{return e(r,o)}finally{t.next=n.n}}),t.resultName&&(t[t.resultName]=n.v,t.resultName=void 0),t.sent=n.v,t.next=n.n;try{return e.call(this,t)}finally{n.p=t.prev,n.n=t.next}}}return(a=function(){return{wrap:function(t,r,n,o){return e.w(p(t),r,n,o&&o.reverse())},isGeneratorFunction:n,mark:e.m,awrap:function(e,t){return new d(e,t)},AsyncIterator:l,async:function(e,t,r,o,a){return(n(t)?s:u)(p(e),t,r,o,a)},keys:c,values:i}})()}function i(e){if(null!=e){var t=e["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],r=0;if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length))return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}throw new TypeError(o(e)+" is not iterable")}function c(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}}function u(e,t,r,n,o){var a=s(e,t,r,n,o);return a.next().then(function(e){return e.done?e.value:a.next()})}function s(e,t,r,n,o){return new l(f().w(e,t,r,n),o||Promise)}function l(e,t){function r(n,o,a,i){try{var c=e[n](o),u=c.value;return u instanceof d?t.resolve(u.v).then(function(e){r("next",e,a,i)},function(e){r("throw",e,a,i)}):t.resolve(u).then(function(e){c.value=e,a(c)},function(e){return r("throw",e,a,i)})}catch(e){i(e)}}var n;this.next||(p(l.prototype),p(l.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),p(this,"_invoke",function(e,o,a){function i(){return new t(function(t,n){r(e,a,t,n)})}return n=n?n.then(i,i):i()},!0)}function f(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function a(r,n,o,a){var u=n&&n.prototype instanceof c?n:c,s=Object.create(u.prototype);return p(s,"_invoke",function(r,n,o){var a,c,u,s=0,l=o||[],f=!1,p={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,r){return a=t,c=0,u=e,p.n=r,i}};function d(r,n){for(c=r,u=n,t=0;!f&&s&&!o&&t3?(o=y===n)&&(u=a[(c=a[4])?5:(c=3,3)],a[4]=a[5]=e):a[0]<=d&&((o=r<2&&dn||n>y)&&(a[4]=r,a[5]=n,p.n=y,c=0))}if(o||r>1)return i;throw f=!0,n}return function(o,l,y){if(s>1)throw TypeError("Generator is already running");for(f&&1===l&&d(l,y),c=l,u=y;(t=c<2?e:u)||!f;){a||(c?c<3?(c>1&&(p.n=-1),d(c,u)):p.n=u:p.v=u);try{if(s=2,a){if(c||(o="next"),t=a[o]){if(!(t=t.call(a,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=a.return)&&t.call(a),c<2&&(u=TypeError("The iterator does not provide a '"+o+"' method"),c=1);a=e}else if((t=(f=p.n<0)?u:r.call(n,p))!==i)break}catch(t){a=e,c=1,u=t}finally{s=1}}return{value:t,done:f}}}(r,o,a),!0),s}var i={};function c(){}function u(){}function s(){}t=Object.getPrototypeOf;var l=[][n]?t(t([][n]())):(p(t={},n,function(){return this}),t),d=s.prototype=c.prototype=Object.create(l);function y(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,p(e,o,"GeneratorFunction")),e.prototype=Object.create(d),e}return u.prototype=s,p(d,"constructor",s),p(s,"constructor",u),u.displayName="GeneratorFunction",p(s,o,"GeneratorFunction"),p(d),p(d,o,"Generator"),p(d,n,function(){return this}),p(d,"toString",function(){return"[object Generator]"}),(f=function(){return{w:a,m:y}})()}function p(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}p=function(e,t,r,n){function a(t,r){p(e,t,function(e){return this._invoke(t,r,e)})}t?o?o(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(a("next",0),a("throw",1),a("return",2))},p(e,t,r,n)}function d(e,t){this.v=e,this.k=t}function y(e){return function(e){if(Array.isArray(e))return v(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||b(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function b(e,t){if(e){if("string"==typeof e)return v(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?v(e,t):void 0}}function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r0){var n=new Uint8Array(r).fill(0);return new Uint8Array([].concat(y(n),y(e)))}if(r<0){for(var o=-1*r,a=0,i=0;i0;){var c=r[i];a=(c=void 0===c?a:58*c+a)>>8,r[i]=c%256,i++}}var u=n.concat(r.reverse());return new Uint8Array(u)}function Y(e){return J.apply(this,arguments)}function J(){return(J=m(a().mark(function e(t){var r,n,o,i,c,u,s,l,f;return a().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!((r=H(t)).length<5)){e.next=3;break}throw new Error("invalid base58check length: expected at least 5 bytes, got ".concat(r.length));case 3:if(n=r.subarray(0,r.length-4),o=r.subarray(r.length-4),i=k()){e.next=8;break}throw new Error("WebCrypto subtle API is unavailable");case 8:return e.next=10,i.digest("SHA-256",n);case 10:return c=e.sent,u=new Uint8Array(c),e.next=14,i.digest("SHA-256",u);case 14:if(s=e.sent,l=new Uint8Array(s),f=l.subarray(0,4),0===(o[0]^f[0]|o[1]^f[1]|o[2]^f[2]|o[3]^f[3])){e.next=20;break}throw new Error("invalid base58check checksum");case 20:return e.abrupt("return",n);case 21:case"end":return e.stop()}},e)}))).apply(this,arguments)}function L(e,t){return X.apply(this,arguments)}function X(){return(X=m(a().mark(function e(t,r){var o,i,c,u,s,l,f,p,d,y,b,v,h;return a().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:e.t0=r,e.next="SOLANA"===e.t0?3:"HEXADECIMAL"===e.t0?7:"BITCOIN_MAINNET_WIF"===e.t0?10:"BITCOIN_TESTNET_WIF"===e.t0?22:"SUI_BECH32"===e.t0?34:45;break;case 3:if(64===(o=H(t)).length){e.next=6;break}throw new Error("invalid key length. Expected 64 bytes. Got ".concat(o.length,"."));case 6:return e.abrupt("return",o.subarray(0,32));case 7:if(!t.startsWith("0x")){e.next=9;break}return e.abrupt("return",$(t.slice(2)));case 9:case 48:return e.abrupt("return",$(t));case 10:return e.next=12,Y(t);case 12:if(i=e.sent,c=i[0],u=i.subarray(1),128===c){e.next=17;break}throw new Error("invalid WIF version byte: ".concat(c,". Expected 0x80 (mainnet)."));case 17:if(32!==u.length){e.next=19;break}throw new Error("uncompressed WIF keys not supported");case 19:if(33===u.length&&1===u[32]){e.next=21;break}throw new Error("invalid WIF format: expected compressed private key");case 21:return e.abrupt("return",u.subarray(0,32));case 22:return e.next=24,Y(t);case 24:if(s=e.sent,l=s[0],f=s.subarray(1),239===l){e.next=29;break}throw new Error("invalid WIF version byte: ".concat(l,". Expected 0xEF (testnet)."));case 29:if(32!==f.length){e.next=31;break}throw new Error("uncompressed WIF keys not supported");case 31:if(33===f.length&&1===f[32]){e.next=33;break}throw new Error("invalid WIF format: expected compressed private key");case 33:return e.abrupt("return",f.subarray(0,32));case 34:if(p=n.I.decode(t),d=p.prefix,y=p.words,"suiprivkey"===d){e.next=37;break}throw new Error('invalid SUI private key human-readable part (HRP): expected "suiprivkey"');case 37:if(33===(b=n.I.fromWords(y)).length){e.next=40;break}throw new Error("invalid SUI private key length: expected 33 bytes, got ".concat(b.length));case 40:if(v=b[0],h=b.slice(1),0===v){e.next=44;break}throw new Error("invalid SUI private key scheme flag: expected 0 (Ed25519). Turnkey only supports Ed25519 keys for SUI.");case 44:return e.abrupt("return",new Uint8Array(h));case 45:if(console.warn("invalid key format: ".concat(r,". Defaulting to HEXADECIMAL.")),!t.startsWith("0x")){e.next=48;break}return e.abrupt("return",$(t.slice(2)));case 49:case"end":return e.stop()}},e)}))).apply(this,arguments)}function q(e,t){var r={},n={padding:"^(\\d+(px|em|%|rem) ?){1,4}$",margin:"^(\\d+(px|em|%|rem) ?){1,4}$",borderWidth:"^(\\d+(px|em|rem) ?){1,4}$",borderStyle:"^(none|solid|dashed|dotted|double|groove|ridge|inset|outset)$",borderColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",borderRadius:"^(\\d+(px|em|%|rem) ?){1,4}$",fontSize:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax))$",fontWeight:"^(normal|bold|bolder|lighter|\\d{3})$",fontFamily:'^[^";<>]*$',color:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",labelColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",backgroundColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",width:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$",height:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$",maxWidth:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$",maxHeight:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$",lineHeight:"^(\\d+(\\.\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$",boxShadow:"^(none|(\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)) ?(inset)?)$",textAlign:"^(left|right|center|justify|initial|inherit)$",overflowWrap:"^(normal|break-word|anywhere)$",wordWrap:"^(normal|break-word)$",resize:"^(none|both|horizontal|vertical|block|inline)$"};return Object.entries(e).forEach(function(e){var t,o,a=(o=2,function(e){if(Array.isArray(e))return e}(t=e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,a,i,c=[],u=!0,s=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=a.call(r)).done)&&(c.push(n.value),c.length!==t);u=!0);}catch(e){s=!0,o=e}finally{try{if(!u&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(t,o)||b(t,o)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),i=a[0],c=a[1],u=i.trim();if(0===u.length)throw new Error("css style property cannot be empty");var s=n[u];if(!s)throw new Error('invalid or unsupported css style property: "'.concat(u,'"'));var l=new RegExp(s),f=c.trim();if(0==f.length)throw new Error('css style for "'.concat(u,'" is empty'));if(!l.test(f))throw new Error('invalid css style value for property "'.concat(u,'"'));r[u]=f}),r}},482:(e,t,r)=>{r.r(t),r.d(t,{additionalAssociatedData:()=>E,applySettings:()=>O,base58CheckDecode:()=>h,base58Decode:()=>v,decodeKey:()=>m,fromDerSignature:()=>x,getSettings:()=>f,getTargetEmbeddedKey:()=>u,loadTargetKey:()=>c,normalizePadding:()=>g,resetTargetEmbeddedKey:()=>l,sendMessageUp:()=>d,setCryptoProvider:()=>i,setParentFrameMessageChannelPort:()=>w,setSettings:()=>p,setTargetEmbeddedKey:()=>s,uint8arrayFromHexString:()=>y,uint8arrayToHexString:()=>b,validateStyles:()=>k,verifyEnclaveSignature:()=>S});var n=r(275);function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,a,i,c=[],u=!0,s=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=a.call(r)).done)&&(c.push(n.value),c.length!==t);u=!0);}catch(e){s=!0,o=e}finally{try{if(!u&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return a(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?a(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r{r.d(t,{q:()=>g});var n=r(275),o=r(255);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(){var e=p(),t=e.m(i),r=(Object.getPrototypeOf?Object.getPrototypeOf(t):t.__proto__).constructor;function n(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===r||"GeneratorFunction"===(t.displayName||t.name))}var o={throw:1,return:2,break:3,continue:3};function a(e){var t,r;return function(n){t||(t={stop:function(){return r(n.a,2)},catch:function(){return n.v},abrupt:function(e,t){return r(n.a,o[e],t)},delegateYield:function(e,o,a){return t.resultName=o,r(n.d,c(e),a)},finish:function(e){return r(n.f,e)}},r=function(e,r,o){n.p=t.prev,n.n=t.next;try{return e(r,o)}finally{t.next=n.n}}),t.resultName&&(t[t.resultName]=n.v,t.resultName=void 0),t.sent=n.v,t.next=n.n;try{return e.call(this,t)}finally{n.p=t.prev,n.n=t.next}}}return(i=function(){return{wrap:function(t,r,n,o){return e.w(a(t),r,n,o&&o.reverse())},isGeneratorFunction:n,mark:e.m,awrap:function(e,t){return new y(e,t)},AsyncIterator:f,async:function(e,t,r,o,i){return(n(t)?l:s)(a(e),t,r,o,i)},keys:u,values:c}})()}function c(e){if(null!=e){var t=e["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],r=0;if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length))return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}throw new TypeError(a(e)+" is not iterable")}function u(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}}function s(e,t,r,n,o){var a=l(e,t,r,n,o);return a.next().then(function(e){return e.done?e.value:a.next()})}function l(e,t,r,n,o){return new f(p().w(e,t,r,n),o||Promise)}function f(e,t){function r(n,o,a,i){try{var c=e[n](o),u=c.value;return u instanceof y?t.resolve(u.v).then(function(e){r("next",e,a,i)},function(e){r("throw",e,a,i)}):t.resolve(u).then(function(e){c.value=e,a(c)},function(e){return r("throw",e,a,i)})}catch(e){i(e)}}var n;this.next||(d(f.prototype),d(f.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),d(this,"_invoke",function(e,o,a){function i(){return new t(function(t,n){r(e,a,t,n)})}return n=n?n.then(i,i):i()},!0)}function p(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function a(r,n,o,a){var u=n&&n.prototype instanceof c?n:c,s=Object.create(u.prototype);return d(s,"_invoke",function(r,n,o){var a,c,u,s=0,l=o||[],f=!1,p={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,r){return a=t,c=0,u=e,p.n=r,i}};function d(r,n){for(c=r,u=n,t=0;!f&&s&&!o&&t3?(o=y===n)&&(u=a[(c=a[4])?5:(c=3,3)],a[4]=a[5]=e):a[0]<=d&&((o=r<2&&dn||n>y)&&(a[4]=r,a[5]=n,p.n=y,c=0))}if(o||r>1)return i;throw f=!0,n}return function(o,l,y){if(s>1)throw TypeError("Generator is already running");for(f&&1===l&&d(l,y),c=l,u=y;(t=c<2?e:u)||!f;){a||(c?c<3?(c>1&&(p.n=-1),d(c,u)):p.n=u:p.v=u);try{if(s=2,a){if(c||(o="next"),t=a[o]){if(!(t=t.call(a,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=a.return)&&t.call(a),c<2&&(u=TypeError("The iterator does not provide a '"+o+"' method"),c=1);a=e}else if((t=(f=p.n<0)?u:r.call(n,p))!==i)break}catch(t){a=e,c=1,u=t}finally{s=1}}return{value:t,done:f}}}(r,o,a),!0),s}var i={};function c(){}function u(){}function s(){}t=Object.getPrototypeOf;var l=[][n]?t(t([][n]())):(d(t={},n,function(){return this}),t),f=s.prototype=c.prototype=Object.create(l);function y(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,d(e,o,"GeneratorFunction")),e.prototype=Object.create(f),e}return u.prototype=s,d(f,"constructor",s),d(s,"constructor",u),u.displayName="GeneratorFunction",d(s,o,"GeneratorFunction"),d(f),d(f,o,"Generator"),d(f,n,function(){return this}),d(f,"toString",function(){return"[object Generator]"}),(p=function(){return{w:a,m:y}})()}function d(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}d=function(e,t,r,n){function a(t,r){d(e,t,function(e){return this._invoke(t,r,e)})}t?o?o(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(a("next",0),a("throw",1),a("return",2))},d(e,t,r,n)}function y(e,t){this.v=e,this.k=t}function b(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function v(e){for(var t=1;t 1;\n } else {\n return window.parent !== window.top;\n }\n}\n\n/*\n * Loads the quorum public key as a CryptoKey.\n */\nasync function loadQuorumKey(quorumPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.importKey(\n \"raw\",\n quorumPublic,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n [\"verify\"]\n );\n}\n\n/*\n * Load a key to encrypt to as a CryptoKey and return it as a JSON Web Key.\n */\nasync function loadTargetKey(targetPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const targetKey = await subtle.importKey(\n \"raw\",\n targetPublic,\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n\n return await subtle.exportKey(\"jwk\", targetKey);\n}\n\n/**\n * Throws unless the caller provided an explicit storage key. Consumers must\n * choose a key slot deliberately (e.g. scoped by parent origin); an implicit\n * global default is what enabled cross-origin bundle replay (INT-697).\n * @param {string} storageKey\n */\nfunction requireStorageKey(storageKey) {\n if (typeof storageKey !== \"string\" || storageKey.length === 0) {\n throw new Error(\"an explicit embedded key storage key is required\");\n }\n}\n\n/**\n * Creates a new public/private key pair and persists it in localStorage\n * @param {string} storageKey localStorage key used for persistence\n */\nasync function initEmbeddedKey(storageKey) {\n requireStorageKey(storageKey);\n if (isDoublyIframed()) {\n throw new Error(\"Doubly iframed\");\n }\n const retrievedKey = await getEmbeddedKey(storageKey);\n if (retrievedKey === null) {\n const targetKey = await generateTargetKey();\n setEmbeddedKey(targetKey, storageKey);\n }\n // Nothing to do, key is correctly initialized!\n}\n\n/*\n * Generate a key to encrypt to and export it as a JSON Web Key.\n */\nasync function generateTargetKey() {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const p256key = await subtle.generateKey(\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n [\"deriveBits\"]\n );\n\n return await subtle.exportKey(\"jwk\", p256key.privateKey);\n}\n\n/**\n * Gets the current embedded private key JWK. Returns `null` if not found.\n * @param {string} storageKey localStorage key used for persistence\n */\nfunction getEmbeddedKey(storageKey) {\n requireStorageKey(storageKey);\n const jwtKey = getItemWithExpiry(storageKey);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the embedded private key JWK with the default expiration time.\n * @param {JsonWebKey} targetKey\n * @param {string} storageKey localStorage key used for persistence\n */\nfunction setEmbeddedKey(targetKey, storageKey) {\n requireStorageKey(storageKey);\n setItemWithExpiry(\n storageKey,\n JSON.stringify(targetKey),\n TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS\n );\n}\n\n/**\n * Gets the current target embedded private key JWK. Returns `null` if not found.\n */\nfunction getTargetEmbeddedKey() {\n const jwtKey = window.localStorage.getItem(TURNKEY_TARGET_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the target embedded public key JWK.\n * @param {JsonWebKey} targetKey\n */\nfunction setTargetEmbeddedKey(targetKey) {\n window.localStorage.setItem(\n TURNKEY_TARGET_EMBEDDED_KEY,\n JSON.stringify(targetKey)\n );\n}\n\n/**\n * Resets the current embedded private key JWK.\n * @param {string} storageKey localStorage key used for persistence\n */\nfunction onResetEmbeddedKey(storageKey) {\n requireStorageKey(storageKey);\n window.localStorage.removeItem(storageKey);\n}\n\n/**\n * Resets the current target embedded private key JWK.\n */\nfunction resetTargetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_TARGET_EMBEDDED_KEY);\n}\n\nfunction setParentFrameMessageChannelPort(port) {\n parentFrameMessageChannelPort = port;\n}\n\n/**\n * Restricts direct window.parent postMessages to the given origin. Used by\n * the legacy (< 2.1.0 iframe-stamper) path once the parent origin is bound,\n * so responses are only readable by that origin.\n * @param {string} origin\n */\nfunction setParentFrameOrigin(origin) {\n if (typeof origin !== \"string\" || origin.length === 0) {\n throw new Error(\"a canonical, non-opaque parent frame origin is required\");\n }\n\n let parsedOrigin;\n try {\n parsedOrigin = new URL(origin).origin;\n } catch {\n throw new Error(\"a canonical, non-opaque parent frame origin is required\");\n }\n\n if (parsedOrigin === \"null\" || parsedOrigin !== origin) {\n throw new Error(\"a canonical, non-opaque parent frame origin is required\");\n }\n parentFrameTargetOrigin = parsedOrigin;\n}\n\n/**\n * Gets the current settings.\n */\nfunction getSettings() {\n const settings = window.localStorage.getItem(TURNKEY_SETTINGS);\n return settings ? JSON.parse(settings) : null;\n}\n\n/**\n * Sets the settings object.\n * @param {Object} settings\n */\nfunction setSettings(settings) {\n window.localStorage.setItem(TURNKEY_SETTINGS, JSON.stringify(settings));\n}\n\n/**\n * Set an item in localStorage with an expiration time\n * @param {string} key\n * @param {string} value\n * @param {number} ttl expiration time in milliseconds\n */\nfunction setItemWithExpiry(key, value, ttl) {\n const now = new Date();\n const item = {\n value: value,\n expiry: now.getTime() + ttl,\n };\n window.localStorage.setItem(key, JSON.stringify(item));\n}\n\n/**\n * Get an item from localStorage. Returns `null` and\n * removes the item from localStorage if expired or\n * expiry time is missing.\n * @param {string} key\n */\nfunction getItemWithExpiry(key) {\n const itemStr = window.localStorage.getItem(key);\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n if (\n !Object.prototype.hasOwnProperty.call(item, \"expiry\") ||\n !Object.prototype.hasOwnProperty.call(item, \"value\")\n ) {\n window.localStorage.removeItem(key);\n return null;\n }\n const now = new Date();\n if (now.getTime() > item.expiry) {\n window.localStorage.removeItem(key);\n return null;\n }\n return item.value;\n}\n\n/**\n * Takes a hex string (e.g. \"e4567ab\" or \"0xe4567ab\") and returns an array buffer (Uint8Array)\n * @param {string} hexString - Hex string with or without \"0x\" prefix\n * @returns {Uint8Array}\n */\nfunction uint8arrayFromHexString(hexString) {\n if (!hexString || typeof hexString !== \"string\") {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n\n // Remove 0x prefix if present\n const hexWithoutPrefix =\n hexString.startsWith(\"0x\") || hexString.startsWith(\"0X\")\n ? hexString.slice(2)\n : hexString;\n\n var hexRegex = /^[0-9A-Fa-f]+$/;\n if (hexWithoutPrefix.length % 2 != 0 || !hexRegex.test(hexWithoutPrefix)) {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n return new Uint8Array(\n hexWithoutPrefix.match(/../g).map((h) => parseInt(h, 16))\n );\n}\n\n/**\n * Takes a Uint8Array and returns a hex string\n * @param {Uint8Array} buffer\n * @return {string}\n */\nfunction uint8arrayToHexString(buffer) {\n return [...buffer].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n/**\n * Function to normalize padding of byte array with 0's to a target length\n */\nfunction normalizePadding(byteArray, targetLength) {\n const paddingLength = targetLength - byteArray.length;\n\n // Add leading 0's to array\n if (paddingLength > 0) {\n const padding = new Uint8Array(paddingLength).fill(0);\n return new Uint8Array([...padding, ...byteArray]);\n }\n\n // Remove leading 0's from array\n if (paddingLength < 0) {\n const expectedZeroCount = paddingLength * -1;\n let zeroCount = 0;\n for (let i = 0; i < expectedZeroCount && i < byteArray.length; i++) {\n if (byteArray[i] === 0) {\n zeroCount++;\n }\n }\n // Check if the number of zeros found equals the number of zeroes expected\n if (zeroCount !== expectedZeroCount) {\n throw new Error(\n `invalid number of starting zeroes. Expected number of zeroes: ${expectedZeroCount}. Found: ${zeroCount}.`\n );\n }\n return byteArray.slice(expectedZeroCount, expectedZeroCount + targetLength);\n }\n return byteArray;\n}\n\n/**\n * Additional Associated Data (AAD) in the format dictated by the enclave_encrypt crate.\n */\nfunction additionalAssociatedData(senderPubBuf, receiverPubBuf) {\n const s = Array.from(new Uint8Array(senderPubBuf));\n const r = Array.from(new Uint8Array(receiverPubBuf));\n return new Uint8Array([...s, ...r]);\n}\n\n/**\n * Converts an ASN.1 DER-encoded ECDSA signature to the raw format that WebCrypto uses.\n */\nfunction fromDerSignature(derSignature) {\n const derSignatureBuf = uint8arrayFromHexString(derSignature);\n\n // Check and skip the sequence tag (0x30)\n let index = 2;\n\n // Parse 'r' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for r\"\n );\n }\n index++; // Move past the INTEGER tag\n const rLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const r = derSignatureBuf.slice(index, index + rLength);\n index += rLength; // Move to the start of s\n\n // Parse 's' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for s\"\n );\n }\n index++; // Move past the INTEGER tag\n const sLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const s = derSignatureBuf.slice(index, index + sLength);\n\n // Normalize 'r' and 's' to 32 bytes each\n const rPadded = normalizePadding(r, 32);\n const sPadded = normalizePadding(s, 32);\n\n // Concatenate and return the raw signature\n return new Uint8Array([...rPadded, ...sPadded]);\n}\n\n/**\n * Function to verify enclave signature on import bundle received from the server.\n * @param {string} enclaveQuorumPublic uncompressed public key for the quorum key which produced the signature\n * @param {string} publicSignature signature bytes encoded as a hexadecimal string\n * @param {string} signedData signed bytes encoded as a hexadecimal string. This could be public key bytes directly, or JSON-encoded bytes\n */\nasync function verifyEnclaveSignature(\n enclaveQuorumPublic,\n publicSignature,\n signedData\n) {\n /** Turnkey Signer enclave's public keys */\n const TURNKEY_SIGNERS_ENCLAVES = {\n prod: \"04cf288fe433cc4e1aa0ce1632feac4ea26bf2f5a09dcfe5a42c398e06898710330f0572882f4dbdf0f5304b8fc8703acd69adca9a4bbf7f5d00d20a5e364b2569\",\n preprod:\n \"04f3422b8afbe425d6ece77b8d2469954715a2ff273ab7ac89f1ed70e0a9325eaa1698b4351fd1b23734e65c0b6a86b62dd49d70b37c94606aac402cbd84353212\",\n dev: \"048cf9ed5f579298cc1571823a3222b82d80c529c551f6070fbe712ae1a9e8d1a23b7006e306d27190358dfcd9c44624918a00f23c920a33cb14f5b026eafc865d\",\n };\n\n // Use window.__TURNKEY_SIGNER_ENVIRONMENT__ if available (for testing), otherwise use the webpack replacement\n const environment =\n (typeof window !== \"undefined\" && window.__TURNKEY_SIGNER_ENVIRONMENT__) ||\n \"__TURNKEY_SIGNER_ENVIRONMENT__\";\n const TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY =\n TURNKEY_SIGNERS_ENCLAVES[environment];\n\n if (TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY === undefined) {\n throw new Error(\n `Configuration error: TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY is undefined`\n );\n }\n\n // todo(olivia): throw error if enclave quorum public is null once server changes are deployed\n if (enclaveQuorumPublic) {\n if (enclaveQuorumPublic !== TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY) {\n throw new Error(\n `enclave quorum public keys from client and bundle do not match. Client: ${TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY}. Bundle: ${enclaveQuorumPublic}.`\n );\n }\n }\n\n const encryptionQuorumPublicBuf = new Uint8Array(\n uint8arrayFromHexString(TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY)\n );\n const quorumKey = await loadQuorumKey(encryptionQuorumPublicBuf);\n if (!quorumKey) {\n throw new Error(\"failed to load quorum key\");\n }\n\n // The ECDSA signature is ASN.1 DER encoded but WebCrypto uses raw format\n const publicSignatureBuf = fromDerSignature(publicSignature);\n const signedDataBuf = uint8arrayFromHexString(signedData);\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.verify(\n { name: \"ECDSA\", hash: \"SHA-256\" },\n quorumKey,\n publicSignatureBuf,\n signedDataBuf\n );\n}\n\n/**\n * Function to send a message.\n *\n * If this page is embedded as an iframe we'll send a postMessage\n * in one of two ways depending on the version of @turnkey/iframe-stamper:\n * 1. newer versions (>=v2.1.0) pass a MessageChannel MessagePort from the parent frame for postMessages.\n * 2. older versions ( 0) {\n digits.push(carry % 58);\n carry = (carry / 58) | 0;\n }\n }\n // Convert digits to a base58 string\n for (let k = 0; k < digits.length; k++) {\n result = alphabet[digits[k]] + result;\n }\n\n // Add '1' for each leading 0 byte\n for (let i = 0; bytes[i] === 0 && i < bytes.length - 1; i++) {\n result = \"1\" + result;\n }\n return result;\n}\n\n/**\n * Decodes a base58-encoded string into a buffer\n * This function throws an error when the string contains invalid characters.\n * @param {string} s The base58-encoded string.\n * @return {Uint8Array} The decoded buffer.\n */\nfunction base58Decode(s) {\n // See https://en.bitcoin.it/wiki/Base58Check_encoding\n var alphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\n var decodedBytes = [];\n var leadingZeros = [];\n for (var i = 0; i < s.length; i++) {\n if (alphabet.indexOf(s[i]) === -1) {\n throw new Error(`cannot base58-decode: ${s[i]} isn't a valid character`);\n }\n var carry = alphabet.indexOf(s[i]);\n\n // If the current base58 digit is 0, append a 0 byte.\n // \"i == leadingZeros.length\" can only be true if we have not seen non-zero bytes so far.\n // If we had seen a non-zero byte, carry wouldn't be 0, and i would be strictly more than `leadingZeros.length`\n if (carry == 0 && i === leadingZeros.length) {\n leadingZeros.push(0);\n }\n\n var j = 0;\n while (j < decodedBytes.length || carry > 0) {\n var currentByte = decodedBytes[j];\n\n // shift the current byte 58 units and add the carry amount\n // (or just add the carry amount if this is a new byte -- undefined case)\n if (currentByte === undefined) {\n currentByte = carry;\n } else {\n currentByte = currentByte * 58 + carry;\n }\n\n // find the new carry amount (1-byte shift of current byte value)\n carry = currentByte >> 8;\n // reset the current byte to the remainder (the carry amount will pass on the overflow)\n decodedBytes[j] = currentByte % 256;\n j++;\n }\n }\n\n var result = leadingZeros.concat(decodedBytes.reverse());\n return new Uint8Array(result);\n}\n\n/**\n * Decodes a base58check-encoded string and verifies the checksum.\n * Base58Check encoding includes a 4-byte checksum at the end to detect errors.\n * The checksum is the first 4 bytes of SHA256(SHA256(payload)).\n * This function throws an error if the checksum is invalid.\n * @param {string} s The base58check-encoded string.\n * @return {Promise} The decoded payload (without checksum).\n */\nasync function base58CheckDecode(s) {\n const decoded = base58Decode(s);\n\n if (decoded.length < 5) {\n throw new Error(\n `invalid base58check length: expected at least 5 bytes, got ${decoded.length}`\n );\n }\n\n const payload = decoded.subarray(0, decoded.length - 4);\n const checksum = decoded.subarray(decoded.length - 4);\n\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n\n // Compute double SHA256 hash\n const hash1Buf = await subtle.digest(\"SHA-256\", payload);\n const hash1 = new Uint8Array(hash1Buf);\n const hash2Buf = await subtle.digest(\"SHA-256\", hash1);\n const hash2 = new Uint8Array(hash2Buf);\n const computedChecksum = hash2.subarray(0, 4);\n\n // Verify checksum\n const mismatch =\n (checksum[0] ^ computedChecksum[0]) |\n (checksum[1] ^ computedChecksum[1]) |\n (checksum[2] ^ computedChecksum[2]) |\n (checksum[3] ^ computedChecksum[3]);\n if (mismatch !== 0) {\n throw new Error(\"invalid base58check checksum\");\n }\n\n return payload;\n}\n\n/**\n * Returns private key bytes from a private key, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {string} privateKey\n * @param {string} keyFormat Can be \"HEXADECIMAL\", \"SUI_BECH32\", \"BITCOIN_MAINNET_WIF\", \"BITCOIN_TESTNET_WIF\" or \"SOLANA\"\n * @return {Promise}\n */\nasync function decodeKey(privateKey, keyFormat) {\n switch (keyFormat) {\n case \"SOLANA\": {\n const decodedKeyBytes = base58Decode(privateKey);\n if (decodedKeyBytes.length !== 64) {\n throw new Error(\n `invalid key length. Expected 64 bytes. Got ${decodedKeyBytes.length}.`\n );\n }\n return decodedKeyBytes.subarray(0, 32);\n }\n case \"HEXADECIMAL\":\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n case \"BITCOIN_MAINNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0x80 = mainnet\n if (version !== 0x80) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0x80 (mainnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"BITCOIN_TESTNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0xEF = testnet\n if (version !== 0xef) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0xEF (testnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"SUI_BECH32\": {\n const { prefix, words } = bech32.decode(privateKey);\n\n if (prefix !== \"suiprivkey\") {\n throw new Error(\n `invalid SUI private key human-readable part (HRP): expected \"suiprivkey\"`\n );\n }\n\n const bytes = bech32.fromWords(words);\n if (bytes.length !== 33) {\n throw new Error(\n `invalid SUI private key length: expected 33 bytes, got ${bytes.length}`\n );\n }\n\n const schemeFlag = bytes[0];\n const privkey = bytes.slice(1);\n\n // schemeFlag = 0 is Ed25519; We currently only support Ed25519 keys for SUI.\n if (schemeFlag !== 0) {\n throw new Error(\n `invalid SUI private key scheme flag: expected 0 (Ed25519). Turnkey only supports Ed25519 keys for SUI.`\n );\n }\n\n return new Uint8Array(privkey);\n }\n default:\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n }\n}\n\n/**\n * Returns a private key from private key bytes, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {Uint8Array} privateKeyBytes\n * @param {string} keyFormat Can be \"HEXADECIMAL\" or \"SOLANA\"\n */\nasync function encodeKey(privateKeyBytes, keyFormat, publicKeyBytes) {\n switch (keyFormat) {\n case \"SOLANA\":\n if (!publicKeyBytes) {\n throw new Error(\"public key must be specified for SOLANA key format\");\n }\n if (privateKeyBytes.length !== 32) {\n throw new Error(\n `invalid private key length. Expected 32 bytes. Got ${privateKeyBytes.length}.`\n );\n }\n if (publicKeyBytes.length !== 32) {\n throw new Error(\n `invalid public key length. Expected 32 bytes. Got ${publicKeyBytes.length}.`\n );\n }\n {\n const concatenatedBytes = new Uint8Array(64);\n concatenatedBytes.set(privateKeyBytes, 0);\n concatenatedBytes.set(publicKeyBytes, 32);\n return base58Encode(concatenatedBytes);\n }\n case \"HEXADECIMAL\":\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n default:\n // keeping console.warn for debugging purposes.\n // eslint-disable-next-line no-console\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n }\n}\n\n// Helper to parse a private key into a Solana base58 private key.\n// To be used if a wallet account is exported without the `SOLANA` address format.\nfunction parsePrivateKey(privateKey) {\n if (Array.isArray(privateKey)) {\n return new Uint8Array(privateKey);\n }\n\n if (typeof privateKey === \"string\") {\n // Remove 0x prefix if present\n if (privateKey.startsWith(\"0x\")) {\n privateKey = privateKey.slice(2);\n }\n\n // Check if it's hex-formatted correctly (i.e. 64 hex chars)\n if (privateKey.length === 64 && /^[0-9a-fA-F]+$/.test(privateKey)) {\n return uint8arrayFromHexString(privateKey);\n }\n\n // Otherwise assume it's base58 format (for Solana)\n try {\n return base58Decode(privateKey);\n } catch (error) {\n throw new Error(\n \"Invalid private key format. Use hex (64 chars) or base58 format.\"\n );\n }\n }\n\n throw new Error(\"Private key must be a string (hex/base58) or number array\");\n}\n\n/**\n * Function to validate and sanitize the styles object using the accepted map of style keys and values (as regular expressions).\n * Any invalid style throws an error. Returns an object of valid styles.\n * @param {Object} styles\n * @param {HTMLElement} element - Optional element parameter (for import frame)\n * @return {Object}\n */\nfunction validateStyles(styles, element) {\n const validStyles = {};\n\n const cssValidationRegex = {\n padding: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n margin: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n borderWidth: \"^(\\\\d+(px|em|rem) ?){1,4}$\",\n borderStyle:\n \"^(none|solid|dashed|dotted|double|groove|ridge|inset|outset)$\",\n borderColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n borderRadius: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n fontSize: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax))$\",\n fontWeight: \"^(normal|bold|bolder|lighter|\\\\d{3})$\",\n fontFamily: '^[^\";<>]*$', // checks for the absence of some characters that could lead to CSS/HTML injection\n color:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n labelColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n backgroundColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n width: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n height: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n maxWidth: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n maxHeight:\n \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n lineHeight:\n \"^(\\\\d+(\\\\.\\\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$\",\n boxShadow:\n \"^(none|(\\\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)) ?(inset)?)$\",\n textAlign: \"^(left|right|center|justify|initial|inherit)$\",\n overflowWrap: \"^(normal|break-word|anywhere)$\",\n wordWrap: \"^(normal|break-word)$\",\n resize: \"^(none|both|horizontal|vertical|block|inline)$\",\n };\n\n Object.entries(styles).forEach(([property, value]) => {\n const styleProperty = property.trim();\n if (styleProperty.length === 0) {\n throw new Error(\"css style property cannot be empty\");\n }\n const styleRegexStr = cssValidationRegex[styleProperty];\n if (!styleRegexStr) {\n throw new Error(\n `invalid or unsupported css style property: \"${styleProperty}\"`\n );\n }\n const styleRegex = new RegExp(styleRegexStr);\n const styleValue = value.trim();\n if (styleValue.length == 0) {\n throw new Error(`css style for \"${styleProperty}\" is empty`);\n }\n const isValidStyle = styleRegex.test(styleValue);\n if (!isValidStyle) {\n throw new Error(\n `invalid css style value for property \"${styleProperty}\"`\n );\n }\n validStyles[styleProperty] = styleValue;\n });\n\n return validStyles;\n}\n\n// Export all shared functions\nexport {\n setCryptoProvider,\n getSubtleCrypto,\n isDoublyIframed,\n loadQuorumKey,\n loadTargetKey,\n initEmbeddedKey,\n generateTargetKey,\n getEmbeddedKey,\n setEmbeddedKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n onResetEmbeddedKey,\n resetTargetEmbeddedKey,\n setParentFrameMessageChannelPort,\n setParentFrameOrigin,\n getSettings,\n setSettings,\n setItemWithExpiry,\n getItemWithExpiry,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n normalizePadding,\n additionalAssociatedData,\n fromDerSignature,\n verifyEnclaveSignature,\n sendMessageUp,\n logMessage,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n base58CheckDecode,\n decodeKey,\n encodeKey,\n parsePrivateKey,\n validateStyles,\n};\n","import * as SharedTKHQ from \"@shared/turnkey-core.js\";\n\nconst {\n setCryptoProvider,\n loadTargetKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n resetTargetEmbeddedKey,\n getSettings,\n setSettings,\n sendMessageUp,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n base58Decode,\n base58CheckDecode,\n decodeKey,\n setParentFrameMessageChannelPort,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n validateStyles,\n} = SharedTKHQ;\n\n/**\n * Function to apply settings on this page. For now, the only settings that can be applied\n * are for \"styles\". Upon successful application, return the valid, sanitized settings JSON string.\n * @param {string} settings\n * @return {string}\n */\nfunction applySettings(settings) {\n const validSettings = {};\n const settingsObj = JSON.parse(settings);\n\n const passphraseLabel = document.getElementById(\"passphrase-label\");\n const mnemonicLabel = document.getElementById(\"mnemonic-label\");\n const passphraseTextarea = document.getElementById(\"passphrase\");\n\n if (!passphraseLabel || !passphraseTextarea) {\n throw new Error(\"no passphrase HTML elements found to apply settings to.\");\n }\n const plaintextTextarea = document.getElementById(\"plaintext\");\n if (!plaintextTextarea) {\n throw new Error(\n \"no plaintext textarea HTML element found to apply settings to.\"\n );\n }\n\n // Apply enablePassphrase setting\n if (settingsObj.enablePassphrase === true) {\n passphraseLabel.style.display = \"inline-block\";\n passphraseTextarea.style.display = \"inline-block\";\n passphraseTextarea.style.border = \"solid 1px #ccc\";\n passphraseTextarea.style.borderRadius = \"4px\";\n\n mnemonicLabel.style.display = \"inline-block\";\n plaintextTextarea.style.border = \"solid 1px #ccc\";\n plaintextTextarea.style.borderRadius = \"4px\";\n\n validSettings[\"enablePassphrase\"] = true;\n } else {\n passphraseLabel.style.display = \"none\";\n passphraseTextarea.style.display = \"none\";\n mnemonicLabel.style.display = \"none\";\n\n plaintextTextarea.style.border = \"none\";\n validSettings[\"enablePassphrase\"] = false;\n }\n\n if (settingsObj.styles) {\n // Validate, sanitize, and apply the styles to the \"plaintext\" textarea.\n const validStyles = validateStyles(settingsObj.styles);\n Object.entries(validStyles).forEach(([key, value]) => {\n plaintextTextarea.style[key] = value;\n });\n\n if (validStyles.backgroundColor) {\n // Apply background color to document and body as well.\n document.documentElement.style.backgroundColor =\n validStyles.backgroundColor;\n document.body.style.backgroundColor = validStyles.backgroundColor;\n }\n\n if (validStyles.labelColor) {\n document.getElementById(\"mnemonic-label\").style.color =\n validStyles.labelColor;\n }\n\n validSettings[\"styles\"] = validStyles;\n }\n\n if (settingsObj.passphraseStyles) {\n // Validate, sanitize, and apply the styles to the \"passphrase\" textarea.\n const validStyles = validateStyles(settingsObj.passphraseStyles);\n Object.entries(validStyles).forEach(([key, value]) => {\n passphraseTextarea.style[key] = value;\n });\n\n if (validStyles.labelColor) {\n document.getElementById(\"passphrase-label\").style.color =\n validStyles.labelColor;\n }\n\n validSettings[\"passphraseStyles\"] = validStyles;\n }\n\n return JSON.stringify(validSettings);\n}\n\nexport {\n setCryptoProvider,\n loadTargetKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n resetTargetEmbeddedKey,\n getSettings,\n setSettings,\n sendMessageUp,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n base58Decode,\n base58CheckDecode,\n decodeKey,\n setParentFrameMessageChannelPort,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n validateStyles,\n applySettings,\n};\n","/**\n * Crypto Utilities - Shared\n * Contains HPKE encryption and decryption functions\n */\n\nimport {\n p256JWKPrivateToPublic,\n additionalAssociatedData,\n uint8arrayToHexString,\n} from \"./turnkey-core.js\";\nimport {\n CipherSuite,\n DhkemP256HkdfSha256,\n HkdfSha256,\n Aes256Gcm,\n} from \"@hpke/core\";\n\n// Pre-compute const (for perf)\nconst TURNKEY_HPKE_INFO = new TextEncoder().encode(\"turnkey_hpke\");\n\n/**\n * Decrypt the ciphertext (ArrayBuffer) given an encapsulation key (ArrayBuffer)\n * and the receivers private key (JSON Web Key).\n */\nexport async function HpkeDecrypt({\n ciphertextBuf,\n encappedKeyBuf,\n receiverPrivJwk,\n}) {\n const kemContext = new DhkemP256HkdfSha256();\n var receiverPriv = await kemContext.importKey(\n \"jwk\",\n { ...receiverPrivJwk },\n false\n );\n\n var suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n var recipientCtx = await suite.createRecipientContext({\n recipientKey: receiverPriv,\n enc: encappedKeyBuf,\n info: TURNKEY_HPKE_INFO,\n });\n\n var receiverPubBuf = await p256JWKPrivateToPublic(receiverPrivJwk);\n var aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n var res;\n try {\n res = await recipientCtx.open(ciphertextBuf, aad);\n } catch (e) {\n throw new Error(\n \"unable to decrypt bundle using embedded key. the bundle may be incorrect. failed with error: \" +\n e.toString()\n );\n }\n return res;\n}\n\n/**\n * Encrypt plaintext using HPKE with the receiver's public key.\n * @param {Object} params\n * @param {Uint8Array} params.plaintextBuf - Plaintext to encrypt\n * @param {JsonWebKey} params.receiverPubJwk - Receiver's public key in JWK format\n * @returns {Promise} JSON stringified encrypted bundle with encappedPublic and ciphertext\n */\nexport async function HpkeEncrypt({ plaintextBuf, receiverPubJwk }) {\n const kemContext = new DhkemP256HkdfSha256();\n const receiverPub = await kemContext.importKey(\n \"jwk\",\n { ...receiverPubJwk },\n true\n );\n\n const suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n const senderCtx = await suite.createSenderContext({\n recipientPublicKey: receiverPub,\n info: TURNKEY_HPKE_INFO,\n });\n\n // Need to import the key again as a JWK to export as a raw key, the format needed to\n // create the aad with the newly generated raw encapped key.\n const receiverPubCryptoKey = await crypto.subtle.importKey(\n \"jwk\",\n receiverPubJwk,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n const receiverPubRaw = await crypto.subtle.exportKey(\n \"raw\",\n receiverPubCryptoKey\n );\n const receiverPubBuf = new Uint8Array(receiverPubRaw);\n\n const encappedKeyBuf = new Uint8Array(senderCtx.enc);\n\n const aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n\n var ciphertextBuf;\n try {\n ciphertextBuf = await senderCtx.seal(plaintextBuf, aad);\n } catch (e) {\n throw new Error(\"failed to encrypt import bundle: \" + e.toString());\n }\n\n const ciphertextHex = uint8arrayToHexString(new Uint8Array(ciphertextBuf));\n const encappedKeyBufHex = uint8arrayToHexString(encappedKeyBuf);\n const encryptedBundle = JSON.stringify({\n encappedPublic: encappedKeyBufHex,\n ciphertext: ciphertextHex,\n });\n return encryptedBundle;\n}\n"],"names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_invoke","enumerable","configurable","writable","_OverloadYield","k","_toConsumableArray","Array","isArray","_arrayLikeToArray","_arrayWithoutHoles","from","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","toString","slice","constructor","name","test","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","TURNKEY_TARGET_EMBEDDED_KEY","TURNKEY_SETTINGS","parentFrameMessageChannelPort","parentFrameTargetOrigin","cryptoProviderOverride","getSubtleCrypto","subtle","globalThis","crypto","window","global","setCryptoProvider","cryptoProvider","loadQuorumKey","_x","_loadQuorumKey","_regeneratorRuntime","mark","_callee","quorumPublic","wrap","_context","prev","next","Error","importKey","namedCurve","abrupt","sent","stop","loadTargetKey","_x2","_loadTargetKey","_callee2","targetPublic","targetKey","_context2","exportKey","getTargetEmbeddedKey","jwtKey","localStorage","getItem","JSON","parse","setTargetEmbeddedKey","setItem","stringify","resetTargetEmbeddedKey","removeItem","setParentFrameMessageChannelPort","port","getSettings","settings","setSettings","uint8arrayFromHexString","hexString","hexWithoutPrefix","startsWith","Uint8Array","match","map","h","parseInt","uint8arrayToHexString","buffer","x","padStart","join","normalizePadding","byteArray","targetLength","paddingLength","padding","fill","concat","expectedZeroCount","zeroCount","additionalAssociatedData","senderPubBuf","receiverPubBuf","s","fromDerSignature","derSignature","derSignatureBuf","index","rLength","sLength","rPadded","sPadded","verifyEnclaveSignature","_x4","_x5","_x6","_verifyEnclaveSignature","_callee5","enclaveQuorumPublic","publicSignature","signedData","TURNKEY_SIGNERS_ENCLAVES","environment","TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY","encryptionQuorumPublicBuf","quorumKey","publicSignatureBuf","signedDataBuf","_context5","prod","preprod","dev","__TURNKEY_SIGNER_ENVIRONMENT__","undefined","verify","hash","sendMessageUp","type","requestId","message","postMessage","parent","content","messageLog","document","getElementById","createElement","innerText","appendChild","logMessage","base58Decode","alphabet","decodedBytes","leadingZeros","indexOf","carry","push","j","currentByte","result","reverse","base58CheckDecode","_x8","_base58CheckDecode","_callee7","decoded","payload","checksum","hash1Buf","hash1","hash2Buf","hash2","computedChecksum","_context7","subarray","digest","decodeKey","_x9","_x10","_decodeKey","_callee8","privateKey","keyFormat","decodedKeyBytes","version","keyAndFlags","_payload","_version","_keyAndFlags","_bech32$decode","prefix","words","bytes","schemeFlag","privkey","_context8","t0","bech32","decode","fromWords","console","warn","validateStyles","styles","element","validStyles","cssValidationRegex","margin","borderWidth","borderStyle","borderColor","borderRadius","fontSize","fontWeight","fontFamily","color","labelColor","backgroundColor","width","height","maxWidth","maxHeight","lineHeight","boxShadow","textAlign","overflowWrap","wordWrap","resize","entries","forEach","_ref","_ref2","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","property","styleProperty","trim","styleRegexStr","styleRegex","RegExp","styleValue","SharedTKHQ","applySettings","validSettings","settingsObj","passphraseLabel","mnemonicLabel","passphraseTextarea","plaintextTextarea","enablePassphrase","style","display","border","_slicedToArray","key","documentElement","body","passphraseStyles","_ref3","_ref4","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","_objectSpread","_defineProperty","getOwnPropertyDescriptors","defineProperties","_typeof","toPrimitive","String","_toPrimitive","_toPropertyKey","TURNKEY_HPKE_INFO","TextEncoder","encode","HpkeEncrypt","_HpkeEncrypt","plaintextBuf","receiverPubJwk","kemContext","receiverPub","suite","senderCtx","receiverPubCryptoKey","receiverPubRaw","encappedKeyBuf","aad","ciphertextBuf","ciphertextHex","encappedKeyBufHex","encryptedBundle","DhkemP256HkdfSha256","CipherSuite","kem","kdf","HkdfSha256","aead","Aes256Gcm","createSenderContext","recipientPublicKey","info","enc","seal","encappedPublic","ciphertext"],"sourceRoot":""} \ No newline at end of file diff --git a/import/dist/551.bundle.49402ee939a00be74d76.js b/import/dist/551.bundle.49402ee939a00be74d76.js deleted file mode 100644 index b6d7a0ef..00000000 --- a/import/dist/551.bundle.49402ee939a00be74d76.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see 551.bundle.49402ee939a00be74d76.js.LICENSE.txt */ -"use strict";(self.webpackChunkimport=self.webpackChunkimport||[]).push([[551],{275:(e,t,r)=>{r.d(t,{Di:()=>$,FZ:()=>A,MO:()=>_,P2:()=>T,Rx:()=>B,Sb:()=>G,Tn:()=>H,VU:()=>N,Wq:()=>F,Y$:()=>R,ZX:()=>M,Z_:()=>X,b6:()=>k,fX:()=>D,fw:()=>P,g8:()=>W,mt:()=>C,oc:()=>U,y3:()=>J});var n=r(343);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function a(){var e=f(),t=e.m(a),r=(Object.getPrototypeOf?Object.getPrototypeOf(t):t.__proto__).constructor;function n(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===r||"GeneratorFunction"===(t.displayName||t.name))}var o={throw:1,return:2,break:3,continue:3};function p(e){var t,r;return function(n){t||(t={stop:function(){return r(n.a,2)},catch:function(){return n.v},abrupt:function(e,t){return r(n.a,o[e],t)},delegateYield:function(e,o,a){return t.resultName=o,r(n.d,i(e),a)},finish:function(e){return r(n.f,e)}},r=function(e,r,o){n.p=t.prev,n.n=t.next;try{return e(r,o)}finally{t.next=n.n}}),t.resultName&&(t[t.resultName]=n.v,t.resultName=void 0),t.sent=n.v,t.next=n.n;try{return e.call(this,t)}finally{n.p=t.prev,n.n=t.next}}}return(a=function(){return{wrap:function(t,r,n,o){return e.w(p(t),r,n,o&&o.reverse())},isGeneratorFunction:n,mark:e.m,awrap:function(e,t){return new d(e,t)},AsyncIterator:s,async:function(e,t,r,o,a){return(n(t)?l:u)(p(e),t,r,o,a)},keys:c,values:i}})()}function i(e){if(null!=e){var t=e["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],r=0;if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length))return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}throw new TypeError(o(e)+" is not iterable")}function c(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}}function u(e,t,r,n,o){var a=l(e,t,r,n,o);return a.next().then(function(e){return e.done?e.value:a.next()})}function l(e,t,r,n,o){return new s(f().w(e,t,r,n),o||Promise)}function s(e,t){function r(n,o,a,i){try{var c=e[n](o),u=c.value;return u instanceof d?t.resolve(u.v).then(function(e){r("next",e,a,i)},function(e){r("throw",e,a,i)}):t.resolve(u).then(function(e){c.value=e,a(c)},function(e){return r("throw",e,a,i)})}catch(e){i(e)}}var n;this.next||(p(s.prototype),p(s.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),p(this,"_invoke",function(e,o,a){function i(){return new t(function(t,n){r(e,a,t,n)})}return n=n?n.then(i,i):i()},!0)}function f(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function a(r,n,o,a){var u=n&&n.prototype instanceof c?n:c,l=Object.create(u.prototype);return p(l,"_invoke",function(r,n,o){var a,c,u,l=0,s=o||[],f=!1,p={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,r){return a=t,c=0,u=e,p.n=r,i}};function d(r,n){for(c=r,u=n,t=0;!f&&l&&!o&&t3?(o=y===n)&&(u=a[(c=a[4])?5:(c=3,3)],a[4]=a[5]=e):a[0]<=d&&((o=r<2&&dn||n>y)&&(a[4]=r,a[5]=n,p.n=y,c=0))}if(o||r>1)return i;throw f=!0,n}return function(o,s,y){if(l>1)throw TypeError("Generator is already running");for(f&&1===s&&d(s,y),c=s,u=y;(t=c<2?e:u)||!f;){a||(c?c<3?(c>1&&(p.n=-1),d(c,u)):p.n=u:p.v=u);try{if(l=2,a){if(c||(o="next"),t=a[o]){if(!(t=t.call(a,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=a.return)&&t.call(a),c<2&&(u=TypeError("The iterator does not provide a '"+o+"' method"),c=1);a=e}else if((t=(f=p.n<0)?u:r.call(n,p))!==i)break}catch(t){a=e,c=1,u=t}finally{l=1}}return{value:t,done:f}}}(r,o,a),!0),l}var i={};function c(){}function u(){}function l(){}t=Object.getPrototypeOf;var s=[][n]?t(t([][n]())):(p(t={},n,function(){return this}),t),d=l.prototype=c.prototype=Object.create(s);function y(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,p(e,o,"GeneratorFunction")),e.prototype=Object.create(d),e}return u.prototype=l,p(d,"constructor",l),p(l,"constructor",u),u.displayName="GeneratorFunction",p(l,o,"GeneratorFunction"),p(d),p(d,o,"Generator"),p(d,n,function(){return this}),p(d,"toString",function(){return"[object Generator]"}),(f=function(){return{w:a,m:y}})()}function p(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}p=function(e,t,r,n){function a(t,r){p(e,t,function(e){return this._invoke(t,r,e)})}t?o?o(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(a("next",0),a("throw",1),a("return",2))},p(e,t,r,n)}function d(e,t){this.v=e,this.k=t}function y(e){return function(e){if(Array.isArray(e))return v(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||b(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function b(e,t){if(e){if("string"==typeof e)return v(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?v(e,t):void 0}}function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r0){var n=new Uint8Array(r).fill(0);return new Uint8Array([].concat(y(n),y(e)))}if(r<0){for(var o=-1*r,a=0,i=0;i0;){var c=r[i];a=(c=void 0===c?a:58*c+a)>>8,r[i]=c%256,i++}}var u=n.concat(r.reverse());return new Uint8Array(u)}function H(e){return Y.apply(this,arguments)}function Y(){return(Y=m(a().mark(function e(t){var r,n,o,i,c,u,l,s,f;return a().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!((r=B(t)).length<5)){e.next=3;break}throw new Error("invalid base58check length: expected at least 5 bytes, got ".concat(r.length));case 3:if(n=r.subarray(0,r.length-4),o=r.subarray(r.length-4),i=S()){e.next=8;break}throw new Error("WebCrypto subtle API is unavailable");case 8:return e.next=10,i.digest("SHA-256",n);case 10:return c=e.sent,u=new Uint8Array(c),e.next=14,i.digest("SHA-256",u);case 14:if(l=e.sent,s=new Uint8Array(l),f=s.subarray(0,4),0===(o[0]^f[0]|o[1]^f[1]|o[2]^f[2]|o[3]^f[3])){e.next=20;break}throw new Error("invalid base58check checksum");case 20:return e.abrupt("return",n);case 21:case"end":return e.stop()}},e)}))).apply(this,arguments)}function J(e,t){return L.apply(this,arguments)}function L(){return(L=m(a().mark(function e(t,r){var o,i,c,u,l,s,f,p,d,y,b,v,h;return a().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:e.t0=r,e.next="SOLANA"===e.t0?3:"HEXADECIMAL"===e.t0?7:"BITCOIN_MAINNET_WIF"===e.t0?10:"BITCOIN_TESTNET_WIF"===e.t0?22:"SUI_BECH32"===e.t0?34:45;break;case 3:if(64===(o=B(t)).length){e.next=6;break}throw new Error("invalid key length. Expected 64 bytes. Got ".concat(o.length,"."));case 6:return e.abrupt("return",o.subarray(0,32));case 7:if(!t.startsWith("0x")){e.next=9;break}return e.abrupt("return",F(t.slice(2)));case 9:case 48:return e.abrupt("return",F(t));case 10:return e.next=12,H(t);case 12:if(i=e.sent,c=i[0],u=i.subarray(1),128===c){e.next=17;break}throw new Error("invalid WIF version byte: ".concat(c,". Expected 0x80 (mainnet)."));case 17:if(32!==u.length){e.next=19;break}throw new Error("uncompressed WIF keys not supported");case 19:if(33===u.length&&1===u[32]){e.next=21;break}throw new Error("invalid WIF format: expected compressed private key");case 21:return e.abrupt("return",u.subarray(0,32));case 22:return e.next=24,H(t);case 24:if(l=e.sent,s=l[0],f=l.subarray(1),239===s){e.next=29;break}throw new Error("invalid WIF version byte: ".concat(s,". Expected 0xEF (testnet)."));case 29:if(32!==f.length){e.next=31;break}throw new Error("uncompressed WIF keys not supported");case 31:if(33===f.length&&1===f[32]){e.next=33;break}throw new Error("invalid WIF format: expected compressed private key");case 33:return e.abrupt("return",f.subarray(0,32));case 34:if(p=n.I.decode(t),d=p.prefix,y=p.words,"suiprivkey"===d){e.next=37;break}throw new Error('invalid SUI private key human-readable part (HRP): expected "suiprivkey"');case 37:if(33===(b=n.I.fromWords(y)).length){e.next=40;break}throw new Error("invalid SUI private key length: expected 33 bytes, got ".concat(b.length));case 40:if(v=b[0],h=b.slice(1),0===v){e.next=44;break}throw new Error("invalid SUI private key scheme flag: expected 0 (Ed25519). Turnkey only supports Ed25519 keys for SUI.");case 44:return e.abrupt("return",new Uint8Array(h));case 45:if(console.warn("invalid key format: ".concat(r,". Defaulting to HEXADECIMAL.")),!t.startsWith("0x")){e.next=48;break}return e.abrupt("return",F(t.slice(2)));case 49:case"end":return e.stop()}},e)}))).apply(this,arguments)}function X(e,t){var r={},n={padding:"^(\\d+(px|em|%|rem) ?){1,4}$",margin:"^(\\d+(px|em|%|rem) ?){1,4}$",borderWidth:"^(\\d+(px|em|rem) ?){1,4}$",borderStyle:"^(none|solid|dashed|dotted|double|groove|ridge|inset|outset)$",borderColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",borderRadius:"^(\\d+(px|em|%|rem) ?){1,4}$",fontSize:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax))$",fontWeight:"^(normal|bold|bolder|lighter|\\d{3})$",fontFamily:'^[^";<>]*$',color:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",labelColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",backgroundColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",width:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$",height:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$",maxWidth:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$",maxHeight:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$",lineHeight:"^(\\d+(\\.\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$",boxShadow:"^(none|(\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)) ?(inset)?)$",textAlign:"^(left|right|center|justify|initial|inherit)$",overflowWrap:"^(normal|break-word|anywhere)$",wordWrap:"^(normal|break-word)$",resize:"^(none|both|horizontal|vertical|block|inline)$"};return Object.entries(e).forEach(function(e){var t,o,a=(o=2,function(e){if(Array.isArray(e))return e}(t=e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,a,i,c=[],u=!0,l=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=a.call(r)).done)&&(c.push(n.value),c.length!==t);u=!0);}catch(e){l=!0,o=e}finally{try{if(!u&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(l)throw o}}return c}}(t,o)||b(t,o)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),i=a[0],c=a[1],u=i.trim();if(0===u.length)throw new Error("css style property cannot be empty");var l=n[u];if(!l)throw new Error('invalid or unsupported css style property: "'.concat(u,'"'));var s=new RegExp(l),f=c.trim();if(0==f.length)throw new Error('css style for "'.concat(u,'" is empty'));if(!s.test(f))throw new Error('invalid css style value for property "'.concat(u,'"'));r[u]=f}),r}},482:(e,t,r)=>{r.r(t),r.d(t,{additionalAssociatedData:()=>E,applySettings:()=>O,base58CheckDecode:()=>h,base58Decode:()=>v,decodeKey:()=>m,fromDerSignature:()=>x,getSettings:()=>f,getTargetEmbeddedKey:()=>u,loadTargetKey:()=>c,normalizePadding:()=>g,resetTargetEmbeddedKey:()=>s,sendMessageUp:()=>d,setCryptoProvider:()=>i,setParentFrameMessageChannelPort:()=>w,setSettings:()=>p,setTargetEmbeddedKey:()=>l,uint8arrayFromHexString:()=>y,uint8arrayToHexString:()=>b,validateStyles:()=>k,verifyEnclaveSignature:()=>S});var n=r(275);function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,a,i,c=[],u=!0,l=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=a.call(r)).done)&&(c.push(n.value),c.length!==t);u=!0);}catch(e){l=!0,o=e}finally{try{if(!u&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(l)throw o}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return a(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?a(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r{r.d(t,{q:()=>g});var n=r(275),o=r(255);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(){var e=p(),t=e.m(i),r=(Object.getPrototypeOf?Object.getPrototypeOf(t):t.__proto__).constructor;function n(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===r||"GeneratorFunction"===(t.displayName||t.name))}var o={throw:1,return:2,break:3,continue:3};function a(e){var t,r;return function(n){t||(t={stop:function(){return r(n.a,2)},catch:function(){return n.v},abrupt:function(e,t){return r(n.a,o[e],t)},delegateYield:function(e,o,a){return t.resultName=o,r(n.d,c(e),a)},finish:function(e){return r(n.f,e)}},r=function(e,r,o){n.p=t.prev,n.n=t.next;try{return e(r,o)}finally{t.next=n.n}}),t.resultName&&(t[t.resultName]=n.v,t.resultName=void 0),t.sent=n.v,t.next=n.n;try{return e.call(this,t)}finally{n.p=t.prev,n.n=t.next}}}return(i=function(){return{wrap:function(t,r,n,o){return e.w(a(t),r,n,o&&o.reverse())},isGeneratorFunction:n,mark:e.m,awrap:function(e,t){return new y(e,t)},AsyncIterator:f,async:function(e,t,r,o,i){return(n(t)?s:l)(a(e),t,r,o,i)},keys:u,values:c}})()}function c(e){if(null!=e){var t=e["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],r=0;if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length))return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}throw new TypeError(a(e)+" is not iterable")}function u(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}}function l(e,t,r,n,o){var a=s(e,t,r,n,o);return a.next().then(function(e){return e.done?e.value:a.next()})}function s(e,t,r,n,o){return new f(p().w(e,t,r,n),o||Promise)}function f(e,t){function r(n,o,a,i){try{var c=e[n](o),u=c.value;return u instanceof y?t.resolve(u.v).then(function(e){r("next",e,a,i)},function(e){r("throw",e,a,i)}):t.resolve(u).then(function(e){c.value=e,a(c)},function(e){return r("throw",e,a,i)})}catch(e){i(e)}}var n;this.next||(d(f.prototype),d(f.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),d(this,"_invoke",function(e,o,a){function i(){return new t(function(t,n){r(e,a,t,n)})}return n=n?n.then(i,i):i()},!0)}function p(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function a(r,n,o,a){var u=n&&n.prototype instanceof c?n:c,l=Object.create(u.prototype);return d(l,"_invoke",function(r,n,o){var a,c,u,l=0,s=o||[],f=!1,p={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,r){return a=t,c=0,u=e,p.n=r,i}};function d(r,n){for(c=r,u=n,t=0;!f&&l&&!o&&t3?(o=y===n)&&(u=a[(c=a[4])?5:(c=3,3)],a[4]=a[5]=e):a[0]<=d&&((o=r<2&&dn||n>y)&&(a[4]=r,a[5]=n,p.n=y,c=0))}if(o||r>1)return i;throw f=!0,n}return function(o,s,y){if(l>1)throw TypeError("Generator is already running");for(f&&1===s&&d(s,y),c=s,u=y;(t=c<2?e:u)||!f;){a||(c?c<3?(c>1&&(p.n=-1),d(c,u)):p.n=u:p.v=u);try{if(l=2,a){if(c||(o="next"),t=a[o]){if(!(t=t.call(a,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=a.return)&&t.call(a),c<2&&(u=TypeError("The iterator does not provide a '"+o+"' method"),c=1);a=e}else if((t=(f=p.n<0)?u:r.call(n,p))!==i)break}catch(t){a=e,c=1,u=t}finally{l=1}}return{value:t,done:f}}}(r,o,a),!0),l}var i={};function c(){}function u(){}function l(){}t=Object.getPrototypeOf;var s=[][n]?t(t([][n]())):(d(t={},n,function(){return this}),t),f=l.prototype=c.prototype=Object.create(s);function y(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,d(e,o,"GeneratorFunction")),e.prototype=Object.create(f),e}return u.prototype=l,d(f,"constructor",l),d(l,"constructor",u),u.displayName="GeneratorFunction",d(l,o,"GeneratorFunction"),d(f),d(f,o,"Generator"),d(f,n,function(){return this}),d(f,"toString",function(){return"[object Generator]"}),(p=function(){return{w:a,m:y}})()}function d(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}d=function(e,t,r,n){function a(t,r){d(e,t,function(e){return this._invoke(t,r,e)})}t?o?o(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(a("next",0),a("throw",1),a("return",2))},d(e,t,r,n)}function y(e,t){this.v=e,this.k=t}function b(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function v(e){for(var t=1;t 1;\n } else {\n return window.parent !== window.top;\n }\n}\n\n/*\n * Loads the quorum public key as a CryptoKey.\n */\nasync function loadQuorumKey(quorumPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.importKey(\n \"raw\",\n quorumPublic,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n [\"verify\"]\n );\n}\n\n/*\n * Load a key to encrypt to as a CryptoKey and return it as a JSON Web Key.\n */\nasync function loadTargetKey(targetPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const targetKey = await subtle.importKey(\n \"raw\",\n targetPublic,\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n\n return await subtle.exportKey(\"jwk\", targetKey);\n}\n\n/**\n * Creates a new public/private key pair and persists it in localStorage\n */\nasync function initEmbeddedKey() {\n if (isDoublyIframed()) {\n throw new Error(\"Doubly iframed\");\n }\n const retrievedKey = await getEmbeddedKey();\n if (retrievedKey === null) {\n const targetKey = await generateTargetKey();\n setEmbeddedKey(targetKey);\n }\n // Nothing to do, key is correctly initialized!\n}\n\n/*\n * Generate a key to encrypt to and export it as a JSON Web Key.\n */\nasync function generateTargetKey() {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const p256key = await subtle.generateKey(\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n [\"deriveBits\"]\n );\n\n return await subtle.exportKey(\"jwk\", p256key.privateKey);\n}\n\n/**\n * Gets the current embedded private key JWK. Returns `null` if not found.\n */\nfunction getEmbeddedKey() {\n const jwtKey = getItemWithExpiry(TURNKEY_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the embedded private key JWK with the default expiration time.\n * @param {JsonWebKey} targetKey\n */\nfunction setEmbeddedKey(targetKey) {\n setItemWithExpiry(\n TURNKEY_EMBEDDED_KEY,\n JSON.stringify(targetKey),\n TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS\n );\n}\n\n/**\n * Gets the current target embedded private key JWK. Returns `null` if not found.\n */\nfunction getTargetEmbeddedKey() {\n const jwtKey = window.localStorage.getItem(TURNKEY_TARGET_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the target embedded public key JWK.\n * @param {JsonWebKey} targetKey\n */\nfunction setTargetEmbeddedKey(targetKey) {\n window.localStorage.setItem(\n TURNKEY_TARGET_EMBEDDED_KEY,\n JSON.stringify(targetKey)\n );\n}\n\n/**\n * Resets the current embedded private key JWK.\n */\nfunction onResetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY);\n window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY_ORIGIN);\n}\n\n/**\n * Resets the current target embedded private key JWK.\n */\nfunction resetTargetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_TARGET_EMBEDDED_KEY);\n}\n\nfunction setParentFrameMessageChannelPort(port) {\n parentFrameMessageChannelPort = port;\n}\n\n/**\n * Gets the current settings.\n */\nfunction getSettings() {\n const settings = window.localStorage.getItem(TURNKEY_SETTINGS);\n return settings ? JSON.parse(settings) : null;\n}\n\n/**\n * Sets the settings object.\n * @param {Object} settings\n */\nfunction setSettings(settings) {\n window.localStorage.setItem(TURNKEY_SETTINGS, JSON.stringify(settings));\n}\n\n/**\n * Set an item in localStorage with an expiration time\n * @param {string} key\n * @param {string} value\n * @param {number} ttl expiration time in milliseconds\n */\nfunction setItemWithExpiry(key, value, ttl) {\n const now = new Date();\n const item = {\n value: value,\n expiry: now.getTime() + ttl,\n };\n window.localStorage.setItem(key, JSON.stringify(item));\n}\n\n/**\n * Get an item from localStorage. Returns `null` and\n * removes the item from localStorage if expired or\n * expiry time is missing.\n * @param {string} key\n */\nfunction getItemWithExpiry(key) {\n const itemStr = window.localStorage.getItem(key);\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n if (\n !Object.prototype.hasOwnProperty.call(item, \"expiry\") ||\n !Object.prototype.hasOwnProperty.call(item, \"value\")\n ) {\n window.localStorage.removeItem(key);\n return null;\n }\n const now = new Date();\n if (now.getTime() > item.expiry) {\n window.localStorage.removeItem(key);\n return null;\n }\n return item.value;\n}\n\n/**\n * Takes a hex string (e.g. \"e4567ab\" or \"0xe4567ab\") and returns an array buffer (Uint8Array)\n * @param {string} hexString - Hex string with or without \"0x\" prefix\n * @returns {Uint8Array}\n */\nfunction uint8arrayFromHexString(hexString) {\n if (!hexString || typeof hexString !== \"string\") {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n\n // Remove 0x prefix if present\n const hexWithoutPrefix =\n hexString.startsWith(\"0x\") || hexString.startsWith(\"0X\")\n ? hexString.slice(2)\n : hexString;\n\n var hexRegex = /^[0-9A-Fa-f]+$/;\n if (hexWithoutPrefix.length % 2 != 0 || !hexRegex.test(hexWithoutPrefix)) {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n return new Uint8Array(\n hexWithoutPrefix.match(/../g).map((h) => parseInt(h, 16))\n );\n}\n\n/**\n * Takes a Uint8Array and returns a hex string\n * @param {Uint8Array} buffer\n * @return {string}\n */\nfunction uint8arrayToHexString(buffer) {\n return [...buffer].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n/**\n * Function to normalize padding of byte array with 0's to a target length\n */\nfunction normalizePadding(byteArray, targetLength) {\n const paddingLength = targetLength - byteArray.length;\n\n // Add leading 0's to array\n if (paddingLength > 0) {\n const padding = new Uint8Array(paddingLength).fill(0);\n return new Uint8Array([...padding, ...byteArray]);\n }\n\n // Remove leading 0's from array\n if (paddingLength < 0) {\n const expectedZeroCount = paddingLength * -1;\n let zeroCount = 0;\n for (let i = 0; i < expectedZeroCount && i < byteArray.length; i++) {\n if (byteArray[i] === 0) {\n zeroCount++;\n }\n }\n // Check if the number of zeros found equals the number of zeroes expected\n if (zeroCount !== expectedZeroCount) {\n throw new Error(\n `invalid number of starting zeroes. Expected number of zeroes: ${expectedZeroCount}. Found: ${zeroCount}.`\n );\n }\n return byteArray.slice(expectedZeroCount, expectedZeroCount + targetLength);\n }\n return byteArray;\n}\n\n/**\n * Additional Associated Data (AAD) in the format dictated by the enclave_encrypt crate.\n */\nfunction additionalAssociatedData(senderPubBuf, receiverPubBuf) {\n const s = Array.from(new Uint8Array(senderPubBuf));\n const r = Array.from(new Uint8Array(receiverPubBuf));\n return new Uint8Array([...s, ...r]);\n}\n\n/**\n * Converts an ASN.1 DER-encoded ECDSA signature to the raw format that WebCrypto uses.\n */\nfunction fromDerSignature(derSignature) {\n const derSignatureBuf = uint8arrayFromHexString(derSignature);\n\n // Check and skip the sequence tag (0x30)\n let index = 2;\n\n // Parse 'r' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for r\"\n );\n }\n index++; // Move past the INTEGER tag\n const rLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const r = derSignatureBuf.slice(index, index + rLength);\n index += rLength; // Move to the start of s\n\n // Parse 's' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for s\"\n );\n }\n index++; // Move past the INTEGER tag\n const sLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const s = derSignatureBuf.slice(index, index + sLength);\n\n // Normalize 'r' and 's' to 32 bytes each\n const rPadded = normalizePadding(r, 32);\n const sPadded = normalizePadding(s, 32);\n\n // Concatenate and return the raw signature\n return new Uint8Array([...rPadded, ...sPadded]);\n}\n\n/**\n * Function to verify enclave signature on import bundle received from the server.\n * @param {string} enclaveQuorumPublic uncompressed public key for the quorum key which produced the signature\n * @param {string} publicSignature signature bytes encoded as a hexadecimal string\n * @param {string} signedData signed bytes encoded as a hexadecimal string. This could be public key bytes directly, or JSON-encoded bytes\n */\nasync function verifyEnclaveSignature(\n enclaveQuorumPublic,\n publicSignature,\n signedData\n) {\n /** Turnkey Signer enclave's public keys */\n const TURNKEY_SIGNERS_ENCLAVES = {\n prod: \"04cf288fe433cc4e1aa0ce1632feac4ea26bf2f5a09dcfe5a42c398e06898710330f0572882f4dbdf0f5304b8fc8703acd69adca9a4bbf7f5d00d20a5e364b2569\",\n preprod:\n \"04f3422b8afbe425d6ece77b8d2469954715a2ff273ab7ac89f1ed70e0a9325eaa1698b4351fd1b23734e65c0b6a86b62dd49d70b37c94606aac402cbd84353212\",\n dev: \"048cf9ed5f579298cc1571823a3222b82d80c529c551f6070fbe712ae1a9e8d1a23b7006e306d27190358dfcd9c44624918a00f23c920a33cb14f5b026eafc865d\",\n };\n\n // Use window.__TURNKEY_SIGNER_ENVIRONMENT__ if available (for testing), otherwise use the webpack replacement\n const environment =\n (typeof window !== \"undefined\" && window.__TURNKEY_SIGNER_ENVIRONMENT__) ||\n \"__TURNKEY_SIGNER_ENVIRONMENT__\";\n const TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY =\n TURNKEY_SIGNERS_ENCLAVES[environment];\n\n if (TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY === undefined) {\n throw new Error(\n `Configuration error: TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY is undefined`\n );\n }\n\n // todo(olivia): throw error if enclave quorum public is null once server changes are deployed\n if (enclaveQuorumPublic) {\n if (enclaveQuorumPublic !== TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY) {\n throw new Error(\n `enclave quorum public keys from client and bundle do not match. Client: ${TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY}. Bundle: ${enclaveQuorumPublic}.`\n );\n }\n }\n\n const encryptionQuorumPublicBuf = new Uint8Array(\n uint8arrayFromHexString(TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY)\n );\n const quorumKey = await loadQuorumKey(encryptionQuorumPublicBuf);\n if (!quorumKey) {\n throw new Error(\"failed to load quorum key\");\n }\n\n // The ECDSA signature is ASN.1 DER encoded but WebCrypto uses raw format\n const publicSignatureBuf = fromDerSignature(publicSignature);\n const signedDataBuf = uint8arrayFromHexString(signedData);\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.verify(\n { name: \"ECDSA\", hash: \"SHA-256\" },\n quorumKey,\n publicSignatureBuf,\n signedDataBuf\n );\n}\n\n/**\n * Function to send a message.\n *\n * If this page is embedded as an iframe we'll send a postMessage\n * in one of two ways depending on the version of @turnkey/iframe-stamper:\n * 1. newer versions (>=v2.1.0) pass a MessageChannel MessagePort from the parent frame for postMessages.\n * 2. older versions ( 0) {\n digits.push(carry % 58);\n carry = (carry / 58) | 0;\n }\n }\n // Convert digits to a base58 string\n for (let k = 0; k < digits.length; k++) {\n result = alphabet[digits[k]] + result;\n }\n\n // Add '1' for each leading 0 byte\n for (let i = 0; bytes[i] === 0 && i < bytes.length - 1; i++) {\n result = \"1\" + result;\n }\n return result;\n}\n\n/**\n * Decodes a base58-encoded string into a buffer\n * This function throws an error when the string contains invalid characters.\n * @param {string} s The base58-encoded string.\n * @return {Uint8Array} The decoded buffer.\n */\nfunction base58Decode(s) {\n // See https://en.bitcoin.it/wiki/Base58Check_encoding\n var alphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\n var decodedBytes = [];\n var leadingZeros = [];\n for (var i = 0; i < s.length; i++) {\n if (alphabet.indexOf(s[i]) === -1) {\n throw new Error(`cannot base58-decode: ${s[i]} isn't a valid character`);\n }\n var carry = alphabet.indexOf(s[i]);\n\n // If the current base58 digit is 0, append a 0 byte.\n // \"i == leadingZeros.length\" can only be true if we have not seen non-zero bytes so far.\n // If we had seen a non-zero byte, carry wouldn't be 0, and i would be strictly more than `leadingZeros.length`\n if (carry == 0 && i === leadingZeros.length) {\n leadingZeros.push(0);\n }\n\n var j = 0;\n while (j < decodedBytes.length || carry > 0) {\n var currentByte = decodedBytes[j];\n\n // shift the current byte 58 units and add the carry amount\n // (or just add the carry amount if this is a new byte -- undefined case)\n if (currentByte === undefined) {\n currentByte = carry;\n } else {\n currentByte = currentByte * 58 + carry;\n }\n\n // find the new carry amount (1-byte shift of current byte value)\n carry = currentByte >> 8;\n // reset the current byte to the remainder (the carry amount will pass on the overflow)\n decodedBytes[j] = currentByte % 256;\n j++;\n }\n }\n\n var result = leadingZeros.concat(decodedBytes.reverse());\n return new Uint8Array(result);\n}\n\n/**\n * Decodes a base58check-encoded string and verifies the checksum.\n * Base58Check encoding includes a 4-byte checksum at the end to detect errors.\n * The checksum is the first 4 bytes of SHA256(SHA256(payload)).\n * This function throws an error if the checksum is invalid.\n * @param {string} s The base58check-encoded string.\n * @return {Promise} The decoded payload (without checksum).\n */\nasync function base58CheckDecode(s) {\n const decoded = base58Decode(s);\n\n if (decoded.length < 5) {\n throw new Error(\n `invalid base58check length: expected at least 5 bytes, got ${decoded.length}`\n );\n }\n\n const payload = decoded.subarray(0, decoded.length - 4);\n const checksum = decoded.subarray(decoded.length - 4);\n\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n\n // Compute double SHA256 hash\n const hash1Buf = await subtle.digest(\"SHA-256\", payload);\n const hash1 = new Uint8Array(hash1Buf);\n const hash2Buf = await subtle.digest(\"SHA-256\", hash1);\n const hash2 = new Uint8Array(hash2Buf);\n const computedChecksum = hash2.subarray(0, 4);\n\n // Verify checksum\n const mismatch =\n (checksum[0] ^ computedChecksum[0]) |\n (checksum[1] ^ computedChecksum[1]) |\n (checksum[2] ^ computedChecksum[2]) |\n (checksum[3] ^ computedChecksum[3]);\n if (mismatch !== 0) {\n throw new Error(\"invalid base58check checksum\");\n }\n\n return payload;\n}\n\n/**\n * Returns private key bytes from a private key, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {string} privateKey\n * @param {string} keyFormat Can be \"HEXADECIMAL\", \"SUI_BECH32\", \"BITCOIN_MAINNET_WIF\", \"BITCOIN_TESTNET_WIF\" or \"SOLANA\"\n * @return {Promise}\n */\nasync function decodeKey(privateKey, keyFormat) {\n switch (keyFormat) {\n case \"SOLANA\": {\n const decodedKeyBytes = base58Decode(privateKey);\n if (decodedKeyBytes.length !== 64) {\n throw new Error(\n `invalid key length. Expected 64 bytes. Got ${decodedKeyBytes.length}.`\n );\n }\n return decodedKeyBytes.subarray(0, 32);\n }\n case \"HEXADECIMAL\":\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n case \"BITCOIN_MAINNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0x80 = mainnet\n if (version !== 0x80) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0x80 (mainnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"BITCOIN_TESTNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0xEF = testnet\n if (version !== 0xef) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0xEF (testnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"SUI_BECH32\": {\n const { prefix, words } = bech32.decode(privateKey);\n\n if (prefix !== \"suiprivkey\") {\n throw new Error(\n `invalid SUI private key human-readable part (HRP): expected \"suiprivkey\"`\n );\n }\n\n const bytes = bech32.fromWords(words);\n if (bytes.length !== 33) {\n throw new Error(\n `invalid SUI private key length: expected 33 bytes, got ${bytes.length}`\n );\n }\n\n const schemeFlag = bytes[0];\n const privkey = bytes.slice(1);\n\n // schemeFlag = 0 is Ed25519; We currently only support Ed25519 keys for SUI.\n if (schemeFlag !== 0) {\n throw new Error(\n `invalid SUI private key scheme flag: expected 0 (Ed25519). Turnkey only supports Ed25519 keys for SUI.`\n );\n }\n\n return new Uint8Array(privkey);\n }\n default:\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n }\n}\n\n/**\n * Returns a private key from private key bytes, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {Uint8Array} privateKeyBytes\n * @param {string} keyFormat Can be \"HEXADECIMAL\" or \"SOLANA\"\n */\nasync function encodeKey(privateKeyBytes, keyFormat, publicKeyBytes) {\n switch (keyFormat) {\n case \"SOLANA\":\n if (!publicKeyBytes) {\n throw new Error(\"public key must be specified for SOLANA key format\");\n }\n if (privateKeyBytes.length !== 32) {\n throw new Error(\n `invalid private key length. Expected 32 bytes. Got ${privateKeyBytes.length}.`\n );\n }\n if (publicKeyBytes.length !== 32) {\n throw new Error(\n `invalid public key length. Expected 32 bytes. Got ${publicKeyBytes.length}.`\n );\n }\n {\n const concatenatedBytes = new Uint8Array(64);\n concatenatedBytes.set(privateKeyBytes, 0);\n concatenatedBytes.set(publicKeyBytes, 32);\n return base58Encode(concatenatedBytes);\n }\n case \"HEXADECIMAL\":\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n default:\n // keeping console.warn for debugging purposes.\n // eslint-disable-next-line no-console\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n }\n}\n\n// Helper to parse a private key into a Solana base58 private key.\n// To be used if a wallet account is exported without the `SOLANA` address format.\nfunction parsePrivateKey(privateKey) {\n if (Array.isArray(privateKey)) {\n return new Uint8Array(privateKey);\n }\n\n if (typeof privateKey === \"string\") {\n // Remove 0x prefix if present\n if (privateKey.startsWith(\"0x\")) {\n privateKey = privateKey.slice(2);\n }\n\n // Check if it's hex-formatted correctly (i.e. 64 hex chars)\n if (privateKey.length === 64 && /^[0-9a-fA-F]+$/.test(privateKey)) {\n return uint8arrayFromHexString(privateKey);\n }\n\n // Otherwise assume it's base58 format (for Solana)\n try {\n return base58Decode(privateKey);\n } catch (error) {\n throw new Error(\n \"Invalid private key format. Use hex (64 chars) or base58 format.\"\n );\n }\n }\n\n throw new Error(\"Private key must be a string (hex/base58) or number array\");\n}\n\n/**\n * Function to validate and sanitize the styles object using the accepted map of style keys and values (as regular expressions).\n * Any invalid style throws an error. Returns an object of valid styles.\n * @param {Object} styles\n * @param {HTMLElement} element - Optional element parameter (for import frame)\n * @return {Object}\n */\nfunction validateStyles(styles, element) {\n const validStyles = {};\n\n const cssValidationRegex = {\n padding: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n margin: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n borderWidth: \"^(\\\\d+(px|em|rem) ?){1,4}$\",\n borderStyle:\n \"^(none|solid|dashed|dotted|double|groove|ridge|inset|outset)$\",\n borderColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n borderRadius: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n fontSize: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax))$\",\n fontWeight: \"^(normal|bold|bolder|lighter|\\\\d{3})$\",\n fontFamily: '^[^\";<>]*$', // checks for the absence of some characters that could lead to CSS/HTML injection\n color:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n labelColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n backgroundColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n width: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n height: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n maxWidth: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n maxHeight:\n \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n lineHeight:\n \"^(\\\\d+(\\\\.\\\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$\",\n boxShadow:\n \"^(none|(\\\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)) ?(inset)?)$\",\n textAlign: \"^(left|right|center|justify|initial|inherit)$\",\n overflowWrap: \"^(normal|break-word|anywhere)$\",\n wordWrap: \"^(normal|break-word)$\",\n resize: \"^(none|both|horizontal|vertical|block|inline)$\",\n };\n\n Object.entries(styles).forEach(([property, value]) => {\n const styleProperty = property.trim();\n if (styleProperty.length === 0) {\n throw new Error(\"css style property cannot be empty\");\n }\n const styleRegexStr = cssValidationRegex[styleProperty];\n if (!styleRegexStr) {\n throw new Error(\n `invalid or unsupported css style property: \"${styleProperty}\"`\n );\n }\n const styleRegex = new RegExp(styleRegexStr);\n const styleValue = value.trim();\n if (styleValue.length == 0) {\n throw new Error(`css style for \"${styleProperty}\" is empty`);\n }\n const isValidStyle = styleRegex.test(styleValue);\n if (!isValidStyle) {\n throw new Error(\n `invalid css style value for property \"${styleProperty}\"`\n );\n }\n validStyles[styleProperty] = styleValue;\n });\n\n return validStyles;\n}\n\n// Export all shared functions\nexport {\n setCryptoProvider,\n getSubtleCrypto,\n isDoublyIframed,\n loadQuorumKey,\n loadTargetKey,\n initEmbeddedKey,\n generateTargetKey,\n getEmbeddedKey,\n setEmbeddedKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n onResetEmbeddedKey,\n resetTargetEmbeddedKey,\n setParentFrameMessageChannelPort,\n getSettings,\n setSettings,\n setItemWithExpiry,\n getItemWithExpiry,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n normalizePadding,\n additionalAssociatedData,\n fromDerSignature,\n verifyEnclaveSignature,\n sendMessageUp,\n logMessage,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n base58CheckDecode,\n decodeKey,\n encodeKey,\n parsePrivateKey,\n validateStyles,\n};\n","import * as SharedTKHQ from \"@shared/turnkey-core.js\";\n\nconst {\n setCryptoProvider,\n loadTargetKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n resetTargetEmbeddedKey,\n getSettings,\n setSettings,\n sendMessageUp,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n base58Decode,\n base58CheckDecode,\n decodeKey,\n setParentFrameMessageChannelPort,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n validateStyles,\n} = SharedTKHQ;\n\n/**\n * Function to apply settings on this page. For now, the only settings that can be applied\n * are for \"styles\". Upon successful application, return the valid, sanitized settings JSON string.\n * @param {string} settings\n * @return {string}\n */\nfunction applySettings(settings) {\n const validSettings = {};\n const settingsObj = JSON.parse(settings);\n\n const passphraseLabel = document.getElementById(\"passphrase-label\");\n const mnemonicLabel = document.getElementById(\"mnemonic-label\");\n const passphraseTextarea = document.getElementById(\"passphrase\");\n\n if (!passphraseLabel || !passphraseTextarea) {\n throw new Error(\"no passphrase HTML elements found to apply settings to.\");\n }\n const plaintextTextarea = document.getElementById(\"plaintext\");\n if (!plaintextTextarea) {\n throw new Error(\n \"no plaintext textarea HTML element found to apply settings to.\"\n );\n }\n\n // Apply enablePassphrase setting\n if (settingsObj.enablePassphrase === true) {\n passphraseLabel.style.display = \"inline-block\";\n passphraseTextarea.style.display = \"inline-block\";\n passphraseTextarea.style.border = \"solid 1px #ccc\";\n passphraseTextarea.style.borderRadius = \"4px\";\n\n mnemonicLabel.style.display = \"inline-block\";\n plaintextTextarea.style.border = \"solid 1px #ccc\";\n plaintextTextarea.style.borderRadius = \"4px\";\n\n validSettings[\"enablePassphrase\"] = true;\n } else {\n passphraseLabel.style.display = \"none\";\n passphraseTextarea.style.display = \"none\";\n mnemonicLabel.style.display = \"none\";\n\n plaintextTextarea.style.border = \"none\";\n validSettings[\"enablePassphrase\"] = false;\n }\n\n if (settingsObj.styles) {\n // Validate, sanitize, and apply the styles to the \"plaintext\" textarea.\n const validStyles = validateStyles(settingsObj.styles);\n Object.entries(validStyles).forEach(([key, value]) => {\n plaintextTextarea.style[key] = value;\n });\n\n if (validStyles.backgroundColor) {\n // Apply background color to document and body as well.\n document.documentElement.style.backgroundColor =\n validStyles.backgroundColor;\n document.body.style.backgroundColor = validStyles.backgroundColor;\n }\n\n if (validStyles.labelColor) {\n document.getElementById(\"mnemonic-label\").style.color =\n validStyles.labelColor;\n }\n\n validSettings[\"styles\"] = validStyles;\n }\n\n if (settingsObj.passphraseStyles) {\n // Validate, sanitize, and apply the styles to the \"passphrase\" textarea.\n const validStyles = validateStyles(settingsObj.passphraseStyles);\n Object.entries(validStyles).forEach(([key, value]) => {\n passphraseTextarea.style[key] = value;\n });\n\n if (validStyles.labelColor) {\n document.getElementById(\"passphrase-label\").style.color =\n validStyles.labelColor;\n }\n\n validSettings[\"passphraseStyles\"] = validStyles;\n }\n\n return JSON.stringify(validSettings);\n}\n\nexport {\n setCryptoProvider,\n loadTargetKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n resetTargetEmbeddedKey,\n getSettings,\n setSettings,\n sendMessageUp,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n base58Decode,\n base58CheckDecode,\n decodeKey,\n setParentFrameMessageChannelPort,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n validateStyles,\n applySettings,\n};\n","/**\n * Crypto Utilities - Shared\n * Contains HPKE encryption and decryption functions\n */\n\nimport {\n p256JWKPrivateToPublic,\n additionalAssociatedData,\n uint8arrayToHexString,\n} from \"./turnkey-core.js\";\nimport {\n CipherSuite,\n DhkemP256HkdfSha256,\n HkdfSha256,\n Aes256Gcm,\n} from \"@hpke/core\";\n\n// Pre-compute const (for perf)\nconst TURNKEY_HPKE_INFO = new TextEncoder().encode(\"turnkey_hpke\");\n\n/**\n * Decrypt the ciphertext (ArrayBuffer) given an encapsulation key (ArrayBuffer)\n * and the receivers private key (JSON Web Key).\n */\nexport async function HpkeDecrypt({\n ciphertextBuf,\n encappedKeyBuf,\n receiverPrivJwk,\n}) {\n const kemContext = new DhkemP256HkdfSha256();\n var receiverPriv = await kemContext.importKey(\n \"jwk\",\n { ...receiverPrivJwk },\n false\n );\n\n var suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n var recipientCtx = await suite.createRecipientContext({\n recipientKey: receiverPriv,\n enc: encappedKeyBuf,\n info: TURNKEY_HPKE_INFO,\n });\n\n var receiverPubBuf = await p256JWKPrivateToPublic(receiverPrivJwk);\n var aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n var res;\n try {\n res = await recipientCtx.open(ciphertextBuf, aad);\n } catch (e) {\n throw new Error(\n \"unable to decrypt bundle using embedded key. the bundle may be incorrect. failed with error: \" +\n e.toString()\n );\n }\n return res;\n}\n\n/**\n * Encrypt plaintext using HPKE with the receiver's public key.\n * @param {Object} params\n * @param {Uint8Array} params.plaintextBuf - Plaintext to encrypt\n * @param {JsonWebKey} params.receiverPubJwk - Receiver's public key in JWK format\n * @returns {Promise} JSON stringified encrypted bundle with encappedPublic and ciphertext\n */\nexport async function HpkeEncrypt({ plaintextBuf, receiverPubJwk }) {\n const kemContext = new DhkemP256HkdfSha256();\n const receiverPub = await kemContext.importKey(\n \"jwk\",\n { ...receiverPubJwk },\n true\n );\n\n const suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n const senderCtx = await suite.createSenderContext({\n recipientPublicKey: receiverPub,\n info: TURNKEY_HPKE_INFO,\n });\n\n // Need to import the key again as a JWK to export as a raw key, the format needed to\n // create the aad with the newly generated raw encapped key.\n const receiverPubCryptoKey = await crypto.subtle.importKey(\n \"jwk\",\n receiverPubJwk,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n const receiverPubRaw = await crypto.subtle.exportKey(\n \"raw\",\n receiverPubCryptoKey\n );\n const receiverPubBuf = new Uint8Array(receiverPubRaw);\n\n const encappedKeyBuf = new Uint8Array(senderCtx.enc);\n\n const aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n\n var ciphertextBuf;\n try {\n ciphertextBuf = await senderCtx.seal(plaintextBuf, aad);\n } catch (e) {\n throw new Error(\"failed to encrypt import bundle: \" + e.toString());\n }\n\n const ciphertextHex = uint8arrayToHexString(new Uint8Array(ciphertextBuf));\n const encappedKeyBufHex = uint8arrayToHexString(encappedKeyBuf);\n const encryptedBundle = JSON.stringify({\n encappedPublic: encappedKeyBufHex,\n ciphertext: ciphertextHex,\n });\n return encryptedBundle;\n}\n"],"names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_invoke","enumerable","configurable","writable","_OverloadYield","k","_toConsumableArray","Array","isArray","_arrayLikeToArray","_arrayWithoutHoles","from","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","toString","slice","constructor","name","test","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","TURNKEY_TARGET_EMBEDDED_KEY","TURNKEY_SETTINGS","parentFrameMessageChannelPort","cryptoProviderOverride","getSubtleCrypto","subtle","globalThis","crypto","window","global","setCryptoProvider","cryptoProvider","loadQuorumKey","_x","_loadQuorumKey","_regeneratorRuntime","mark","_callee","quorumPublic","wrap","_context","prev","next","Error","importKey","namedCurve","abrupt","sent","stop","loadTargetKey","_x2","_loadTargetKey","_callee2","targetPublic","targetKey","_context2","exportKey","getTargetEmbeddedKey","jwtKey","localStorage","getItem","JSON","parse","setTargetEmbeddedKey","setItem","stringify","resetTargetEmbeddedKey","removeItem","setParentFrameMessageChannelPort","port","getSettings","settings","setSettings","uint8arrayFromHexString","hexString","hexWithoutPrefix","startsWith","Uint8Array","match","map","h","parseInt","uint8arrayToHexString","buffer","x","padStart","join","normalizePadding","byteArray","targetLength","paddingLength","padding","fill","concat","expectedZeroCount","zeroCount","additionalAssociatedData","senderPubBuf","receiverPubBuf","s","fromDerSignature","derSignature","derSignatureBuf","index","rLength","sLength","rPadded","sPadded","verifyEnclaveSignature","_x3","_x4","_x5","_verifyEnclaveSignature","_callee5","enclaveQuorumPublic","publicSignature","signedData","TURNKEY_SIGNERS_ENCLAVES","environment","TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY","encryptionQuorumPublicBuf","quorumKey","publicSignatureBuf","signedDataBuf","_context5","prod","preprod","dev","__TURNKEY_SIGNER_ENVIRONMENT__","undefined","verify","hash","sendMessageUp","type","requestId","message","postMessage","parent","content","messageLog","document","getElementById","createElement","innerText","appendChild","logMessage","base58Decode","alphabet","decodedBytes","leadingZeros","indexOf","carry","push","j","currentByte","result","reverse","base58CheckDecode","_x7","_base58CheckDecode","_callee7","decoded","payload","checksum","hash1Buf","hash1","hash2Buf","hash2","computedChecksum","_context7","subarray","digest","decodeKey","_x8","_x9","_decodeKey","_callee8","privateKey","keyFormat","decodedKeyBytes","version","keyAndFlags","_payload","_version","_keyAndFlags","_bech32$decode","prefix","words","bytes","schemeFlag","privkey","_context8","t0","bech32","decode","fromWords","console","warn","validateStyles","styles","element","validStyles","cssValidationRegex","margin","borderWidth","borderStyle","borderColor","borderRadius","fontSize","fontWeight","fontFamily","color","labelColor","backgroundColor","width","height","maxWidth","maxHeight","lineHeight","boxShadow","textAlign","overflowWrap","wordWrap","resize","entries","forEach","_ref","_ref2","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","property","styleProperty","trim","styleRegexStr","styleRegex","RegExp","styleValue","SharedTKHQ","applySettings","validSettings","settingsObj","passphraseLabel","mnemonicLabel","passphraseTextarea","plaintextTextarea","enablePassphrase","style","display","border","_slicedToArray","key","documentElement","body","passphraseStyles","_ref3","_ref4","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","_objectSpread","_defineProperty","getOwnPropertyDescriptors","defineProperties","_typeof","toPrimitive","String","_toPrimitive","_toPropertyKey","TURNKEY_HPKE_INFO","TextEncoder","encode","HpkeEncrypt","_HpkeEncrypt","plaintextBuf","receiverPubJwk","kemContext","receiverPub","suite","senderCtx","receiverPubCryptoKey","receiverPubRaw","encappedKeyBuf","aad","ciphertextBuf","ciphertextHex","encappedKeyBufHex","encryptedBundle","DhkemP256HkdfSha256","CipherSuite","kem","kdf","HkdfSha256","aead","Aes256Gcm","createSenderContext","recipientPublicKey","info","enc","seal","encappedPublic","ciphertext"],"sourceRoot":""} \ No newline at end of file diff --git a/import/dist/index.html b/import/dist/index.html index 0e88d046..2d6f67f1 100644 --- a/import/dist/index.html +++ b/import/dist/index.html @@ -1 +1 @@ -Turnkey Import
\ No newline at end of file +Turnkey Import
\ No newline at end of file diff --git a/import/dist/standalone.html b/import/dist/standalone.html index 4651ff01..564da603 100644 --- a/import/dist/standalone.html +++ b/import/dist/standalone.html @@ -1 +1 @@ -Turnkey Import (Standalone Mode)

Initialize Import




Import Wallet


Import Private Key



Message log

Below we display a log of the messages sent / received. The forms above send messages, and the code communicates results by sending events via the postMessage API.

\ No newline at end of file +Turnkey Import (Standalone Mode)

Initialize Import




Import Wallet


Import Private Key



Message log

Below we display a log of the messages sent / received. The forms above send messages, and the code communicates results by sending events via the postMessage API.

\ No newline at end of file diff --git a/kustomize/base/resources.yaml b/kustomize/base/resources.yaml index eb10dc42..17fe5266 100644 --- a/kustomize/base/resources.yaml +++ b/kustomize/base/resources.yaml @@ -25,7 +25,7 @@ spec: - -c - | mkdir -p templated/export templated/import templated/export-and-sign; - + envsubst '${TURNKEY_SIGNER_ENVIRONMENT}' < export/index.template.html > templated/export/index.html; # For export-and-sign, copy the webpack-built files and template the environment variable in HTML files @@ -35,14 +35,48 @@ spec: ls -la templated/export-and-sign/ fi - # Escape sed replacement metacharacters (&, |, \) so URLs with - # query strings survive the substitution below intact - TELEMETRY_ENDPOINT_ESCAPED=$(printf '%s' "${TURNKEY_TELEMETRY_ENDPOINT}" | sed -e 's/[&\\|]/\\&/g'); + TELEMETRY_ENDPOINT_HTML=""; + TELEMETRY_CSP_ORIGIN=""; + if [ -n "${TURNKEY_TELEMETRY_ENDPOINT}" ]; then + # Telemetry crosses the iframe boundary, so production + # collectors must use an absolute HTTPS URL. Fragments and + # markup-significant characters are rejected rather than + # being interpolated into the generated security policy. + case "${TURNKEY_TELEMETRY_ENDPOINT}" in + https://*) ;; + *) + echo "TURNKEY_TELEMETRY_ENDPOINT must be an absolute HTTPS URL" >&2; + exit 1; + ;; + esac + case "${TURNKEY_TELEMETRY_ENDPOINT}" in + *'"'*|*"'"*|*"<"*|*">"*|*" "*|*"#"*) + echo "TURNKEY_TELEMETRY_ENDPOINT contains unsupported characters" >&2; + exit 1; + ;; + esac + + # Only the URL origin belongs in connect-src. The full URL, + # including an optional path/query, is HTML-escaped for the + # telemetry meta element. + TELEMETRY_CSP_ORIGIN=$(printf '%s' "${TURNKEY_TELEMETRY_ENDPOINT}" | sed -e 's#^\(https://[^/?#]*\).*$#\1#'); + case "${TELEMETRY_CSP_ORIGIN}" in + "https://"|*'"'*|*"'"*|*" "*|*"<"*|*">"*|*"@"*|*";"*|*"\\"*) + echo "TURNKEY_TELEMETRY_ENDPOINT has an invalid origin" >&2; + exit 1; + ;; + esac + TELEMETRY_ENDPOINT_HTML=$(printf '%s' "${TURNKEY_TELEMETRY_ENDPOINT}" | sed -e 's/&/\&/g' -e 's/"/\"/g' -e 's//\>/g'); + fi + + # Escape sed replacement metacharacters after HTML escaping. + TELEMETRY_ENDPOINT_ESCAPED=$(printf '%s' "${TELEMETRY_ENDPOINT_HTML}" | sed -e 's/[&\\|]/\\&/g'); + TELEMETRY_ORIGIN_ESCAPED=$(printf '%s' "${TELEMETRY_CSP_ORIGIN}" | sed -e 's/[&\\|]/\\&/g'); # Template the environment variables in the HTML files (not JS, to preserve SRI) for file in templated/export-and-sign/*.html; do if [ -f "$file" ]; then - if sed -e "s/__TURNKEY_SIGNER_ENVIRONMENT__/${TURNKEY_SIGNER_ENVIRONMENT}/g" -e "s|__TURNKEY_TELEMETRY_ENDPOINT__|${TELEMETRY_ENDPOINT_ESCAPED}|g" "$file" > "$file.tmp"; then + if sed -e "s/__TURNKEY_SIGNER_ENVIRONMENT__/${TURNKEY_SIGNER_ENVIRONMENT}/g" -e "s|__TURNKEY_TELEMETRY_ENDPOINT__|${TELEMETRY_ENDPOINT_ESCAPED}|g" -e "s|__TURNKEY_TELEMETRY_ORIGIN__|${TELEMETRY_ORIGIN_ESCAPED}|g" "$file" > "$file.tmp"; then mv "$file.tmp" "$file" fi fi @@ -87,7 +121,7 @@ spec: containerPort: 8083 - name: export-and-sign containerPort: 8086 - + # oauth - name: oauth-origin containerPort: 8084 @@ -153,7 +187,7 @@ spec: - name: http-exp-sign port: 8086 targetPort: export-and-sign - + # oauth - name: http-oauth-og port: 8084 diff --git a/shared/turnkey-core.js b/shared/turnkey-core.js index fc2c2d87..a032e570 100644 --- a/shared/turnkey-core.js +++ b/shared/turnkey-core.js @@ -223,10 +223,21 @@ function setParentFrameMessageChannelPort(port) { * @param {string} origin */ function setParentFrameOrigin(origin) { - if (typeof origin !== "string" || origin.length === 0 || origin === "*") { - throw new Error("a concrete parent frame origin is required"); + if (typeof origin !== "string" || origin.length === 0) { + throw new Error("a canonical, non-opaque parent frame origin is required"); } - parentFrameTargetOrigin = origin; + + let parsedOrigin; + try { + parsedOrigin = new URL(origin).origin; + } catch { + throw new Error("a canonical, non-opaque parent frame origin is required"); + } + + if (parsedOrigin === "null" || parsedOrigin !== origin) { + throw new Error("a canonical, non-opaque parent frame origin is required"); + } + parentFrameTargetOrigin = parsedOrigin; } /** diff --git a/shared/turnkey-core.test.js b/shared/turnkey-core.test.js index 6ed89885..d97d1636 100644 --- a/shared/turnkey-core.test.js +++ b/shared/turnkey-core.test.js @@ -130,6 +130,26 @@ describe("Shared TKHQ Utilities", () => { }); }); + describe("Parent frame messaging", () => { + it("requires a canonical, non-opaque parent origin", () => { + for (const origin of [ + "", + "*", + "null", + "not-an-origin", + "https://app.turnkey.com/path", + ]) { + expect(() => SharedTKHQ.setParentFrameOrigin(origin)).toThrow( + "a canonical, non-opaque parent frame origin is required" + ); + } + + expect(() => + SharedTKHQ.setParentFrameOrigin("https://app.turnkey.com") + ).not.toThrow(); + }); + }); + describe("Key loading and generation", () => { it("imports P256 keys", async () => { const targetPubHex =