From 332e9b57b86f67b952c11e34a5a4f268d248da79 Mon Sep 17 00:00:00 2001 From: Leeland Clenista Date: Thu, 11 Dec 2025 09:12:00 -0800 Subject: [PATCH] change local storage to session storage for keys --- .../dist/bundle.67d574dd01a5e3d636d0.js | 3 + ...undle.67d574dd01a5e3d636d0.js.LICENSE.txt} | 0 .../dist/bundle.67d574dd01a5e3d636d0.js.map | 1 + .../dist/bundle.78c912c0211a44421f40.js | 3 - .../dist/bundle.78c912c0211a44421f40.js.map | 1 - export-and-sign/dist/index.html | 2 +- export-and-sign/index.test.js | 262 +++++++++++++++++- export-and-sign/src/turnkey-core.js | 24 +- 8 files changed, 274 insertions(+), 22 deletions(-) create mode 100644 export-and-sign/dist/bundle.67d574dd01a5e3d636d0.js rename export-and-sign/dist/{bundle.78c912c0211a44421f40.js.LICENSE.txt => bundle.67d574dd01a5e3d636d0.js.LICENSE.txt} (100%) create mode 100644 export-and-sign/dist/bundle.67d574dd01a5e3d636d0.js.map delete mode 100644 export-and-sign/dist/bundle.78c912c0211a44421f40.js delete mode 100644 export-and-sign/dist/bundle.78c912c0211a44421f40.js.map diff --git a/export-and-sign/dist/bundle.67d574dd01a5e3d636d0.js b/export-and-sign/dist/bundle.67d574dd01a5e3d636d0.js new file mode 100644 index 0000000..216fc0a --- /dev/null +++ b/export-and-sign/dist/bundle.67d574dd01a5e3d636d0.js @@ -0,0 +1,3 @@ +/*! For license information please see bundle.67d574dd01a5e3d636d0.js.LICENSE.txt */ +(()=>{var e,t,r,n,o,a={662:()=>{},758:(e,t,r)=>{"use strict";var n=r(598),o=r(810);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(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;t=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}throw new TypeError(a(e)+" is not iterable")}function p(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=d(e,t,r,n,o);return a.next().then(function(e){return e.done?e.value:a.next()})}function d(e,t,r,n,o){return new y(v().w(e,t,r,n),o||Promise)}function y(e,t){function r(n,o,a,i){try{var u=e[n](o),c=u.value;return c instanceof b?t.resolve(c.v).then(function(e){r("next",e,a,i)},function(e){r("throw",e,a,i)}):t.resolve(c).then(function(e){u.value=e,a(u)},function(e){return r("throw",e,a,i)})}catch(e){i(e)}}var n;this.next||(m(y.prototype),m(y.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),m(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 v(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function a(r,n,o,a){var c=n&&n.prototype instanceof u?n:u,s=Object.create(c.prototype);return m(s,"_invoke",function(r,n,o){var a,u,c,s=0,f=o||[],p=!1,l={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,r){return a=t,u=0,c=e,l.n=r,i}};function d(r,n){for(u=r,c=n,t=0;!p&&s&&!o&&t3?(o=y===n)&&(c=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=e):a[0]<=d&&((o=r<2&&dn||n>y)&&(a[4]=r,a[5]=n,l.n=y,u=0))}if(o||r>1)return i;throw p=!0,n}return function(o,f,y){if(s>1)throw TypeError("Generator is already running");for(p&&1===f&&d(f,y),u=f,c=y;(t=u<2?e:c)||!p;){a||(u?u<3?(u>1&&(l.n=-1),d(u,c)):l.n=c:l.v=c);try{if(s=2,a){if(u||(o="next"),t=a[o]){if(!(t=t.call(a,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,u<2&&(u=0)}else 1===u&&(t=a.return)&&t.call(a),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);a=e}else if((t=(p=l.n<0)?c:r.call(n,l))!==i)break}catch(t){a=e,u=1,c=t}finally{s=1}}return{value:t,done:p}}}(r,o,a),!0),s}var i={};function u(){}function c(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(m(t={},n,function(){return this}),t),p=s.prototype=u.prototype=Object.create(f);function l(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,m(e,o,"GeneratorFunction")),e.prototype=Object.create(p),e}return c.prototype=s,m(p,"constructor",s),m(s,"constructor",c),c.displayName="GeneratorFunction",m(s,o,"GeneratorFunction"),m(p),m(p,o,"Generator"),m(p,n,function(){return this}),m(p,"toString",function(){return"[object Generator]"}),(v=function(){return{w:a,m:l}})()}function m(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}m=function(e,t,r,n){function a(t,r){m(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))},m(e,t,r,n)}function b(e,t){this.v=e,this.k=t}function h(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,u=[],c=!0,s=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=a.call(r)).done)&&(u.push(n.value),u.length!==t);c=!0);}catch(e){s=!0,o=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw o}}return u}}(e,t)||w(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 g(e){return function(e){if(Array.isArray(e))return x(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||w(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 w(e,t){if(e){if("string"==typeof e)return x(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)?x(e,t):void 0}}function x(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r1:window.parent!==window.top}function j(e){return I.apply(this,arguments)}function I(){return(I=S(s().mark(function e(t){return s().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,crypto.subtle.importKey("raw",t,{name:"ECDSA",namedCurve:"P-256"},!0,["verify"]);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}},e)}))).apply(this,arguments)}function N(){return(N=S(s().mark(function e(){return s().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!_()){e.next=2;break}throw new Error("Doubly iframed");case 2:return e.next=4,D();case 4:if(null!==e.sent){e.next=10;break}return e.next=8,T();case 8:R(e.sent);case 10:case"end":return e.stop()}},e)}))).apply(this,arguments)}function T(){return A.apply(this,arguments)}function A(){return(A=S(s().mark(function e(){var t;return s().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,crypto.subtle.generateKey({name:"ECDH",namedCurve:"P-256"},!0,["deriveBits"]);case 2:return t=e.sent,e.next=5,crypto.subtle.exportKey("jwk",t.privateKey);case 5:return e.abrupt("return",e.sent);case 6:case"end":return e.stop()}},e)}))).apply(this,arguments)}function D(){var e=M(O);return e?JSON.parse(e):null}function R(e){K(O,JSON.stringify(e),1728e5)}function K(e,t,r){var n={value:t,expiry:(new Date).getTime()+r};window.sessionStorage.setItem(e,JSON.stringify(n))}function M(e){var t=window.sessionStorage.getItem(e);if(!t)return null;var r=JSON.parse(t);return r.hasOwnProperty("expiry")&&r.hasOwnProperty("value")?(new Date).getTime()>r.expiry?(window.sessionStorage.removeItem(e),null):r.value:(window.sessionStorage.removeItem(e),null)}function U(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 G(e){return g(e).map(function(e){return e.toString(16).padStart(2,"0")}).join("")}function C(e,t){var r=t-e.length;if(r>0){var n=new Uint8Array(r).fill(0);return new Uint8Array([].concat(g(n),g(e)))}if(r<0){for(var o=-1*r,a=0,i=0;i0;)r.push(o%58),o=o/58|0}for(var i=0;i0;){var u=r[i];a=(u=void 0===u?a:58*u+a)>>8,r[i]=u%256,i++}}var c=n.concat(r.reverse());return new Uint8Array(c)}function z(){return(z=S(s().mark(function e(t,r,n){var o;return s().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:e.t0=r,e.next="SOLANA"===e.t0?3:"HEXADECIMAL"===e.t0?13:14;break;case 3:if(n){e.next=5;break}throw new Error("public key must be specified for SOLANA key format");case 5:if(32===t.length){e.next=7;break}throw new Error("invalid private key length. Expected 32 bytes. Got ".concat(t.length,"."));case 7:if(32===n.length){e.next=9;break}throw new Error("invalid public key length. Expected 32 bytes. Got ".concat(n.length,"."));case 9:return(o=new Uint8Array(64)).set(t,0),o.set(n,32),e.abrupt("return",H(o));case 13:return e.abrupt("return","0x"+G(t));case 14:return console.warn("invalid key format: ".concat(r,". Defaulting to HEXADECIMAL.")),e.abrupt("return","0x"+G(t));case 16:case"end":return e.stop()}},e)}))).apply(this,arguments)}function $(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})?)?\\))$",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=h(e,2),o=t[0],a=t[1],i=o.trim();if(0===i.length)throw new Error("css style property cannot be empty");var u=n[i];if(!u)throw new Error('invalid or unsupported css style property: "'.concat(i,'"'));var c=new RegExp(u),s=a.trim();if(0==s.length)throw new Error('css style for "'.concat(i,'" is empty'));if(!c.test(s))throw new Error('invalid css style value for property "'.concat(i,'"'));r[i]=s}),r}var q={initEmbeddedKey:function(){return N.apply(this,arguments)},generateTargetKey:T,setItemWithExpiry:K,getItemWithExpiry:M,getEmbeddedKey:D,setEmbeddedKey:R,onResetEmbeddedKey:function(){window.sessionStorage.removeItem(O),window.sessionStorage.removeItem("TURNKEY_EMBEDDED_KEY_ORIGIN")},p256JWKPrivateToPublic:function(e){return Y.apply(this,arguments)},base58Encode:H,base58Decode:J,encodeKey:function(e,t,r){return z.apply(this,arguments)},sendMessageUp:function(e,t,r){var n={type:e,value:t};r&&(n.requestId=r),P?P.postMessage(n):window.parent!==window&&window.parent.postMessage({type:e,value:t},"*"),F("⬆️ Sent message ".concat(e,": ").concat(t))},logMessage:F,uint8arrayFromHexString:U,uint8arrayToHexString:G,setParentFrameMessageChannelPort:function(e){P=e},normalizePadding:C,fromDerSignature:B,additionalAssociatedData:function(e,t){var r=Array.from(new Uint8Array(e)),n=Array.from(new Uint8Array(t));return new Uint8Array([].concat(r,n))},verifyEnclaveSignature:function(e,t,r){return L.apply(this,arguments)},getEd25519PublicKey:function(e){return n.jn.sha512Sync=function(){var e;return o.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 o=$(r.styles);Object.entries(o).forEach(function(e){var t=h(e,2),r=t[0],o=t[1];n.style[r]=o}),t.styles=o}return JSON.stringify(t)},validateStyles:$,getSettings:function(){var e=window.localStorage.getItem(k);return e?JSON.parse(e):null},setSettings:function(e){window.localStorage.setItem(k,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 U(e);try{return J(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")}},W=r(112),X=r(947),V=r.n(X),Q=r(255);function Z(e){return Z="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},Z(e)}function ee(){var e=ie(),t=e.m(ee),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,te(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(ee=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 ce(e,t)},AsyncIterator:ae,async:function(e,t,r,o,i){return(n(t)?oe:ne)(a(e),t,r,o,i)},keys:re,values:te}})()}function te(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(Z(e)+" is not iterable")}function re(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 ne(e,t,r,n,o){var a=oe(e,t,r,n,o);return a.next().then(function(e){return e.done?e.value:a.next()})}function oe(e,t,r,n,o){return new ae(ie().w(e,t,r,n),o||Promise)}function ae(e,t){function r(n,o,a,i){try{var u=e[n](o),c=u.value;return c instanceof ce?t.resolve(c.v).then(function(e){r("next",e,a,i)},function(e){r("throw",e,a,i)}):t.resolve(c).then(function(e){u.value=e,a(u)},function(e){return r("throw",e,a,i)})}catch(e){i(e)}}var n;this.next||(ue(ae.prototype),ue(ae.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),ue(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 ie(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function a(r,n,o,a){var c=n&&n.prototype instanceof u?n:u,s=Object.create(c.prototype);return ue(s,"_invoke",function(r,n,o){var a,u,c,s=0,f=o||[],p=!1,l={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,r){return a=t,u=0,c=e,l.n=r,i}};function d(r,n){for(u=r,c=n,t=0;!p&&s&&!o&&t3?(o=y===n)&&(c=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=e):a[0]<=d&&((o=r<2&&dn||n>y)&&(a[4]=r,a[5]=n,l.n=y,u=0))}if(o||r>1)return i;throw p=!0,n}return function(o,f,y){if(s>1)throw TypeError("Generator is already running");for(p&&1===f&&d(f,y),u=f,c=y;(t=u<2?e:c)||!p;){a||(u?u<3?(u>1&&(l.n=-1),d(u,c)):l.n=c:l.v=c);try{if(s=2,a){if(u||(o="next"),t=a[o]){if(!(t=t.call(a,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,u<2&&(u=0)}else 1===u&&(t=a.return)&&t.call(a),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);a=e}else if((t=(p=l.n<0)?c:r.call(n,l))!==i)break}catch(t){a=e,u=1,c=t}finally{s=1}}return{value:t,done:p}}}(r,o,a),!0),s}var i={};function u(){}function c(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(ue(t={},n,function(){return this}),t),p=s.prototype=u.prototype=Object.create(f);function l(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,ue(e,o,"GeneratorFunction")),e.prototype=Object.create(p),e}return c.prototype=s,ue(p,"constructor",s),ue(s,"constructor",c),c.displayName="GeneratorFunction",ue(s,o,"GeneratorFunction"),ue(p),ue(p,o,"Generator"),ue(p,n,function(){return this}),ue(p,"toString",function(){return"[object Generator]"}),(ie=function(){return{w:a,m:l}})()}function ue(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}ue=function(e,t,r,n){function a(t,r){ue(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))},ue(e,t,r,n)}function ce(e,t){this.v=e,this.k=t}function se(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 fe(e){for(var t=1;t=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}throw new TypeError(me(e)+" is not iterable")}function Ee(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 Se(e,t,r,n,o){var a=Oe(e,t,r,n,o);return a.next().then(function(e){return e.done?e.value:a.next()})}function Oe(e,t,r,n,o){return new ke(Pe().w(e,t,r,n),o||Promise)}function ke(e,t){function r(n,o,a,i){try{var u=e[n](o),c=u.value;return c instanceof je?t.resolve(c.v).then(function(e){r("next",e,a,i)},function(e){r("throw",e,a,i)}):t.resolve(c).then(function(e){u.value=e,a(u)},function(e){return r("throw",e,a,i)})}catch(e){i(e)}}var n;this.next||(_e(ke.prototype),_e(ke.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),_e(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 Pe(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function a(r,n,o,a){var c=n&&n.prototype instanceof u?n:u,s=Object.create(c.prototype);return _e(s,"_invoke",function(r,n,o){var a,u,c,s=0,f=o||[],p=!1,l={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,r){return a=t,u=0,c=e,l.n=r,i}};function d(r,n){for(u=r,c=n,t=0;!p&&s&&!o&&t3?(o=y===n)&&(c=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=e):a[0]<=d&&((o=r<2&&dn||n>y)&&(a[4]=r,a[5]=n,l.n=y,u=0))}if(o||r>1)return i;throw p=!0,n}return function(o,f,y){if(s>1)throw TypeError("Generator is already running");for(p&&1===f&&d(f,y),u=f,c=y;(t=u<2?e:c)||!p;){a||(u?u<3?(u>1&&(l.n=-1),d(u,c)):l.n=c:l.v=c);try{if(s=2,a){if(u||(o="next"),t=a[o]){if(!(t=t.call(a,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,u<2&&(u=0)}else 1===u&&(t=a.return)&&t.call(a),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);a=e}else if((t=(p=l.n<0)?c:r.call(n,l))!==i)break}catch(t){a=e,u=1,c=t}finally{s=1}}return{value:t,done:p}}}(r,o,a),!0),s}var i={};function u(){}function c(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(_e(t={},n,function(){return this}),t),p=s.prototype=u.prototype=Object.create(f);function l(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,_e(e,o,"GeneratorFunction")),e.prototype=Object.create(p),e}return c.prototype=s,_e(p,"constructor",s),_e(s,"constructor",c),c.displayName="GeneratorFunction",_e(s,o,"GeneratorFunction"),_e(p),_e(p,o,"Generator"),_e(p,n,function(){return this}),_e(p,"toString",function(){return"[object Generator]"}),(Pe=function(){return{w:a,m:l}})()}function _e(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}_e=function(e,t,r,n){function a(t,r){_e(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))},_e(e,t,r,n)}function je(e,t){this.v=e,this.k=t}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,o,a,i,u=[],c=!0,s=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=a.call(r)).done)&&(u.push(n.value),u.length!==t);c=!0);}catch(e){s=!0,o=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw o}}return u}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Ne(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)?Ne(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 Ne(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 22:if(u.organizationId&&u.organizationId===r){e.next=24;break}throw new Error("organization id does not match expected value. Expected: ".concat(r,". Found: ").concat(u.organizationId,"."));case 24:if(u.encappedPublic){e.next=26;break}throw new Error('missing "encappedPublic" in bundle signed data');case 26:if(u.ciphertext){e.next=28;break}throw new Error('missing "ciphertext" in bundle signed data');case 28:return o=q.uint8arrayFromHexString(u.encappedPublic),a=q.uint8arrayFromHexString(u.ciphertext),e.abrupt("break",32);case 31:throw new Error("unsupported version: ".concat(i.version));case 32:return e.next=34,q.getEmbeddedKey();case 34:return c=e.sent,e.next=37,n({ciphertextBuf:a,encappedKeyBuf:o,receiverPrivJwk:c});case 37:return e.abrupt("return",e.sent);case 38:case"end":return e.stop()}},e)})),Ue.apply(this,arguments)}function Ge(e){return Ce.apply(this,arguments)}function Ce(){return(Ce=Ae(we().mark(function e(t){var r,n,o;return we().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(r=q.getEmbeddedKey()){e.next=4;break}return q.sendMessageUp("EMBEDDED_PUBLIC_KEY","",t),e.abrupt("return");case 4:return e.next=6,q.p256JWKPrivateToPublic(r);case 6:n=e.sent,o=q.uint8arrayToHexString(n),q.sendMessageUp("EMBEDDED_PUBLIC_KEY",o,t);case 9:case"end":return e.stop()}},e)}))).apply(this,arguments)}function Be(e,t,r,n,o,a){return Le.apply(this,arguments)}function Le(){return Le=Ae(we().mark(function e(t,r,n,o,a,i){var u,c,s,f,p,l,d;return we().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Me(n,r,i);case 2:if(u=e.sent,s=new Uint8Array(u),"SOLANA"!==o){e.next=12;break}return f=q.uint8arrayToHexString(s.subarray(0,32)),p=q.getEd25519PublicKey(f),e.next=9,q.encodeKey(s,o,p);case 9:c=e.sent,e.next=15;break;case 12:return e.next=14,q.encodeKey(s,o);case 14:c=e.sent;case 15:if(l=a||"default","SOLANA"!==o){e.next=20;break}d=W.AX.fromSecretKey(q.base58Decode(c)),e.next=24;break;case 20:if("HEXADECIMAL"!==o){e.next=24;break}return e.next=23,Xe(Array.from(q.uint8arrayFromHexString(c)));case 23:d=e.sent;case 24:De=he(he({},De),{},ge({},l,{organizationId:r,privateKey:c,format:o,expiry:(new Date).getTime()+864e5,keypair:d})),q.sendMessageUp("BUNDLE_INJECTED",!0,t);case 26:case"end":return e.stop()}},e)})),Le.apply(this,arguments)}function Fe(e,t){return Ye.apply(this,arguments)}function Ye(){return(Ye=Ae(we().mark(function e(t,r){var n;return we().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:n=q.applySettings(t),q.setSettings(n),q.sendMessageUp("SETTINGS_APPLIED",!0,r);case 3:case"end":return e.stop()}},e)}))).apply(this,arguments)}function He(e,t,r){return Je.apply(this,arguments)}function Je(){return(Je=Ae(we().mark(function e(t,r,n){var o,a,i,u,c,s,f,p,l;return we().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(Ze(a=De[o=n||"default"],o)){e.next=4;break}return e.abrupt("return");case 4:return e.next=6,et(a);case 6:if(i=e.sent,u=JSON.parse(r),c=u.transaction,"SOLANA"!==u.type){e.next=17;break}f=q.uint8arrayFromHexString(c),(p=W.Kt.deserialize(f)).sign([i]),s=p.serialize(),e.next=18;break;case 17:throw new Error("unsupported transaction type");case 18:l=q.uint8arrayToHexString(s),q.sendMessageUp("TRANSACTION_SIGNED",l,t);case 20:case"end":return e.stop()}},e)}))).apply(this,arguments)}function ze(e,t,r){return $e.apply(this,arguments)}function $e(){return($e=Ae(we().mark(function e(t,r,n){var o,a,i,u,c,s,f,p,l;return we().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(Ze(a=De[o=n||"default"],o)){e.next=4;break}return e.abrupt("return");case 4:return i=JSON.parse(r),u=i.message,c=i.type,s=Re.encode(u),e.next=10,et(a);case 10:if(p=e.sent,"SOLANA"!==c){e.next=16;break}l=V().sign.detached(s,p.secretKey),f=q.uint8arrayToHexString(l),e.next=18;break;case 16:return q.sendMessageUp("ERROR","unsupported message type",t),e.abrupt("return");case 18:q.sendMessageUp("MESSAGE_SIGNED",f,t);case 19:case"end":return e.stop()}},e)}))).apply(this,arguments)}function qe(e,t){return We.apply(this,arguments)}function We(){return(We=Ae(we().mark(function e(t,r){return we().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(r){e.next=4;break}return De={},q.sendMessageUp("EMBEDDED_PRIVATE_KEY_CLEARED",!0,t),e.abrupt("return");case 4:if(De[r]){e.next=7;break}return q.sendMessageUp("ERROR",new Error("key not found for address ".concat(r,". Note that address is case sensitive.")).toString(),t),e.abrupt("return");case 7:delete De[r],q.sendMessageUp("EMBEDDED_PRIVATE_KEY_CLEARED",!0,t);case 9:case"end":return e.stop()}},e)}))).apply(this,arguments)}function Xe(e){return Ve.apply(this,arguments)}function Ve(){return(Ve=Ae(we().mark(function e(t){var r,n;return we().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(32!==(r=q.parsePrivateKey(t)).length){e.next=5;break}n=W.AX.fromSeed(r),e.next=10;break;case 5:if(64!==r.length){e.next=9;break}n=W.AX.fromSecretKey(r),e.next=10;break;case 9:throw new Error("Invalid private key length: ".concat(r.length,". Expected 32 or 64 bytes."));case 10:return e.abrupt("return",n);case 11:case"end":return e.stop()}},e)}))).apply(this,arguments)}function Qe(e){De[e]&&delete De[e]}function Ze(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(a)}for(var u=0,c=t;u=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}throw new TypeError(nt(e)+" is not iterable")}function it(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 ut(e,t,r,n,o){var a=ct(e,t,r,n,o);return a.next().then(function(e){return e.done?e.value:a.next()})}function ct(e,t,r,n,o){return new st(ft().w(e,t,r,n),o||Promise)}function st(e,t){function r(n,o,a,i){try{var u=e[n](o),c=u.value;return c instanceof lt?t.resolve(c.v).then(function(e){r("next",e,a,i)},function(e){r("throw",e,a,i)}):t.resolve(c).then(function(e){u.value=e,a(u)},function(e){return r("throw",e,a,i)})}catch(e){i(e)}}var n;this.next||(pt(st.prototype),pt(st.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),pt(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 ft(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function a(r,n,o,a){var c=n&&n.prototype instanceof u?n:u,s=Object.create(c.prototype);return pt(s,"_invoke",function(r,n,o){var a,u,c,s=0,f=o||[],p=!1,l={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,r){return a=t,u=0,c=e,l.n=r,i}};function d(r,n){for(u=r,c=n,t=0;!p&&s&&!o&&t3?(o=y===n)&&(c=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=e):a[0]<=d&&((o=r<2&&dn||n>y)&&(a[4]=r,a[5]=n,l.n=y,u=0))}if(o||r>1)return i;throw p=!0,n}return function(o,f,y){if(s>1)throw TypeError("Generator is already running");for(p&&1===f&&d(f,y),u=f,c=y;(t=u<2?e:c)||!p;){a||(u?u<3?(u>1&&(l.n=-1),d(u,c)):l.n=c:l.v=c);try{if(s=2,a){if(u||(o="next"),t=a[o]){if(!(t=t.call(a,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,u<2&&(u=0)}else 1===u&&(t=a.return)&&t.call(a),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);a=e}else if((t=(p=l.n<0)?c:r.call(n,l))!==i)break}catch(t){a=e,u=1,c=t}finally{s=1}}return{value:t,done:p}}}(r,o,a),!0),s}var i={};function u(){}function c(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(pt(t={},n,function(){return this}),t),p=s.prototype=u.prototype=Object.create(f);function l(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,pt(e,o,"GeneratorFunction")),e.prototype=Object.create(p),e}return c.prototype=s,pt(p,"constructor",s),pt(s,"constructor",c),c.displayName="GeneratorFunction",pt(s,o,"GeneratorFunction"),pt(p),pt(p,o,"Generator"),pt(p,n,function(){return this}),pt(p,"toString",function(){return"[object Generator]"}),(ft=function(){return{w:a,m:l}})()}function pt(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}pt=function(e,t,r,n){function a(t,r){pt(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))},pt(e,t,r,n)}function lt(e,t){this.v=e,this.k=t}function dt(e,t,r,n,o,a,i){try{var u=e[a](i),c=u.value}catch(e){return void r(e)}u.done?t(c):Promise.resolve(c).then(n,o)}function yt(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var a=e.apply(t,r);function i(e){dt(a,n,o,i,u,"next",e)}function u(e){dt(a,n,o,i,u,"throw",e)}i(void 0)})}}window.TKHQ=q,document.addEventListener("DOMContentLoaded",yt(ot().mark(function e(){var t,r,n,o;return ot().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,q.initEmbeddedKey();case 2:return e.next=4,q.getEmbeddedKey();case 4:return t=e.sent,e.next=7,q.p256JWKPrivateToPublic(t);case 7:r=e.sent,n=q.uint8arrayToHexString(r),document.getElementById("embedded-key").value=n,rt(ye),(o=q.getSettings())&&q.applySettings(o),q.sendMessageUp("PUBLIC_KEY_READY",n);case 14:case"end":return e.stop()}},e)}))),window.addEventListener("message",function(){var e=yt(ot().mark(function e(t){var r,n,o,a,i;return ot().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!t.data||"TURNKEY_INIT_MESSAGE_CHANNEL"!=t.data.type||null===(r=t.ports)||void 0===r||!r[0]){e.next=15;break}return(n=t.ports[0]).onmessage=rt(ye).messageEventListener,q.setParentFrameMessageChannelPort(n),e.next=6,q.initEmbeddedKey();case 6:return e.next=8,q.getEmbeddedKey();case 8:return o=e.sent,e.next=11,q.p256JWKPrivateToPublic(o);case 11:a=e.sent,i=q.uint8arrayToHexString(a),document.getElementById("embedded-key").value=i,q.sendMessageUp("PUBLIC_KEY_READY",i);case 15:case"end":return e.stop()}},e)}));return function(t){return e.apply(this,arguments)}}())},790:()=>{}},i={};function u(e){var t=i[e];if(void 0!==t)return t.exports;var r=i[e]={id:e,loaded:!1,exports:{}};return a[e].call(r.exports,r,r.exports,u),r.loaded=!0,r.exports}u.m=a,e=[],u.O=(t,r,n,o)=>{if(!r){var a=1/0;for(f=0;f=o)&&Object.keys(u.O).every(e=>u.O[e](r[c]))?r.splice(c--,1):(i=!1,o0&&e[f-1][2]>o;f--)e[f]=e[f-1];e[f]=[r,n,o]},u.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return u.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,u.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 o=Object.create(null);u.r(o);var a={};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=>a[t]=()=>e[t]);return a.default=()=>e,u.d(o,a),o},u.d=(e,t)=>{for(var r in t)u.o(t,r)&&!u.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},u.f={},u.e=e=>Promise.all(Object.keys(u.f).reduce((t,r)=>(u.f[r](e,t),t),[])),u.u=e=>"bundle."+{291:"3eaea85f4001b9cc63c3",825:"aaba32bf7338e3d0f1cc"}[e]+".js",u.miniCssF=e=>{},u.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n={},o="export-and-sign:",u.l=(e,t,r,a)=>{if(n[e])n[e].push(t);else{var i,c;if(void 0!==r)for(var s=document.getElementsByTagName("script"),f=0;f{i.onerror=i.onload=null,clearTimeout(d);var o=n[e];if(delete n[e],i.parentNode&&i.parentNode.removeChild(i),o&&o.forEach(e=>e(r)),t)return t(r)},d=setTimeout(l.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=l.bind(null,i.onerror),i.onload=l.bind(null,i.onload),c&&document.head.appendChild(i)}},u.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},u.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),u.p="/",(()=>{var e={792:0};u.f.j=(t,r)=>{var n=u.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise((r,o)=>n=e[t]=[r,o]);r.push(n[2]=o);var a=u.p+u.u(t),i=new Error;u.l(a,r=>{if(u.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;i.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",i.name="ChunkLoadError",i.type=o,i.request=a,n[1](i)}},"chunk-"+t,t)}},u.O.j=t=>0===e[t];var t=(t,r)=>{var n,o,[a,i,c]=r,s=0;if(a.some(t=>0!==e[t])){for(n in i)u.o(i,n)&&(u.m[n]=i[n]);if(c)var f=c(u)}for(t&&t(r);su(758));c=u.O(c)})(); +//# sourceMappingURL=bundle.67d574dd01a5e3d636d0.js.map \ No newline at end of file diff --git a/export-and-sign/dist/bundle.78c912c0211a44421f40.js.LICENSE.txt b/export-and-sign/dist/bundle.67d574dd01a5e3d636d0.js.LICENSE.txt similarity index 100% rename from export-and-sign/dist/bundle.78c912c0211a44421f40.js.LICENSE.txt rename to export-and-sign/dist/bundle.67d574dd01a5e3d636d0.js.LICENSE.txt diff --git a/export-and-sign/dist/bundle.67d574dd01a5e3d636d0.js.map b/export-and-sign/dist/bundle.67d574dd01a5e3d636d0.js.map new file mode 100644 index 0000000..4ccbafc --- /dev/null +++ b/export-and-sign/dist/bundle.67d574dd01a5e3d636d0.js.map @@ -0,0 +1 @@ +{"version":3,"file":"bundle.67d574dd01a5e3d636d0.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/./src/turnkey-core.js","webpack://export-and-sign/./src/crypto-utils.js","webpack://export-and-sign/./src/event-handlers.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/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/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}\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};","/**\n * Turnkey Core Module\n * Contains all the core cryptographic and utility functions\n */\n\nimport * as nobleEd25519 from \"@noble/ed25519\";\nimport * as nobleHashes from \"@noble/hashes/sha512\";\n\n/** constant for LocalStorage */\nconst TURNKEY_EMBEDDED_KEY = \"TURNKEY_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;\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// 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 * Loads the quorum public key as a CryptoKey.\n */\nasync function loadQuorumKey(quorumPublic) {\n return await crypto.subtle.importKey(\n \"raw\",\n quorumPublic,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n [\"verify\"]\n );\n}\n\n/**\n * Creates a new public/private key pair and persists it in sessionStorage\n * Uses sessionStorage for tab isolation to prevent cross-tab key leakage.\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 p256key = await crypto.subtle.generateKey(\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n [\"deriveBits\"]\n );\n\n return await crypto.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\nfunction setParentFrameMessageChannelPort(port) {\n parentFrameMessageChannelPort = port;\n}\n\n/**\n * Resets the current embedded private key JWK.\n * Uses sessionStorage for tab isolation.\n */\nfunction onResetEmbeddedKey() {\n window.sessionStorage.removeItem(TURNKEY_EMBEDDED_KEY);\n window.sessionStorage.removeItem(TURNKEY_EMBEDDED_KEY_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 sessionStorage with an expiration time\n * Uses sessionStorage for embedded keys to provide tab isolation.\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.sessionStorage.setItem(key, JSON.stringify(item));\n}\n\n/**\n * Get an item from sessionStorage. Returns `null` and\n * removes the item from sessionStorage if expired or\n * expiry time is missing.\n * Uses sessionStorage for embedded keys to provide tab isolation.\n * @param {string} key\n */\nfunction getItemWithExpiry(key) {\n const itemStr = window.sessionStorage.getItem(key);\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n if (!item.hasOwnProperty(\"expiry\") || !item.hasOwnProperty(\"value\")) {\n window.sessionStorage.removeItem(key);\n return null;\n }\n const now = new Date();\n if (now.getTime() > item.expiry) {\n window.sessionStorage.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 };\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 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 * 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 decoded = BigInt(0);\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 * 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 const concatenatedBytes = new Uint8Array(64);\n concatenatedBytes.set(privateKeyBytes, 0);\n concatenatedBytes.set(publicKeyBytes, 32);\n return base58Encode(concatenatedBytes);\n case \"HEXADECIMAL\":\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n default:\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\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 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 * @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 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/**\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 {\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 TKHQ.p256JWKPrivateToPublic(receiverPrivJwk);\n var aad = TKHQ.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","import { TKHQ } from \"./turnkey-core.js\";\nimport { Keypair, VersionedTransaction } from \"@solana/web3.js\";\nimport nacl from \"tweetnacl\";\nimport { HpkeDecrypt } from \"./crypto-utils.js\";\n\n// Persist keys in memory via mapping of { address --> pk }\nlet inMemoryKeys = {};\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 * 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 let encappedKeyBuf;\n let ciphertextBuf;\n let verified;\n\n // Parse the import bundle\n const bundleObj = JSON.parse(bundle);\n switch (bundleObj.version) {\n case \"v1.0.0\":\n // Validate fields exist\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 // Verify enclave signature\n if (!TKHQ.verifyEnclaveSignature) {\n throw new Error(\"method not loaded\");\n }\n verified = await TKHQ.verifyEnclaveSignature(\n bundleObj.enclaveQuorumPublic,\n bundleObj.dataSignature,\n bundleObj.data\n );\n if (!verified) {\n throw new Error(`failed to verify enclave signature: ${bundle}`);\n }\n\n // Parse the signed data. The data is produced by JSON encoding followed by hex encoding. We reverse this here.\n const signedData = JSON.parse(\n textDecoder.decode(TKHQ.uint8arrayFromHexString(bundleObj.data))\n );\n\n // Validate fields match\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 encappedKeyBuf = TKHQ.uint8arrayFromHexString(signedData.encappedPublic);\n ciphertextBuf = TKHQ.uint8arrayFromHexString(signedData.ciphertext);\n break;\n default:\n throw new Error(`unsupported version: ${bundleObj.version}`);\n }\n\n // Decrypt the ciphertext\n const embeddedKeyJwk = await TKHQ.getEmbeddedKey();\n return await HpkeDecrypt({\n ciphertextBuf,\n encappedKeyBuf,\n receiverPrivJwk: embeddedKeyJwk,\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 * 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 // Parse the decrypted key bytes\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 // Set in memory\n // If no address provided, use a default key\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, // Cache the keypair for performance\n },\n };\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 // Get or create keypair (uses cached keypair if available)\n const keypair = await getOrCreateKeypair(key);\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 // 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 {\n throw new Error(\"unsupported transaction type\");\n }\n\n const signedTransactionHex = 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 // Get or create keypair (uses cached keypair if available)\n const keypair = await getOrCreateKeypair(key);\n\n if (messageType === \"SOLANA\") {\n // Sign the message\n const signature = nacl.sign.detached(messageBytes, keypair.secretKey);\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 {\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// 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 * 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( `key bytes not found. Please re-inject export bundle for address ${keyAddress} into iframe. Note that address is case sensitive.`).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 * 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 onInjectWalletBundle(\n event.data[\"value\"],\n event.data[\"organizationId\"],\n event.data[\"requestId\"],\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 };\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 // 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 // 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};\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 \"./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\n// Init MessageChannel for communication between iframe <> parent page\nwindow.addEventListener(\"message\", async function (event) {\n if (\n event.data &&\n event.data[\"type\"] == \"TURNKEY_INIT_MESSAGE_CHANNEL\" &&\n event.ports?.[0]\n ) {\n const iframeMessagePort = event.ports[0];\n iframeMessagePort.onmessage =\n initEventHandlers(HpkeDecrypt).messageEventListener;\n\n TKHQ.setParentFrameMessageChannelPort(iframeMessagePort);\n\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 TKHQ.sendMessageUp(\"PUBLIC_KEY_READY\", targetPubHex);\n }\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\":\"3eaea85f4001b9cc63c3\",\"825\":\"aaba32bf7338e3d0f1cc\"}[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__.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 = \"/\";","// 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__(758)))\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","_OverloadYield","k","_slicedToArray","Array","isArray","_arrayWithHoles","next","push","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_toConsumableArray","_arrayLikeToArray","_arrayWithoutHoles","from","_iterableToArray","_nonIterableSpread","toString","slice","constructor","name","test","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","TURNKEY_EMBEDDED_KEY","TURNKEY_SETTINGS","parentFrameMessageChannelPort","isDoublyIframed","undefined","window","location","ancestorOrigins","parent","top","loadQuorumKey","_x","_loadQuorumKey","_regeneratorRuntime","mark","_callee","quorumPublic","wrap","_context","prev","crypto","subtle","importKey","namedCurve","abrupt","sent","stop","_initEmbeddedKey","_callee2","_context2","Error","getEmbeddedKey","generateTargetKey","setEmbeddedKey","_generateTargetKey","_callee3","p256key","_context3","generateKey","exportKey","privateKey","jwtKey","getItemWithExpiry","JSON","parse","targetKey","setItemWithExpiry","stringify","key","ttl","item","expiry","Date","getTime","sessionStorage","setItem","itemStr","getItem","hasOwnProperty","removeItem","uint8arrayFromHexString","hexString","hexWithoutPrefix","startsWith","Uint8Array","match","map","h","parseInt","uint8arrayToHexString","buffer","x","padStart","join","normalizePadding","byteArray","targetLength","paddingLength","padding","fill","concat","expectedZeroCount","zeroCount","fromDerSignature","derSignature","derSignatureBuf","index","rLength","sLength","s","rPadded","sPadded","_verifyEnclaveSignature","_callee4","enclaveQuorumPublic","publicSignature","signedData","TURNKEY_SIGNERS_ENCLAVES","environment","TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY","encryptionQuorumPublicBuf","quorumKey","publicSignatureBuf","signedDataBuf","_context4","prod","preprod","__TURNKEY_SIGNER_ENVIRONMENT__","verify","hash","logMessage","content","messageLog","document","getElementById","message","createElement","innerText","appendChild","_p256JWKPrivateToPublic","_callee5","jwkPrivate","jwkPrivateCopy","publicKey","_context5","_objectSpread","key_ops","base58Encode","bytes","result","digits","carry","j","base58Decode","alphabet","decodedBytes","BigInt","leadingZeros","indexOf","currentByte","reverse","_encodeKey","_callee6","privateKeyBytes","keyFormat","publicKeyBytes","concatenatedBytes","_context6","t0","set","console","warn","validateStyles","styles","element","validStyles","cssValidationRegex","margin","borderWidth","borderStyle","borderColor","borderRadius","fontSize","fontWeight","fontFamily","color","backgroundColor","width","height","maxWidth","maxHeight","lineHeight","boxShadow","textAlign","overflowWrap","wordWrap","resize","entries","forEach","_ref","_ref2","property","styleProperty","trim","styleRegexStr","styleRegex","RegExp","styleValue","TKHQ","initEmbeddedKey","onResetEmbeddedKey","p256JWKPrivateToPublic","_x5","encodeKey","_x6","_x7","_x8","sendMessageUp","type","requestId","postMessage","setParentFrameMessageChannelPort","port","additionalAssociatedData","senderPubBuf","receiverPubBuf","verifyEnclaveSignature","_x2","_x3","_x4","getEd25519PublicKey","privateKeyHex","nobleEd25519","sha512Sync","_nobleEd25519$etc","nobleHashes","concatBytes","applySettings","settings","validSettings","settingsObj","keyDivTextarea","_ref3","_ref4","style","getSettings","localStorage","setSettings","parsePrivateKey","error","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","_defineProperty","getOwnPropertyDescriptors","defineProperties","_typeof","toPrimitive","String","_toPrimitive","_toPropertyKey","TURNKEY_HPKE_INFO","TextEncoder","encode","HpkeDecrypt","_HpkeDecrypt","ciphertextBuf","encappedKeyBuf","receiverPrivJwk","kemContext","receiverPriv","suite","recipientCtx","aad","res","DhkemP256HkdfSha256","CipherSuite","kem","kdf","HkdfSha256","aead","Aes256Gcm","createRecipientContext","recipientKey","enc","info","open","inMemoryKeys","textEncoder","textDecoder","TextDecoder","decryptBundle","_decryptBundle","_callee8","bundle","organizationId","bundleObj","embeddedKeyJwk","_context8","version","data","dataSignature","decode","encappedPublic","ciphertext","onGetPublicEmbeddedKey","_onGetPublicEmbeddedKey","_callee9","targetPubBuf","targetPubHex","_context9","onInjectKeyBundle","_x9","_x10","_onInjectKeyBundle","_callee10","address","keyBytes","keyAddress","cachedKeypair","_context10","subarray","Keypair","fromSecretKey","createSolanaKeypair","format","keypair","onApplySettings","_x11","_x12","_onApplySettings","_callee11","_context11","onSignTransaction","_x13","_x14","_x15","_onSignTransaction","_callee12","serializedTransaction","transactionWrapper","transactionToSign","signedTransaction","transactionBytes","transaction","signedTransactionHex","_context12","validateKey","getOrCreateKeypair","VersionedTransaction","deserialize","sign","serialize","onSignMessage","_x16","_x17","_x18","_onSignMessage","_callee13","serializedMessage","messageWrapper","messageToSign","messageType","messageBytes","signatureHex","signature","_context13","nacl","detached","secretKey","onClearEmbeddedPrivateKey","_x19","_x20","_onClearEmbeddedPrivateKey","_callee14","_context14","_x21","_createSolanaKeypair","_callee15","_context15","fromSeed","clearExpiredKey","now","addressesToRemove","_i","_Object$entries","_Object$entries$_i","_i2","_addressesToRemove","clearAllExpiredKeys","getKeyNotFoundErrorMessage","_x22","_getOrCreateKeypair","_callee16","_context16","initEventHandlers","messageEventListener","_messageEventListener","event","onInjectWalletBundle","t1","t2","t3","t4","t5","t6","_x28","initMessageEventListener","messageListenerController","AbortController","turnkeyInitController","addEventListener","preventDefault","_x23","_x24","_x25","_x26","injectWalletBtn","_ref5","_x27","addDOMEventListeners","capture","signal","_ref6","_callee7","_event$ports","iframeMessagePort","_context7","ports","abort","onmessage","origin","_x29","styleSettings","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","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","prop","url","script","needAttach","scripts","getElementsByTagName","getAttribute","charset","nc","setAttribute","src","onScriptComplete","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.78c912c0211a44421f40.js b/export-and-sign/dist/bundle.78c912c0211a44421f40.js deleted file mode 100644 index b8d76fa..0000000 --- a/export-and-sign/dist/bundle.78c912c0211a44421f40.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see bundle.78c912c0211a44421f40.js.LICENSE.txt */ -(()=>{var e,t,r,n,o,a={662:()=>{},758:(e,t,r)=>{"use strict";var n=r(598),o=r(810);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(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;t=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}throw new TypeError(a(e)+" is not iterable")}function l(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 p(e,t,r,n,o){var a=d(e,t,r,n,o);return a.next().then(function(e){return e.done?e.value:a.next()})}function d(e,t,r,n,o){return new y(v().w(e,t,r,n),o||Promise)}function y(e,t){function r(n,o,a,i){try{var u=e[n](o),c=u.value;return c instanceof b?t.resolve(c.v).then(function(e){r("next",e,a,i)},function(e){r("throw",e,a,i)}):t.resolve(c).then(function(e){u.value=e,a(u)},function(e){return r("throw",e,a,i)})}catch(e){i(e)}}var n;this.next||(m(y.prototype),m(y.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),m(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 v(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function a(r,n,o,a){var c=n&&n.prototype instanceof u?n:u,s=Object.create(c.prototype);return m(s,"_invoke",function(r,n,o){var a,u,c,s=0,f=o||[],l=!1,p={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,r){return a=t,u=0,c=e,p.n=r,i}};function d(r,n){for(u=r,c=n,t=0;!l&&s&&!o&&t3?(o=y===n)&&(c=a[(u=a[4])?5:(u=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,u=0))}if(o||r>1)return i;throw l=!0,n}return function(o,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&d(f,y),u=f,c=y;(t=u<2?e:c)||!l;){a||(u?u<3?(u>1&&(p.n=-1),d(u,c)):p.n=c:p.v=c);try{if(s=2,a){if(u||(o="next"),t=a[o]){if(!(t=t.call(a,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,u<2&&(u=0)}else 1===u&&(t=a.return)&&t.call(a),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);a=e}else if((t=(l=p.n<0)?c:r.call(n,p))!==i)break}catch(t){a=e,u=1,c=t}finally{s=1}}return{value:t,done:l}}}(r,o,a),!0),s}var i={};function u(){}function c(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(m(t={},n,function(){return this}),t),l=s.prototype=u.prototype=Object.create(f);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,m(e,o,"GeneratorFunction")),e.prototype=Object.create(l),e}return c.prototype=s,m(l,"constructor",s),m(s,"constructor",c),c.displayName="GeneratorFunction",m(s,o,"GeneratorFunction"),m(l),m(l,o,"Generator"),m(l,n,function(){return this}),m(l,"toString",function(){return"[object Generator]"}),(v=function(){return{w:a,m:p}})()}function m(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}m=function(e,t,r,n){function a(t,r){m(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))},m(e,t,r,n)}function b(e,t){this.v=e,this.k=t}function h(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,u=[],c=!0,s=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=a.call(r)).done)&&(u.push(n.value),u.length!==t);c=!0);}catch(e){s=!0,o=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw o}}return u}}(e,t)||w(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 g(e){return function(e){if(Array.isArray(e))return x(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||w(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 w(e,t){if(e){if("string"==typeof e)return x(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)?x(e,t):void 0}}function x(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r1:window.parent!==window.top}function j(e){return I.apply(this,arguments)}function I(){return(I=S(s().mark(function e(t){return s().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,crypto.subtle.importKey("raw",t,{name:"ECDSA",namedCurve:"P-256"},!0,["verify"]);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}},e)}))).apply(this,arguments)}function N(){return(N=S(s().mark(function e(){return s().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!_()){e.next=2;break}throw new Error("Doubly iframed");case 2:return e.next=4,D();case 4:if(null!==e.sent){e.next=10;break}return e.next=8,T();case 8:R(e.sent);case 10:case"end":return e.stop()}},e)}))).apply(this,arguments)}function T(){return A.apply(this,arguments)}function A(){return(A=S(s().mark(function e(){var t;return s().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,crypto.subtle.generateKey({name:"ECDH",namedCurve:"P-256"},!0,["deriveBits"]);case 2:return t=e.sent,e.next=5,crypto.subtle.exportKey("jwk",t.privateKey);case 5:return e.abrupt("return",e.sent);case 6:case"end":return e.stop()}},e)}))).apply(this,arguments)}function D(){var e=M(O);return e?JSON.parse(e):null}function R(e){K(O,JSON.stringify(e),1728e5)}function K(e,t,r){var n={value:t,expiry:(new Date).getTime()+r};window.localStorage.setItem(e,JSON.stringify(n))}function M(e){var t=window.localStorage.getItem(e);if(!t)return null;var r=JSON.parse(t);return r.hasOwnProperty("expiry")&&r.hasOwnProperty("value")?(new Date).getTime()>r.expiry?(window.localStorage.removeItem(e),null):r.value:(window.localStorage.removeItem(e),null)}function U(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 G(e){return g(e).map(function(e){return e.toString(16).padStart(2,"0")}).join("")}function C(e,t){var r=t-e.length;if(r>0){var n=new Uint8Array(r).fill(0);return new Uint8Array([].concat(g(n),g(e)))}if(r<0){for(var o=-1*r,a=0,i=0;i0;)r.push(o%58),o=o/58|0}for(var i=0;i0;){var u=r[i];a=(u=void 0===u?a:58*u+a)>>8,r[i]=u%256,i++}}var c=n.concat(r.reverse());return new Uint8Array(c)}function z(){return(z=S(s().mark(function e(t,r,n){var o;return s().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:e.t0=r,e.next="SOLANA"===e.t0?3:"HEXADECIMAL"===e.t0?13:14;break;case 3:if(n){e.next=5;break}throw new Error("public key must be specified for SOLANA key format");case 5:if(32===t.length){e.next=7;break}throw new Error("invalid private key length. Expected 32 bytes. Got ".concat(t.length,"."));case 7:if(32===n.length){e.next=9;break}throw new Error("invalid public key length. Expected 32 bytes. Got ".concat(n.length,"."));case 9:return(o=new Uint8Array(64)).set(t,0),o.set(n,32),e.abrupt("return",H(o));case 13:return e.abrupt("return","0x"+G(t));case 14:return console.warn("invalid key format: ".concat(r,". Defaulting to HEXADECIMAL.")),e.abrupt("return","0x"+G(t));case 16:case"end":return e.stop()}},e)}))).apply(this,arguments)}function $(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})?)?\\))$",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=h(e,2),o=t[0],a=t[1],i=o.trim();if(0===i.length)throw new Error("css style property cannot be empty");var u=n[i];if(!u)throw new Error('invalid or unsupported css style property: "'.concat(i,'"'));var c=new RegExp(u),s=a.trim();if(0==s.length)throw new Error('css style for "'.concat(i,'" is empty'));if(!c.test(s))throw new Error('invalid css style value for property "'.concat(i,'"'));r[i]=s}),r}var q={initEmbeddedKey:function(){return N.apply(this,arguments)},generateTargetKey:T,setItemWithExpiry:K,getItemWithExpiry:M,getEmbeddedKey:D,setEmbeddedKey:R,onResetEmbeddedKey:function(){window.localStorage.removeItem(O),window.localStorage.removeItem("TURNKEY_EMBEDDED_KEY_ORIGIN")},p256JWKPrivateToPublic:function(e){return Y.apply(this,arguments)},base58Encode:H,base58Decode:J,encodeKey:function(e,t,r){return z.apply(this,arguments)},sendMessageUp:function(e,t,r){var n={type:e,value:t};r&&(n.requestId=r),P?P.postMessage(n):window.parent!==window&&window.parent.postMessage({type:e,value:t},"*"),F("⬆️ Sent message ".concat(e,": ").concat(t))},logMessage:F,uint8arrayFromHexString:U,uint8arrayToHexString:G,setParentFrameMessageChannelPort:function(e){P=e},normalizePadding:C,fromDerSignature:B,additionalAssociatedData:function(e,t){var r=Array.from(new Uint8Array(e)),n=Array.from(new Uint8Array(t));return new Uint8Array([].concat(r,n))},verifyEnclaveSignature:function(e,t,r){return L.apply(this,arguments)},getEd25519PublicKey:function(e){return n.jn.sha512Sync=function(){var e;return o.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 o=$(r.styles);Object.entries(o).forEach(function(e){var t=h(e,2),r=t[0],o=t[1];n.style[r]=o}),t.styles=o}return JSON.stringify(t)},validateStyles:$,getSettings:function(){var e=window.localStorage.getItem(k);return e?JSON.parse(e):null},setSettings:function(e){window.localStorage.setItem(k,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 U(e);try{return J(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")}},W=r(112),X=r(947),V=r.n(X),Q=r(255);function Z(e){return Z="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},Z(e)}function ee(){var e=ie(),t=e.m(ee),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,te(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(ee=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 ce(e,t)},AsyncIterator:ae,async:function(e,t,r,o,i){return(n(t)?oe:ne)(a(e),t,r,o,i)},keys:re,values:te}})()}function te(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(Z(e)+" is not iterable")}function re(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 ne(e,t,r,n,o){var a=oe(e,t,r,n,o);return a.next().then(function(e){return e.done?e.value:a.next()})}function oe(e,t,r,n,o){return new ae(ie().w(e,t,r,n),o||Promise)}function ae(e,t){function r(n,o,a,i){try{var u=e[n](o),c=u.value;return c instanceof ce?t.resolve(c.v).then(function(e){r("next",e,a,i)},function(e){r("throw",e,a,i)}):t.resolve(c).then(function(e){u.value=e,a(u)},function(e){return r("throw",e,a,i)})}catch(e){i(e)}}var n;this.next||(ue(ae.prototype),ue(ae.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),ue(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 ie(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function a(r,n,o,a){var c=n&&n.prototype instanceof u?n:u,s=Object.create(c.prototype);return ue(s,"_invoke",function(r,n,o){var a,u,c,s=0,f=o||[],l=!1,p={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,r){return a=t,u=0,c=e,p.n=r,i}};function d(r,n){for(u=r,c=n,t=0;!l&&s&&!o&&t3?(o=y===n)&&(c=a[(u=a[4])?5:(u=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,u=0))}if(o||r>1)return i;throw l=!0,n}return function(o,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&d(f,y),u=f,c=y;(t=u<2?e:c)||!l;){a||(u?u<3?(u>1&&(p.n=-1),d(u,c)):p.n=c:p.v=c);try{if(s=2,a){if(u||(o="next"),t=a[o]){if(!(t=t.call(a,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,u<2&&(u=0)}else 1===u&&(t=a.return)&&t.call(a),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);a=e}else if((t=(l=p.n<0)?c:r.call(n,p))!==i)break}catch(t){a=e,u=1,c=t}finally{s=1}}return{value:t,done:l}}}(r,o,a),!0),s}var i={};function u(){}function c(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(ue(t={},n,function(){return this}),t),l=s.prototype=u.prototype=Object.create(f);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,ue(e,o,"GeneratorFunction")),e.prototype=Object.create(l),e}return c.prototype=s,ue(l,"constructor",s),ue(s,"constructor",c),c.displayName="GeneratorFunction",ue(s,o,"GeneratorFunction"),ue(l),ue(l,o,"Generator"),ue(l,n,function(){return this}),ue(l,"toString",function(){return"[object Generator]"}),(ie=function(){return{w:a,m:p}})()}function ue(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}ue=function(e,t,r,n){function a(t,r){ue(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))},ue(e,t,r,n)}function ce(e,t){this.v=e,this.k=t}function se(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 fe(e){for(var t=1;t=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}throw new TypeError(me(e)+" is not iterable")}function Ee(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 Se(e,t,r,n,o){var a=Oe(e,t,r,n,o);return a.next().then(function(e){return e.done?e.value:a.next()})}function Oe(e,t,r,n,o){return new ke(Pe().w(e,t,r,n),o||Promise)}function ke(e,t){function r(n,o,a,i){try{var u=e[n](o),c=u.value;return c instanceof je?t.resolve(c.v).then(function(e){r("next",e,a,i)},function(e){r("throw",e,a,i)}):t.resolve(c).then(function(e){u.value=e,a(u)},function(e){return r("throw",e,a,i)})}catch(e){i(e)}}var n;this.next||(_e(ke.prototype),_e(ke.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),_e(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 Pe(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function a(r,n,o,a){var c=n&&n.prototype instanceof u?n:u,s=Object.create(c.prototype);return _e(s,"_invoke",function(r,n,o){var a,u,c,s=0,f=o||[],l=!1,p={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,r){return a=t,u=0,c=e,p.n=r,i}};function d(r,n){for(u=r,c=n,t=0;!l&&s&&!o&&t3?(o=y===n)&&(c=a[(u=a[4])?5:(u=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,u=0))}if(o||r>1)return i;throw l=!0,n}return function(o,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&d(f,y),u=f,c=y;(t=u<2?e:c)||!l;){a||(u?u<3?(u>1&&(p.n=-1),d(u,c)):p.n=c:p.v=c);try{if(s=2,a){if(u||(o="next"),t=a[o]){if(!(t=t.call(a,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,u<2&&(u=0)}else 1===u&&(t=a.return)&&t.call(a),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);a=e}else if((t=(l=p.n<0)?c:r.call(n,p))!==i)break}catch(t){a=e,u=1,c=t}finally{s=1}}return{value:t,done:l}}}(r,o,a),!0),s}var i={};function u(){}function c(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(_e(t={},n,function(){return this}),t),l=s.prototype=u.prototype=Object.create(f);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,_e(e,o,"GeneratorFunction")),e.prototype=Object.create(l),e}return c.prototype=s,_e(l,"constructor",s),_e(s,"constructor",c),c.displayName="GeneratorFunction",_e(s,o,"GeneratorFunction"),_e(l),_e(l,o,"Generator"),_e(l,n,function(){return this}),_e(l,"toString",function(){return"[object Generator]"}),(Pe=function(){return{w:a,m:p}})()}function _e(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}_e=function(e,t,r,n){function a(t,r){_e(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))},_e(e,t,r,n)}function je(e,t){this.v=e,this.k=t}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,o,a,i,u=[],c=!0,s=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=a.call(r)).done)&&(u.push(n.value),u.length!==t);c=!0);}catch(e){s=!0,o=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw o}}return u}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Ne(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)?Ne(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 Ne(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 22:if(u.organizationId&&u.organizationId===r){e.next=24;break}throw new Error("organization id does not match expected value. Expected: ".concat(r,". Found: ").concat(u.organizationId,"."));case 24:if(u.encappedPublic){e.next=26;break}throw new Error('missing "encappedPublic" in bundle signed data');case 26:if(u.ciphertext){e.next=28;break}throw new Error('missing "ciphertext" in bundle signed data');case 28:return o=q.uint8arrayFromHexString(u.encappedPublic),a=q.uint8arrayFromHexString(u.ciphertext),e.abrupt("break",32);case 31:throw new Error("unsupported version: ".concat(i.version));case 32:return e.next=34,q.getEmbeddedKey();case 34:return c=e.sent,e.next=37,n({ciphertextBuf:a,encappedKeyBuf:o,receiverPrivJwk:c});case 37:return e.abrupt("return",e.sent);case 38:case"end":return e.stop()}},e)})),Ue.apply(this,arguments)}function Ge(e){return Ce.apply(this,arguments)}function Ce(){return(Ce=Ae(we().mark(function e(t){var r,n,o;return we().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(r=q.getEmbeddedKey()){e.next=4;break}return q.sendMessageUp("EMBEDDED_PUBLIC_KEY","",t),e.abrupt("return");case 4:return e.next=6,q.p256JWKPrivateToPublic(r);case 6:n=e.sent,o=q.uint8arrayToHexString(n),q.sendMessageUp("EMBEDDED_PUBLIC_KEY",o,t);case 9:case"end":return e.stop()}},e)}))).apply(this,arguments)}function Be(e,t,r,n,o,a){return Le.apply(this,arguments)}function Le(){return Le=Ae(we().mark(function e(t,r,n,o,a,i){var u,c,s,f,l,p,d;return we().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Me(n,r,i);case 2:if(u=e.sent,s=new Uint8Array(u),"SOLANA"!==o){e.next=12;break}return f=q.uint8arrayToHexString(s.subarray(0,32)),l=q.getEd25519PublicKey(f),e.next=9,q.encodeKey(s,o,l);case 9:c=e.sent,e.next=15;break;case 12:return e.next=14,q.encodeKey(s,o);case 14:c=e.sent;case 15:if(p=a||"default","SOLANA"!==o){e.next=20;break}d=W.AX.fromSecretKey(q.base58Decode(c)),e.next=24;break;case 20:if("HEXADECIMAL"!==o){e.next=24;break}return e.next=23,Xe(Array.from(q.uint8arrayFromHexString(c)));case 23:d=e.sent;case 24:De=he(he({},De),{},ge({},p,{organizationId:r,privateKey:c,format:o,expiry:(new Date).getTime()+864e5,keypair:d})),q.sendMessageUp("BUNDLE_INJECTED",!0,t);case 26:case"end":return e.stop()}},e)})),Le.apply(this,arguments)}function Fe(e,t){return Ye.apply(this,arguments)}function Ye(){return(Ye=Ae(we().mark(function e(t,r){var n;return we().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:n=q.applySettings(t),q.setSettings(n),q.sendMessageUp("SETTINGS_APPLIED",!0,r);case 3:case"end":return e.stop()}},e)}))).apply(this,arguments)}function He(e,t,r){return Je.apply(this,arguments)}function Je(){return(Je=Ae(we().mark(function e(t,r,n){var o,a,i,u,c,s,f,l,p;return we().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(Ze(a=De[o=n||"default"],o)){e.next=4;break}return e.abrupt("return");case 4:return e.next=6,et(a);case 6:if(i=e.sent,u=JSON.parse(r),c=u.transaction,"SOLANA"!==u.type){e.next=17;break}f=q.uint8arrayFromHexString(c),(l=W.Kt.deserialize(f)).sign([i]),s=l.serialize(),e.next=18;break;case 17:throw new Error("unsupported transaction type");case 18:p=q.uint8arrayToHexString(s),q.sendMessageUp("TRANSACTION_SIGNED",p,t);case 20:case"end":return e.stop()}},e)}))).apply(this,arguments)}function ze(e,t,r){return $e.apply(this,arguments)}function $e(){return($e=Ae(we().mark(function e(t,r,n){var o,a,i,u,c,s,f,l,p;return we().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(Ze(a=De[o=n||"default"],o)){e.next=4;break}return e.abrupt("return");case 4:return i=JSON.parse(r),u=i.message,c=i.type,s=Re.encode(u),e.next=10,et(a);case 10:if(l=e.sent,"SOLANA"!==c){e.next=16;break}p=V().sign.detached(s,l.secretKey),f=q.uint8arrayToHexString(p),e.next=18;break;case 16:return q.sendMessageUp("ERROR","unsupported message type",t),e.abrupt("return");case 18:q.sendMessageUp("MESSAGE_SIGNED",f,t);case 19:case"end":return e.stop()}},e)}))).apply(this,arguments)}function qe(e,t){return We.apply(this,arguments)}function We(){return(We=Ae(we().mark(function e(t,r){return we().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(r){e.next=4;break}return De={},q.sendMessageUp("EMBEDDED_PRIVATE_KEY_CLEARED",!0,t),e.abrupt("return");case 4:if(De[r]){e.next=7;break}return q.sendMessageUp("ERROR",new Error("key not found for address ".concat(r,". Note that address is case sensitive.")).toString(),t),e.abrupt("return");case 7:delete De[r],q.sendMessageUp("EMBEDDED_PRIVATE_KEY_CLEARED",!0,t);case 9:case"end":return e.stop()}},e)}))).apply(this,arguments)}function Xe(e){return Ve.apply(this,arguments)}function Ve(){return(Ve=Ae(we().mark(function e(t){var r,n;return we().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(32!==(r=q.parsePrivateKey(t)).length){e.next=5;break}n=W.AX.fromSeed(r),e.next=10;break;case 5:if(64!==r.length){e.next=9;break}n=W.AX.fromSecretKey(r),e.next=10;break;case 9:throw new Error("Invalid private key length: ".concat(r.length,". Expected 32 or 64 bytes."));case 10:return e.abrupt("return",n);case 11:case"end":return e.stop()}},e)}))).apply(this,arguments)}function Qe(e){De[e]&&delete De[e]}function Ze(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(a)}for(var u=0,c=t;u=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}throw new TypeError(nt(e)+" is not iterable")}function it(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 ut(e,t,r,n,o){var a=ct(e,t,r,n,o);return a.next().then(function(e){return e.done?e.value:a.next()})}function ct(e,t,r,n,o){return new st(ft().w(e,t,r,n),o||Promise)}function st(e,t){function r(n,o,a,i){try{var u=e[n](o),c=u.value;return c instanceof pt?t.resolve(c.v).then(function(e){r("next",e,a,i)},function(e){r("throw",e,a,i)}):t.resolve(c).then(function(e){u.value=e,a(u)},function(e){return r("throw",e,a,i)})}catch(e){i(e)}}var n;this.next||(lt(st.prototype),lt(st.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),lt(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 ft(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function a(r,n,o,a){var c=n&&n.prototype instanceof u?n:u,s=Object.create(c.prototype);return lt(s,"_invoke",function(r,n,o){var a,u,c,s=0,f=o||[],l=!1,p={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,r){return a=t,u=0,c=e,p.n=r,i}};function d(r,n){for(u=r,c=n,t=0;!l&&s&&!o&&t3?(o=y===n)&&(c=a[(u=a[4])?5:(u=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,u=0))}if(o||r>1)return i;throw l=!0,n}return function(o,f,y){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&d(f,y),u=f,c=y;(t=u<2?e:c)||!l;){a||(u?u<3?(u>1&&(p.n=-1),d(u,c)):p.n=c:p.v=c);try{if(s=2,a){if(u||(o="next"),t=a[o]){if(!(t=t.call(a,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,u<2&&(u=0)}else 1===u&&(t=a.return)&&t.call(a),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);a=e}else if((t=(l=p.n<0)?c:r.call(n,p))!==i)break}catch(t){a=e,u=1,c=t}finally{s=1}}return{value:t,done:l}}}(r,o,a),!0),s}var i={};function u(){}function c(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(lt(t={},n,function(){return this}),t),l=s.prototype=u.prototype=Object.create(f);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,lt(e,o,"GeneratorFunction")),e.prototype=Object.create(l),e}return c.prototype=s,lt(l,"constructor",s),lt(s,"constructor",c),c.displayName="GeneratorFunction",lt(s,o,"GeneratorFunction"),lt(l),lt(l,o,"Generator"),lt(l,n,function(){return this}),lt(l,"toString",function(){return"[object Generator]"}),(ft=function(){return{w:a,m:p}})()}function lt(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}lt=function(e,t,r,n){function a(t,r){lt(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))},lt(e,t,r,n)}function pt(e,t){this.v=e,this.k=t}function dt(e,t,r,n,o,a,i){try{var u=e[a](i),c=u.value}catch(e){return void r(e)}u.done?t(c):Promise.resolve(c).then(n,o)}function yt(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var a=e.apply(t,r);function i(e){dt(a,n,o,i,u,"next",e)}function u(e){dt(a,n,o,i,u,"throw",e)}i(void 0)})}}window.TKHQ=q,document.addEventListener("DOMContentLoaded",yt(ot().mark(function e(){var t,r,n,o;return ot().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,q.initEmbeddedKey();case 2:return e.next=4,q.getEmbeddedKey();case 4:return t=e.sent,e.next=7,q.p256JWKPrivateToPublic(t);case 7:r=e.sent,n=q.uint8arrayToHexString(r),document.getElementById("embedded-key").value=n,rt(ye),(o=q.getSettings())&&q.applySettings(o),q.sendMessageUp("PUBLIC_KEY_READY",n);case 14:case"end":return e.stop()}},e)}))),window.addEventListener("message",function(){var e=yt(ot().mark(function e(t){var r,n,o,a,i;return ot().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!t.data||"TURNKEY_INIT_MESSAGE_CHANNEL"!=t.data.type||null===(r=t.ports)||void 0===r||!r[0]){e.next=15;break}return(n=t.ports[0]).onmessage=rt(ye).messageEventListener,q.setParentFrameMessageChannelPort(n),e.next=6,q.initEmbeddedKey();case 6:return e.next=8,q.getEmbeddedKey();case 8:return o=e.sent,e.next=11,q.p256JWKPrivateToPublic(o);case 11:a=e.sent,i=q.uint8arrayToHexString(a),document.getElementById("embedded-key").value=i,q.sendMessageUp("PUBLIC_KEY_READY",i);case 15:case"end":return e.stop()}},e)}));return function(t){return e.apply(this,arguments)}}())},790:()=>{}},i={};function u(e){var t=i[e];if(void 0!==t)return t.exports;var r=i[e]={id:e,loaded:!1,exports:{}};return a[e].call(r.exports,r,r.exports,u),r.loaded=!0,r.exports}u.m=a,e=[],u.O=(t,r,n,o)=>{if(!r){var a=1/0;for(f=0;f=o)&&Object.keys(u.O).every(e=>u.O[e](r[c]))?r.splice(c--,1):(i=!1,o0&&e[f-1][2]>o;f--)e[f]=e[f-1];e[f]=[r,n,o]},u.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return u.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,u.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 o=Object.create(null);u.r(o);var a={};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=>a[t]=()=>e[t]);return a.default=()=>e,u.d(o,a),o},u.d=(e,t)=>{for(var r in t)u.o(t,r)&&!u.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},u.f={},u.e=e=>Promise.all(Object.keys(u.f).reduce((t,r)=>(u.f[r](e,t),t),[])),u.u=e=>"bundle."+{291:"3eaea85f4001b9cc63c3",825:"aaba32bf7338e3d0f1cc"}[e]+".js",u.miniCssF=e=>{},u.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n={},o="export-and-sign:",u.l=(e,t,r,a)=>{if(n[e])n[e].push(t);else{var i,c;if(void 0!==r)for(var s=document.getElementsByTagName("script"),f=0;f{i.onerror=i.onload=null,clearTimeout(d);var o=n[e];if(delete n[e],i.parentNode&&i.parentNode.removeChild(i),o&&o.forEach(e=>e(r)),t)return t(r)},d=setTimeout(p.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=p.bind(null,i.onerror),i.onload=p.bind(null,i.onload),c&&document.head.appendChild(i)}},u.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},u.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),u.p="/",(()=>{var e={792:0};u.f.j=(t,r)=>{var n=u.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise((r,o)=>n=e[t]=[r,o]);r.push(n[2]=o);var a=u.p+u.u(t),i=new Error;u.l(a,r=>{if(u.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;i.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",i.name="ChunkLoadError",i.type=o,i.request=a,n[1](i)}},"chunk-"+t,t)}},u.O.j=t=>0===e[t];var t=(t,r)=>{var n,o,[a,i,c]=r,s=0;if(a.some(t=>0!==e[t])){for(n in i)u.o(i,n)&&(u.m[n]=i[n]);if(c)var f=c(u)}for(t&&t(r);su(758));c=u.O(c)})(); -//# sourceMappingURL=bundle.78c912c0211a44421f40.js.map \ No newline at end of file diff --git a/export-and-sign/dist/bundle.78c912c0211a44421f40.js.map b/export-and-sign/dist/bundle.78c912c0211a44421f40.js.map deleted file mode 100644 index 25d1a30..0000000 --- a/export-and-sign/dist/bundle.78c912c0211a44421f40.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"bundle.78c912c0211a44421f40.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/./src/turnkey-core.js","webpack://export-and-sign/./src/crypto-utils.js","webpack://export-and-sign/./src/event-handlers.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/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/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}\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};","/**\n * Turnkey Core Module\n * Contains all the core cryptographic and utility functions\n */\n\nimport * as nobleEd25519 from \"@noble/ed25519\";\nimport * as nobleHashes from \"@noble/hashes/sha512\";\n\n/** constant for LocalStorage */\nconst TURNKEY_EMBEDDED_KEY = \"TURNKEY_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;\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// 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 * Loads the quorum public key as a CryptoKey.\n */\nasync function loadQuorumKey(quorumPublic) {\n return await crypto.subtle.importKey(\n \"raw\",\n quorumPublic,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n [\"verify\"]\n );\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 p256key = await crypto.subtle.generateKey(\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n [\"deriveBits\"]\n );\n\n return await crypto.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\nfunction setParentFrameMessageChannelPort(port) {\n parentFrameMessageChannelPort = port;\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 * 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 (!item.hasOwnProperty(\"expiry\") || !item.hasOwnProperty(\"value\")) {\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 };\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 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 * 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 decoded = BigInt(0);\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 * 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 const concatenatedBytes = new Uint8Array(64);\n concatenatedBytes.set(privateKeyBytes, 0);\n concatenatedBytes.set(publicKeyBytes, 32);\n return base58Encode(concatenatedBytes);\n case \"HEXADECIMAL\":\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n default:\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\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 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 * @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 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/**\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 {\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 TKHQ.p256JWKPrivateToPublic(receiverPrivJwk);\n var aad = TKHQ.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","import { TKHQ } from \"./turnkey-core.js\";\nimport { Keypair, VersionedTransaction } from \"@solana/web3.js\";\nimport nacl from \"tweetnacl\";\nimport { HpkeDecrypt } from \"./crypto-utils.js\";\n\n// Persist keys in memory via mapping of { address --> pk }\nlet inMemoryKeys = {};\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 * 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 let encappedKeyBuf;\n let ciphertextBuf;\n let verified;\n\n // Parse the import bundle\n const bundleObj = JSON.parse(bundle);\n switch (bundleObj.version) {\n case \"v1.0.0\":\n // Validate fields exist\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 // Verify enclave signature\n if (!TKHQ.verifyEnclaveSignature) {\n throw new Error(\"method not loaded\");\n }\n verified = await TKHQ.verifyEnclaveSignature(\n bundleObj.enclaveQuorumPublic,\n bundleObj.dataSignature,\n bundleObj.data\n );\n if (!verified) {\n throw new Error(`failed to verify enclave signature: ${bundle}`);\n }\n\n // Parse the signed data. The data is produced by JSON encoding followed by hex encoding. We reverse this here.\n const signedData = JSON.parse(\n textDecoder.decode(TKHQ.uint8arrayFromHexString(bundleObj.data))\n );\n\n // Validate fields match\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 encappedKeyBuf = TKHQ.uint8arrayFromHexString(signedData.encappedPublic);\n ciphertextBuf = TKHQ.uint8arrayFromHexString(signedData.ciphertext);\n break;\n default:\n throw new Error(`unsupported version: ${bundleObj.version}`);\n }\n\n // Decrypt the ciphertext\n const embeddedKeyJwk = await TKHQ.getEmbeddedKey();\n return await HpkeDecrypt({\n ciphertextBuf,\n encappedKeyBuf,\n receiverPrivJwk: embeddedKeyJwk,\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 * 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 // Parse the decrypted key bytes\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 // Set in memory\n // If no address provided, use a default key\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, // Cache the keypair for performance\n },\n };\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 // Get or create keypair (uses cached keypair if available)\n const keypair = await getOrCreateKeypair(key);\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 // 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 {\n throw new Error(\"unsupported transaction type\");\n }\n\n const signedTransactionHex = 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 // Get or create keypair (uses cached keypair if available)\n const keypair = await getOrCreateKeypair(key);\n\n if (messageType === \"SOLANA\") {\n // Sign the message\n const signature = nacl.sign.detached(messageBytes, keypair.secretKey);\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 {\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// 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 * 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( `key bytes not found. Please re-inject export bundle for address ${keyAddress} into iframe. Note that address is case sensitive.`).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 * 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 onInjectWalletBundle(\n event.data[\"value\"],\n event.data[\"organizationId\"],\n event.data[\"requestId\"],\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 };\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 // 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 // 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};\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 \"./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\n// Init MessageChannel for communication between iframe <> parent page\nwindow.addEventListener(\"message\", async function (event) {\n if (\n event.data &&\n event.data[\"type\"] == \"TURNKEY_INIT_MESSAGE_CHANNEL\" &&\n event.ports?.[0]\n ) {\n const iframeMessagePort = event.ports[0];\n iframeMessagePort.onmessage =\n initEventHandlers(HpkeDecrypt).messageEventListener;\n\n TKHQ.setParentFrameMessageChannelPort(iframeMessagePort);\n\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 TKHQ.sendMessageUp(\"PUBLIC_KEY_READY\", targetPubHex);\n }\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\":\"3eaea85f4001b9cc63c3\",\"825\":\"aaba32bf7338e3d0f1cc\"}[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__.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 = \"/\";","// 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__(758)))\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","_OverloadYield","k","_slicedToArray","Array","isArray","_arrayWithHoles","next","push","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_toConsumableArray","_arrayLikeToArray","_arrayWithoutHoles","from","_iterableToArray","_nonIterableSpread","toString","slice","constructor","name","test","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","TURNKEY_EMBEDDED_KEY","TURNKEY_SETTINGS","parentFrameMessageChannelPort","isDoublyIframed","undefined","window","location","ancestorOrigins","parent","top","loadQuorumKey","_x","_loadQuorumKey","_regeneratorRuntime","mark","_callee","quorumPublic","wrap","_context","prev","crypto","subtle","importKey","namedCurve","abrupt","sent","stop","_initEmbeddedKey","_callee2","_context2","Error","getEmbeddedKey","generateTargetKey","setEmbeddedKey","_generateTargetKey","_callee3","p256key","_context3","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","normalizePadding","byteArray","targetLength","paddingLength","padding","fill","concat","expectedZeroCount","zeroCount","fromDerSignature","derSignature","derSignatureBuf","index","rLength","sLength","s","rPadded","sPadded","_verifyEnclaveSignature","_callee4","enclaveQuorumPublic","publicSignature","signedData","TURNKEY_SIGNERS_ENCLAVES","environment","TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY","encryptionQuorumPublicBuf","quorumKey","publicSignatureBuf","signedDataBuf","_context4","prod","preprod","__TURNKEY_SIGNER_ENVIRONMENT__","verify","hash","logMessage","content","messageLog","document","getElementById","message","createElement","innerText","appendChild","_p256JWKPrivateToPublic","_callee5","jwkPrivate","jwkPrivateCopy","publicKey","_context5","_objectSpread","key_ops","base58Encode","bytes","result","digits","carry","j","base58Decode","alphabet","decodedBytes","BigInt","leadingZeros","indexOf","currentByte","reverse","_encodeKey","_callee6","privateKeyBytes","keyFormat","publicKeyBytes","concatenatedBytes","_context6","t0","set","console","warn","validateStyles","styles","element","validStyles","cssValidationRegex","margin","borderWidth","borderStyle","borderColor","borderRadius","fontSize","fontWeight","fontFamily","color","backgroundColor","width","height","maxWidth","maxHeight","lineHeight","boxShadow","textAlign","overflowWrap","wordWrap","resize","entries","forEach","_ref","_ref2","property","styleProperty","trim","styleRegexStr","styleRegex","RegExp","styleValue","TKHQ","initEmbeddedKey","onResetEmbeddedKey","p256JWKPrivateToPublic","_x5","encodeKey","_x6","_x7","_x8","sendMessageUp","type","requestId","postMessage","setParentFrameMessageChannelPort","port","additionalAssociatedData","senderPubBuf","receiverPubBuf","verifyEnclaveSignature","_x2","_x3","_x4","getEd25519PublicKey","privateKeyHex","nobleEd25519","sha512Sync","_nobleEd25519$etc","nobleHashes","concatBytes","applySettings","settings","validSettings","settingsObj","keyDivTextarea","_ref3","_ref4","style","getSettings","setSettings","parsePrivateKey","error","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","_defineProperty","getOwnPropertyDescriptors","defineProperties","_typeof","toPrimitive","String","_toPrimitive","_toPropertyKey","TURNKEY_HPKE_INFO","TextEncoder","encode","HpkeDecrypt","_HpkeDecrypt","ciphertextBuf","encappedKeyBuf","receiverPrivJwk","kemContext","receiverPriv","suite","recipientCtx","aad","res","DhkemP256HkdfSha256","CipherSuite","kem","kdf","HkdfSha256","aead","Aes256Gcm","createRecipientContext","recipientKey","enc","info","open","inMemoryKeys","textEncoder","textDecoder","TextDecoder","decryptBundle","_decryptBundle","_callee8","bundle","organizationId","bundleObj","embeddedKeyJwk","_context8","version","data","dataSignature","decode","encappedPublic","ciphertext","onGetPublicEmbeddedKey","_onGetPublicEmbeddedKey","_callee9","targetPubBuf","targetPubHex","_context9","onInjectKeyBundle","_x9","_x10","_onInjectKeyBundle","_callee10","address","keyBytes","keyAddress","cachedKeypair","_context10","subarray","Keypair","fromSecretKey","createSolanaKeypair","format","keypair","onApplySettings","_x11","_x12","_onApplySettings","_callee11","_context11","onSignTransaction","_x13","_x14","_x15","_onSignTransaction","_callee12","serializedTransaction","transactionWrapper","transactionToSign","signedTransaction","transactionBytes","transaction","signedTransactionHex","_context12","validateKey","getOrCreateKeypair","VersionedTransaction","deserialize","sign","serialize","onSignMessage","_x16","_x17","_x18","_onSignMessage","_callee13","serializedMessage","messageWrapper","messageToSign","messageType","messageBytes","signatureHex","signature","_context13","nacl","detached","secretKey","onClearEmbeddedPrivateKey","_x19","_x20","_onClearEmbeddedPrivateKey","_callee14","_context14","_x21","_createSolanaKeypair","_callee15","_context15","fromSeed","clearExpiredKey","now","addressesToRemove","_i","_Object$entries","_Object$entries$_i","_i2","_addressesToRemove","clearAllExpiredKeys","getKeyNotFoundErrorMessage","_x22","_getOrCreateKeypair","_callee16","_context16","initEventHandlers","messageEventListener","_messageEventListener","event","onInjectWalletBundle","t1","t2","t3","t4","t5","t6","_x28","initMessageEventListener","messageListenerController","AbortController","turnkeyInitController","addEventListener","preventDefault","_x23","_x24","_x25","_x26","injectWalletBtn","_ref5","_x27","addDOMEventListeners","capture","signal","_ref6","_callee7","_event$ports","iframeMessagePort","_context7","ports","abort","onmessage","origin","_x29","styleSettings","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","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","prop","url","script","needAttach","scripts","getElementsByTagName","getAttribute","charset","nc","setAttribute","src","onScriptComplete","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 1536888..df59159 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 58a191f..ad15694 100644 --- a/export-and-sign/index.test.js +++ b/export-and-sign/index.test.js @@ -71,6 +71,7 @@ describe("TKHQ", () => { global.window = dom.window; global.document = dom.window.document; global.localStorage = dom.window.localStorage; + global.sessionStorage = dom.window.sessionStorage; global.crypto = crypto.webcrypto; const module = await import("./src/turnkey-core.js"); @@ -81,11 +82,11 @@ describe("TKHQ", () => { TKHQ = dom.window.TKHQ; }); - describe("LocalStorage with expiry", () => { - it("gets and sets items with expiry localStorage", async () => { + describe("SessionStorage with expiry", () => { + it("gets and sets items with expiry sessionStorage", async () => { // Set a TTL of 1000ms TKHQ.setItemWithExpiry("k", "v", 1000); - let item = JSON.parse(dom.window.localStorage.getItem("k")); + let item = JSON.parse(dom.window.sessionStorage.getItem("k")); expect(item.value).toBe("v"); expect(item.expiry).toBeTruthy(); @@ -96,7 +97,7 @@ describe("TKHQ", () => { // Test expired item: use setItemWithExpiry, then manually set expiry in the past TKHQ.setItemWithExpiry("a", "b", 500); // Verify the item was set correctly with setItemWithExpiry - let itemA = JSON.parse(dom.window.localStorage.getItem("a")); + let itemA = JSON.parse(dom.window.sessionStorage.getItem("a")); expect(itemA.value).toBe("b"); expect(itemA.expiry).toBeTruthy(); @@ -105,19 +106,19 @@ describe("TKHQ", () => { value: "b", expiry: new Date().getTime() - 1000, }; - dom.window.localStorage.setItem("a", JSON.stringify(expiredItem)); + dom.window.sessionStorage.setItem("a", JSON.stringify(expiredItem)); const expiredResult = TKHQ.getItemWithExpiry("a"); expect(expiredResult).toBeNull(); // Returns null if getItemWithExpiry is called for item without expiry - dom.window.localStorage.setItem("k", JSON.stringify({ value: "v" })); + dom.window.sessionStorage.setItem("k", JSON.stringify({ value: "v" })); item = TKHQ.getItemWithExpiry("k"); expect(item).toBeNull(); }); }); describe("Embedded key management", () => { - it("gets and sets embedded key in localStorage", async () => { + it("gets and sets embedded key in sessionStorage", async () => { expect(TKHQ.getEmbeddedKey()).toBe(null); // Set a dummy "key" @@ -137,6 +138,251 @@ describe("TKHQ", () => { }); }); + describe("Multi-tab isolation (simulating multiple iframe instances)", () => { + let tab1DOM + let tab2DOM; + let tab1TKHQ + let tab2TKHQ; + + beforeEach(async () => { + // Simulate Tab 1: Parent website with iframe + tab1DOM = new JSDOM(html, { + runScripts: "dangerously", + url: "http://localhost", + beforeParse(window) { + window.TextDecoder = TextDecoder; + window.TextEncoder = TextEncoder; + window.__TURNKEY_SIGNER_ENVIRONMENT__ = "prod"; + }, + }); + + Object.defineProperty(tab1DOM.window, "crypto", { + value: crypto.webcrypto, + }); + + global.window = tab1DOM.window; + global.document = tab1DOM.window.document; + global.localStorage = tab1DOM.window.localStorage; + global.sessionStorage = tab1DOM.window.sessionStorage; + global.crypto = crypto.webcrypto; + + const module1 = await import("./src/turnkey-core.js"); + tab1TKHQ = module1.TKHQ; + tab1DOM.window.TKHQ = tab1TKHQ; + + // Simulate Tab 2: Another instance of the same parent website with iframe + tab2DOM = new JSDOM(html, { + runScripts: "dangerously", + url: "http://localhost", + beforeParse(window) { + window.TextDecoder = TextDecoder; + window.TextEncoder = TextEncoder; + window.__TURNKEY_SIGNER_ENVIRONMENT__ = "prod"; + }, + }); + + Object.defineProperty(tab2DOM.window, "crypto", { + value: crypto.webcrypto, + }); + + // Switch to Tab 2 context + global.window = tab2DOM.window; + global.document = tab2DOM.window.document; + global.localStorage = tab2DOM.window.localStorage; + global.sessionStorage = tab2DOM.window.sessionStorage; + + const module2 = await import("./src/turnkey-core.js"); + tab2TKHQ = module2.TKHQ; + tab2DOM.window.TKHQ = tab2TKHQ; + }); + + afterEach(() => { + delete global.window; + delete global.document; + delete global.localStorage; + delete global.sessionStorage; + delete global.crypto; + }); + + it("should have independent embedded keys in different tabs", async () => { + // Initialize embedded keys in both tabs + global.window = tab1DOM.window; + global.document = tab1DOM.window.document; + global.sessionStorage = tab1DOM.window.sessionStorage; + await tab1TKHQ.initEmbeddedKey(); + const tab1Key = tab1TKHQ.getEmbeddedKey(); + + global.window = tab2DOM.window; + global.document = tab2DOM.window.document; + global.sessionStorage = tab2DOM.window.sessionStorage; + await tab2TKHQ.initEmbeddedKey(); + const tab2Key = tab2TKHQ.getEmbeddedKey(); + + // Keys should be different (each tab generates its own) + expect(tab1Key).not.toBeNull(); + expect(tab2Key).not.toBeNull(); + expect(tab1Key.d).not.toEqual(tab2Key.d); + }); + + it("should not share embedded keys between tabs", async () => { + // Set a key in Tab 1 + global.window = tab1DOM.window; + global.document = tab1DOM.window.document; + global.sessionStorage = tab1DOM.window.sessionStorage; + const testKey = { kty: "EC", crv: "P-256", d: "tab1-secret-key" }; + tab1TKHQ.setEmbeddedKey(testKey); + + // Tab 2 should not see Tab 1's key + global.window = tab2DOM.window; + global.document = tab2DOM.window.document; + global.sessionStorage = tab2DOM.window.sessionStorage; + const tab2Key = tab2TKHQ.getEmbeddedKey(); + expect(tab2Key).toBeNull(); + + // Tab 1 should still have its key + global.window = tab1DOM.window; + global.document = tab1DOM.window.document; + global.sessionStorage = tab1DOM.window.sessionStorage; + const tab1Key = tab1TKHQ.getEmbeddedKey(); + expect(tab1Key).toEqual(testKey); + }); + + it("should allow each tab to set its own embedded key independently", async () => { + const tab1Key = { kty: "EC", crv: "P-256", d: "tab1-key" }; + const tab2Key = { kty: "EC", crv: "P-256", d: "tab2-key" }; + + global.window = tab1DOM.window; + global.document = tab1DOM.window.document; + global.sessionStorage = tab1DOM.window.sessionStorage; + tab1TKHQ.setEmbeddedKey(tab1Key); + + global.window = tab2DOM.window; + global.document = tab2DOM.window.document; + global.sessionStorage = tab2DOM.window.sessionStorage; + tab2TKHQ.setEmbeddedKey(tab2Key); + + // Verify each tab has its own key + global.window = tab1DOM.window; + global.document = tab1DOM.window.document; + global.sessionStorage = tab1DOM.window.sessionStorage; + expect(tab1TKHQ.getEmbeddedKey()).toEqual(tab1Key); + + global.window = tab2DOM.window; + global.document = tab2DOM.window.document; + global.sessionStorage = tab2DOM.window.sessionStorage; + expect(tab2TKHQ.getEmbeddedKey()).toEqual(tab2Key); + + global.window = tab1DOM.window; + global.document = tab1DOM.window.document; + global.sessionStorage = tab1DOM.window.sessionStorage; + const tab1StoredKey = tab1TKHQ.getEmbeddedKey().d; + + global.window = tab2DOM.window; + global.document = tab2DOM.window.document; + global.sessionStorage = tab2DOM.window.sessionStorage; + const tab2StoredKey = tab2TKHQ.getEmbeddedKey().d; + + expect(tab1StoredKey).not.toEqual(tab2StoredKey); + }); + + + it("should clear keys independently in each tab", async () => { + const testKey = { kty: "EC", crv: "P-256", d: "test-key" }; + + global.window = tab1DOM.window; + global.document = tab1DOM.window.document; + global.sessionStorage = tab1DOM.window.sessionStorage; + tab1TKHQ.setEmbeddedKey(testKey); + + global.window = tab2DOM.window; + global.document = tab2DOM.window.document; + global.sessionStorage = tab2DOM.window.sessionStorage; + tab2TKHQ.setEmbeddedKey(testKey); + + // Clear key in Tab 1 only + global.window = tab1DOM.window; + global.document = tab1DOM.window.document; + global.sessionStorage = tab1DOM.window.sessionStorage; + tab1TKHQ.onResetEmbeddedKey(); + + // Tab 1 should have no key + expect(tab1TKHQ.getEmbeddedKey()).toBeNull(); + + // Tab 2 should still have its key + global.window = tab2DOM.window; + global.document = tab2DOM.window.document; + global.sessionStorage = tab2DOM.window.sessionStorage; + expect(tab2TKHQ.getEmbeddedKey()).toEqual(testKey); + }); + + it("should maintain key expiry independently in each tab", async () => { + jest.useFakeTimers(); + + const testKey = { kty: "EC", crv: "P-256", d: "test-key" }; + + // Set key with 1 second TTL in Tab 1 + global.window = tab1DOM.window; + global.document = tab1DOM.window.document; + global.sessionStorage = tab1DOM.window.sessionStorage; + tab1TKHQ.setItemWithExpiry( + "TURNKEY_EMBEDDED_KEY", + JSON.stringify(testKey), + 1000 + ); + + // Set key with 2 second TTL in Tab 2 + global.window = tab2DOM.window; + global.document = tab2DOM.window.document; + global.sessionStorage = tab2DOM.window.sessionStorage; + tab2TKHQ.setItemWithExpiry( + "TURNKEY_EMBEDDED_KEY", + JSON.stringify(testKey), + 2000 + ); + + // Advance time by 1.5 seconds + jest.advanceTimersByTime(1500); + + // Tab 1's key should be expired + global.window = tab1DOM.window; + global.document = tab1DOM.window.document; + global.sessionStorage = tab1DOM.window.sessionStorage; + const tab1Key = tab1TKHQ.getItemWithExpiry("TURNKEY_EMBEDDED_KEY"); + expect(tab1Key).toBeNull(); + + // Tab 2's key should still be valid + global.window = tab2DOM.window; + global.document = tab2DOM.window.document; + global.sessionStorage = tab2DOM.window.sessionStorage; + const tab2Key = tab2TKHQ.getItemWithExpiry("TURNKEY_EMBEDDED_KEY"); + expect(tab2Key).toBe(JSON.stringify(testKey)); + + jest.useRealTimers(); + }); + + it("should verify sessionStorage isolation (not shared between tabs)", () => { + // Set a value in Tab 1's sessionStorage + global.window = tab1DOM.window; + global.document = tab1DOM.window.document; + global.sessionStorage = tab1DOM.window.sessionStorage; + tab1DOM.window.sessionStorage.setItem("test-key", "tab1-value"); + + // Tab 2's sessionStorage should not have this value + global.window = tab2DOM.window; + global.document = tab2DOM.window.document; + global.sessionStorage = tab2DOM.window.sessionStorage; + const tab2Value = tab2DOM.window.sessionStorage.getItem("test-key"); + expect(tab2Value).toBeNull(); + + // Tab 1 should still have its value + global.window = tab1DOM.window; + global.document = tab1DOM.window.document; + global.sessionStorage = tab1DOM.window.sessionStorage; + const tab1Value = tab1DOM.window.sessionStorage.getItem("test-key"); + expect(tab1Value).toBe("tab1-value"); + }); + }); + describe("Key generation and cryptography", () => { it("generates P256 keys", async () => { let key = await TKHQ.generateTargetKey(); @@ -588,6 +834,7 @@ describe("Event Handler Expiration Flow", () => { global.window = dom.window; global.document = dom.window.document; global.localStorage = dom.window.localStorage; + global.sessionStorage = dom.window.sessionStorage; global.TextEncoder = TextEncoder; global.TextDecoder = TextDecoder; global.crypto = crypto.webcrypto; @@ -641,6 +888,7 @@ describe("Event Handler Expiration Flow", () => { delete global.window; delete global.document; delete global.localStorage; + delete global.sessionStorage; delete global.crypto; }); diff --git a/export-and-sign/src/turnkey-core.js b/export-and-sign/src/turnkey-core.js index b4ac51c..2935bb0 100644 --- a/export-and-sign/src/turnkey-core.js +++ b/export-and-sign/src/turnkey-core.js @@ -75,7 +75,8 @@ async function loadQuorumKey(quorumPublic) { } /** - * Creates a new public/private key pair and persists it in localStorage + * Creates a new public/private key pair and persists it in sessionStorage + * Uses sessionStorage for tab isolation to prevent cross-tab key leakage. */ async function initEmbeddedKey() { if (isDoublyIframed()) { @@ -131,10 +132,11 @@ function setParentFrameMessageChannelPort(port) { /** * Resets the current embedded private key JWK. + * Uses sessionStorage for tab isolation. */ function onResetEmbeddedKey() { - window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY); - window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY_ORIGIN); + window.sessionStorage.removeItem(TURNKEY_EMBEDDED_KEY); + window.sessionStorage.removeItem(TURNKEY_EMBEDDED_KEY_ORIGIN); } /** @@ -154,7 +156,8 @@ function setSettings(settings) { } /** - * Set an item in localStorage with an expiration time + * Set an item in sessionStorage with an expiration time + * Uses sessionStorage for embedded keys to provide tab isolation. * @param {string} key * @param {string} value * @param {number} ttl expiration time in milliseconds @@ -165,28 +168,29 @@ function setItemWithExpiry(key, value, ttl) { value: value, expiry: now.getTime() + ttl, }; - window.localStorage.setItem(key, JSON.stringify(item)); + window.sessionStorage.setItem(key, JSON.stringify(item)); } /** - * Get an item from localStorage. Returns `null` and - * removes the item from localStorage if expired or + * Get an item from sessionStorage. Returns `null` and + * removes the item from sessionStorage if expired or * expiry time is missing. + * Uses sessionStorage for embedded keys to provide tab isolation. * @param {string} key */ function getItemWithExpiry(key) { - const itemStr = window.localStorage.getItem(key); + const itemStr = window.sessionStorage.getItem(key); if (!itemStr) { return null; } const item = JSON.parse(itemStr); if (!item.hasOwnProperty("expiry") || !item.hasOwnProperty("value")) { - window.localStorage.removeItem(key); + window.sessionStorage.removeItem(key); return null; } const now = new Date(); if (now.getTime() > item.expiry) { - window.localStorage.removeItem(key); + window.sessionStorage.removeItem(key); return null; } return item.value;